From 787c036dd8a627c91b8dd34350a9b527b7a92569 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Mon, 13 Sep 2021 17:29:20 +0300 Subject: [PATCH] Deleted aiogram --- .vscode/settings.json | 3 +- .../Babel-2.9.1.dist-info/INSTALLER | 1 - .../Babel-2.9.1.dist-info/LICENSE | 29 - .../Babel-2.9.1.dist-info/METADATA | 31 - .../Babel-2.9.1.dist-info/RECORD | 847 - .../site-packages/Babel-2.9.1.dist-info/WHEEL | 6 - .../Babel-2.9.1.dist-info/entry_points.txt | 22 - .../Babel-2.9.1.dist-info/top_level.txt | 1 - .../typing_extensions.cpython-39.pyc | Bin 83295 -> 0 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 5095 -> 5094 bytes .../__pycache__/override.cpython-39.pyc | Bin 227 -> 226 bytes .../aiogram-2.14.3.dist-info/INSTALLER | 1 - .../aiogram-2.14.3.dist-info/LICENSE | 18 - .../aiogram-2.14.3.dist-info/METADATA | 85 - .../aiogram-2.14.3.dist-info/RECORD | 237 - .../aiogram-2.14.3.dist-info/REQUESTED | 0 .../aiogram-2.14.3.dist-info/WHEEL | 5 - .../aiogram-2.14.3.dist-info/top_level.txt | 1 - .../Lib/site-packages/aiogram/__init__.py | 47 - .../Lib/site-packages/aiogram/__main__.py | 83 - .../__pycache__/__init__.cpython-39.pyc | Bin 1083 -> 0 bytes .../__pycache__/__main__.cpython-39.pyc | Bin 2444 -> 0 bytes .../Lib/site-packages/aiogram/bot/__init__.py | 9 - .../bot/__pycache__/__init__.cpython-39.pyc | Bin 299 -> 0 bytes .../bot/__pycache__/api.cpython-39.pyc | Bin 8381 -> 0 bytes .../bot/__pycache__/base.cpython-39.pyc | Bin 10166 -> 0 bytes .../bot/__pycache__/bot.cpython-39.pyc | Bin 142676 -> 0 bytes .../Lib/site-packages/aiogram/bot/api.py | 290 - .../Lib/site-packages/aiogram/bot/base.py | 298 - .../Lib/site-packages/aiogram/bot/bot.py | 3243 -- .../site-packages/aiogram/contrib/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 176 -> 0 bytes .../aiogram/contrib/fsm_storage/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 188 -> 0 bytes .../__pycache__/files.cpython-39.pyc | Bin 2565 -> 0 bytes .../__pycache__/memory.cpython-39.pyc | Bin 4349 -> 0 bytes .../__pycache__/mongo.cpython-39.pyc | Bin 7341 -> 0 bytes .../__pycache__/redis.cpython-39.pyc | Bin 13671 -> 0 bytes .../__pycache__/rethinkdb.cpython-39.pyc | Bin 7082 -> 0 bytes .../aiogram/contrib/fsm_storage/files.py | 59 - .../aiogram/contrib/fsm_storage/memory.py | 112 - .../aiogram/contrib/fsm_storage/mongo.py | 224 - .../aiogram/contrib/fsm_storage/redis.py | 414 - .../aiogram/contrib/fsm_storage/rethinkdb.py | 184 - .../aiogram/contrib/middlewares/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 188 -> 0 bytes .../__pycache__/environment.cpython-39.pyc | Bin 1203 -> 0 bytes .../__pycache__/fsm.cpython-39.pyc | Bin 3254 -> 0 bytes .../__pycache__/i18n.cpython-39.pyc | Bin 4621 -> 0 bytes .../__pycache__/logging.cpython-39.pyc | Bin 18965 -> 0 bytes .../contrib/middlewares/environment.py | 27 - .../aiogram/contrib/middlewares/fsm.py | 80 - .../aiogram/contrib/middlewares/i18n.py | 154 - .../aiogram/contrib/middlewares/logging.py | 461 - .../aiogram/dispatcher/__init__.py | 17 - .../__pycache__/__init__.cpython-39.pyc | Bin 487 -> 0 bytes .../__pycache__/dispatcher.cpython-39.pyc | Bin 40883 -> 0 bytes .../__pycache__/handler.cpython-39.pyc | Bin 4169 -> 0 bytes .../__pycache__/middlewares.cpython-39.pyc | Bin 4306 -> 0 bytes .../__pycache__/storage.cpython-39.pyc | Bin 17226 -> 0 bytes .../__pycache__/webhook.cpython-39.pyc | Bin 78827 -> 0 bytes .../aiogram/dispatcher/dispatcher.py | 1454 - .../aiogram/dispatcher/filters/__init__.py | 39 - .../__pycache__/__init__.cpython-39.pyc | Bin 1100 -> 0 bytes .../__pycache__/builtin.cpython-39.pyc | Bin 23916 -> 0 bytes .../__pycache__/factory.cpython-39.pyc | Bin 2784 -> 0 bytes .../__pycache__/filters.cpython-39.pyc | Bin 9272 -> 0 bytes .../filters/__pycache__/state.cpython-39.pyc | Bin 6459 -> 0 bytes .../aiogram/dispatcher/filters/builtin.py | 758 - .../aiogram/dispatcher/filters/factory.py | 73 - .../aiogram/dispatcher/filters/filters.py | 289 - .../aiogram/dispatcher/filters/state.py | 197 - .../aiogram/dispatcher/handler.py | 138 - .../aiogram/dispatcher/middlewares.py | 131 - .../aiogram/dispatcher/storage.py | 506 - .../aiogram/dispatcher/webhook.py | 2191 -- .../site-packages/aiogram/types/__init__.py | 214 - .../types/__pycache__/__init__.cpython-39.pyc | Bin 6247 -> 0 bytes .../__pycache__/animation.cpython-39.pyc | Bin 1172 -> 0 bytes .../types/__pycache__/audio.cpython-39.pyc | Bin 1030 -> 0 bytes .../auth_widget_data.cpython-39.pyc | Bin 1889 -> 0 bytes .../types/__pycache__/base.cpython-39.pyc | Bin 8414 -> 0 bytes .../__pycache__/bot_command.cpython-39.pyc | Bin 866 -> 0 bytes .../bot_command_scope.cpython-39.pyc | Bin 4900 -> 0 bytes .../__pycache__/callback_game.cpython-39.pyc | Bin 548 -> 0 bytes .../__pycache__/callback_query.cpython-39.pyc | Bin 3258 -> 0 bytes .../types/__pycache__/chat.cpython-39.pyc | Bin 32705 -> 0 bytes .../chat_invite_link.cpython-39.pyc | Bin 922 -> 0 bytes .../__pycache__/chat_location.cpython-39.pyc | Bin 913 -> 0 bytes .../__pycache__/chat_member.cpython-39.pyc | Bin 7293 -> 0 bytes .../chat_member_updated.cpython-39.pyc | Bin 1091 -> 0 bytes .../chat_permissions.cpython-39.pyc | Bin 1389 -> 0 bytes .../__pycache__/chat_photo.cpython-39.pyc | Bin 2516 -> 0 bytes .../chosen_inline_result.cpython-39.pyc | Bin 1342 -> 0 bytes .../types/__pycache__/contact.cpython-39.pyc | Bin 1069 -> 0 bytes .../types/__pycache__/dice.cpython-39.pyc | Bin 927 -> 0 bytes .../types/__pycache__/document.cpython-39.pyc | Bin 1879 -> 0 bytes .../encrypted_credentials.cpython-39.pyc | Bin 870 -> 0 bytes .../encrypted_passport_element.cpython-39.pyc | Bin 1073 -> 0 bytes .../types/__pycache__/fields.cpython-39.pyc | Bin 6865 -> 0 bytes .../types/__pycache__/file.cpython-39.pyc | Bin 1060 -> 0 bytes .../__pycache__/force_reply.cpython-39.pyc | Bin 1398 -> 0 bytes .../types/__pycache__/game.cpython-39.pyc | Bin 1063 -> 0 bytes .../game_high_score.cpython-39.pyc | Bin 865 -> 0 bytes .../inline_keyboard.cpython-39.pyc | Bin 3797 -> 0 bytes .../__pycache__/inline_query.cpython-39.pyc | Bin 3391 -> 0 bytes .../inline_query_result.cpython-39.pyc | Bin 28417 -> 0 bytes .../__pycache__/input_file.cpython-39.pyc | Bin 6460 -> 0 bytes .../__pycache__/input_media.cpython-39.pyc | Bin 11591 -> 0 bytes .../input_message_content.cpython-39.pyc | Bin 7080 -> 0 bytes .../types/__pycache__/invoice.cpython-39.pyc | Bin 773 -> 0 bytes .../__pycache__/labeled_price.cpython-39.pyc | Bin 907 -> 0 bytes .../types/__pycache__/location.cpython-39.pyc | Bin 875 -> 0 bytes .../__pycache__/login_url.cpython-39.pyc | Bin 1298 -> 0 bytes .../__pycache__/mask_position.cpython-39.pyc | Bin 762 -> 0 bytes .../types/__pycache__/message.cpython-39.pyc | Bin 75921 -> 0 bytes ...e_auto_delete_timer_changed.cpython-39.pyc | Bin 730 -> 0 bytes .../__pycache__/message_entity.cpython-39.pyc | Bin 3487 -> 0 bytes .../__pycache__/message_id.cpython-39.pyc | Bin 605 -> 0 bytes .../types/__pycache__/mixins.cpython-39.pyc | Bin 2108 -> 0 bytes .../__pycache__/order_info.cpython-39.pyc | Bin 779 -> 0 bytes .../__pycache__/passport_data.cpython-39.pyc | Bin 887 -> 0 bytes .../passport_element_error.cpython-39.pyc | Bin 4800 -> 0 bytes .../__pycache__/passport_file.cpython-39.pyc | Bin 853 -> 0 bytes .../__pycache__/photo_size.cpython-39.pyc | Bin 834 -> 0 bytes .../types/__pycache__/poll.cpython-39.pyc | Bin 3149 -> 0 bytes .../pre_checkout_query.cpython-39.pyc | Bin 1662 -> 0 bytes .../proximity_alert_triggered.cpython-39.pyc | Bin 852 -> 0 bytes .../__pycache__/reply_keyboard.cpython-39.pyc | Bin 5607 -> 0 bytes .../response_parameters.cpython-39.pyc | Bin 698 -> 0 bytes .../shipping_address.cpython-39.pyc | Bin 805 -> 0 bytes .../shipping_option.cpython-39.pyc | Bin 1292 -> 0 bytes .../__pycache__/shipping_query.cpython-39.pyc | Bin 1188 -> 0 bytes .../types/__pycache__/sticker.cpython-39.pyc | Bin 2224 -> 0 bytes .../__pycache__/sticker_set.cpython-39.pyc | Bin 940 -> 0 bytes .../successful_payment.cpython-39.pyc | Bin 981 -> 0 bytes .../types/__pycache__/update.cpython-39.pyc | Bin 3300 -> 0 bytes .../types/__pycache__/user.cpython-39.pyc | Bin 3178 -> 0 bytes .../user_profile_photos.cpython-39.pyc | Bin 789 -> 0 bytes .../types/__pycache__/venue.cpython-39.pyc | Bin 864 -> 0 bytes .../types/__pycache__/video.cpython-39.pyc | Bin 979 -> 0 bytes .../__pycache__/video_note.cpython-39.pyc | Bin 932 -> 0 bytes .../types/__pycache__/voice.cpython-39.pyc | Bin 790 -> 0 bytes .../voice_chat_ended.cpython-39.pyc | Bin 706 -> 0 bytes ...e_chat_participants_invited.cpython-39.pyc | Bin 826 -> 0 bytes .../voice_chat_scheduled.cpython-39.pyc | Bin 743 -> 0 bytes .../voice_chat_started.cpython-39.pyc | Bin 643 -> 0 bytes .../__pycache__/webhook_info.cpython-39.pyc | Bin 997 -> 0 bytes .../site-packages/aiogram/types/animation.py | 24 - .../Lib/site-packages/aiogram/types/audio.py | 21 - .../aiogram/types/auth_widget_data.py | 49 - .../Lib/site-packages/aiogram/types/base.py | 300 - .../aiogram/types/bot_command.py | 15 - .../aiogram/types/bot_command_scope.py | 121 - .../aiogram/types/callback_game.py | 10 - .../aiogram/types/callback_query.py | 64 - .../Lib/site-packages/aiogram/types/chat.py | 884 - .../aiogram/types/chat_invite_link.py | 20 - .../aiogram/types/chat_location.py | 16 - .../aiogram/types/chat_member.py | 192 - .../aiogram/types/chat_member_updated.py | 22 - .../aiogram/types/chat_permissions.py | 39 - .../site-packages/aiogram/types/chat_photo.py | 80 - .../aiogram/types/chosen_inline_result.py | 22 - .../site-packages/aiogram/types/contact.py | 25 - .../Lib/site-packages/aiogram/types/dice.py | 20 - .../site-packages/aiogram/types/document.py | 50 - .../aiogram/types/encrypted_credentials.py | 16 - .../types/encrypted_passport_element.py | 22 - .../Lib/site-packages/aiogram/types/fields.py | 208 - .../Lib/site-packages/aiogram/types/file.py | 22 - .../aiogram/types/force_reply.py | 33 - .../Lib/site-packages/aiogram/types/game.py | 23 - .../aiogram/types/game_high_score.py | 16 - .../aiogram/types/inline_keyboard.py | 116 - .../aiogram/types/inline_query.py | 67 - .../aiogram/types/inline_query_result.py | 843 - .../site-packages/aiogram/types/input_file.py | 227 - .../aiogram/types/input_media.py | 425 - .../aiogram/types/input_message_content.py | 213 - .../site-packages/aiogram/types/invoice.py | 15 - .../aiogram/types/labeled_price.py | 15 - .../site-packages/aiogram/types/location.py | 18 - .../site-packages/aiogram/types/login_url.py | 30 - .../aiogram/types/mask_position.py | 14 - .../site-packages/aiogram/types/message.py | 3129 -- .../message_auto_delete_timer_changed.py | 11 - .../aiogram/types/message_entity.py | 137 - .../site-packages/aiogram/types/message_id.py | 10 - .../Lib/site-packages/aiogram/types/mixins.py | 62 - .../site-packages/aiogram/types/order_info.py | 15 - .../aiogram/types/passport_data.py | 17 - .../aiogram/types/passport_element_error.py | 110 - .../aiogram/types/passport_file.py | 15 - .../site-packages/aiogram/types/photo_size.py | 16 - .../Lib/site-packages/aiogram/types/poll.py | 83 - .../aiogram/types/pre_checkout_query.py | 34 - .../types/proximity_alert_triggered.py | 15 - .../aiogram/types/reply_keyboard.py | 142 - .../aiogram/types/response_parameters.py | 12 - .../aiogram/types/shipping_address.py | 16 - .../aiogram/types/shipping_option.py | 32 - .../aiogram/types/shipping_query.py | 24 - .../site-packages/aiogram/types/sticker.py | 49 - .../aiogram/types/sticker_set.py | 20 - .../aiogram/types/successful_payment.py | 18 - .../Lib/site-packages/aiogram/types/update.py | 78 - .../Lib/site-packages/aiogram/types/user.py | 94 - .../aiogram/types/user_profile_photos.py | 15 - .../Lib/site-packages/aiogram/types/venue.py | 18 - .../Lib/site-packages/aiogram/types/video.py | 21 - .../site-packages/aiogram/types/video_note.py | 18 - .../Lib/site-packages/aiogram/types/voice.py | 16 - .../aiogram/types/voice_chat_ended.py | 13 - .../types/voice_chat_participants_invited.py | 16 - .../aiogram/types/voice_chat_scheduled.py | 15 - .../aiogram/types/voice_chat_started.py | 12 - .../aiogram/types/webhook_info.py | 20 - .../site-packages/aiogram/utils/__init__.py | 0 .../utils/__pycache__/__init__.cpython-39.pyc | Bin 174 -> 0 bytes .../__pycache__/auth_widget.cpython-39.pyc | Bin 2722 -> 0 bytes .../__pycache__/callback_data.cpython-39.pyc | Bin 4144 -> 0 bytes .../__pycache__/deep_linking.cpython-39.pyc | Bin 3905 -> 0 bytes .../__pycache__/deprecated.cpython-39.pyc | Bin 5677 -> 0 bytes .../utils/__pycache__/emoji.cpython-39.pyc | Bin 523 -> 0 bytes .../__pycache__/exceptions.cpython-39.pyc | Bin 23455 -> 0 bytes .../utils/__pycache__/executor.cpython-39.pyc | Bin 11631 -> 0 bytes .../utils/__pycache__/helper.cpython-39.pyc | Bin 6617 -> 0 bytes .../utils/__pycache__/json.cpython-39.pyc | Bin 1163 -> 0 bytes .../utils/__pycache__/markdown.cpython-39.pyc | Bin 5506 -> 0 bytes .../utils/__pycache__/mixins.cpython-39.pyc | Bin 2295 -> 0 bytes .../utils/__pycache__/parts.cpython-39.pyc | Bin 1744 -> 0 bytes .../utils/__pycache__/payload.cpython-39.pyc | Bin 2506 -> 0 bytes .../text_decorations.cpython-39.pyc | Bin 7771 -> 0 bytes .../aiogram/utils/auth_widget.py | 69 - .../aiogram/utils/callback_data.py | 136 - .../aiogram/utils/deep_linking.py | 138 - .../site-packages/aiogram/utils/deprecated.py | 164 - .../Lib/site-packages/aiogram/utils/emoji.py | 12 - .../site-packages/aiogram/utils/exceptions.py | 593 - .../site-packages/aiogram/utils/executor.py | 399 - .../Lib/site-packages/aiogram/utils/helper.py | 229 - .../Lib/site-packages/aiogram/utils/json.py | 47 - .../site-packages/aiogram/utils/markdown.py | 250 - .../Lib/site-packages/aiogram/utils/mixins.py | 50 - .../Lib/site-packages/aiogram/utils/parts.py | 60 - .../site-packages/aiogram/utils/payload.py | 83 - .../aiogram/utils/text_decorations.py | 204 - .../aiohttp-3.7.4.post0.dist-info/INSTALLER | 1 - .../aiohttp-3.7.4.post0.dist-info/LICENSE.txt | 201 - .../aiohttp-3.7.4.post0.dist-info/METADATA | 978 - .../aiohttp-3.7.4.post0.dist-info/RECORD | 135 - .../aiohttp-3.7.4.post0.dist-info/WHEEL | 5 - .../top_level.txt | 1 - .../aiohttp/.hash/_cparser.pxd.hash | 1 - .../aiohttp/.hash/_find_header.pxd.hash | 1 - .../aiohttp/.hash/_frozenlist.pyx.hash | 1 - .../aiohttp/.hash/_helpers.pyi.hash | 1 - .../aiohttp/.hash/_helpers.pyx.hash | 1 - .../aiohttp/.hash/_http_parser.pyx.hash | 1 - .../aiohttp/.hash/_http_writer.pyx.hash | 1 - .../aiohttp/.hash/_websocket.pyx.hash | 1 - .../aiohttp/.hash/frozenlist.pyi.hash | 1 - .../site-packages/aiohttp/.hash/hdrs.py.hash | 1 - .../aiohttp/.hash/signals.pyi.hash | 1 - .../Lib/site-packages/aiohttp/__init__.py | 217 - .../__pycache__/__init__.cpython-39.pyc | Bin 3708 -> 0 bytes .../aiohttp/__pycache__/abc.cpython-39.pyc | Bin 8317 -> 0 bytes .../__pycache__/base_protocol.cpython-39.pyc | Bin 2617 -> 0 bytes .../aiohttp/__pycache__/client.cpython-39.pyc | Bin 28567 -> 0 bytes .../client_exceptions.cpython-39.pyc | Bin 10265 -> 0 bytes .../__pycache__/client_proto.cpython-39.pyc | Bin 6154 -> 0 bytes .../__pycache__/client_reqrep.cpython-39.pyc | Bin 27629 -> 0 bytes .../__pycache__/client_ws.cpython-39.pyc | Bin 8911 -> 0 bytes .../__pycache__/connector.cpython-39.pyc | Bin 31215 -> 0 bytes .../__pycache__/cookiejar.cpython-39.pyc | Bin 9332 -> 0 bytes .../__pycache__/formdata.cpython-39.pyc | Bin 4508 -> 0 bytes .../__pycache__/frozenlist.cpython-39.pyc | Bin 2628 -> 0 bytes .../aiohttp/__pycache__/hdrs.cpython-39.pyc | Bin 3625 -> 0 bytes .../__pycache__/helpers.cpython-39.pyc | Bin 22940 -> 0 bytes .../aiohttp/__pycache__/http.cpython-39.pyc | Bin 1247 -> 0 bytes .../http_exceptions.cpython-39.pyc | Bin 4271 -> 0 bytes .../__pycache__/http_parser.cpython-39.pyc | Bin 15976 -> 0 bytes .../__pycache__/http_websocket.cpython-39.pyc | Bin 14752 -> 0 bytes .../__pycache__/http_writer.cpython-39.pyc | Bin 4988 -> 0 bytes .../aiohttp/__pycache__/locks.cpython-39.pyc | Bin 1705 -> 0 bytes .../aiohttp/__pycache__/log.cpython-39.pyc | Bin 448 -> 0 bytes .../__pycache__/multipart.cpython-39.pyc | Bin 26137 -> 0 bytes .../__pycache__/payload.cpython-39.pyc | Bin 13180 -> 0 bytes .../payload_streamer.cpython-39.pyc | Bin 3245 -> 0 bytes .../__pycache__/pytest_plugin.cpython-39.pyc | Bin 9533 -> 0 bytes .../__pycache__/resolver.cpython-39.pyc | Bin 3780 -> 0 bytes .../__pycache__/signals.cpython-39.pyc | Bin 1303 -> 0 bytes .../__pycache__/streams.cpython-39.pyc | Bin 18310 -> 0 bytes .../__pycache__/tcp_helpers.cpython-39.pyc | Bin 1133 -> 0 bytes .../__pycache__/test_utils.cpython-39.pyc | Bin 21124 -> 0 bytes .../__pycache__/tracing.cpython-39.pyc | Bin 14274 -> 0 bytes .../__pycache__/typedefs.cpython-39.pyc | Bin 1318 -> 0 bytes .../aiohttp/__pycache__/web.cpython-39.pyc | Bin 9787 -> 0 bytes .../__pycache__/web_app.cpython-39.pyc | Bin 15159 -> 0 bytes .../__pycache__/web_exceptions.cpython-39.pyc | Bin 12026 -> 0 bytes .../web_fileresponse.cpython-39.pyc | Bin 4618 -> 0 bytes .../__pycache__/web_log.cpython-39.pyc | Bin 7114 -> 0 bytes .../web_middlewares.cpython-39.pyc | Bin 3884 -> 0 bytes .../__pycache__/web_protocol.cpython-39.pyc | Bin 16454 -> 0 bytes .../__pycache__/web_request.cpython-39.pyc | Bin 22594 -> 0 bytes .../__pycache__/web_response.cpython-39.pyc | Bin 20234 -> 0 bytes .../__pycache__/web_routedef.cpython-39.pyc | Bin 7862 -> 0 bytes .../__pycache__/web_runner.cpython-39.pyc | Bin 11670 -> 0 bytes .../__pycache__/web_server.cpython-39.pyc | Bin 2760 -> 0 bytes .../web_urldispatcher.cpython-39.pyc | Bin 42098 -> 0 bytes .../aiohttp/__pycache__/web_ws.cpython-39.pyc | Bin 13205 -> 0 bytes .../aiohttp/__pycache__/worker.cpython-39.pyc | Bin 6879 -> 0 bytes .../Lib/site-packages/aiohttp/_cparser.pxd | 140 - .../Lib/site-packages/aiohttp/_find_header.c | 9870 ------- .../Lib/site-packages/aiohttp/_find_header.h | 14 - .../site-packages/aiohttp/_find_header.pxd | 2 - .../Lib/site-packages/aiohttp/_frozenlist.c | 7512 ----- .../aiohttp/_frozenlist.cp39-win_amd64.pyd | Bin 64512 -> 0 bytes .../Lib/site-packages/aiohttp/_frozenlist.pyx | 108 - .../Lib/site-packages/aiohttp/_headers.pxi | 83 - .../Lib/site-packages/aiohttp/_helpers.c | 5433 ---- .../aiohttp/_helpers.cp39-win_amd64.pyd | Bin 48128 -> 0 bytes .../Lib/site-packages/aiohttp/_helpers.pyi | 6 - .../Lib/site-packages/aiohttp/_helpers.pyx | 35 - .../Lib/site-packages/aiohttp/_http_parser.c | 24607 ---------------- .../aiohttp/_http_parser.cp39-win_amd64.pyd | Bin 235520 -> 0 bytes .../site-packages/aiohttp/_http_parser.pyx | 875 - .../Lib/site-packages/aiohttp/_http_writer.c | 5840 ---- .../aiohttp/_http_writer.cp39-win_amd64.pyd | Bin 41984 -> 0 bytes .../site-packages/aiohttp/_http_writer.pyx | 151 - .../Lib/site-packages/aiohttp/_websocket.c | 3588 --- .../aiohttp/_websocket.cp39-win_amd64.pyd | Bin 27648 -> 0 bytes .../Lib/site-packages/aiohttp/_websocket.pyx | 56 - .../.venv/Lib/site-packages/aiohttp/abc.py | 200 - .../site-packages/aiohttp/base_protocol.py | 87 - .../.venv/Lib/site-packages/aiohttp/client.py | 1275 - .../aiohttp/client_exceptions.py | 317 - .../Lib/site-packages/aiohttp/client_proto.py | 251 - .../site-packages/aiohttp/client_reqrep.py | 1127 - .../Lib/site-packages/aiohttp/client_ws.py | 301 - .../Lib/site-packages/aiohttp/connector.py | 1262 - .../Lib/site-packages/aiohttp/cookiejar.py | 382 - .../Lib/site-packages/aiohttp/formdata.py | 170 - .../Lib/site-packages/aiohttp/frozenlist.py | 72 - .../Lib/site-packages/aiohttp/frozenlist.pyi | 46 - .../.venv/Lib/site-packages/aiohttp/hdrs.py | 108 - .../Lib/site-packages/aiohttp/helpers.py | 780 - .../.venv/Lib/site-packages/aiohttp/http.py | 72 - .../site-packages/aiohttp/http_exceptions.py | 105 - .../Lib/site-packages/aiohttp/http_parser.py | 901 - .../site-packages/aiohttp/http_websocket.py | 698 - .../Lib/site-packages/aiohttp/http_writer.py | 182 - .../.venv/Lib/site-packages/aiohttp/locks.py | 45 - .../.venv/Lib/site-packages/aiohttp/log.py | 8 - .../Lib/site-packages/aiohttp/multipart.py | 957 - .../Lib/site-packages/aiohttp/payload.py | 448 - .../site-packages/aiohttp/payload_streamer.py | 74 - .../.venv/Lib/site-packages/aiohttp/py.typed | 1 - .../site-packages/aiohttp/pytest_plugin.py | 380 - .../Lib/site-packages/aiohttp/resolver.py | 149 - .../Lib/site-packages/aiohttp/signals.py | 34 - .../Lib/site-packages/aiohttp/signals.pyi | 12 - .../Lib/site-packages/aiohttp/streams.py | 647 - .../Lib/site-packages/aiohttp/tcp_helpers.py | 38 - .../Lib/site-packages/aiohttp/test_utils.py | 676 - .../Lib/site-packages/aiohttp/tracing.py | 442 - .../Lib/site-packages/aiohttp/typedefs.py | 46 - .../.venv/Lib/site-packages/aiohttp/web.py | 581 - .../Lib/site-packages/aiohttp/web_app.py | 552 - .../site-packages/aiohttp/web_exceptions.py | 441 - .../site-packages/aiohttp/web_fileresponse.py | 243 - .../Lib/site-packages/aiohttp/web_log.py | 208 - .../site-packages/aiohttp/web_middlewares.py | 121 - .../Lib/site-packages/aiohttp/web_protocol.py | 667 - .../Lib/site-packages/aiohttp/web_request.py | 824 - .../Lib/site-packages/aiohttp/web_response.py | 781 - .../Lib/site-packages/aiohttp/web_routedef.py | 215 - .../Lib/site-packages/aiohttp/web_runner.py | 381 - .../Lib/site-packages/aiohttp/web_server.py | 62 - .../aiohttp/web_urldispatcher.py | 1233 - .../.venv/Lib/site-packages/aiohttp/web_ws.py | 481 - .../.venv/Lib/site-packages/aiohttp/worker.py | 252 - .../async_timeout-3.0.1.dist-info/INSTALLER | 1 - .../async_timeout-3.0.1.dist-info/LICENSE | 201 - .../async_timeout-3.0.1.dist-info/METADATA | 165 - .../async_timeout-3.0.1.dist-info/RECORD | 9 - .../async_timeout-3.0.1.dist-info/WHEEL | 5 - .../top_level.txt | 1 - .../site-packages/async_timeout/__init__.py | 115 - .../__pycache__/__init__.cpython-39.pyc | Bin 3480 -> 0 bytes .../Lib/site-packages/async_timeout/py.typed | 1 - .../.venv/Lib/site-packages/attr/__init__.py | 78 - .../.venv/Lib/site-packages/attr/__init__.pyi | 475 - .../attr/__pycache__/__init__.cpython-39.pyc | Bin 1711 -> 0 bytes .../attr/__pycache__/_cmp.cpython-39.pyc | Bin 3859 -> 0 bytes .../attr/__pycache__/_compat.cpython-39.pyc | Bin 6078 -> 0 bytes .../attr/__pycache__/_config.cpython-39.pyc | Bin 738 -> 0 bytes .../attr/__pycache__/_funcs.cpython-39.pyc | Bin 10029 -> 0 bytes .../attr/__pycache__/_make.cpython-39.pyc | Bin 72726 -> 0 bytes .../attr/__pycache__/_next_gen.cpython-39.pyc | Bin 3242 -> 0 bytes .../__pycache__/_version_info.cpython-39.pyc | Bin 2407 -> 0 bytes .../__pycache__/converters.cpython-39.pyc | Bin 2897 -> 0 bytes .../__pycache__/exceptions.cpython-39.pyc | Bin 3236 -> 0 bytes .../attr/__pycache__/filters.cpython-39.pyc | Bin 1738 -> 0 bytes .../attr/__pycache__/setters.cpython-39.pyc | Bin 1610 -> 0 bytes .../__pycache__/validators.cpython-39.pyc | Bin 11382 -> 0 bytes .../.venv/Lib/site-packages/attr/_cmp.py | 152 - .../.venv/Lib/site-packages/attr/_cmp.pyi | 14 - .../.venv/Lib/site-packages/attr/_compat.py | 242 - .../.venv/Lib/site-packages/attr/_config.py | 23 - .../.venv/Lib/site-packages/attr/_funcs.py | 395 - .../.venv/Lib/site-packages/attr/_make.py | 3052 -- .../.venv/Lib/site-packages/attr/_next_gen.py | 158 - .../Lib/site-packages/attr/_version_info.py | 85 - .../Lib/site-packages/attr/_version_info.pyi | 9 - .../Lib/site-packages/attr/converters.py | 111 - .../Lib/site-packages/attr/converters.pyi | 13 - .../Lib/site-packages/attr/exceptions.py | 92 - .../Lib/site-packages/attr/exceptions.pyi | 18 - .../.venv/Lib/site-packages/attr/filters.py | 52 - .../.venv/Lib/site-packages/attr/filters.pyi | 7 - .../.venv/Lib/site-packages/attr/py.typed | 0 .../.venv/Lib/site-packages/attr/setters.py | 77 - .../.venv/Lib/site-packages/attr/setters.pyi | 20 - .../Lib/site-packages/attr/validators.py | 379 - .../Lib/site-packages/attr/validators.pyi | 68 - .../attrs-21.2.0.dist-info/AUTHORS.rst | 11 - .../attrs-21.2.0.dist-info/INSTALLER | 1 - .../attrs-21.2.0.dist-info/LICENSE | 21 - .../attrs-21.2.0.dist-info/METADATA | 211 - .../attrs-21.2.0.dist-info/RECORD | 42 - .../attrs-21.2.0.dist-info/WHEEL | 6 - .../attrs-21.2.0.dist-info/top_level.txt | 1 - .../.venv/Lib/site-packages/babel/__init__.py | 24 - .../babel/__pycache__/__init__.cpython-39.pyc | Bin 920 -> 0 bytes .../babel/__pycache__/_compat.cpython-39.pyc | Bin 2202 -> 0 bytes .../babel/__pycache__/core.cpython-39.pyc | Bin 35464 -> 0 bytes .../babel/__pycache__/dates.cpython-39.pyc | Bin 55559 -> 0 bytes .../__pycache__/languages.cpython-39.pyc | Bin 3140 -> 0 bytes .../babel/__pycache__/lists.cpython-39.pyc | Bin 2696 -> 0 bytes .../__pycache__/localedata.cpython-39.pyc | Bin 8010 -> 0 bytes .../babel/__pycache__/numbers.cpython-39.pyc | Bin 32201 -> 0 bytes .../babel/__pycache__/plural.cpython-39.pyc | Bin 22150 -> 0 bytes .../babel/__pycache__/support.cpython-39.pyc | Bin 22873 -> 0 bytes .../babel/__pycache__/units.cpython-39.pyc | Bin 8547 -> 0 bytes .../babel/__pycache__/util.cpython-39.pyc | Bin 7124 -> 0 bytes .../.venv/Lib/site-packages/babel/_compat.py | 79 - .../.venv/Lib/site-packages/babel/core.py | 1133 - .../.venv/Lib/site-packages/babel/dates.py | 1796 -- .../.venv/Lib/site-packages/babel/global.dat | Bin 254421 -> 0 bytes .../Lib/site-packages/babel/languages.py | 71 - .../.venv/Lib/site-packages/babel/lists.py | 87 - .../site-packages/babel/locale-data/af.dat | Bin 171143 -> 0 bytes .../site-packages/babel/locale-data/af_NA.dat | Bin 1407 -> 0 bytes .../site-packages/babel/locale-data/af_ZA.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/agq.dat | Bin 17339 -> 0 bytes .../babel/locale-data/agq_CM.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/ak.dat | Bin 15859 -> 0 bytes .../site-packages/babel/locale-data/ak_GH.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/am.dat | Bin 200581 -> 0 bytes .../site-packages/babel/locale-data/am_ET.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/ar.dat | Bin 345779 -> 0 bytes .../babel/locale-data/ar_001.dat | Bin 1680 -> 0 bytes .../site-packages/babel/locale-data/ar_AE.dat | Bin 1038 -> 0 bytes .../site-packages/babel/locale-data/ar_BH.dat | Bin 651 -> 0 bytes .../site-packages/babel/locale-data/ar_DJ.dat | Bin 629 -> 0 bytes .../site-packages/babel/locale-data/ar_DZ.dat | Bin 1713 -> 0 bytes .../site-packages/babel/locale-data/ar_EG.dat | Bin 688 -> 0 bytes .../site-packages/babel/locale-data/ar_EH.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/ar_ER.dat | Bin 610 -> 0 bytes .../site-packages/babel/locale-data/ar_IL.dat | Bin 1195 -> 0 bytes .../site-packages/babel/locale-data/ar_IQ.dat | Bin 2336 -> 0 bytes .../site-packages/babel/locale-data/ar_JO.dat | Bin 2335 -> 0 bytes .../site-packages/babel/locale-data/ar_KM.dat | Bin 1161 -> 0 bytes .../site-packages/babel/locale-data/ar_KW.dat | Bin 651 -> 0 bytes .../site-packages/babel/locale-data/ar_LB.dat | Bin 2336 -> 0 bytes .../site-packages/babel/locale-data/ar_LY.dat | Bin 1652 -> 0 bytes .../site-packages/babel/locale-data/ar_MA.dat | Bin 2007 -> 0 bytes .../site-packages/babel/locale-data/ar_MR.dat | Bin 2173 -> 0 bytes .../site-packages/babel/locale-data/ar_OM.dat | Bin 651 -> 0 bytes .../site-packages/babel/locale-data/ar_PS.dat | Bin 2273 -> 0 bytes .../site-packages/babel/locale-data/ar_QA.dat | Bin 651 -> 0 bytes .../site-packages/babel/locale-data/ar_SA.dat | Bin 30599 -> 0 bytes .../site-packages/babel/locale-data/ar_SD.dat | Bin 651 -> 0 bytes .../site-packages/babel/locale-data/ar_SO.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/ar_SS.dat | Bin 631 -> 0 bytes .../site-packages/babel/locale-data/ar_SY.dat | Bin 2335 -> 0 bytes .../site-packages/babel/locale-data/ar_TD.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/ar_TN.dat | Bin 1651 -> 0 bytes .../site-packages/babel/locale-data/ar_YE.dat | Bin 651 -> 0 bytes .../site-packages/babel/locale-data/as.dat | Bin 234427 -> 0 bytes .../site-packages/babel/locale-data/as_IN.dat | Bin 631 -> 0 bytes .../site-packages/babel/locale-data/asa.dat | Bin 16187 -> 0 bytes .../babel/locale-data/asa_TZ.dat | Bin 590 -> 0 bytes .../site-packages/babel/locale-data/ast.dat | Bin 209617 -> 0 bytes .../babel/locale-data/ast_ES.dat | Bin 627 -> 0 bytes .../site-packages/babel/locale-data/az.dat | Bin 194898 -> 0 bytes .../babel/locale-data/az_Cyrl.dat | Bin 38880 -> 0 bytes .../babel/locale-data/az_Cyrl_AZ.dat | Bin 608 -> 0 bytes .../babel/locale-data/az_Latn.dat | Bin 2225 -> 0 bytes .../babel/locale-data/az_Latn_AZ.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/bas.dat | Bin 17128 -> 0 bytes .../babel/locale-data/bas_CM.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/be.dat | Bin 271438 -> 0 bytes .../site-packages/babel/locale-data/be_BY.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/bem.dat | Bin 6534 -> 0 bytes .../babel/locale-data/bem_ZM.dat | Bin 590 -> 0 bytes .../site-packages/babel/locale-data/bez.dat | Bin 16977 -> 0 bytes .../babel/locale-data/bez_TZ.dat | Bin 590 -> 0 bytes .../site-packages/babel/locale-data/bg.dat | Bin 232833 -> 0 bytes .../site-packages/babel/locale-data/bg_BG.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/bm.dat | Bin 15886 -> 0 bytes .../site-packages/babel/locale-data/bm_ML.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/bn.dat | Bin 263365 -> 0 bytes .../site-packages/babel/locale-data/bn_BD.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/bn_IN.dat | Bin 866 -> 0 bytes .../site-packages/babel/locale-data/bo.dat | Bin 22525 -> 0 bytes .../site-packages/babel/locale-data/bo_CN.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/bo_IN.dat | Bin 704 -> 0 bytes .../site-packages/babel/locale-data/br.dat | Bin 290897 -> 0 bytes .../site-packages/babel/locale-data/br_FR.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/brx.dat | Bin 124289 -> 0 bytes .../babel/locale-data/brx_IN.dat | Bin 632 -> 0 bytes .../site-packages/babel/locale-data/bs.dat | Bin 239326 -> 0 bytes .../babel/locale-data/bs_Cyrl.dat | Bin 213685 -> 0 bytes .../babel/locale-data/bs_Cyrl_BA.dat | Bin 608 -> 0 bytes .../babel/locale-data/bs_Latn.dat | Bin 1957 -> 0 bytes .../babel/locale-data/bs_Latn_BA.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/ca.dat | Bin 208790 -> 0 bytes .../site-packages/babel/locale-data/ca_AD.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/ca_ES.dat | Bin 626 -> 0 bytes .../babel/locale-data/ca_ES_VALENCIA.dat | Bin 3644 -> 0 bytes .../site-packages/babel/locale-data/ca_FR.dat | Bin 645 -> 0 bytes .../site-packages/babel/locale-data/ca_IT.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/ccp.dat | Bin 275655 -> 0 bytes .../babel/locale-data/ccp_BD.dat | Bin 609 -> 0 bytes .../babel/locale-data/ccp_IN.dat | Bin 632 -> 0 bytes .../site-packages/babel/locale-data/ce.dat | Bin 138778 -> 0 bytes .../site-packages/babel/locale-data/ce_RU.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/ceb.dat | Bin 103518 -> 0 bytes .../babel/locale-data/ceb_PH.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/cgg.dat | Bin 16228 -> 0 bytes .../babel/locale-data/cgg_UG.dat | Bin 613 -> 0 bytes .../site-packages/babel/locale-data/chr.dat | Bin 200072 -> 0 bytes .../babel/locale-data/chr_US.dat | Bin 627 -> 0 bytes .../site-packages/babel/locale-data/ckb.dat | Bin 41606 -> 0 bytes .../babel/locale-data/ckb_IQ.dat | Bin 652 -> 0 bytes .../babel/locale-data/ckb_IR.dat | Bin 1204 -> 0 bytes .../site-packages/babel/locale-data/cs.dat | Bin 297675 -> 0 bytes .../site-packages/babel/locale-data/cs_CZ.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/cu.dat | Bin 20265 -> 0 bytes .../site-packages/babel/locale-data/cu_RU.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/cy.dat | Bin 315824 -> 0 bytes .../site-packages/babel/locale-data/cy_GB.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/da.dat | Bin 199867 -> 0 bytes .../site-packages/babel/locale-data/da_DK.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/da_GL.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/dav.dat | Bin 16271 -> 0 bytes .../babel/locale-data/dav_KE.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/de.dat | Bin 206762 -> 0 bytes .../site-packages/babel/locale-data/de_AT.dat | Bin 2563 -> 0 bytes .../site-packages/babel/locale-data/de_BE.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/de_CH.dat | Bin 3938 -> 0 bytes .../site-packages/babel/locale-data/de_DE.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/de_IT.dat | Bin 1619 -> 0 bytes .../site-packages/babel/locale-data/de_LI.dat | Bin 1321 -> 0 bytes .../site-packages/babel/locale-data/de_LU.dat | Bin 1065 -> 0 bytes .../site-packages/babel/locale-data/dje.dat | Bin 16192 -> 0 bytes .../babel/locale-data/dje_NE.dat | Bin 590 -> 0 bytes .../site-packages/babel/locale-data/dsb.dat | Bin 179644 -> 0 bytes .../babel/locale-data/dsb_DE.dat | Bin 627 -> 0 bytes .../site-packages/babel/locale-data/dua.dat | Bin 5355 -> 0 bytes .../babel/locale-data/dua_CM.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/dyo.dat | Bin 10541 -> 0 bytes .../babel/locale-data/dyo_SN.dat | Bin 590 -> 0 bytes .../site-packages/babel/locale-data/dz.dat | Bin 89908 -> 0 bytes .../site-packages/babel/locale-data/dz_BT.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/ebu.dat | Bin 16243 -> 0 bytes .../babel/locale-data/ebu_KE.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/ee.dat | Bin 142527 -> 0 bytes .../site-packages/babel/locale-data/ee_GH.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/ee_TG.dat | Bin 1141 -> 0 bytes .../site-packages/babel/locale-data/el.dat | Bin 244752 -> 0 bytes .../site-packages/babel/locale-data/el_CY.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/el_GR.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/en.dat | Bin 194682 -> 0 bytes .../babel/locale-data/en_001.dat | Bin 27063 -> 0 bytes .../babel/locale-data/en_150.dat | Bin 1765 -> 0 bytes .../site-packages/babel/locale-data/en_AE.dat | Bin 4111 -> 0 bytes .../site-packages/babel/locale-data/en_AG.dat | Bin 627 -> 0 bytes .../site-packages/babel/locale-data/en_AI.dat | Bin 1179 -> 0 bytes .../site-packages/babel/locale-data/en_AS.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/en_AT.dat | Bin 1200 -> 0 bytes .../site-packages/babel/locale-data/en_AU.dat | Bin 23385 -> 0 bytes .../site-packages/babel/locale-data/en_BB.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/en_BE.dat | Bin 1493 -> 0 bytes .../site-packages/babel/locale-data/en_BI.dat | Bin 1162 -> 0 bytes .../site-packages/babel/locale-data/en_BM.dat | Bin 627 -> 0 bytes .../site-packages/babel/locale-data/en_BS.dat | Bin 811 -> 0 bytes .../site-packages/babel/locale-data/en_BW.dat | Bin 2771 -> 0 bytes .../site-packages/babel/locale-data/en_BZ.dat | Bin 2950 -> 0 bytes .../site-packages/babel/locale-data/en_CA.dat | Bin 25449 -> 0 bytes .../site-packages/babel/locale-data/en_CC.dat | Bin 1160 -> 0 bytes .../site-packages/babel/locale-data/en_CH.dat | Bin 1100 -> 0 bytes .../site-packages/babel/locale-data/en_CK.dat | Bin 1160 -> 0 bytes .../site-packages/babel/locale-data/en_CM.dat | Bin 1410 -> 0 bytes .../site-packages/babel/locale-data/en_CX.dat | Bin 1160 -> 0 bytes .../site-packages/babel/locale-data/en_CY.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/en_DE.dat | Bin 952 -> 0 bytes .../site-packages/babel/locale-data/en_DG.dat | Bin 1141 -> 0 bytes .../site-packages/babel/locale-data/en_DK.dat | Bin 2350 -> 0 bytes .../site-packages/babel/locale-data/en_DM.dat | Bin 627 -> 0 bytes .../site-packages/babel/locale-data/en_ER.dat | Bin 860 -> 0 bytes .../site-packages/babel/locale-data/en_FI.dat | Bin 2282 -> 0 bytes .../site-packages/babel/locale-data/en_FJ.dat | Bin 645 -> 0 bytes .../site-packages/babel/locale-data/en_FK.dat | Bin 1183 -> 0 bytes .../site-packages/babel/locale-data/en_FM.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/en_GB.dat | Bin 25821 -> 0 bytes .../site-packages/babel/locale-data/en_GD.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/en_GG.dat | Bin 1246 -> 0 bytes .../site-packages/babel/locale-data/en_GH.dat | Bin 862 -> 0 bytes .../site-packages/babel/locale-data/en_GI.dat | Bin 1201 -> 0 bytes .../site-packages/babel/locale-data/en_GM.dat | Bin 858 -> 0 bytes .../site-packages/babel/locale-data/en_GU.dat | Bin 688 -> 0 bytes .../site-packages/babel/locale-data/en_GY.dat | Bin 667 -> 0 bytes .../site-packages/babel/locale-data/en_HK.dat | Bin 2008 -> 0 bytes .../site-packages/babel/locale-data/en_IE.dat | Bin 2043 -> 0 bytes .../site-packages/babel/locale-data/en_IL.dat | Bin 1397 -> 0 bytes .../site-packages/babel/locale-data/en_IM.dat | Bin 1246 -> 0 bytes .../site-packages/babel/locale-data/en_IN.dat | Bin 3767 -> 0 bytes .../site-packages/babel/locale-data/en_IO.dat | Bin 1141 -> 0 bytes .../site-packages/babel/locale-data/en_JE.dat | Bin 1246 -> 0 bytes .../site-packages/babel/locale-data/en_JM.dat | Bin 1599 -> 0 bytes .../site-packages/babel/locale-data/en_KE.dat | Bin 1431 -> 0 bytes .../site-packages/babel/locale-data/en_KI.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/en_KN.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/en_KY.dat | Bin 792 -> 0 bytes .../site-packages/babel/locale-data/en_LC.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/en_LR.dat | Bin 858 -> 0 bytes .../site-packages/babel/locale-data/en_LS.dat | Bin 858 -> 0 bytes .../site-packages/babel/locale-data/en_MG.dat | Bin 1411 -> 0 bytes .../site-packages/babel/locale-data/en_MH.dat | Bin 1341 -> 0 bytes .../site-packages/babel/locale-data/en_MO.dat | Bin 803 -> 0 bytes .../site-packages/babel/locale-data/en_MP.dat | Bin 1322 -> 0 bytes .../site-packages/babel/locale-data/en_MS.dat | Bin 1160 -> 0 bytes .../site-packages/babel/locale-data/en_MT.dat | Bin 1927 -> 0 bytes .../site-packages/babel/locale-data/en_MU.dat | Bin 1411 -> 0 bytes .../site-packages/babel/locale-data/en_MW.dat | Bin 859 -> 0 bytes .../site-packages/babel/locale-data/en_MY.dat | Bin 689 -> 0 bytes .../site-packages/babel/locale-data/en_NA.dat | Bin 858 -> 0 bytes .../site-packages/babel/locale-data/en_NF.dat | Bin 1160 -> 0 bytes .../site-packages/babel/locale-data/en_NG.dat | Bin 1412 -> 0 bytes .../site-packages/babel/locale-data/en_NL.dat | Bin 1097 -> 0 bytes .../site-packages/babel/locale-data/en_NR.dat | Bin 1160 -> 0 bytes .../site-packages/babel/locale-data/en_NU.dat | Bin 1160 -> 0 bytes .../site-packages/babel/locale-data/en_NZ.dat | Bin 2234 -> 0 bytes .../site-packages/babel/locale-data/en_PG.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/en_PH.dat | Bin 629 -> 0 bytes .../site-packages/babel/locale-data/en_PK.dat | Bin 1959 -> 0 bytes .../site-packages/babel/locale-data/en_PN.dat | Bin 1160 -> 0 bytes .../site-packages/babel/locale-data/en_PR.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/en_PW.dat | Bin 773 -> 0 bytes .../site-packages/babel/locale-data/en_RW.dat | Bin 1411 -> 0 bytes .../site-packages/babel/locale-data/en_SB.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/en_SC.dat | Bin 1161 -> 0 bytes .../site-packages/babel/locale-data/en_SD.dat | Bin 901 -> 0 bytes .../site-packages/babel/locale-data/en_SE.dat | Bin 1427 -> 0 bytes .../site-packages/babel/locale-data/en_SG.dat | Bin 2017 -> 0 bytes .../site-packages/babel/locale-data/en_SH.dat | Bin 1183 -> 0 bytes .../site-packages/babel/locale-data/en_SI.dat | Bin 968 -> 0 bytes .../site-packages/babel/locale-data/en_SL.dat | Bin 859 -> 0 bytes .../site-packages/babel/locale-data/en_SS.dat | Bin 881 -> 0 bytes .../site-packages/babel/locale-data/en_SX.dat | Bin 1163 -> 0 bytes .../site-packages/babel/locale-data/en_SZ.dat | Bin 858 -> 0 bytes .../site-packages/babel/locale-data/en_TC.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/en_TK.dat | Bin 1160 -> 0 bytes .../site-packages/babel/locale-data/en_TO.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/en_TT.dat | Bin 627 -> 0 bytes .../site-packages/babel/locale-data/en_TV.dat | Bin 1160 -> 0 bytes .../site-packages/babel/locale-data/en_TZ.dat | Bin 1412 -> 0 bytes .../site-packages/babel/locale-data/en_UG.dat | Bin 1435 -> 0 bytes .../site-packages/babel/locale-data/en_UM.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/en_US.dat | Bin 626 -> 0 bytes .../babel/locale-data/en_US_POSIX.dat | Bin 1204 -> 0 bytes .../site-packages/babel/locale-data/en_VC.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/en_VG.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/en_VI.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/en_VU.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/en_WS.dat | Bin 629 -> 0 bytes .../site-packages/babel/locale-data/en_ZA.dat | Bin 3269 -> 0 bytes .../site-packages/babel/locale-data/en_ZM.dat | Bin 858 -> 0 bytes .../site-packages/babel/locale-data/en_ZW.dat | Bin 3199 -> 0 bytes .../site-packages/babel/locale-data/eo.dat | Bin 40689 -> 0 bytes .../babel/locale-data/eo_001.dat | Bin 823 -> 0 bytes .../site-packages/babel/locale-data/es.dat | Bin 199638 -> 0 bytes .../babel/locale-data/es_419.dat | Bin 23299 -> 0 bytes .../site-packages/babel/locale-data/es_AR.dat | Bin 8828 -> 0 bytes .../site-packages/babel/locale-data/es_BO.dat | Bin 1888 -> 0 bytes .../site-packages/babel/locale-data/es_BR.dat | Bin 628 -> 0 bytes .../site-packages/babel/locale-data/es_BZ.dat | Bin 627 -> 0 bytes .../site-packages/babel/locale-data/es_CL.dat | Bin 5128 -> 0 bytes .../site-packages/babel/locale-data/es_CO.dat | Bin 8665 -> 0 bytes .../site-packages/babel/locale-data/es_CR.dat | Bin 1719 -> 0 bytes .../site-packages/babel/locale-data/es_CU.dat | Bin 629 -> 0 bytes .../site-packages/babel/locale-data/es_DO.dat | Bin 4020 -> 0 bytes .../site-packages/babel/locale-data/es_EA.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/es_EC.dat | Bin 3294 -> 0 bytes .../site-packages/babel/locale-data/es_ES.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/es_GQ.dat | Bin 872 -> 0 bytes .../site-packages/babel/locale-data/es_GT.dat | Bin 4896 -> 0 bytes .../site-packages/babel/locale-data/es_HN.dat | Bin 3476 -> 0 bytes .../site-packages/babel/locale-data/es_IC.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/es_MX.dat | Bin 24708 -> 0 bytes .../site-packages/babel/locale-data/es_NI.dat | Bin 1653 -> 0 bytes .../site-packages/babel/locale-data/es_PA.dat | Bin 3884 -> 0 bytes .../site-packages/babel/locale-data/es_PE.dat | Bin 4848 -> 0 bytes .../site-packages/babel/locale-data/es_PH.dat | Bin 1205 -> 0 bytes .../site-packages/babel/locale-data/es_PR.dat | Bin 3798 -> 0 bytes .../site-packages/babel/locale-data/es_PY.dat | Bin 5319 -> 0 bytes .../site-packages/babel/locale-data/es_SV.dat | Bin 1402 -> 0 bytes .../site-packages/babel/locale-data/es_US.dat | Bin 25343 -> 0 bytes .../site-packages/babel/locale-data/es_UY.dat | Bin 2540 -> 0 bytes .../site-packages/babel/locale-data/es_VE.dat | Bin 3752 -> 0 bytes .../site-packages/babel/locale-data/et.dat | Bin 200192 -> 0 bytes .../site-packages/babel/locale-data/et_EE.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/eu.dat | Bin 176850 -> 0 bytes .../site-packages/babel/locale-data/eu_ES.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/ewo.dat | Bin 17595 -> 0 bytes .../babel/locale-data/ewo_CM.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/fa.dat | Bin 217724 -> 0 bytes .../site-packages/babel/locale-data/fa_AF.dat | Bin 11247 -> 0 bytes .../site-packages/babel/locale-data/fa_IR.dat | Bin 651 -> 0 bytes .../site-packages/babel/locale-data/ff.dat | Bin 16084 -> 0 bytes .../babel/locale-data/ff_Adlm.dat | Bin 174659 -> 0 bytes .../babel/locale-data/ff_Adlm_BF.dat | Bin 610 -> 0 bytes .../babel/locale-data/ff_Adlm_CM.dat | Bin 629 -> 0 bytes .../babel/locale-data/ff_Adlm_GH.dat | Bin 1209 -> 0 bytes .../babel/locale-data/ff_Adlm_GM.dat | Bin 1205 -> 0 bytes .../babel/locale-data/ff_Adlm_GN.dat | Bin 589 -> 0 bytes .../babel/locale-data/ff_Adlm_GW.dat | Bin 610 -> 0 bytes .../babel/locale-data/ff_Adlm_LR.dat | Bin 1205 -> 0 bytes .../babel/locale-data/ff_Adlm_MR.dat | Bin 1206 -> 0 bytes .../babel/locale-data/ff_Adlm_NE.dat | Bin 610 -> 0 bytes .../babel/locale-data/ff_Adlm_NG.dat | Bin 631 -> 0 bytes .../babel/locale-data/ff_Adlm_SL.dat | Bin 1206 -> 0 bytes .../babel/locale-data/ff_Adlm_SN.dat | Bin 610 -> 0 bytes .../babel/locale-data/ff_Latn.dat | Bin 839 -> 0 bytes .../babel/locale-data/ff_Latn_BF.dat | Bin 589 -> 0 bytes .../babel/locale-data/ff_Latn_CM.dat | Bin 608 -> 0 bytes .../babel/locale-data/ff_Latn_GH.dat | Bin 1188 -> 0 bytes .../babel/locale-data/ff_Latn_GM.dat | Bin 1184 -> 0 bytes .../babel/locale-data/ff_Latn_GN.dat | Bin 609 -> 0 bytes .../babel/locale-data/ff_Latn_GW.dat | Bin 589 -> 0 bytes .../babel/locale-data/ff_Latn_LR.dat | Bin 1184 -> 0 bytes .../babel/locale-data/ff_Latn_MR.dat | Bin 1185 -> 0 bytes .../babel/locale-data/ff_Latn_NE.dat | Bin 589 -> 0 bytes .../babel/locale-data/ff_Latn_NG.dat | Bin 610 -> 0 bytes .../babel/locale-data/ff_Latn_SL.dat | Bin 1185 -> 0 bytes .../babel/locale-data/ff_Latn_SN.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/fi.dat | Bin 227195 -> 0 bytes .../site-packages/babel/locale-data/fi_FI.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/fil.dat | Bin 179405 -> 0 bytes .../babel/locale-data/fil_PH.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/fo.dat | Bin 165657 -> 0 bytes .../site-packages/babel/locale-data/fo_DK.dat | Bin 647 -> 0 bytes .../site-packages/babel/locale-data/fo_FO.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/fr.dat | Bin 225342 -> 0 bytes .../site-packages/babel/locale-data/fr_BE.dat | Bin 1254 -> 0 bytes .../site-packages/babel/locale-data/fr_BF.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/fr_BI.dat | Bin 610 -> 0 bytes .../site-packages/babel/locale-data/fr_BJ.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/fr_BL.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/fr_CA.dat | Bin 65858 -> 0 bytes .../site-packages/babel/locale-data/fr_CD.dat | Bin 1106 -> 0 bytes .../site-packages/babel/locale-data/fr_CF.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/fr_CG.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/fr_CH.dat | Bin 2970 -> 0 bytes .../site-packages/babel/locale-data/fr_CI.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/fr_CM.dat | Bin 2083 -> 0 bytes .../site-packages/babel/locale-data/fr_DJ.dat | Bin 1205 -> 0 bytes .../site-packages/babel/locale-data/fr_DZ.dat | Bin 1247 -> 0 bytes .../site-packages/babel/locale-data/fr_FR.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/fr_GA.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/fr_GF.dat | Bin 692 -> 0 bytes .../site-packages/babel/locale-data/fr_GN.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/fr_GP.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/fr_GQ.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/fr_HT.dat | Bin 1873 -> 0 bytes .../site-packages/babel/locale-data/fr_KM.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/fr_LU.dat | Bin 687 -> 0 bytes .../site-packages/babel/locale-data/fr_MA.dat | Bin 1277 -> 0 bytes .../site-packages/babel/locale-data/fr_MC.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/fr_MF.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/fr_MG.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/fr_ML.dat | Bin 1126 -> 0 bytes .../site-packages/babel/locale-data/fr_MQ.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/fr_MR.dat | Bin 1185 -> 0 bytes .../site-packages/babel/locale-data/fr_MU.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/fr_NC.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/fr_NE.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/fr_PF.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/fr_PM.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/fr_RE.dat | Bin 1142 -> 0 bytes .../site-packages/babel/locale-data/fr_RW.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/fr_SC.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/fr_SN.dat | Bin 1277 -> 0 bytes .../site-packages/babel/locale-data/fr_SY.dat | Bin 1247 -> 0 bytes .../site-packages/babel/locale-data/fr_TD.dat | Bin 1165 -> 0 bytes .../site-packages/babel/locale-data/fr_TG.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/fr_TN.dat | Bin 1185 -> 0 bytes .../site-packages/babel/locale-data/fr_VU.dat | Bin 1185 -> 0 bytes .../site-packages/babel/locale-data/fr_WF.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/fr_YT.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/fur.dat | Bin 35027 -> 0 bytes .../babel/locale-data/fur_IT.dat | Bin 627 -> 0 bytes .../site-packages/babel/locale-data/fy.dat | Bin 110221 -> 0 bytes .../site-packages/babel/locale-data/fy_NL.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/ga.dat | Bin 316865 -> 0 bytes .../site-packages/babel/locale-data/ga_GB.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/ga_IE.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/gd.dat | Bin 302010 -> 0 bytes .../site-packages/babel/locale-data/gd_GB.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/gl.dat | Bin 176367 -> 0 bytes .../site-packages/babel/locale-data/gl_ES.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/gsw.dat | Bin 108049 -> 0 bytes .../babel/locale-data/gsw_CH.dat | Bin 627 -> 0 bytes .../babel/locale-data/gsw_FR.dat | Bin 627 -> 0 bytes .../babel/locale-data/gsw_LI.dat | Bin 627 -> 0 bytes .../site-packages/babel/locale-data/gu.dat | Bin 246649 -> 0 bytes .../site-packages/babel/locale-data/gu_IN.dat | Bin 631 -> 0 bytes .../site-packages/babel/locale-data/guz.dat | Bin 16016 -> 0 bytes .../babel/locale-data/guz_KE.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/gv.dat | Bin 4146 -> 0 bytes .../site-packages/babel/locale-data/gv_IM.dat | Bin 607 -> 0 bytes .../site-packages/babel/locale-data/ha.dat | Bin 78016 -> 0 bytes .../site-packages/babel/locale-data/ha_GH.dat | Bin 1188 -> 0 bytes .../site-packages/babel/locale-data/ha_NE.dat | Bin 1248 -> 0 bytes .../site-packages/babel/locale-data/ha_NG.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/haw.dat | Bin 16106 -> 0 bytes .../babel/locale-data/haw_US.dat | Bin 627 -> 0 bytes .../site-packages/babel/locale-data/he.dat | Bin 271008 -> 0 bytes .../site-packages/babel/locale-data/he_IL.dat | Bin 651 -> 0 bytes .../site-packages/babel/locale-data/hi.dat | Bin 244568 -> 0 bytes .../site-packages/babel/locale-data/hi_IN.dat | Bin 631 -> 0 bytes .../site-packages/babel/locale-data/hr.dat | Bin 247517 -> 0 bytes .../site-packages/babel/locale-data/hr_BA.dat | Bin 1161 -> 0 bytes .../site-packages/babel/locale-data/hr_HR.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/hsb.dat | Bin 179178 -> 0 bytes .../babel/locale-data/hsb_DE.dat | Bin 627 -> 0 bytes .../site-packages/babel/locale-data/hu.dat | Bin 192963 -> 0 bytes .../site-packages/babel/locale-data/hu_HU.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/hy.dat | Bin 214313 -> 0 bytes .../site-packages/babel/locale-data/hy_AM.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/ia.dat | Bin 112822 -> 0 bytes .../babel/locale-data/ia_001.dat | Bin 914 -> 0 bytes .../site-packages/babel/locale-data/id.dat | Bin 163265 -> 0 bytes .../site-packages/babel/locale-data/id_ID.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/ig.dat | Bin 52036 -> 0 bytes .../site-packages/babel/locale-data/ig_NG.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/ii.dat | Bin 12588 -> 0 bytes .../site-packages/babel/locale-data/ii_CN.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/is.dat | Bin 188046 -> 0 bytes .../site-packages/babel/locale-data/is_IS.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/it.dat | Bin 188460 -> 0 bytes .../site-packages/babel/locale-data/it_CH.dat | Bin 2776 -> 0 bytes .../site-packages/babel/locale-data/it_IT.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/it_SM.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/it_VA.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/ja.dat | Bin 200287 -> 0 bytes .../site-packages/babel/locale-data/ja_JP.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/jgo.dat | Bin 12628 -> 0 bytes .../babel/locale-data/jgo_CM.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/jmc.dat | Bin 16068 -> 0 bytes .../babel/locale-data/jmc_TZ.dat | Bin 590 -> 0 bytes .../site-packages/babel/locale-data/jv.dat | Bin 129461 -> 0 bytes .../site-packages/babel/locale-data/jv_ID.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/ka.dat | Bin 260705 -> 0 bytes .../site-packages/babel/locale-data/ka_GE.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/kab.dat | Bin 135263 -> 0 bytes .../babel/locale-data/kab_DZ.dat | Bin 652 -> 0 bytes .../site-packages/babel/locale-data/kam.dat | Bin 16175 -> 0 bytes .../babel/locale-data/kam_KE.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/kde.dat | Bin 16475 -> 0 bytes .../babel/locale-data/kde_TZ.dat | Bin 590 -> 0 bytes .../site-packages/babel/locale-data/kea.dat | Bin 85757 -> 0 bytes .../babel/locale-data/kea_CV.dat | Bin 590 -> 0 bytes .../site-packages/babel/locale-data/khq.dat | Bin 15939 -> 0 bytes .../babel/locale-data/khq_ML.dat | Bin 590 -> 0 bytes .../site-packages/babel/locale-data/ki.dat | Bin 16123 -> 0 bytes .../site-packages/babel/locale-data/ki_KE.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/kk.dat | Bin 210242 -> 0 bytes .../site-packages/babel/locale-data/kk_KZ.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/kkj.dat | Bin 4888 -> 0 bytes .../babel/locale-data/kkj_CM.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/kl.dat | Bin 58200 -> 0 bytes .../site-packages/babel/locale-data/kl_GL.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/kln.dat | Bin 18003 -> 0 bytes .../babel/locale-data/kln_KE.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/km.dat | Bin 202267 -> 0 bytes .../site-packages/babel/locale-data/km_KH.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/kn.dat | Bin 263580 -> 0 bytes .../site-packages/babel/locale-data/kn_IN.dat | Bin 631 -> 0 bytes .../site-packages/babel/locale-data/ko.dat | Bin 175158 -> 0 bytes .../site-packages/babel/locale-data/ko_KP.dat | Bin 789 -> 0 bytes .../site-packages/babel/locale-data/ko_KR.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/kok.dat | Bin 182871 -> 0 bytes .../babel/locale-data/kok_IN.dat | Bin 632 -> 0 bytes .../site-packages/babel/locale-data/ks.dat | Bin 102570 -> 0 bytes .../babel/locale-data/ks_Arab.dat | Bin 823 -> 0 bytes .../babel/locale-data/ks_Arab_IN.dat | Bin 631 -> 0 bytes .../site-packages/babel/locale-data/ksb.dat | Bin 16043 -> 0 bytes .../babel/locale-data/ksb_TZ.dat | Bin 590 -> 0 bytes .../site-packages/babel/locale-data/ksf.dat | Bin 16515 -> 0 bytes .../babel/locale-data/ksf_CM.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/ksh.dat | Bin 88937 -> 0 bytes .../babel/locale-data/ksh_DE.dat | Bin 627 -> 0 bytes .../site-packages/babel/locale-data/ku.dat | Bin 28771 -> 0 bytes .../site-packages/babel/locale-data/ku_TR.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/kw.dat | Bin 7242 -> 0 bytes .../site-packages/babel/locale-data/kw_GB.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/ky.dat | Bin 202058 -> 0 bytes .../site-packages/babel/locale-data/ky_KG.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/lag.dat | Bin 17141 -> 0 bytes .../babel/locale-data/lag_TZ.dat | Bin 590 -> 0 bytes .../site-packages/babel/locale-data/lb.dat | Bin 164597 -> 0 bytes .../site-packages/babel/locale-data/lb_LU.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/lg.dat | Bin 16434 -> 0 bytes .../site-packages/babel/locale-data/lg_UG.dat | Bin 612 -> 0 bytes .../site-packages/babel/locale-data/lkt.dat | Bin 12766 -> 0 bytes .../babel/locale-data/lkt_US.dat | Bin 627 -> 0 bytes .../site-packages/babel/locale-data/ln.dat | Bin 25891 -> 0 bytes .../site-packages/babel/locale-data/ln_AO.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/ln_CD.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/ln_CF.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/ln_CG.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/lo.dat | Bin 220343 -> 0 bytes .../site-packages/babel/locale-data/lo_LA.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/lrc.dat | Bin 19021 -> 0 bytes .../babel/locale-data/lrc_IQ.dat | Bin 1228 -> 0 bytes .../babel/locale-data/lrc_IR.dat | Bin 652 -> 0 bytes .../site-packages/babel/locale-data/lt.dat | Bin 284211 -> 0 bytes .../site-packages/babel/locale-data/lt_LT.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/lu.dat | Bin 15888 -> 0 bytes .../site-packages/babel/locale-data/lu_CD.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/luo.dat | Bin 15885 -> 0 bytes .../babel/locale-data/luo_KE.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/luy.dat | Bin 15859 -> 0 bytes .../babel/locale-data/luy_KE.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/lv.dat | Bin 214988 -> 0 bytes .../site-packages/babel/locale-data/lv_LV.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/mai.dat | Bin 14710 -> 0 bytes .../babel/locale-data/mai_IN.dat | Bin 632 -> 0 bytes .../site-packages/babel/locale-data/mas.dat | Bin 17297 -> 0 bytes .../babel/locale-data/mas_KE.dat | Bin 609 -> 0 bytes .../babel/locale-data/mas_TZ.dat | Bin 611 -> 0 bytes .../site-packages/babel/locale-data/mer.dat | Bin 16088 -> 0 bytes .../babel/locale-data/mer_KE.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/mfe.dat | Bin 15117 -> 0 bytes .../babel/locale-data/mfe_MU.dat | Bin 590 -> 0 bytes .../site-packages/babel/locale-data/mg.dat | Bin 23550 -> 0 bytes .../site-packages/babel/locale-data/mg_MG.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/mgh.dat | Bin 10479 -> 0 bytes .../babel/locale-data/mgh_MZ.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/mgo.dat | Bin 8206 -> 0 bytes .../babel/locale-data/mgo_CM.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/mi.dat | Bin 20727 -> 0 bytes .../site-packages/babel/locale-data/mi_NZ.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/mk.dat | Bin 234490 -> 0 bytes .../site-packages/babel/locale-data/mk_MK.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/ml.dat | Bin 285214 -> 0 bytes .../site-packages/babel/locale-data/ml_IN.dat | Bin 631 -> 0 bytes .../site-packages/babel/locale-data/mn.dat | Bin 202642 -> 0 bytes .../site-packages/babel/locale-data/mn_MN.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/mni.dat | Bin 14622 -> 0 bytes .../babel/locale-data/mni_Beng.dat | Bin 666 -> 0 bytes .../babel/locale-data/mni_Beng_IN.dat | Bin 632 -> 0 bytes .../site-packages/babel/locale-data/mr.dat | Bin 246797 -> 0 bytes .../site-packages/babel/locale-data/mr_IN.dat | Bin 631 -> 0 bytes .../site-packages/babel/locale-data/ms.dat | Bin 152238 -> 0 bytes .../site-packages/babel/locale-data/ms_BN.dat | Bin 1257 -> 0 bytes .../site-packages/babel/locale-data/ms_ID.dat | Bin 3272 -> 0 bytes .../site-packages/babel/locale-data/ms_MY.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/ms_SG.dat | Bin 627 -> 0 bytes .../site-packages/babel/locale-data/mt.dat | Bin 78243 -> 0 bytes .../site-packages/babel/locale-data/mt_MT.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/mua.dat | Bin 16547 -> 0 bytes .../babel/locale-data/mua_CM.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/my.dat | Bin 210242 -> 0 bytes .../site-packages/babel/locale-data/my_MM.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/mzn.dat | Bin 65499 -> 0 bytes .../babel/locale-data/mzn_IR.dat | Bin 652 -> 0 bytes .../site-packages/babel/locale-data/naq.dat | Bin 16617 -> 0 bytes .../babel/locale-data/naq_NA.dat | Bin 590 -> 0 bytes .../site-packages/babel/locale-data/nb.dat | Bin 210593 -> 0 bytes .../site-packages/babel/locale-data/nb_NO.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/nb_SJ.dat | Bin 607 -> 0 bytes .../site-packages/babel/locale-data/nd.dat | Bin 16312 -> 0 bytes .../site-packages/babel/locale-data/nd_ZW.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/nds.dat | Bin 50632 -> 0 bytes .../babel/locale-data/nds_DE.dat | Bin 627 -> 0 bytes .../babel/locale-data/nds_NL.dat | Bin 627 -> 0 bytes .../site-packages/babel/locale-data/ne.dat | Bin 248497 -> 0 bytes .../site-packages/babel/locale-data/ne_IN.dat | Bin 1265 -> 0 bytes .../site-packages/babel/locale-data/ne_NP.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/nl.dat | Bin 215801 -> 0 bytes .../site-packages/babel/locale-data/nl_AW.dat | Bin 611 -> 0 bytes .../site-packages/babel/locale-data/nl_BE.dat | Bin 1835 -> 0 bytes .../site-packages/babel/locale-data/nl_BQ.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/nl_CW.dat | Bin 611 -> 0 bytes .../site-packages/babel/locale-data/nl_NL.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/nl_SR.dat | Bin 669 -> 0 bytes .../site-packages/babel/locale-data/nl_SX.dat | Bin 611 -> 0 bytes .../site-packages/babel/locale-data/nmg.dat | Bin 16189 -> 0 bytes .../babel/locale-data/nmg_CM.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/nn.dat | Bin 179884 -> 0 bytes .../site-packages/babel/locale-data/nn_NO.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/nnh.dat | Bin 6766 -> 0 bytes .../babel/locale-data/nnh_CM.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/nus.dat | Bin 9153 -> 0 bytes .../babel/locale-data/nus_SS.dat | Bin 590 -> 0 bytes .../site-packages/babel/locale-data/nyn.dat | Bin 16275 -> 0 bytes .../babel/locale-data/nyn_UG.dat | Bin 613 -> 0 bytes .../site-packages/babel/locale-data/om.dat | Bin 16588 -> 0 bytes .../site-packages/babel/locale-data/om_ET.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/om_KE.dat | Bin 1566 -> 0 bytes .../site-packages/babel/locale-data/or.dat | Bin 241213 -> 0 bytes .../site-packages/babel/locale-data/or_IN.dat | Bin 631 -> 0 bytes .../site-packages/babel/locale-data/os.dat | Bin 17627 -> 0 bytes .../site-packages/babel/locale-data/os_GE.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/os_RU.dat | Bin 668 -> 0 bytes .../site-packages/babel/locale-data/pa.dat | Bin 244684 -> 0 bytes .../babel/locale-data/pa_Arab.dat | Bin 3984 -> 0 bytes .../babel/locale-data/pa_Arab_PK.dat | Bin 608 -> 0 bytes .../babel/locale-data/pa_Guru.dat | Bin 1249 -> 0 bytes .../babel/locale-data/pa_Guru_IN.dat | Bin 631 -> 0 bytes .../site-packages/babel/locale-data/pcm.dat | Bin 174311 -> 0 bytes .../babel/locale-data/pcm_NG.dat | Bin 590 -> 0 bytes .../site-packages/babel/locale-data/pl.dat | Bin 236139 -> 0 bytes .../site-packages/babel/locale-data/pl_PL.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/prg.dat | Bin 20167 -> 0 bytes .../babel/locale-data/prg_001.dat | Bin 1567 -> 0 bytes .../site-packages/babel/locale-data/ps.dat | Bin 180248 -> 0 bytes .../site-packages/babel/locale-data/ps_AF.dat | Bin 651 -> 0 bytes .../site-packages/babel/locale-data/ps_PK.dat | Bin 7954 -> 0 bytes .../site-packages/babel/locale-data/pt.dat | Bin 195079 -> 0 bytes .../site-packages/babel/locale-data/pt_AO.dat | Bin 995 -> 0 bytes .../site-packages/babel/locale-data/pt_BR.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/pt_CH.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/pt_CV.dat | Bin 1015 -> 0 bytes .../site-packages/babel/locale-data/pt_GQ.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/pt_GW.dat | Bin 975 -> 0 bytes .../site-packages/babel/locale-data/pt_LU.dat | Bin 645 -> 0 bytes .../site-packages/babel/locale-data/pt_MO.dat | Bin 1592 -> 0 bytes .../site-packages/babel/locale-data/pt_MZ.dat | Bin 1015 -> 0 bytes .../site-packages/babel/locale-data/pt_PT.dat | Bin 99144 -> 0 bytes .../site-packages/babel/locale-data/pt_ST.dat | Bin 995 -> 0 bytes .../site-packages/babel/locale-data/pt_TL.dat | Bin 975 -> 0 bytes .../site-packages/babel/locale-data/qu.dat | Bin 107964 -> 0 bytes .../site-packages/babel/locale-data/qu_BO.dat | Bin 836 -> 0 bytes .../site-packages/babel/locale-data/qu_EC.dat | Bin 810 -> 0 bytes .../site-packages/babel/locale-data/qu_PE.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/rm.dat | Bin 67934 -> 0 bytes .../site-packages/babel/locale-data/rm_CH.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/rn.dat | Bin 16781 -> 0 bytes .../site-packages/babel/locale-data/rn_BI.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/ro.dat | Bin 225782 -> 0 bytes .../site-packages/babel/locale-data/ro_MD.dat | Bin 3215 -> 0 bytes .../site-packages/babel/locale-data/ro_RO.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/rof.dat | Bin 16170 -> 0 bytes .../babel/locale-data/rof_TZ.dat | Bin 590 -> 0 bytes .../site-packages/babel/locale-data/root.dat | Bin 42432 -> 0 bytes .../site-packages/babel/locale-data/ru.dat | Bin 305212 -> 0 bytes .../site-packages/babel/locale-data/ru_BY.dat | Bin 649 -> 0 bytes .../site-packages/babel/locale-data/ru_KG.dat | Bin 632 -> 0 bytes .../site-packages/babel/locale-data/ru_KZ.dat | Bin 629 -> 0 bytes .../site-packages/babel/locale-data/ru_MD.dat | Bin 627 -> 0 bytes .../site-packages/babel/locale-data/ru_RU.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/ru_UA.dat | Bin 1747 -> 0 bytes .../site-packages/babel/locale-data/rw.dat | Bin 16215 -> 0 bytes .../site-packages/babel/locale-data/rw_RW.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/rwk.dat | Bin 16057 -> 0 bytes .../babel/locale-data/rwk_TZ.dat | Bin 590 -> 0 bytes .../site-packages/babel/locale-data/sah.dat | Bin 48180 -> 0 bytes .../babel/locale-data/sah_RU.dat | Bin 627 -> 0 bytes .../site-packages/babel/locale-data/saq.dat | Bin 16455 -> 0 bytes .../babel/locale-data/saq_KE.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/sat.dat | Bin 12597 -> 0 bytes .../babel/locale-data/sat_Olck.dat | Bin 878 -> 0 bytes .../babel/locale-data/sat_Olck_IN.dat | Bin 632 -> 0 bytes .../site-packages/babel/locale-data/sbp.dat | Bin 16479 -> 0 bytes .../babel/locale-data/sbp_TZ.dat | Bin 590 -> 0 bytes .../site-packages/babel/locale-data/sd.dat | Bin 194219 -> 0 bytes .../babel/locale-data/sd_Arab.dat | Bin 852 -> 0 bytes .../babel/locale-data/sd_Arab_PK.dat | Bin 608 -> 0 bytes .../babel/locale-data/sd_Deva.dat | Bin 15216 -> 0 bytes .../babel/locale-data/sd_Deva_IN.dat | Bin 631 -> 0 bytes .../site-packages/babel/locale-data/se.dat | Bin 72353 -> 0 bytes .../site-packages/babel/locale-data/se_FI.dat | Bin 46574 -> 0 bytes .../site-packages/babel/locale-data/se_NO.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/se_SE.dat | Bin 667 -> 0 bytes .../site-packages/babel/locale-data/seh.dat | Bin 15910 -> 0 bytes .../babel/locale-data/seh_MZ.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/ses.dat | Bin 15998 -> 0 bytes .../babel/locale-data/ses_ML.dat | Bin 590 -> 0 bytes .../site-packages/babel/locale-data/sg.dat | Bin 16635 -> 0 bytes .../site-packages/babel/locale-data/sg_CF.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/shi.dat | Bin 22036 -> 0 bytes .../babel/locale-data/shi_Latn.dat | Bin 15618 -> 0 bytes .../babel/locale-data/shi_Latn_MA.dat | Bin 590 -> 0 bytes .../babel/locale-data/shi_Tfng.dat | Bin 947 -> 0 bytes .../babel/locale-data/shi_Tfng_MA.dat | Bin 590 -> 0 bytes .../site-packages/babel/locale-data/si.dat | Bin 244850 -> 0 bytes .../site-packages/babel/locale-data/si_LK.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/sk.dat | Bin 256860 -> 0 bytes .../site-packages/babel/locale-data/sk_SK.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/sl.dat | Bin 241874 -> 0 bytes .../site-packages/babel/locale-data/sl_SI.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/smn.dat | Bin 42674 -> 0 bytes .../babel/locale-data/smn_FI.dat | Bin 627 -> 0 bytes .../site-packages/babel/locale-data/sn.dat | Bin 23252 -> 0 bytes .../site-packages/babel/locale-data/sn_ZW.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/so.dat | Bin 153105 -> 0 bytes .../site-packages/babel/locale-data/so_DJ.dat | Bin 629 -> 0 bytes .../site-packages/babel/locale-data/so_ET.dat | Bin 628 -> 0 bytes .../site-packages/babel/locale-data/so_KE.dat | Bin 1181 -> 0 bytes .../site-packages/babel/locale-data/so_SO.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/sq.dat | Bin 175659 -> 0 bytes .../site-packages/babel/locale-data/sq_AL.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/sq_MK.dat | Bin 1181 -> 0 bytes .../site-packages/babel/locale-data/sq_XK.dat | Bin 1160 -> 0 bytes .../site-packages/babel/locale-data/sr.dat | Bin 277763 -> 0 bytes .../babel/locale-data/sr_Cyrl.dat | Bin 1957 -> 0 bytes .../babel/locale-data/sr_Cyrl_BA.dat | Bin 4710 -> 0 bytes .../babel/locale-data/sr_Cyrl_ME.dat | Bin 3873 -> 0 bytes .../babel/locale-data/sr_Cyrl_RS.dat | Bin 608 -> 0 bytes .../babel/locale-data/sr_Cyrl_XK.dat | Bin 2756 -> 0 bytes .../babel/locale-data/sr_Latn.dat | Bin 230252 -> 0 bytes .../babel/locale-data/sr_Latn_BA.dat | Bin 3994 -> 0 bytes .../babel/locale-data/sr_Latn_ME.dat | Bin 3074 -> 0 bytes .../babel/locale-data/sr_Latn_RS.dat | Bin 608 -> 0 bytes .../babel/locale-data/sr_Latn_XK.dat | Bin 2194 -> 0 bytes .../site-packages/babel/locale-data/su.dat | Bin 12452 -> 0 bytes .../babel/locale-data/su_Latn.dat | Bin 718 -> 0 bytes .../babel/locale-data/su_Latn_ID.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/sv.dat | Bin 221078 -> 0 bytes .../site-packages/babel/locale-data/sv_AX.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/sv_FI.dat | Bin 2584 -> 0 bytes .../site-packages/babel/locale-data/sv_SE.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/sw.dat | Bin 179207 -> 0 bytes .../site-packages/babel/locale-data/sw_CD.dat | Bin 2660 -> 0 bytes .../site-packages/babel/locale-data/sw_KE.dat | Bin 35934 -> 0 bytes .../site-packages/babel/locale-data/sw_TZ.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/sw_UG.dat | Bin 633 -> 0 bytes .../site-packages/babel/locale-data/ta.dat | Bin 263466 -> 0 bytes .../site-packages/babel/locale-data/ta_IN.dat | Bin 631 -> 0 bytes .../site-packages/babel/locale-data/ta_LK.dat | Bin 1181 -> 0 bytes .../site-packages/babel/locale-data/ta_MY.dat | Bin 1238 -> 0 bytes .../site-packages/babel/locale-data/ta_SG.dat | Bin 1257 -> 0 bytes .../site-packages/babel/locale-data/te.dat | Bin 262280 -> 0 bytes .../site-packages/babel/locale-data/te_IN.dat | Bin 631 -> 0 bytes .../site-packages/babel/locale-data/teo.dat | Bin 16671 -> 0 bytes .../babel/locale-data/teo_KE.dat | Bin 630 -> 0 bytes .../babel/locale-data/teo_UG.dat | Bin 613 -> 0 bytes .../site-packages/babel/locale-data/tg.dat | Bin 36303 -> 0 bytes .../site-packages/babel/locale-data/tg_TJ.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/th.dat | Bin 235280 -> 0 bytes .../site-packages/babel/locale-data/th_TH.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/ti.dat | Bin 73036 -> 0 bytes .../site-packages/babel/locale-data/ti_ER.dat | Bin 958 -> 0 bytes .../site-packages/babel/locale-data/ti_ET.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/tk.dat | Bin 167927 -> 0 bytes .../site-packages/babel/locale-data/tk_TM.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/to.dat | Bin 166458 -> 0 bytes .../site-packages/babel/locale-data/to_TO.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/tr.dat | Bin 209226 -> 0 bytes .../site-packages/babel/locale-data/tr_CY.dat | Bin 1184 -> 0 bytes .../site-packages/babel/locale-data/tr_TR.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/tt.dat | Bin 33588 -> 0 bytes .../site-packages/babel/locale-data/tt_RU.dat | Bin 626 -> 0 bytes .../site-packages/babel/locale-data/twq.dat | Bin 16171 -> 0 bytes .../babel/locale-data/twq_NE.dat | Bin 590 -> 0 bytes .../site-packages/babel/locale-data/tzm.dat | Bin 16149 -> 0 bytes .../babel/locale-data/tzm_MA.dat | Bin 590 -> 0 bytes .../site-packages/babel/locale-data/ug.dat | Bin 128534 -> 0 bytes .../site-packages/babel/locale-data/ug_CN.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/uk.dat | Bin 315834 -> 0 bytes .../site-packages/babel/locale-data/uk_UA.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/ur.dat | Bin 197918 -> 0 bytes .../site-packages/babel/locale-data/ur_IN.dat | Bin 12595 -> 0 bytes .../site-packages/babel/locale-data/ur_PK.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/uz.dat | Bin 173590 -> 0 bytes .../babel/locale-data/uz_Arab.dat | Bin 4111 -> 0 bytes .../babel/locale-data/uz_Arab_AF.dat | Bin 651 -> 0 bytes .../babel/locale-data/uz_Cyrl.dat | Bin 98924 -> 0 bytes .../babel/locale-data/uz_Cyrl_UZ.dat | Bin 608 -> 0 bytes .../babel/locale-data/uz_Latn.dat | Bin 1265 -> 0 bytes .../babel/locale-data/uz_Latn_UZ.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/vai.dat | Bin 18988 -> 0 bytes .../babel/locale-data/vai_Latn.dat | Bin 14989 -> 0 bytes .../babel/locale-data/vai_Latn_LR.dat | Bin 590 -> 0 bytes .../babel/locale-data/vai_Vaii.dat | Bin 666 -> 0 bytes .../babel/locale-data/vai_Vaii_LR.dat | Bin 590 -> 0 bytes .../site-packages/babel/locale-data/vi.dat | Bin 162325 -> 0 bytes .../site-packages/babel/locale-data/vi_VN.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/vo.dat | Bin 5225 -> 0 bytes .../babel/locale-data/vo_001.dat | Bin 823 -> 0 bytes .../site-packages/babel/locale-data/vun.dat | Bin 16067 -> 0 bytes .../babel/locale-data/vun_TZ.dat | Bin 590 -> 0 bytes .../site-packages/babel/locale-data/wae.dat | Bin 28660 -> 0 bytes .../babel/locale-data/wae_CH.dat | Bin 627 -> 0 bytes .../site-packages/babel/locale-data/wo.dat | Bin 25698 -> 0 bytes .../site-packages/babel/locale-data/wo_SN.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/xh.dat | Bin 15055 -> 0 bytes .../site-packages/babel/locale-data/xh_ZA.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/xog.dat | Bin 16555 -> 0 bytes .../babel/locale-data/xog_UG.dat | Bin 613 -> 0 bytes .../site-packages/babel/locale-data/yav.dat | Bin 15302 -> 0 bytes .../babel/locale-data/yav_CM.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/yi.dat | Bin 30314 -> 0 bytes .../babel/locale-data/yi_001.dat | Bin 885 -> 0 bytes .../site-packages/babel/locale-data/yo.dat | Bin 68429 -> 0 bytes .../site-packages/babel/locale-data/yo_BJ.dat | Bin 34481 -> 0 bytes .../site-packages/babel/locale-data/yo_NG.dat | Bin 589 -> 0 bytes .../site-packages/babel/locale-data/yue.dat | Bin 183333 -> 0 bytes .../babel/locale-data/yue_Hans.dat | Bin 183225 -> 0 bytes .../babel/locale-data/yue_Hans_CN.dat | Bin 609 -> 0 bytes .../babel/locale-data/yue_Hant.dat | Bin 1279 -> 0 bytes .../babel/locale-data/yue_Hant_HK.dat | Bin 609 -> 0 bytes .../site-packages/babel/locale-data/zgh.dat | Bin 30498 -> 0 bytes .../babel/locale-data/zgh_MA.dat | Bin 590 -> 0 bytes .../site-packages/babel/locale-data/zh.dat | Bin 181044 -> 0 bytes .../babel/locale-data/zh_Hans.dat | Bin 1278 -> 0 bytes .../babel/locale-data/zh_Hans_CN.dat | Bin 608 -> 0 bytes .../babel/locale-data/zh_Hans_HK.dat | Bin 3138 -> 0 bytes .../babel/locale-data/zh_Hans_MO.dat | Bin 3270 -> 0 bytes .../babel/locale-data/zh_Hans_SG.dat | Bin 3466 -> 0 bytes .../babel/locale-data/zh_Hant.dat | Bin 185029 -> 0 bytes .../babel/locale-data/zh_Hant_HK.dat | Bin 56895 -> 0 bytes .../babel/locale-data/zh_Hant_MO.dat | Bin 630 -> 0 bytes .../babel/locale-data/zh_Hant_TW.dat | Bin 608 -> 0 bytes .../site-packages/babel/locale-data/zu.dat | Bin 167684 -> 0 bytes .../site-packages/babel/locale-data/zu_ZA.dat | Bin 608 -> 0 bytes .../Lib/site-packages/babel/localedata.py | 258 - .../site-packages/babel/localtime/__init__.py | 76 - .../__pycache__/__init__.cpython-39.pyc | Bin 2223 -> 0 bytes .../__pycache__/_unix.cpython-39.pyc | Bin 2929 -> 0 bytes .../__pycache__/_win32.cpython-39.pyc | Bin 1868 -> 0 bytes .../site-packages/babel/localtime/_unix.py | 128 - .../site-packages/babel/localtime/_win32.py | 96 - .../site-packages/babel/messages/__init__.py | 12 - .../__pycache__/__init__.cpython-39.pyc | Bin 416 -> 0 bytes .../__pycache__/catalog.cpython-39.pyc | Bin 27426 -> 0 bytes .../__pycache__/checkers.cpython-39.pyc | Bin 4697 -> 0 bytes .../__pycache__/extract.cpython-39.pyc | Bin 18724 -> 0 bytes .../__pycache__/frontend.cpython-39.pyc | Bin 26938 -> 0 bytes .../__pycache__/jslexer.cpython-39.pyc | Bin 4261 -> 0 bytes .../__pycache__/mofile.cpython-39.pyc | Bin 5370 -> 0 bytes .../__pycache__/plurals.cpython-39.pyc | Bin 4026 -> 0 bytes .../__pycache__/pofile.cpython-39.pyc | Bin 18866 -> 0 bytes .../site-packages/babel/messages/catalog.py | 851 - .../site-packages/babel/messages/checkers.py | 173 - .../site-packages/babel/messages/extract.py | 645 - .../site-packages/babel/messages/frontend.py | 1041 - .../site-packages/babel/messages/jslexer.py | 185 - .../site-packages/babel/messages/mofile.py | 210 - .../site-packages/babel/messages/plurals.py | 257 - .../site-packages/babel/messages/pofile.py | 645 - .../.venv/Lib/site-packages/babel/numbers.py | 1104 - .../.venv/Lib/site-packages/babel/plural.py | 632 - .../.venv/Lib/site-packages/babel/support.py | 617 - .../.venv/Lib/site-packages/babel/units.py | 279 - .../.venv/Lib/site-packages/babel/util.py | 262 - .../bs4/__pycache__/__init__.cpython-39.pyc | Bin 23178 -> 23177 bytes .../bs4/__pycache__/dammit.cpython-39.pyc | Bin 71364 -> 71363 bytes .../bs4/__pycache__/diagnose.cpython-39.pyc | Bin 8455 -> 8454 bytes .../bs4/__pycache__/element.cpython-39.pyc | Bin 65426 -> 65425 bytes .../bs4/__pycache__/formatter.cpython-39.pyc | Bin 6168 -> 6167 bytes .../bs4/__pycache__/testing.cpython-39.pyc | Bin 44333 -> 44332 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 15400 -> 15399 bytes .../__pycache__/_html5lib.cpython-39.pyc | Bin 12490 -> 12489 bytes .../__pycache__/_htmlparser.cpython-39.pyc | Bin 13063 -> 13062 bytes .../builder/__pycache__/_lxml.cpython-39.pyc | Bin 9495 -> 9494 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 252 -> 251 bytes .../__pycache__/__main__.cpython-39.pyc | Bin 417 -> 416 bytes .../certifi/__pycache__/core.cpython-39.pyc | Bin 1143 -> 1142 bytes .../chardet-4.0.0.dist-info/INSTALLER | 1 - .../chardet-4.0.0.dist-info/LICENSE | 504 - .../chardet-4.0.0.dist-info/METADATA | 101 - .../chardet-4.0.0.dist-info/RECORD | 94 - .../chardet-4.0.0.dist-info/WHEEL | 6 - .../chardet-4.0.0.dist-info/entry_points.txt | 3 - .../chardet-4.0.0.dist-info/top_level.txt | 1 - .../Lib/site-packages/chardet/__init__.py | 83 - .../__pycache__/__init__.cpython-39.pyc | Bin 1876 -> 0 bytes .../__pycache__/big5freq.cpython-39.pyc | Bin 27155 -> 0 bytes .../__pycache__/big5prober.cpython-39.pyc | Bin 1110 -> 0 bytes .../chardistribution.cpython-39.pyc | Bin 6196 -> 0 bytes .../charsetgroupprober.cpython-39.pyc | Bin 2237 -> 0 bytes .../__pycache__/charsetprober.cpython-39.pyc | Bin 3459 -> 0 bytes .../codingstatemachine.cpython-39.pyc | Bin 2886 -> 0 bytes .../chardet/__pycache__/compat.cpython-39.pyc | Bin 375 -> 0 bytes .../__pycache__/cp949prober.cpython-39.pyc | Bin 1117 -> 0 bytes .../chardet/__pycache__/enums.cpython-39.pyc | Bin 2624 -> 0 bytes .../__pycache__/escprober.cpython-39.pyc | Bin 2609 -> 0 bytes .../chardet/__pycache__/escsm.cpython-39.pyc | Bin 7058 -> 0 bytes .../__pycache__/eucjpprober.cpython-39.pyc | Bin 2423 -> 0 bytes .../__pycache__/euckrfreq.cpython-39.pyc | Bin 12039 -> 0 bytes .../__pycache__/euckrprober.cpython-39.pyc | Bin 1118 -> 0 bytes .../__pycache__/euctwfreq.cpython-39.pyc | Bin 27159 -> 0 bytes .../__pycache__/euctwprober.cpython-39.pyc | Bin 1118 -> 0 bytes .../__pycache__/gb2312freq.cpython-39.pyc | Bin 19083 -> 0 bytes .../__pycache__/gb2312prober.cpython-39.pyc | Bin 1126 -> 0 bytes .../__pycache__/hebrewprober.cpython-39.pyc | Bin 2995 -> 0 bytes .../__pycache__/jisfreq.cpython-39.pyc | Bin 22111 -> 0 bytes .../chardet/__pycache__/jpcntx.cpython-39.pyc | Bin 37584 -> 0 bytes .../langbulgarianmodel.cpython-39.pyc | Bin 21774 -> 0 bytes .../__pycache__/langgreekmodel.cpython-39.pyc | Bin 20450 -> 0 bytes .../langhebrewmodel.cpython-39.pyc | Bin 20518 -> 0 bytes .../langhungarianmodel.cpython-39.pyc | Bin 21719 -> 0 bytes .../langrussianmodel.cpython-39.pyc | Bin 26322 -> 0 bytes .../__pycache__/langthaimodel.cpython-39.pyc | Bin 20694 -> 0 bytes .../langturkishmodel.cpython-39.pyc | Bin 20534 -> 0 bytes .../__pycache__/latin1prober.cpython-39.pyc | Bin 2931 -> 0 bytes .../mbcharsetprober.cpython-39.pyc | Bin 2238 -> 0 bytes .../mbcsgroupprober.cpython-39.pyc | Bin 1107 -> 0 bytes .../chardet/__pycache__/mbcssm.cpython-39.pyc | Bin 15694 -> 0 bytes .../sbcharsetprober.cpython-39.pyc | Bin 3091 -> 0 bytes .../sbcsgroupprober.cpython-39.pyc | Bin 1676 -> 0 bytes .../__pycache__/sjisprober.cpython-39.pyc | Bin 2459 -> 0 bytes .../universaldetector.cpython-39.pyc | Bin 5807 -> 0 bytes .../__pycache__/utf8prober.cpython-39.pyc | Bin 1968 -> 0 bytes .../__pycache__/version.cpython-39.pyc | Bin 415 -> 0 bytes .../Lib/site-packages/chardet/big5freq.py | 386 - .../Lib/site-packages/chardet/big5prober.py | 47 - .../site-packages/chardet/chardistribution.py | 233 - .../chardet/charsetgroupprober.py | 107 - .../site-packages/chardet/charsetprober.py | 145 - .../Lib/site-packages/chardet/cli/__init__.py | 1 - .../cli/__pycache__/__init__.cpython-39.pyc | Bin 172 -> 0 bytes .../cli/__pycache__/chardetect.cpython-39.pyc | Bin 2630 -> 0 bytes .../site-packages/chardet/cli/chardetect.py | 84 - .../chardet/codingstatemachine.py | 88 - .../.venv/Lib/site-packages/chardet/compat.py | 36 - .../Lib/site-packages/chardet/cp949prober.py | 49 - .../.venv/Lib/site-packages/chardet/enums.py | 76 - .../Lib/site-packages/chardet/escprober.py | 101 - .../.venv/Lib/site-packages/chardet/escsm.py | 246 - .../Lib/site-packages/chardet/eucjpprober.py | 92 - .../Lib/site-packages/chardet/euckrfreq.py | 195 - .../Lib/site-packages/chardet/euckrprober.py | 47 - .../Lib/site-packages/chardet/euctwfreq.py | 387 - .../Lib/site-packages/chardet/euctwprober.py | 46 - .../Lib/site-packages/chardet/gb2312freq.py | 283 - .../Lib/site-packages/chardet/gb2312prober.py | 46 - .../Lib/site-packages/chardet/hebrewprober.py | 292 - .../Lib/site-packages/chardet/jisfreq.py | 325 - .../.venv/Lib/site-packages/chardet/jpcntx.py | 233 - .../chardet/langbulgarianmodel.py | 4650 --- .../site-packages/chardet/langgreekmodel.py | 4398 --- .../site-packages/chardet/langhebrewmodel.py | 4383 --- .../chardet/langhungarianmodel.py | 4650 --- .../site-packages/chardet/langrussianmodel.py | 5718 ---- .../site-packages/chardet/langthaimodel.py | 4383 --- .../site-packages/chardet/langturkishmodel.py | 4383 --- .../Lib/site-packages/chardet/latin1prober.py | 145 - .../site-packages/chardet/mbcharsetprober.py | 91 - .../site-packages/chardet/mbcsgroupprober.py | 54 - .../.venv/Lib/site-packages/chardet/mbcssm.py | 572 - .../chardet/metadata/__init__.py | 0 .../__pycache__/__init__.cpython-39.pyc | Bin 177 -> 0 bytes .../__pycache__/languages.cpython-39.pyc | Bin 7908 -> 0 bytes .../chardet/metadata/languages.py | 310 - .../site-packages/chardet/sbcharsetprober.py | 145 - .../site-packages/chardet/sbcsgroupprober.py | 83 - .../Lib/site-packages/chardet/sjisprober.py | 92 - .../chardet/universaldetector.py | 286 - .../Lib/site-packages/chardet/utf8prober.py | 82 - .../Lib/site-packages/chardet/version.py | 9 - .../charset_normalizer-2.0.4.dist-info/RECORD | 2 +- .../__pycache__/__init__.cpython-39.pyc | Bin 1880 -> 1879 bytes .../__pycache__/api.cpython-39.pyc | Bin 9650 -> 9649 bytes .../__pycache__/cd.cpython-39.pyc | Bin 7143 -> 7142 bytes .../__pycache__/constant.cpython-39.pyc | Bin 12950 -> 12949 bytes .../__pycache__/legacy.cpython-39.pyc | Bin 1444 -> 1443 bytes .../__pycache__/md.cpython-39.pyc | Bin 14073 -> 14072 bytes .../__pycache__/models.cpython-39.pyc | Bin 12460 -> 12459 bytes .../__pycache__/utils.cpython-39.pyc | Bin 7217 -> 7216 bytes .../__pycache__/version.cpython-39.pyc | Bin 263 -> 262 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 7272 -> 7271 bytes .../cli/__pycache__/__init__.cpython-39.pyc | Bin 183 -> 182 bytes .../cli/__pycache__/normalizer.cpython-39.pyc | Bin 5853 -> 5852 bytes .../idna/__pycache__/__init__.cpython-39.pyc | Bin 824 -> 823 bytes .../idna/__pycache__/codec.cpython-39.pyc | Bin 2855 -> 2854 bytes .../idna/__pycache__/compat.cpython-39.pyc | Bin 661 -> 660 bytes .../idna/__pycache__/core.cpython-39.pyc | Bin 9129 -> 9128 bytes .../idna/__pycache__/idnadata.cpython-39.pyc | Bin 22115 -> 22114 bytes .../idna/__pycache__/intranges.cpython-39.pyc | Bin 1837 -> 1836 bytes .../__pycache__/package_data.cpython-39.pyc | Bin 188 -> 187 bytes .../idna/__pycache__/uts46data.cpython-39.pyc | Bin 146148 -> 146147 bytes .../multidict-5.1.0.dist-info/INSTALLER | 1 - .../multidict-5.1.0.dist-info/LICENSE | 201 - .../multidict-5.1.0.dist-info/METADATA | 130 - .../multidict-5.1.0.dist-info/RECORD | 26 - .../multidict-5.1.0.dist-info/WHEEL | 5 - .../multidict-5.1.0.dist-info/top_level.txt | 1 - .../Lib/site-packages/multidict/__init__.py | 48 - .../Lib/site-packages/multidict/__init__.pyi | 152 - .../__pycache__/__init__.cpython-39.pyc | Bin 852 -> 0 bytes .../multidict/__pycache__/_abc.cpython-39.pyc | Bin 1979 -> 0 bytes .../__pycache__/_compat.cpython-39.pyc | Bin 481 -> 0 bytes .../_multidict_base.cpython-39.pyc | Bin 3445 -> 0 bytes .../__pycache__/_multidict_py.cpython-39.pyc | Bin 16505 -> 0 bytes .../.venv/Lib/site-packages/multidict/_abc.py | 48 - .../Lib/site-packages/multidict/_compat.py | 14 - .../Lib/site-packages/multidict/_multidict.c | 1646 -- .../multidict/_multidict.cp39-win_amd64.pyd | Bin 44544 -> 0 bytes .../multidict/_multidict_base.py | 144 - .../site-packages/multidict/_multidict_py.py | 515 - .../site-packages/multidict/_multilib/defs.h | 22 - .../site-packages/multidict/_multilib/dict.h | 24 - .../site-packages/multidict/_multilib/istr.h | 85 - .../site-packages/multidict/_multilib/iter.h | 238 - .../multidict/_multilib/pair_list.h | 1244 - .../site-packages/multidict/_multilib/views.h | 464 - .../Lib/site-packages/multidict/py.typed | 1 - .../site-packages/pip-21.2.4.dist-info/RECORD | 6 +- .../pip/__pycache__/__init__.cpython-39.pyc | Bin 620 -> 619 bytes .../pip/__pycache__/__main__.cpython-39.pyc | Bin 576 -> 575 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 741 -> 740 bytes .../__pycache__/build_env.cpython-39.pyc | Bin 9080 -> 9079 bytes .../__pycache__/cache.cpython-39.pyc | Bin 7831 -> 7830 bytes .../__pycache__/configuration.cpython-39.pyc | Bin 10683 -> 10682 bytes .../__pycache__/exceptions.cpython-39.pyc | Bin 15632 -> 15631 bytes .../_internal/__pycache__/main.cpython-39.pyc | Bin 565 -> 564 bytes .../__pycache__/pyproject.cpython-39.pyc | Bin 3444 -> 3443 bytes .../self_outdated_check.cpython-39.pyc | Bin 4328 -> 4327 bytes .../__pycache__/wheel_builder.cpython-39.pyc | Bin 8266 -> 8265 bytes .../cli/__pycache__/__init__.cpython-39.pyc | Bin 261 -> 260 bytes .../__pycache__/autocompletion.cpython-39.pyc | Bin 5118 -> 5117 bytes .../__pycache__/base_command.cpython-39.pyc | Bin 6022 -> 6021 bytes .../cli/__pycache__/cmdoptions.cpython-39.pyc | Bin 22478 -> 22477 bytes .../command_context.cpython-39.pyc | Bin 1276 -> 1275 bytes .../cli/__pycache__/main.cpython-39.pyc | Bin 1351 -> 1350 bytes .../__pycache__/main_parser.cpython-39.pyc | Bin 2148 -> 2147 bytes .../cli/__pycache__/parser.cpython-39.pyc | Bin 9932 -> 9931 bytes .../__pycache__/progress_bars.cpython-39.pyc | Bin 7608 -> 7607 bytes .../__pycache__/req_command.cpython-39.pyc | Bin 12043 -> 12042 bytes .../cli/__pycache__/spinners.cpython-39.pyc | Bin 4931 -> 4930 bytes .../__pycache__/status_codes.cpython-39.pyc | Bin 340 -> 339 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 3094 -> 3093 bytes .../commands/__pycache__/cache.cpython-39.pyc | Bin 6027 -> 6026 bytes .../commands/__pycache__/check.cpython-39.pyc | Bin 1556 -> 1555 bytes .../__pycache__/completion.cpython-39.pyc | Bin 3125 -> 3124 bytes .../__pycache__/configuration.cpython-39.pyc | Bin 8332 -> 8331 bytes .../commands/__pycache__/debug.cpython-39.pyc | Bin 6653 -> 6652 bytes .../__pycache__/download.cpython-39.pyc | Bin 3976 -> 3975 bytes .../__pycache__/freeze.cpython-39.pyc | Bin 2620 -> 2619 bytes .../commands/__pycache__/hash.cpython-39.pyc | Bin 2118 -> 2117 bytes .../commands/__pycache__/help.cpython-39.pyc | Bin 1292 -> 1291 bytes .../commands/__pycache__/index.cpython-39.pyc | Bin 4511 -> 4510 bytes .../__pycache__/install.cpython-39.pyc | Bin 17645 -> 17644 bytes .../commands/__pycache__/list.cpython-39.pyc | Bin 9947 -> 9946 bytes .../__pycache__/search.cpython-39.pyc | Bin 5304 -> 5303 bytes .../commands/__pycache__/show.cpython-39.pyc | Bin 8367 -> 8366 bytes .../__pycache__/uninstall.cpython-39.pyc | Bin 3086 -> 3085 bytes .../commands/__pycache__/wheel.cpython-39.pyc | Bin 4849 -> 4848 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 784 -> 783 bytes .../__pycache__/base.cpython-39.pyc | Bin 1911 -> 1910 bytes .../__pycache__/installed.cpython-39.pyc | Bin 1230 -> 1229 bytes .../__pycache__/sdist.cpython-39.pyc | Bin 3564 -> 3563 bytes .../__pycache__/wheel.cpython-39.pyc | Bin 1565 -> 1564 bytes .../index/__pycache__/__init__.cpython-39.pyc | Bin 215 -> 214 bytes .../__pycache__/collector.cpython-39.pyc | Bin 15939 -> 15938 bytes .../__pycache__/package_finder.cpython-39.pyc | Bin 28093 -> 28092 bytes .../index/__pycache__/sources.cpython-39.pyc | Bin 7180 -> 7179 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 10041 -> 10040 bytes .../__pycache__/_distutils.cpython-39.pyc | Bin 4654 -> 4653 bytes .../__pycache__/_sysconfig.cpython-39.pyc | Bin 6245 -> 6244 bytes .../locations/__pycache__/base.cpython-39.pyc | Bin 1523 -> 1522 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 1836 -> 1835 bytes .../metadata/__pycache__/base.cpython-39.pyc | Bin 9449 -> 9448 bytes .../__pycache__/pkg_resources.cpython-39.pyc | Bin 6150 -> 6149 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 249 -> 248 bytes .../__pycache__/candidate.cpython-39.pyc | Bin 1429 -> 1428 bytes .../__pycache__/direct_url.cpython-39.pyc | Bin 7044 -> 7043 bytes .../__pycache__/format_control.cpython-39.pyc | Bin 2716 -> 2715 bytes .../models/__pycache__/index.cpython-39.pyc | Bin 1228 -> 1227 bytes .../models/__pycache__/link.cpython-39.pyc | Bin 10248 -> 10247 bytes .../models/__pycache__/scheme.cpython-39.pyc | Bin 995 -> 994 bytes .../__pycache__/search_scope.cpython-39.pyc | Bin 3468 -> 3467 bytes .../selection_prefs.cpython-39.pyc | Bin 1651 -> 1650 bytes .../__pycache__/target_python.cpython-39.pyc | Bin 3401 -> 3400 bytes .../models/__pycache__/wheel.cpython-39.pyc | Bin 4329 -> 4328 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 237 -> 236 bytes .../network/__pycache__/auth.cpython-39.pyc | Bin 7434 -> 7433 bytes .../network/__pycache__/cache.cpython-39.pyc | Bin 2879 -> 2878 bytes .../__pycache__/download.cpython-39.pyc | Bin 5468 -> 5467 bytes .../__pycache__/lazy_wheel.cpython-39.pyc | Bin 8334 -> 8333 bytes .../__pycache__/session.cpython-39.pyc | Bin 10533 -> 10532 bytes .../network/__pycache__/utils.cpython-39.pyc | Bin 1415 -> 1414 bytes .../network/__pycache__/xmlrpc.cpython-39.pyc | Bin 2036 -> 2035 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 185 -> 184 bytes .../__pycache__/check.cpython-39.pyc | Bin 3930 -> 3929 bytes .../__pycache__/freeze.cpython-39.pyc | Bin 6271 -> 6270 bytes .../__pycache__/prepare.cpython-39.pyc | Bin 14211 -> 14210 bytes .../build/__pycache__/__init__.cpython-39.pyc | Bin 191 -> 190 bytes .../build/__pycache__/metadata.cpython-39.pyc | Bin 1137 -> 1136 bytes .../metadata_legacy.cpython-39.pyc | Bin 1911 -> 1910 bytes .../build/__pycache__/wheel.cpython-39.pyc | Bin 1116 -> 1115 bytes .../__pycache__/wheel_legacy.cpython-39.pyc | Bin 2510 -> 2509 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 249 -> 248 bytes .../editable_legacy.cpython-39.pyc | Bin 1292 -> 1291 bytes .../install/__pycache__/legacy.cpython-39.pyc | Bin 3453 -> 3452 bytes .../install/__pycache__/wheel.cpython-39.pyc | Bin 20292 -> 20291 bytes .../req/__pycache__/__init__.cpython-39.pyc | Bin 2548 -> 2547 bytes .../__pycache__/constructors.cpython-39.pyc | Bin 11664 -> 11663 bytes .../req/__pycache__/req_file.cpython-39.pyc | Bin 13358 -> 13357 bytes .../__pycache__/req_install.cpython-39.pyc | Bin 21359 -> 21358 bytes .../req/__pycache__/req_set.cpython-39.pyc | Bin 5885 -> 5884 bytes .../__pycache__/req_tracker.cpython-39.pyc | Bin 4268 -> 4267 bytes .../__pycache__/req_uninstall.cpython-39.pyc | Bin 18751 -> 18750 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 185 -> 184 bytes .../__pycache__/base.cpython-39.pyc | Bin 1015 -> 1014 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 192 -> 191 bytes .../__pycache__/resolver.cpython-39.pyc | Bin 11983 -> 11982 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 196 -> 195 bytes .../__pycache__/base.cpython-39.pyc | Bin 6732 -> 6731 bytes .../__pycache__/candidates.cpython-39.pyc | Bin 19023 -> 19022 bytes .../__pycache__/factory.cpython-39.pyc | Bin 18440 -> 18439 bytes .../found_candidates.cpython-39.pyc | Bin 4785 -> 4784 bytes .../__pycache__/provider.cpython-39.pyc | Bin 6742 -> 6741 bytes .../__pycache__/reporter.cpython-39.pyc | Bin 3315 -> 3314 bytes .../__pycache__/requirements.cpython-39.pyc | Bin 7566 -> 7565 bytes .../__pycache__/resolver.cpython-39.pyc | Bin 7761 -> 7760 bytes .../utils/__pycache__/__init__.cpython-39.pyc | Bin 180 -> 179 bytes .../utils/__pycache__/_log.cpython-39.pyc | Bin 1505 -> 1504 bytes .../utils/__pycache__/appdirs.cpython-39.pyc | Bin 1318 -> 1317 bytes .../utils/__pycache__/compat.cpython-39.pyc | Bin 1499 -> 1498 bytes .../compatibility_tags.cpython-39.pyc | Bin 4098 -> 4097 bytes .../utils/__pycache__/datetime.cpython-39.pyc | Bin 499 -> 498 bytes .../__pycache__/deprecation.cpython-39.pyc | Bin 2962 -> 2961 bytes .../direct_url_helpers.cpython-39.pyc | Bin 1809 -> 1808 bytes .../__pycache__/distutils_args.cpython-39.pyc | Bin 1085 -> 1084 bytes .../utils/__pycache__/encoding.cpython-39.pyc | Bin 1289 -> 1288 bytes .../__pycache__/entrypoints.cpython-39.pyc | Bin 1290 -> 1289 bytes .../__pycache__/filesystem.cpython-39.pyc | Bin 5126 -> 5125 bytes .../__pycache__/filetypes.cpython-39.pyc | Bin 792 -> 791 bytes .../utils/__pycache__/glibc.cpython-39.pyc | Bin 1602 -> 1601 bytes .../utils/__pycache__/hashes.cpython-39.pyc | Bin 4984 -> 4983 bytes .../inject_securetransport.cpython-39.pyc | Bin 953 -> 952 bytes .../utils/__pycache__/logging.cpython-39.pyc | Bin 9033 -> 9032 bytes .../utils/__pycache__/misc.cpython-39.pyc | Bin 21653 -> 21652 bytes .../utils/__pycache__/models.cpython-39.pyc | Bin 1884 -> 1883 bytes .../__pycache__/packaging.cpython-39.pyc | Bin 2508 -> 2507 bytes .../utils/__pycache__/parallel.cpython-39.pyc | Bin 3025 -> 3024 bytes .../__pycache__/pkg_resources.cpython-39.pyc | Bin 1706 -> 1705 bytes .../setuptools_build.cpython-39.pyc | Bin 2950 -> 2949 bytes .../__pycache__/subprocess.cpython-39.pyc | Bin 5687 -> 5686 bytes .../utils/__pycache__/temp_dir.cpython-39.pyc | Bin 6824 -> 6823 bytes .../__pycache__/unpacking.cpython-39.pyc | Bin 6468 -> 6467 bytes .../utils/__pycache__/urls.cpython-39.pyc | Bin 1524 -> 1523 bytes .../__pycache__/virtualenv.cpython-39.pyc | Bin 3203 -> 3202 bytes .../utils/__pycache__/wheel.cpython-39.pyc | Bin 5954 -> 5953 bytes .../vcs/__pycache__/__init__.cpython-39.pyc | Bin 503 -> 502 bytes .../vcs/__pycache__/bazaar.cpython-39.pyc | Bin 2989 -> 2988 bytes .../vcs/__pycache__/git.cpython-39.pyc | Bin 11704 -> 11703 bytes .../vcs/__pycache__/mercurial.cpython-39.pyc | Bin 4636 -> 4635 bytes .../vcs/__pycache__/subversion.cpython-39.pyc | Bin 7950 -> 7949 bytes .../__pycache__/versioncontrol.cpython-39.pyc | Bin 19473 -> 19472 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 2888 -> 2887 bytes .../__pycache__/appdirs.cpython-39.pyc | Bin 21388 -> 21387 bytes .../_vendor/__pycache__/distro.cpython-39.pyc | Bin 36867 -> 36866 bytes .../__pycache__/pyparsing.cpython-39.pyc | Bin 240424 -> 240423 bytes .../_vendor/__pycache__/six.cpython-39.pyc | Bin 27497 -> 27496 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 538 -> 537 bytes .../__pycache__/_cmd.cpython-39.pyc | Bin 1559 -> 1558 bytes .../__pycache__/adapter.cpython-39.pyc | Bin 3064 -> 3063 bytes .../__pycache__/cache.cpython-39.pyc | Bin 1811 -> 1810 bytes .../__pycache__/compat.cpython-39.pyc | Bin 735 -> 734 bytes .../__pycache__/controller.cpython-39.pyc | Bin 7752 -> 7751 bytes .../__pycache__/filewrapper.cpython-39.pyc | Bin 2160 -> 2159 bytes .../__pycache__/heuristics.cpython-39.pyc | Bin 4692 -> 4691 bytes .../__pycache__/serialize.cpython-39.pyc | Bin 4211 -> 4210 bytes .../__pycache__/wrapper.cpython-39.pyc | Bin 662 -> 661 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 282 -> 281 bytes .../__pycache__/file_cache.cpython-39.pyc | Bin 3298 -> 3297 bytes .../__pycache__/redis_cache.cpython-39.pyc | Bin 1554 -> 1553 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 264 -> 263 bytes .../__pycache__/__main__.cpython-39.pyc | Bin 441 -> 440 bytes .../certifi/__pycache__/core.cpython-39.pyc | Bin 1532 -> 1531 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 1888 -> 1887 bytes .../__pycache__/big5freq.cpython-39.pyc | Bin 27167 -> 27166 bytes .../__pycache__/big5prober.cpython-39.pyc | Bin 1122 -> 1121 bytes .../chardistribution.cpython-39.pyc | Bin 6208 -> 6207 bytes .../charsetgroupprober.cpython-39.pyc | Bin 2249 -> 2248 bytes .../__pycache__/charsetprober.cpython-39.pyc | Bin 3471 -> 3470 bytes .../codingstatemachine.cpython-39.pyc | Bin 2898 -> 2897 bytes .../chardet/__pycache__/compat.cpython-39.pyc | Bin 387 -> 386 bytes .../__pycache__/cp949prober.cpython-39.pyc | Bin 1129 -> 1128 bytes .../chardet/__pycache__/enums.cpython-39.pyc | Bin 2636 -> 2635 bytes .../__pycache__/escprober.cpython-39.pyc | Bin 2621 -> 2620 bytes .../chardet/__pycache__/escsm.cpython-39.pyc | Bin 7070 -> 7069 bytes .../__pycache__/eucjpprober.cpython-39.pyc | Bin 2435 -> 2434 bytes .../__pycache__/euckrfreq.cpython-39.pyc | Bin 12051 -> 12050 bytes .../__pycache__/euckrprober.cpython-39.pyc | Bin 1130 -> 1129 bytes .../__pycache__/euctwfreq.cpython-39.pyc | Bin 27171 -> 27170 bytes .../__pycache__/euctwprober.cpython-39.pyc | Bin 1130 -> 1129 bytes .../__pycache__/gb2312freq.cpython-39.pyc | Bin 19095 -> 19094 bytes .../__pycache__/gb2312prober.cpython-39.pyc | Bin 1138 -> 1137 bytes .../__pycache__/hebrewprober.cpython-39.pyc | Bin 3007 -> 3006 bytes .../__pycache__/jisfreq.cpython-39.pyc | Bin 22123 -> 22122 bytes .../chardet/__pycache__/jpcntx.cpython-39.pyc | Bin 37596 -> 37595 bytes .../langbulgarianmodel.cpython-39.pyc | Bin 21798 -> 21797 bytes .../__pycache__/langgreekmodel.cpython-39.pyc | Bin 20474 -> 20473 bytes .../langhebrewmodel.cpython-39.pyc | Bin 20542 -> 20541 bytes .../langhungarianmodel.cpython-39.pyc | Bin 21743 -> 21742 bytes .../langrussianmodel.cpython-39.pyc | Bin 26346 -> 26345 bytes .../__pycache__/langthaimodel.cpython-39.pyc | Bin 20718 -> 20717 bytes .../langturkishmodel.cpython-39.pyc | Bin 20558 -> 20557 bytes .../__pycache__/latin1prober.cpython-39.pyc | Bin 2943 -> 2942 bytes .../mbcharsetprober.cpython-39.pyc | Bin 2250 -> 2249 bytes .../mbcsgroupprober.cpython-39.pyc | Bin 1119 -> 1118 bytes .../chardet/__pycache__/mbcssm.cpython-39.pyc | Bin 15706 -> 15705 bytes .../sbcharsetprober.cpython-39.pyc | Bin 3103 -> 3102 bytes .../sbcsgroupprober.cpython-39.pyc | Bin 1688 -> 1687 bytes .../__pycache__/sjisprober.cpython-39.pyc | Bin 2471 -> 2470 bytes .../universaldetector.cpython-39.pyc | Bin 5819 -> 5818 bytes .../__pycache__/utf8prober.cpython-39.pyc | Bin 1980 -> 1979 bytes .../__pycache__/version.cpython-39.pyc | Bin 427 -> 426 bytes .../cli/__pycache__/__init__.cpython-39.pyc | Bin 184 -> 183 bytes .../cli/__pycache__/chardetect.cpython-39.pyc | Bin 2678 -> 2677 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 189 -> 188 bytes .../__pycache__/languages.cpython-39.pyc | Bin 7920 -> 7919 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 432 -> 431 bytes .../colorama/__pycache__/ansi.cpython-39.pyc | Bin 3217 -> 3216 bytes .../__pycache__/ansitowin32.cpython-39.pyc | Bin 7683 -> 7682 bytes .../__pycache__/initialise.cpython-39.pyc | Bin 1699 -> 1698 bytes .../colorama/__pycache__/win32.cpython-39.pyc | Bin 3931 -> 3930 bytes .../__pycache__/winterm.cpython-39.pyc | Bin 4653 -> 4652 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 1045 -> 1044 bytes .../distlib/__pycache__/compat.cpython-39.pyc | Bin 32147 -> 32146 bytes .../__pycache__/database.cpython-39.pyc | Bin 42469 -> 42468 bytes .../distlib/__pycache__/index.cpython-39.pyc | Bin 17278 -> 17277 bytes .../__pycache__/locators.cpython-39.pyc | Bin 38242 -> 38241 bytes .../__pycache__/manifest.cpython-39.pyc | Bin 10181 -> 10180 bytes .../__pycache__/markers.cpython-39.pyc | Bin 4425 -> 4424 bytes .../__pycache__/metadata.cpython-39.pyc | Bin 26576 -> 26575 bytes .../__pycache__/resources.cpython-39.pyc | Bin 10999 -> 10998 bytes .../__pycache__/scripts.cpython-39.pyc | Bin 11082 -> 11081 bytes .../distlib/__pycache__/util.cpython-39.pyc | Bin 52584 -> 52583 bytes .../__pycache__/version.cpython-39.pyc | Bin 20336 -> 20335 bytes .../distlib/__pycache__/wheel.cpython-39.pyc | Bin 27209 -> 27208 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 472 -> 471 bytes .../_backport/__pycache__/misc.cpython-39.pyc | Bin 1092 -> 1091 bytes .../__pycache__/shutil.cpython-39.pyc | Bin 21666 -> 21665 bytes .../__pycache__/sysconfig.cpython-39.pyc | Bin 15956 -> 15955 bytes .../__pycache__/tarfile.cpython-39.pyc | Bin 62720 -> 62719 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 1291 -> 1290 bytes .../__pycache__/_ihatexml.cpython-39.pyc | Bin 13760 -> 13759 bytes .../__pycache__/_inputstream.cpython-39.pyc | Bin 21619 -> 21618 bytes .../__pycache__/_tokenizer.cpython-39.pyc | Bin 39714 -> 39713 bytes .../__pycache__/_utils.cpython-39.pyc | Bin 4791 -> 4790 bytes .../__pycache__/constants.cpython-39.pyc | Bin 66329 -> 66328 bytes .../__pycache__/html5parser.cpython-39.pyc | Bin 91000 -> 90999 bytes .../__pycache__/serializer.cpython-39.pyc | Bin 10802 -> 10801 bytes .../_trie/__pycache__/__init__.cpython-39.pyc | Bin 341 -> 340 bytes .../_trie/__pycache__/_base.cpython-39.pyc | Bin 1585 -> 1584 bytes .../_trie/__pycache__/py.cpython-39.pyc | Bin 2246 -> 2245 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 189 -> 188 bytes .../alphabeticalattributes.cpython-39.pyc | Bin 1311 -> 1310 bytes .../filters/__pycache__/base.cpython-39.pyc | Bin 859 -> 858 bytes .../inject_meta_charset.cpython-39.pyc | Bin 1865 -> 1864 bytes .../filters/__pycache__/lint.cpython-39.pyc | Bin 2607 -> 2606 bytes .../__pycache__/optionaltags.cpython-39.pyc | Bin 2752 -> 2751 bytes .../__pycache__/sanitizer.cpython-39.pyc | Bin 16875 -> 16874 bytes .../__pycache__/whitespace.cpython-39.pyc | Bin 1357 -> 1356 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 926 -> 925 bytes .../__pycache__/genshi.cpython-39.pyc | Bin 1534 -> 1533 bytes .../__pycache__/sax.cpython-39.pyc | Bin 1453 -> 1452 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 3321 -> 3320 bytes .../__pycache__/base.cpython-39.pyc | Bin 11305 -> 11304 bytes .../__pycache__/dom.cpython-39.pyc | Bin 9442 -> 9441 bytes .../__pycache__/etree.cpython-39.pyc | Bin 11810 -> 11809 bytes .../__pycache__/etree_lxml.cpython-39.pyc | Bin 12993 -> 12992 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 3987 -> 3986 bytes .../__pycache__/base.cpython-39.pyc | Bin 6986 -> 6985 bytes .../__pycache__/dom.cpython-39.pyc | Bin 1721 -> 1720 bytes .../__pycache__/etree.cpython-39.pyc | Bin 3483 -> 3482 bytes .../__pycache__/etree_lxml.cpython-39.pyc | Bin 6620 -> 6619 bytes .../__pycache__/genshi.cpython-39.pyc | Bin 1877 -> 1876 bytes .../idna/__pycache__/__init__.cpython-39.pyc | Bin 836 -> 835 bytes .../idna/__pycache__/codec.cpython-39.pyc | Bin 2867 -> 2866 bytes .../idna/__pycache__/compat.cpython-39.pyc | Bin 673 -> 672 bytes .../idna/__pycache__/core.cpython-39.pyc | Bin 9141 -> 9140 bytes .../idna/__pycache__/idnadata.cpython-39.pyc | Bin 22127 -> 22126 bytes .../idna/__pycache__/intranges.cpython-39.pyc | Bin 1849 -> 1848 bytes .../__pycache__/package_data.cpython-39.pyc | Bin 200 -> 199 bytes .../idna/__pycache__/uts46data.cpython-39.pyc | Bin 146160 -> 146159 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 1403 -> 1402 bytes .../__pycache__/_version.cpython-39.pyc | Bin 207 -> 206 bytes .../__pycache__/exceptions.cpython-39.pyc | Bin 1841 -> 1840 bytes .../msgpack/__pycache__/ext.cpython-39.pyc | Bin 6269 -> 6268 bytes .../__pycache__/fallback.cpython-39.pyc | Bin 26715 -> 26714 bytes .../__pycache__/__about__.cpython-39.pyc | Bin 579 -> 578 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 435 -> 434 bytes .../__pycache__/_manylinux.cpython-39.pyc | Bin 7283 -> 7282 bytes .../__pycache__/_musllinux.cpython-39.pyc | Bin 4598 -> 4597 bytes .../__pycache__/_structures.cpython-39.pyc | Bin 3071 -> 3070 bytes .../__pycache__/markers.cpython-39.pyc | Bin 9442 -> 9441 bytes .../__pycache__/requirements.cpython-39.pyc | Bin 3963 -> 3962 bytes .../__pycache__/specifiers.cpython-39.pyc | Bin 22199 -> 22198 bytes .../packaging/__pycache__/tags.cpython-39.pyc | Bin 12278 -> 12277 bytes .../__pycache__/utils.cpython-39.pyc | Bin 3600 -> 3599 bytes .../__pycache__/version.cpython-39.pyc | Bin 13141 -> 13140 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 302 -> 301 bytes .../pep517/__pycache__/build.cpython-39.pyc | Bin 3567 -> 3566 bytes .../pep517/__pycache__/check.cpython-39.pyc | Bin 5114 -> 5113 bytes .../__pycache__/colorlog.cpython-39.pyc | Bin 2927 -> 2926 bytes .../pep517/__pycache__/compat.cpython-39.pyc | Bin 1282 -> 1281 bytes .../__pycache__/dirtools.cpython-39.pyc | Bin 1336 -> 1335 bytes .../__pycache__/envbuild.cpython-39.pyc | Bin 4513 -> 4512 bytes .../pep517/__pycache__/meta.cpython-39.pyc | Bin 2909 -> 2908 bytes .../__pycache__/wrappers.cpython-39.pyc | Bin 12259 -> 12258 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 904 -> 903 bytes .../__pycache__/_in_process.cpython-39.pyc | Bin 9920 -> 9919 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 100320 -> 100319 bytes .../__pycache__/py31compat.cpython-39.pyc | Bin 639 -> 638 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 5646 -> 5645 bytes .../progress/__pycache__/bar.cpython-39.pyc | Bin 2628 -> 2627 bytes .../__pycache__/counter.cpython-39.pyc | Bin 1462 -> 1461 bytes .../__pycache__/spinner.cpython-39.pyc | Bin 1379 -> 1378 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 3991 -> 3990 bytes .../__pycache__/__version__.cpython-39.pyc | Bin 544 -> 543 bytes .../_internal_utils.cpython-39.pyc | Bin 1291 -> 1290 bytes .../__pycache__/adapters.cpython-39.pyc | Bin 16962 -> 16961 bytes .../requests/__pycache__/api.cpython-39.pyc | Bin 6708 -> 6707 bytes .../requests/__pycache__/auth.cpython-39.pyc | Bin 8320 -> 8319 bytes .../requests/__pycache__/certs.cpython-39.pyc | Bin 622 -> 621 bytes .../__pycache__/compat.cpython-39.pyc | Bin 1601 -> 1600 bytes .../__pycache__/cookies.cpython-39.pyc | Bin 18811 -> 18810 bytes .../__pycache__/exceptions.cpython-39.pyc | Bin 5394 -> 5393 bytes .../requests/__pycache__/help.cpython-39.pyc | Bin 2882 -> 2881 bytes .../requests/__pycache__/hooks.cpython-39.pyc | Bin 979 -> 978 bytes .../__pycache__/models.cpython-39.pyc | Bin 24459 -> 24458 bytes .../__pycache__/packages.cpython-39.pyc | Bin 491 -> 490 bytes .../__pycache__/sessions.cpython-39.pyc | Bin 19846 -> 19845 bytes .../__pycache__/status_codes.cpython-39.pyc | Bin 4228 -> 4227 bytes .../__pycache__/structures.cpython-39.pyc | Bin 4449 -> 4448 bytes .../requests/__pycache__/utils.cpython-39.pyc | Bin 23313 -> 23312 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 595 -> 594 bytes .../__pycache__/providers.cpython-39.pyc | Bin 6515 -> 6514 bytes .../__pycache__/reporters.cpython-39.pyc | Bin 2291 -> 2290 bytes .../__pycache__/resolvers.cpython-39.pyc | Bin 15142 -> 15141 bytes .../__pycache__/structs.cpython-39.pyc | Bin 7268 -> 7267 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 190 -> 189 bytes .../collections_abc.cpython-39.pyc | Bin 364 -> 363 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 16268 -> 16267 bytes .../__pycache__/_asyncio.cpython-39.pyc | Bin 2583 -> 2582 bytes .../__pycache__/_utils.cpython-39.pyc | Bin 1220 -> 1219 bytes .../tenacity/__pycache__/after.cpython-39.pyc | Bin 1199 -> 1198 bytes .../__pycache__/before.cpython-39.pyc | Bin 1087 -> 1086 bytes .../__pycache__/before_sleep.cpython-39.pyc | Bin 1379 -> 1378 bytes .../tenacity/__pycache__/nap.cpython-39.pyc | Bin 1181 -> 1180 bytes .../tenacity/__pycache__/retry.cpython-39.pyc | Bin 8769 -> 8768 bytes .../tenacity/__pycache__/stop.cpython-39.pyc | Bin 4233 -> 4232 bytes .../__pycache__/tornadoweb.cpython-39.pyc | Bin 1733 -> 1732 bytes .../tenacity/__pycache__/wait.cpython-39.pyc | Bin 7945 -> 7944 bytes .../tomli/__pycache__/__init__.cpython-39.pyc | Bin 368 -> 367 bytes .../tomli/__pycache__/_parser.cpython-39.pyc | Bin 16343 -> 16342 bytes .../tomli/__pycache__/_re.cpython-39.pyc | Bin 2418 -> 2417 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 2178 -> 2177 bytes .../__pycache__/_collections.cpython-39.pyc | Bin 10773 -> 10772 bytes .../__pycache__/_version.cpython-39.pyc | Bin 202 -> 201 bytes .../__pycache__/connection.cpython-39.pyc | Bin 13359 -> 13358 bytes .../__pycache__/connectionpool.cpython-39.pyc | Bin 24455 -> 24454 bytes .../__pycache__/exceptions.cpython-39.pyc | Bin 11635 -> 11634 bytes .../urllib3/__pycache__/fields.cpython-39.pyc | Bin 8150 -> 8149 bytes .../__pycache__/filepost.cpython-39.pyc | Bin 2751 -> 2750 bytes .../__pycache__/poolmanager.cpython-39.pyc | Bin 15153 -> 15152 bytes .../__pycache__/request.cpython-39.pyc | Bin 5614 -> 5613 bytes .../__pycache__/response.cpython-39.pyc | Bin 20825 -> 20824 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 188 -> 187 bytes .../_appengine_environ.cpython-39.pyc | Bin 1408 -> 1407 bytes .../__pycache__/appengine.cpython-39.pyc | Bin 8261 -> 8260 bytes .../__pycache__/ntlmpool.cpython-39.pyc | Bin 3615 -> 3614 bytes .../__pycache__/pyopenssl.cpython-39.pyc | Bin 15583 -> 15582 bytes .../securetransport.cpython-39.pyc | Bin 21899 -> 21898 bytes .../contrib/__pycache__/socks.cpython-39.pyc | Bin 5624 -> 5623 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 205 -> 204 bytes .../__pycache__/bindings.cpython-39.pyc | Bin 10712 -> 10711 bytes .../__pycache__/low_level.cpython-39.pyc | Bin 9161 -> 9160 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 302 -> 301 bytes .../packages/__pycache__/six.cpython-39.pyc | Bin 27572 -> 27571 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 199 -> 198 bytes .../__pycache__/makefile.cpython-39.pyc | Bin 1297 -> 1296 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 561 -> 560 bytes .../_implementation.cpython-39.pyc | Bin 3292 -> 3291 bytes .../util/__pycache__/__init__.cpython-39.pyc | Bin 1098 -> 1097 bytes .../__pycache__/connection.cpython-39.pyc | Bin 3450 -> 3449 bytes .../util/__pycache__/proxy.cpython-39.pyc | Bin 1334 -> 1333 bytes .../util/__pycache__/queue.cpython-39.pyc | Bin 1053 -> 1052 bytes .../util/__pycache__/request.cpython-39.pyc | Bin 3441 -> 3440 bytes .../util/__pycache__/response.cpython-39.pyc | Bin 2338 -> 2337 bytes .../util/__pycache__/retry.cpython-39.pyc | Bin 15825 -> 15824 bytes .../util/__pycache__/ssl_.cpython-39.pyc | Bin 11322 -> 11321 bytes .../__pycache__/ssltransport.cpython-39.pyc | Bin 7503 -> 7502 bytes .../util/__pycache__/timeout.cpython-39.pyc | Bin 8936 -> 8935 bytes .../util/__pycache__/url.cpython-39.pyc | Bin 10661 -> 10660 bytes .../util/__pycache__/wait.cpython-39.pyc | Bin 3121 -> 3120 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 9712 -> 9711 bytes .../__pycache__/labels.cpython-39.pyc | Bin 3826 -> 3825 bytes .../__pycache__/mklabels.cpython-39.pyc | Bin 1896 -> 1895 bytes .../__pycache__/tests.cpython-39.pyc | Bin 5060 -> 5059 bytes .../__pycache__/x_user_defined.cpython-39.pyc | Bin 2656 -> 2655 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 100428 -> 100427 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 182 -> 181 bytes .../__pycache__/appdirs.cpython-39.pyc | Bin 20499 -> 20498 bytes .../__pycache__/pyparsing.cpython-39.pyc | Bin 201335 -> 201334 bytes .../__pycache__/__about__.cpython-39.pyc | Bin 698 -> 697 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 544 -> 543 bytes .../__pycache__/_compat.cpython-39.pyc | Bin 1142 -> 1141 bytes .../__pycache__/_structures.cpython-39.pyc | Bin 2896 -> 2895 bytes .../__pycache__/_typing.cpython-39.pyc | Bin 1487 -> 1486 bytes .../__pycache__/markers.cpython-39.pyc | Bin 9303 -> 9302 bytes .../__pycache__/requirements.cpython-39.pyc | Bin 4080 -> 4079 bytes .../__pycache__/specifiers.cpython-39.pyc | Bin 20579 -> 20578 bytes .../packaging/__pycache__/tags.cpython-39.pyc | Bin 17258 -> 17257 bytes .../__pycache__/utils.cpython-39.pyc | Bin 1649 -> 1648 bytes .../__pycache__/version.cpython-39.pyc | Bin 13316 -> 13315 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 2871 -> 2870 bytes .../__pycache__/setup.cpython-39.pyc | Bin 310 -> 309 bytes .../pytz-2021.1.dist-info/DESCRIPTION.rst | 598 - .../pytz-2021.1.dist-info/INSTALLER | 1 - .../pytz-2021.1.dist-info/LICENSE.txt | 19 - .../pytz-2021.1.dist-info/METADATA | 634 - .../pytz-2021.1.dist-info/RECORD | 620 - .../site-packages/pytz-2021.1.dist-info/WHEEL | 6 - .../pytz-2021.1.dist-info/metadata.json | 1 - .../pytz-2021.1.dist-info/top_level.txt | 1 - .../pytz-2021.1.dist-info/zip-safe | 1 - .../.venv/Lib/site-packages/pytz/__init__.py | 1558 - .../pytz/__pycache__/__init__.cpython-39.pyc | Bin 26268 -> 0 bytes .../__pycache__/exceptions.cpython-39.pyc | Bin 2165 -> 0 bytes .../pytz/__pycache__/lazy.cpython-39.pyc | Bin 4950 -> 0 bytes .../pytz/__pycache__/reference.cpython-39.pyc | Bin 3897 -> 0 bytes .../pytz/__pycache__/tzfile.cpython-39.pyc | Bin 3112 -> 0 bytes .../pytz/__pycache__/tzinfo.cpython-39.pyc | Bin 14861 -> 0 bytes .../Lib/site-packages/pytz/exceptions.py | 59 - .../.venv/Lib/site-packages/pytz/lazy.py | 172 - .../.venv/Lib/site-packages/pytz/reference.py | 140 - .../.venv/Lib/site-packages/pytz/tzfile.py | 133 - .../.venv/Lib/site-packages/pytz/tzinfo.py | 577 - .../pytz/zoneinfo/Africa/Abidjan | Bin 148 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Accra | Bin 1060 -> 0 bytes .../pytz/zoneinfo/Africa/Addis_Ababa | Bin 265 -> 0 bytes .../pytz/zoneinfo/Africa/Algiers | Bin 735 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Asmara | Bin 265 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Asmera | Bin 265 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Bamako | Bin 148 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Bangui | Bin 235 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Banjul | Bin 148 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Bissau | Bin 194 -> 0 bytes .../pytz/zoneinfo/Africa/Blantyre | Bin 149 -> 0 bytes .../pytz/zoneinfo/Africa/Brazzaville | Bin 235 -> 0 bytes .../pytz/zoneinfo/Africa/Bujumbura | Bin 149 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Cairo | Bin 1955 -> 0 bytes .../pytz/zoneinfo/Africa/Casablanca | Bin 2429 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Ceuta | Bin 2036 -> 0 bytes .../pytz/zoneinfo/Africa/Conakry | Bin 148 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Dakar | Bin 148 -> 0 bytes .../pytz/zoneinfo/Africa/Dar_es_Salaam | Bin 265 -> 0 bytes .../pytz/zoneinfo/Africa/Djibouti | Bin 265 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Douala | Bin 235 -> 0 bytes .../pytz/zoneinfo/Africa/El_Aaiun | Bin 2295 -> 0 bytes .../pytz/zoneinfo/Africa/Freetown | Bin 148 -> 0 bytes .../pytz/zoneinfo/Africa/Gaborone | Bin 149 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Harare | Bin 149 -> 0 bytes .../pytz/zoneinfo/Africa/Johannesburg | Bin 246 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Juba | Bin 679 -> 0 bytes .../pytz/zoneinfo/Africa/Kampala | Bin 265 -> 0 bytes .../pytz/zoneinfo/Africa/Khartoum | Bin 679 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Kigali | Bin 149 -> 0 bytes .../pytz/zoneinfo/Africa/Kinshasa | Bin 235 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Lagos | Bin 235 -> 0 bytes .../pytz/zoneinfo/Africa/Libreville | Bin 235 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Lome | Bin 148 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Luanda | Bin 235 -> 0 bytes .../pytz/zoneinfo/Africa/Lubumbashi | Bin 149 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Lusaka | Bin 149 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Malabo | Bin 235 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Maputo | Bin 149 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Maseru | Bin 246 -> 0 bytes .../pytz/zoneinfo/Africa/Mbabane | Bin 246 -> 0 bytes .../pytz/zoneinfo/Africa/Mogadishu | Bin 265 -> 0 bytes .../pytz/zoneinfo/Africa/Monrovia | Bin 208 -> 0 bytes .../pytz/zoneinfo/Africa/Nairobi | Bin 265 -> 0 bytes .../pytz/zoneinfo/Africa/Ndjamena | Bin 199 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Niamey | Bin 235 -> 0 bytes .../pytz/zoneinfo/Africa/Nouakchott | Bin 148 -> 0 bytes .../pytz/zoneinfo/Africa/Ouagadougou | Bin 148 -> 0 bytes .../pytz/zoneinfo/Africa/Porto-Novo | Bin 235 -> 0 bytes .../pytz/zoneinfo/Africa/Sao_Tome | Bin 254 -> 0 bytes .../pytz/zoneinfo/Africa/Timbuktu | Bin 148 -> 0 bytes .../pytz/zoneinfo/Africa/Tripoli | Bin 625 -> 0 bytes .../site-packages/pytz/zoneinfo/Africa/Tunis | Bin 689 -> 0 bytes .../pytz/zoneinfo/Africa/Windhoek | Bin 955 -> 0 bytes .../site-packages/pytz/zoneinfo/America/Adak | Bin 2356 -> 0 bytes .../pytz/zoneinfo/America/Anchorage | Bin 2371 -> 0 bytes .../pytz/zoneinfo/America/Anguilla | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/Antigua | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/Araguaina | Bin 884 -> 0 bytes .../zoneinfo/America/Argentina/Buenos_Aires | Bin 1076 -> 0 bytes .../pytz/zoneinfo/America/Argentina/Catamarca | Bin 1076 -> 0 bytes .../zoneinfo/America/Argentina/ComodRivadavia | Bin 1076 -> 0 bytes .../pytz/zoneinfo/America/Argentina/Cordoba | Bin 1076 -> 0 bytes .../pytz/zoneinfo/America/Argentina/Jujuy | Bin 1048 -> 0 bytes .../pytz/zoneinfo/America/Argentina/La_Rioja | Bin 1090 -> 0 bytes .../pytz/zoneinfo/America/Argentina/Mendoza | Bin 1076 -> 0 bytes .../zoneinfo/America/Argentina/Rio_Gallegos | Bin 1076 -> 0 bytes .../pytz/zoneinfo/America/Argentina/Salta | Bin 1048 -> 0 bytes .../pytz/zoneinfo/America/Argentina/San_Juan | Bin 1090 -> 0 bytes .../pytz/zoneinfo/America/Argentina/San_Luis | Bin 1102 -> 0 bytes .../pytz/zoneinfo/America/Argentina/Tucuman | Bin 1104 -> 0 bytes .../pytz/zoneinfo/America/Argentina/Ushuaia | Bin 1076 -> 0 bytes .../site-packages/pytz/zoneinfo/America/Aruba | Bin 186 -> 0 bytes .../pytz/zoneinfo/America/Asuncion | Bin 2044 -> 0 bytes .../pytz/zoneinfo/America/Atikokan | Bin 336 -> 0 bytes .../site-packages/pytz/zoneinfo/America/Atka | Bin 2356 -> 0 bytes .../site-packages/pytz/zoneinfo/America/Bahia | Bin 1024 -> 0 bytes .../pytz/zoneinfo/America/Bahia_Banderas | Bin 1546 -> 0 bytes .../pytz/zoneinfo/America/Barbados | Bin 314 -> 0 bytes .../site-packages/pytz/zoneinfo/America/Belem | Bin 576 -> 0 bytes .../pytz/zoneinfo/America/Belize | Bin 1614 -> 0 bytes .../pytz/zoneinfo/America/Blanc-Sablon | Bin 298 -> 0 bytes .../pytz/zoneinfo/America/Boa_Vista | Bin 632 -> 0 bytes .../pytz/zoneinfo/America/Bogota | Bin 246 -> 0 bytes .../site-packages/pytz/zoneinfo/America/Boise | Bin 2394 -> 0 bytes .../pytz/zoneinfo/America/Buenos_Aires | Bin 1076 -> 0 bytes .../pytz/zoneinfo/America/Cambridge_Bay | Bin 2084 -> 0 bytes .../pytz/zoneinfo/America/Campo_Grande | Bin 1444 -> 0 bytes .../pytz/zoneinfo/America/Cancun | Bin 782 -> 0 bytes .../pytz/zoneinfo/America/Caracas | Bin 264 -> 0 bytes .../pytz/zoneinfo/America/Catamarca | Bin 1076 -> 0 bytes .../pytz/zoneinfo/America/Cayenne | Bin 198 -> 0 bytes .../pytz/zoneinfo/America/Cayman | Bin 182 -> 0 bytes .../pytz/zoneinfo/America/Chicago | Bin 3576 -> 0 bytes .../pytz/zoneinfo/America/Chihuahua | Bin 1484 -> 0 bytes .../pytz/zoneinfo/America/Coral_Harbour | Bin 336 -> 0 bytes .../pytz/zoneinfo/America/Cordoba | Bin 1076 -> 0 bytes .../pytz/zoneinfo/America/Costa_Rica | Bin 316 -> 0 bytes .../pytz/zoneinfo/America/Creston | Bin 208 -> 0 bytes .../pytz/zoneinfo/America/Cuiaba | Bin 1416 -> 0 bytes .../pytz/zoneinfo/America/Curacao | Bin 186 -> 0 bytes .../pytz/zoneinfo/America/Danmarkshavn | Bin 698 -> 0 bytes .../pytz/zoneinfo/America/Dawson | Bin 1614 -> 0 bytes .../pytz/zoneinfo/America/Dawson_Creek | Bin 1050 -> 0 bytes .../pytz/zoneinfo/America/Denver | Bin 2444 -> 0 bytes .../pytz/zoneinfo/America/Detroit | Bin 2230 -> 0 bytes .../pytz/zoneinfo/America/Dominica | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/Edmonton | Bin 2332 -> 0 bytes .../pytz/zoneinfo/America/Eirunepe | Bin 656 -> 0 bytes .../pytz/zoneinfo/America/El_Salvador | Bin 224 -> 0 bytes .../pytz/zoneinfo/America/Ensenada | Bin 2342 -> 0 bytes .../pytz/zoneinfo/America/Fort_Nelson | Bin 2240 -> 0 bytes .../pytz/zoneinfo/America/Fort_Wayne | Bin 1666 -> 0 bytes .../pytz/zoneinfo/America/Fortaleza | Bin 716 -> 0 bytes .../pytz/zoneinfo/America/Glace_Bay | Bin 2192 -> 0 bytes .../pytz/zoneinfo/America/Godthab | Bin 1878 -> 0 bytes .../pytz/zoneinfo/America/Goose_Bay | Bin 3210 -> 0 bytes .../pytz/zoneinfo/America/Grand_Turk | Bin 1834 -> 0 bytes .../pytz/zoneinfo/America/Grenada | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/Guadeloupe | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/Guatemala | Bin 280 -> 0 bytes .../pytz/zoneinfo/America/Guayaquil | Bin 246 -> 0 bytes .../pytz/zoneinfo/America/Guyana | Bin 236 -> 0 bytes .../pytz/zoneinfo/America/Halifax | Bin 3424 -> 0 bytes .../pytz/zoneinfo/America/Havana | Bin 2416 -> 0 bytes .../pytz/zoneinfo/America/Hermosillo | Bin 416 -> 0 bytes .../zoneinfo/America/Indiana/Indianapolis | Bin 1666 -> 0 bytes .../pytz/zoneinfo/America/Indiana/Knox | Bin 2428 -> 0 bytes .../pytz/zoneinfo/America/Indiana/Marengo | Bin 1722 -> 0 bytes .../pytz/zoneinfo/America/Indiana/Petersburg | Bin 1904 -> 0 bytes .../pytz/zoneinfo/America/Indiana/Tell_City | Bin 1684 -> 0 bytes .../pytz/zoneinfo/America/Indiana/Vevay | Bin 1414 -> 0 bytes .../pytz/zoneinfo/America/Indiana/Vincennes | Bin 1694 -> 0 bytes .../pytz/zoneinfo/America/Indiana/Winamac | Bin 1778 -> 0 bytes .../pytz/zoneinfo/America/Indianapolis | Bin 1666 -> 0 bytes .../pytz/zoneinfo/America/Inuvik | Bin 1894 -> 0 bytes .../pytz/zoneinfo/America/Iqaluit | Bin 2032 -> 0 bytes .../pytz/zoneinfo/America/Jamaica | Bin 482 -> 0 bytes .../site-packages/pytz/zoneinfo/America/Jujuy | Bin 1048 -> 0 bytes .../pytz/zoneinfo/America/Juneau | Bin 2353 -> 0 bytes .../pytz/zoneinfo/America/Kentucky/Louisville | Bin 2772 -> 0 bytes .../pytz/zoneinfo/America/Kentucky/Monticello | Bin 2352 -> 0 bytes .../pytz/zoneinfo/America/Knox_IN | Bin 2428 -> 0 bytes .../pytz/zoneinfo/America/Kralendijk | Bin 186 -> 0 bytes .../pytz/zoneinfo/America/La_Paz | Bin 232 -> 0 bytes .../site-packages/pytz/zoneinfo/America/Lima | Bin 406 -> 0 bytes .../pytz/zoneinfo/America/Los_Angeles | Bin 2836 -> 0 bytes .../pytz/zoneinfo/America/Louisville | Bin 2772 -> 0 bytes .../pytz/zoneinfo/America/Lower_Princes | Bin 186 -> 0 bytes .../pytz/zoneinfo/America/Maceio | Bin 744 -> 0 bytes .../pytz/zoneinfo/America/Managua | Bin 430 -> 0 bytes .../pytz/zoneinfo/America/Manaus | Bin 604 -> 0 bytes .../pytz/zoneinfo/America/Marigot | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/Martinique | Bin 232 -> 0 bytes .../pytz/zoneinfo/America/Matamoros | Bin 1390 -> 0 bytes .../pytz/zoneinfo/America/Mazatlan | Bin 1526 -> 0 bytes .../pytz/zoneinfo/America/Mendoza | Bin 1076 -> 0 bytes .../pytz/zoneinfo/America/Menominee | Bin 2274 -> 0 bytes .../pytz/zoneinfo/America/Merida | Bin 1422 -> 0 bytes .../pytz/zoneinfo/America/Metlakatla | Bin 1423 -> 0 bytes .../pytz/zoneinfo/America/Mexico_City | Bin 1584 -> 0 bytes .../pytz/zoneinfo/America/Miquelon | Bin 1666 -> 0 bytes .../pytz/zoneinfo/America/Moncton | Bin 3154 -> 0 bytes .../pytz/zoneinfo/America/Monterrey | Bin 1390 -> 0 bytes .../pytz/zoneinfo/America/Montevideo | Bin 1510 -> 0 bytes .../pytz/zoneinfo/America/Montreal | Bin 3494 -> 0 bytes .../pytz/zoneinfo/America/Montserrat | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/Nassau | Bin 2388 -> 0 bytes .../pytz/zoneinfo/America/New_York | Bin 3536 -> 0 bytes .../pytz/zoneinfo/America/Nipigon | Bin 2122 -> 0 bytes .../site-packages/pytz/zoneinfo/America/Nome | Bin 2367 -> 0 bytes .../pytz/zoneinfo/America/Noronha | Bin 716 -> 0 bytes .../pytz/zoneinfo/America/North_Dakota/Beulah | Bin 2380 -> 0 bytes .../pytz/zoneinfo/America/North_Dakota/Center | Bin 2380 -> 0 bytes .../zoneinfo/America/North_Dakota/New_Salem | Bin 2380 -> 0 bytes .../site-packages/pytz/zoneinfo/America/Nuuk | Bin 1878 -> 0 bytes .../pytz/zoneinfo/America/Ojinaga | Bin 1484 -> 0 bytes .../pytz/zoneinfo/America/Panama | Bin 182 -> 0 bytes .../pytz/zoneinfo/America/Pangnirtung | Bin 2094 -> 0 bytes .../pytz/zoneinfo/America/Paramaribo | Bin 262 -> 0 bytes .../pytz/zoneinfo/America/Phoenix | Bin 328 -> 0 bytes .../pytz/zoneinfo/America/Port-au-Prince | Bin 1434 -> 0 bytes .../pytz/zoneinfo/America/Port_of_Spain | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/Porto_Acre | Bin 628 -> 0 bytes .../pytz/zoneinfo/America/Porto_Velho | Bin 576 -> 0 bytes .../pytz/zoneinfo/America/Puerto_Rico | Bin 246 -> 0 bytes .../pytz/zoneinfo/America/Punta_Arenas | Bin 1902 -> 0 bytes .../pytz/zoneinfo/America/Rainy_River | Bin 2122 -> 0 bytes .../pytz/zoneinfo/America/Rankin_Inlet | Bin 1892 -> 0 bytes .../pytz/zoneinfo/America/Recife | Bin 716 -> 0 bytes .../pytz/zoneinfo/America/Regina | Bin 980 -> 0 bytes .../pytz/zoneinfo/America/Resolute | Bin 1892 -> 0 bytes .../pytz/zoneinfo/America/Rio_Branco | Bin 628 -> 0 bytes .../pytz/zoneinfo/America/Rosario | Bin 1076 -> 0 bytes .../pytz/zoneinfo/America/Santa_Isabel | Bin 2342 -> 0 bytes .../pytz/zoneinfo/America/Santarem | Bin 602 -> 0 bytes .../pytz/zoneinfo/America/Santiago | Bin 2529 -> 0 bytes .../pytz/zoneinfo/America/Santo_Domingo | Bin 458 -> 0 bytes .../pytz/zoneinfo/America/Sao_Paulo | Bin 1444 -> 0 bytes .../pytz/zoneinfo/America/Scoresbysund | Bin 1916 -> 0 bytes .../pytz/zoneinfo/America/Shiprock | Bin 2444 -> 0 bytes .../site-packages/pytz/zoneinfo/America/Sitka | Bin 2329 -> 0 bytes .../pytz/zoneinfo/America/St_Barthelemy | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/St_Johns | Bin 3655 -> 0 bytes .../pytz/zoneinfo/America/St_Kitts | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/St_Lucia | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/St_Thomas | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/St_Vincent | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/Swift_Current | Bin 560 -> 0 bytes .../pytz/zoneinfo/America/Tegucigalpa | Bin 252 -> 0 bytes .../site-packages/pytz/zoneinfo/America/Thule | Bin 1502 -> 0 bytes .../pytz/zoneinfo/America/Thunder_Bay | Bin 2202 -> 0 bytes .../pytz/zoneinfo/America/Tijuana | Bin 2342 -> 0 bytes .../pytz/zoneinfo/America/Toronto | Bin 3494 -> 0 bytes .../pytz/zoneinfo/America/Tortola | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/Vancouver | Bin 2892 -> 0 bytes .../pytz/zoneinfo/America/Virgin | Bin 148 -> 0 bytes .../pytz/zoneinfo/America/Whitehorse | Bin 1614 -> 0 bytes .../pytz/zoneinfo/America/Winnipeg | Bin 2868 -> 0 bytes .../pytz/zoneinfo/America/Yakutat | Bin 2305 -> 0 bytes .../pytz/zoneinfo/America/Yellowknife | Bin 1966 -> 0 bytes .../pytz/zoneinfo/Antarctica/Casey | Bin 384 -> 0 bytes .../pytz/zoneinfo/Antarctica/Davis | Bin 297 -> 0 bytes .../pytz/zoneinfo/Antarctica/DumontDUrville | Bin 194 -> 0 bytes .../pytz/zoneinfo/Antarctica/Macquarie | Bin 2260 -> 0 bytes .../pytz/zoneinfo/Antarctica/Mawson | Bin 199 -> 0 bytes .../pytz/zoneinfo/Antarctica/McMurdo | Bin 2437 -> 0 bytes .../pytz/zoneinfo/Antarctica/Palmer | Bin 1418 -> 0 bytes .../pytz/zoneinfo/Antarctica/Rothera | Bin 164 -> 0 bytes .../pytz/zoneinfo/Antarctica/South_Pole | Bin 2437 -> 0 bytes .../pytz/zoneinfo/Antarctica/Syowa | Bin 165 -> 0 bytes .../pytz/zoneinfo/Antarctica/Troll | Bin 1162 -> 0 bytes .../pytz/zoneinfo/Antarctica/Vostok | Bin 165 -> 0 bytes .../pytz/zoneinfo/Arctic/Longyearbyen | Bin 2228 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Asia/Aden | Bin 165 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Almaty | Bin 997 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Amman | Bin 1853 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Anadyr | Bin 1188 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Aqtau | Bin 983 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Aqtobe | Bin 1011 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Ashgabat | Bin 619 -> 0 bytes .../pytz/zoneinfo/Asia/Ashkhabad | Bin 619 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Atyrau | Bin 991 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Baghdad | Bin 983 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Bahrain | Bin 199 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Asia/Baku | Bin 1227 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Bangkok | Bin 199 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Barnaul | Bin 1221 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Beirut | Bin 2154 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Bishkek | Bin 983 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Brunei | Bin 203 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Calcutta | Bin 285 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Chita | Bin 1221 -> 0 bytes .../pytz/zoneinfo/Asia/Choibalsan | Bin 949 -> 0 bytes .../pytz/zoneinfo/Asia/Chongqing | Bin 561 -> 0 bytes .../pytz/zoneinfo/Asia/Chungking | Bin 561 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Colombo | Bin 372 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Dacca | Bin 337 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Damascus | Bin 2294 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Dhaka | Bin 337 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Asia/Dili | Bin 227 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Dubai | Bin 165 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Dushanbe | Bin 591 -> 0 bytes .../pytz/zoneinfo/Asia/Famagusta | Bin 2028 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Asia/Gaza | Bin 2422 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Harbin | Bin 561 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Hebron | Bin 2450 -> 0 bytes .../pytz/zoneinfo/Asia/Ho_Chi_Minh | Bin 351 -> 0 bytes .../pytz/zoneinfo/Asia/Hong_Kong | Bin 1203 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Asia/Hovd | Bin 891 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Irkutsk | Bin 1243 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Istanbul | Bin 1947 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Jakarta | Bin 355 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Jayapura | Bin 221 -> 0 bytes .../pytz/zoneinfo/Asia/Jerusalem | Bin 2388 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Kabul | Bin 208 -> 0 bytes .../pytz/zoneinfo/Asia/Kamchatka | Bin 1166 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Karachi | Bin 379 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Kashgar | Bin 165 -> 0 bytes .../pytz/zoneinfo/Asia/Kathmandu | Bin 212 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Katmandu | Bin 212 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Khandyga | Bin 1271 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Kolkata | Bin 285 -> 0 bytes .../pytz/zoneinfo/Asia/Krasnoyarsk | Bin 1207 -> 0 bytes .../pytz/zoneinfo/Asia/Kuala_Lumpur | Bin 383 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Kuching | Bin 483 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Kuwait | Bin 165 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Macao | Bin 1227 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Macau | Bin 1227 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Magadan | Bin 1222 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Makassar | Bin 254 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Manila | Bin 328 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Muscat | Bin 165 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Nicosia | Bin 2002 -> 0 bytes .../pytz/zoneinfo/Asia/Novokuznetsk | Bin 1165 -> 0 bytes .../pytz/zoneinfo/Asia/Novosibirsk | Bin 1221 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Asia/Omsk | Bin 1207 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Asia/Oral | Bin 1005 -> 0 bytes .../pytz/zoneinfo/Asia/Phnom_Penh | Bin 199 -> 0 bytes .../pytz/zoneinfo/Asia/Pontianak | Bin 353 -> 0 bytes .../pytz/zoneinfo/Asia/Pyongyang | Bin 237 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Qatar | Bin 199 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Qostanay | Bin 1011 -> 0 bytes .../pytz/zoneinfo/Asia/Qyzylorda | Bin 1025 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Rangoon | Bin 268 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Riyadh | Bin 165 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Saigon | Bin 351 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Sakhalin | Bin 1202 -> 0 bytes .../pytz/zoneinfo/Asia/Samarkand | Bin 577 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Seoul | Bin 617 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Shanghai | Bin 561 -> 0 bytes .../pytz/zoneinfo/Asia/Singapore | Bin 383 -> 0 bytes .../pytz/zoneinfo/Asia/Srednekolymsk | Bin 1208 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Taipei | Bin 761 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Tashkent | Bin 591 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Tbilisi | Bin 1035 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Tehran | Bin 2582 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Tel_Aviv | Bin 2388 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Thimbu | Bin 203 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Thimphu | Bin 203 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Tokyo | Bin 309 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Tomsk | Bin 1221 -> 0 bytes .../pytz/zoneinfo/Asia/Ujung_Pandang | Bin 254 -> 0 bytes .../pytz/zoneinfo/Asia/Ulaanbaatar | Bin 891 -> 0 bytes .../pytz/zoneinfo/Asia/Ulan_Bator | Bin 891 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Urumqi | Bin 165 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Ust-Nera | Bin 1252 -> 0 bytes .../pytz/zoneinfo/Asia/Vientiane | Bin 199 -> 0 bytes .../pytz/zoneinfo/Asia/Vladivostok | Bin 1208 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Yakutsk | Bin 1207 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Yangon | Bin 268 -> 0 bytes .../pytz/zoneinfo/Asia/Yekaterinburg | Bin 1243 -> 0 bytes .../site-packages/pytz/zoneinfo/Asia/Yerevan | Bin 1151 -> 0 bytes .../pytz/zoneinfo/Atlantic/Azores | Bin 3484 -> 0 bytes .../pytz/zoneinfo/Atlantic/Bermuda | Bin 2396 -> 0 bytes .../pytz/zoneinfo/Atlantic/Canary | Bin 1897 -> 0 bytes .../pytz/zoneinfo/Atlantic/Cape_Verde | Bin 270 -> 0 bytes .../pytz/zoneinfo/Atlantic/Faeroe | Bin 1815 -> 0 bytes .../pytz/zoneinfo/Atlantic/Faroe | Bin 1815 -> 0 bytes .../pytz/zoneinfo/Atlantic/Jan_Mayen | Bin 2228 -> 0 bytes .../pytz/zoneinfo/Atlantic/Madeira | Bin 3475 -> 0 bytes .../pytz/zoneinfo/Atlantic/Reykjavik | Bin 1162 -> 0 bytes .../pytz/zoneinfo/Atlantic/South_Georgia | Bin 164 -> 0 bytes .../pytz/zoneinfo/Atlantic/St_Helena | Bin 148 -> 0 bytes .../pytz/zoneinfo/Atlantic/Stanley | Bin 1214 -> 0 bytes .../site-packages/pytz/zoneinfo/Australia/ACT | Bin 2190 -> 0 bytes .../pytz/zoneinfo/Australia/Adelaide | Bin 2208 -> 0 bytes .../pytz/zoneinfo/Australia/Brisbane | Bin 419 -> 0 bytes .../pytz/zoneinfo/Australia/Broken_Hill | Bin 2229 -> 0 bytes .../pytz/zoneinfo/Australia/Canberra | Bin 2190 -> 0 bytes .../pytz/zoneinfo/Australia/Currie | Bin 2358 -> 0 bytes .../pytz/zoneinfo/Australia/Darwin | Bin 325 -> 0 bytes .../pytz/zoneinfo/Australia/Eucla | Bin 470 -> 0 bytes .../pytz/zoneinfo/Australia/Hobart | Bin 2358 -> 0 bytes .../site-packages/pytz/zoneinfo/Australia/LHI | Bin 1860 -> 0 bytes .../pytz/zoneinfo/Australia/Lindeman | Bin 475 -> 0 bytes .../pytz/zoneinfo/Australia/Lord_Howe | Bin 1860 -> 0 bytes .../pytz/zoneinfo/Australia/Melbourne | Bin 2190 -> 0 bytes .../site-packages/pytz/zoneinfo/Australia/NSW | Bin 2190 -> 0 bytes .../pytz/zoneinfo/Australia/North | Bin 325 -> 0 bytes .../pytz/zoneinfo/Australia/Perth | Bin 446 -> 0 bytes .../pytz/zoneinfo/Australia/Queensland | Bin 419 -> 0 bytes .../pytz/zoneinfo/Australia/South | Bin 2208 -> 0 bytes .../pytz/zoneinfo/Australia/Sydney | Bin 2190 -> 0 bytes .../pytz/zoneinfo/Australia/Tasmania | Bin 2358 -> 0 bytes .../pytz/zoneinfo/Australia/Victoria | Bin 2190 -> 0 bytes .../pytz/zoneinfo/Australia/West | Bin 446 -> 0 bytes .../pytz/zoneinfo/Australia/Yancowinna | Bin 2229 -> 0 bytes .../site-packages/pytz/zoneinfo/Brazil/Acre | Bin 628 -> 0 bytes .../pytz/zoneinfo/Brazil/DeNoronha | Bin 716 -> 0 bytes .../site-packages/pytz/zoneinfo/Brazil/East | Bin 1444 -> 0 bytes .../site-packages/pytz/zoneinfo/Brazil/West | Bin 604 -> 0 bytes .../.venv/Lib/site-packages/pytz/zoneinfo/CET | Bin 2094 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/CST6CDT | Bin 2310 -> 0 bytes .../pytz/zoneinfo/Canada/Atlantic | Bin 3424 -> 0 bytes .../pytz/zoneinfo/Canada/Central | Bin 2868 -> 0 bytes .../pytz/zoneinfo/Canada/Eastern | Bin 3494 -> 0 bytes .../pytz/zoneinfo/Canada/Mountain | Bin 2332 -> 0 bytes .../pytz/zoneinfo/Canada/Newfoundland | Bin 3655 -> 0 bytes .../pytz/zoneinfo/Canada/Pacific | Bin 2892 -> 0 bytes .../pytz/zoneinfo/Canada/Saskatchewan | Bin 980 -> 0 bytes .../site-packages/pytz/zoneinfo/Canada/Yukon | Bin 1614 -> 0 bytes .../pytz/zoneinfo/Chile/Continental | Bin 2529 -> 0 bytes .../pytz/zoneinfo/Chile/EasterIsland | Bin 2233 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Cuba | Bin 2416 -> 0 bytes .../.venv/Lib/site-packages/pytz/zoneinfo/EET | Bin 1908 -> 0 bytes .../.venv/Lib/site-packages/pytz/zoneinfo/EST | Bin 114 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/EST5EDT | Bin 2310 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Egypt | Bin 1955 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Eire | Bin 3492 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Etc/GMT | Bin 114 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Etc/GMT+0 | Bin 114 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Etc/GMT+1 | Bin 116 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+10 | Bin 117 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+11 | Bin 117 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT+12 | Bin 117 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Etc/GMT+2 | Bin 116 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Etc/GMT+3 | Bin 116 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Etc/GMT+4 | Bin 116 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Etc/GMT+5 | Bin 116 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Etc/GMT+6 | Bin 116 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Etc/GMT+7 | Bin 116 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Etc/GMT+8 | Bin 116 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Etc/GMT+9 | Bin 116 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Etc/GMT-0 | Bin 114 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Etc/GMT-1 | Bin 117 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-10 | Bin 118 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-11 | Bin 118 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-12 | Bin 118 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-13 | Bin 118 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/GMT-14 | Bin 118 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Etc/GMT-2 | Bin 117 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Etc/GMT-3 | Bin 117 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Etc/GMT-4 | Bin 117 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Etc/GMT-5 | Bin 117 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Etc/GMT-6 | Bin 117 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Etc/GMT-7 | Bin 117 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Etc/GMT-8 | Bin 117 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Etc/GMT-9 | Bin 117 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Etc/GMT0 | Bin 114 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/Greenwich | Bin 114 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Etc/UCT | Bin 114 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Etc/UTC | Bin 114 -> 0 bytes .../site-packages/pytz/zoneinfo/Etc/Universal | Bin 114 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Etc/Zulu | Bin 114 -> 0 bytes .../pytz/zoneinfo/Europe/Amsterdam | Bin 2910 -> 0 bytes .../pytz/zoneinfo/Europe/Andorra | Bin 1742 -> 0 bytes .../pytz/zoneinfo/Europe/Astrakhan | Bin 1165 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Athens | Bin 2262 -> 0 bytes .../pytz/zoneinfo/Europe/Belfast | Bin 3648 -> 0 bytes .../pytz/zoneinfo/Europe/Belgrade | Bin 1920 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Berlin | Bin 2298 -> 0 bytes .../pytz/zoneinfo/Europe/Bratislava | Bin 2301 -> 0 bytes .../pytz/zoneinfo/Europe/Brussels | Bin 2933 -> 0 bytes .../pytz/zoneinfo/Europe/Bucharest | Bin 2184 -> 0 bytes .../pytz/zoneinfo/Europe/Budapest | Bin 2368 -> 0 bytes .../pytz/zoneinfo/Europe/Busingen | Bin 1909 -> 0 bytes .../pytz/zoneinfo/Europe/Chisinau | Bin 2390 -> 0 bytes .../pytz/zoneinfo/Europe/Copenhagen | Bin 2137 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Dublin | Bin 3492 -> 0 bytes .../pytz/zoneinfo/Europe/Gibraltar | Bin 3052 -> 0 bytes .../pytz/zoneinfo/Europe/Guernsey | Bin 3648 -> 0 bytes .../pytz/zoneinfo/Europe/Helsinki | Bin 1900 -> 0 bytes .../pytz/zoneinfo/Europe/Isle_of_Man | Bin 3648 -> 0 bytes .../pytz/zoneinfo/Europe/Istanbul | Bin 1947 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Jersey | Bin 3648 -> 0 bytes .../pytz/zoneinfo/Europe/Kaliningrad | Bin 1493 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Kiev | Bin 2088 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Kirov | Bin 1153 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Lisbon | Bin 3469 -> 0 bytes .../pytz/zoneinfo/Europe/Ljubljana | Bin 1920 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/London | Bin 3648 -> 0 bytes .../pytz/zoneinfo/Europe/Luxembourg | Bin 2946 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Madrid | Bin 2614 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Malta | Bin 2620 -> 0 bytes .../pytz/zoneinfo/Europe/Mariehamn | Bin 1900 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Minsk | Bin 1321 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Monaco | Bin 2944 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Moscow | Bin 1535 -> 0 bytes .../pytz/zoneinfo/Europe/Nicosia | Bin 2002 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Oslo | Bin 2228 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Paris | Bin 2962 -> 0 bytes .../pytz/zoneinfo/Europe/Podgorica | Bin 1920 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Prague | Bin 2301 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Riga | Bin 2198 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Rome | Bin 2641 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Samara | Bin 1215 -> 0 bytes .../pytz/zoneinfo/Europe/San_Marino | Bin 2641 -> 0 bytes .../pytz/zoneinfo/Europe/Sarajevo | Bin 1920 -> 0 bytes .../pytz/zoneinfo/Europe/Saratov | Bin 1183 -> 0 bytes .../pytz/zoneinfo/Europe/Simferopol | Bin 1453 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Skopje | Bin 1920 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Sofia | Bin 2077 -> 0 bytes .../pytz/zoneinfo/Europe/Stockholm | Bin 1909 -> 0 bytes .../pytz/zoneinfo/Europe/Tallinn | Bin 2148 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Tirane | Bin 2084 -> 0 bytes .../pytz/zoneinfo/Europe/Tiraspol | Bin 2390 -> 0 bytes .../pytz/zoneinfo/Europe/Ulyanovsk | Bin 1267 -> 0 bytes .../pytz/zoneinfo/Europe/Uzhgorod | Bin 2050 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Vaduz | Bin 1909 -> 0 bytes .../pytz/zoneinfo/Europe/Vatican | Bin 2641 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Vienna | Bin 2200 -> 0 bytes .../pytz/zoneinfo/Europe/Vilnius | Bin 2162 -> 0 bytes .../pytz/zoneinfo/Europe/Volgograd | Bin 1165 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Warsaw | Bin 2654 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Zagreb | Bin 1920 -> 0 bytes .../pytz/zoneinfo/Europe/Zaporozhye | Bin 2106 -> 0 bytes .../site-packages/pytz/zoneinfo/Europe/Zurich | Bin 1909 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Factory | Bin 116 -> 0 bytes .../.venv/Lib/site-packages/pytz/zoneinfo/GB | Bin 3648 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/GB-Eire | Bin 3648 -> 0 bytes .../.venv/Lib/site-packages/pytz/zoneinfo/GMT | Bin 114 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/GMT+0 | Bin 114 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/GMT-0 | Bin 114 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/GMT0 | Bin 114 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Greenwich | Bin 114 -> 0 bytes .../.venv/Lib/site-packages/pytz/zoneinfo/HST | Bin 115 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Hongkong | Bin 1203 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Iceland | Bin 1162 -> 0 bytes .../pytz/zoneinfo/Indian/Antananarivo | Bin 265 -> 0 bytes .../site-packages/pytz/zoneinfo/Indian/Chagos | Bin 199 -> 0 bytes .../pytz/zoneinfo/Indian/Christmas | Bin 165 -> 0 bytes .../site-packages/pytz/zoneinfo/Indian/Cocos | Bin 174 -> 0 bytes .../site-packages/pytz/zoneinfo/Indian/Comoro | Bin 265 -> 0 bytes .../pytz/zoneinfo/Indian/Kerguelen | Bin 165 -> 0 bytes .../site-packages/pytz/zoneinfo/Indian/Mahe | Bin 165 -> 0 bytes .../pytz/zoneinfo/Indian/Maldives | Bin 199 -> 0 bytes .../pytz/zoneinfo/Indian/Mauritius | Bin 241 -> 0 bytes .../pytz/zoneinfo/Indian/Mayotte | Bin 265 -> 0 bytes .../pytz/zoneinfo/Indian/Reunion | Bin 165 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Iran | Bin 2582 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Israel | Bin 2388 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Jamaica | Bin 482 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Japan | Bin 309 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Kwajalein | Bin 316 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Libya | Bin 625 -> 0 bytes .../.venv/Lib/site-packages/pytz/zoneinfo/MET | Bin 2094 -> 0 bytes .../.venv/Lib/site-packages/pytz/zoneinfo/MST | Bin 114 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/MST7MDT | Bin 2310 -> 0 bytes .../pytz/zoneinfo/Mexico/BajaNorte | Bin 2342 -> 0 bytes .../pytz/zoneinfo/Mexico/BajaSur | Bin 1526 -> 0 bytes .../pytz/zoneinfo/Mexico/General | Bin 1584 -> 0 bytes .../.venv/Lib/site-packages/pytz/zoneinfo/NZ | Bin 2437 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/NZ-CHAT | Bin 2068 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Navajo | Bin 2444 -> 0 bytes .../.venv/Lib/site-packages/pytz/zoneinfo/PRC | Bin 561 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/PST8PDT | Bin 2310 -> 0 bytes .../site-packages/pytz/zoneinfo/Pacific/Apia | Bin 1097 -> 0 bytes .../pytz/zoneinfo/Pacific/Auckland | Bin 2437 -> 0 bytes .../pytz/zoneinfo/Pacific/Bougainville | Bin 268 -> 0 bytes .../pytz/zoneinfo/Pacific/Chatham | Bin 2068 -> 0 bytes .../site-packages/pytz/zoneinfo/Pacific/Chuuk | Bin 269 -> 0 bytes .../pytz/zoneinfo/Pacific/Easter | Bin 2233 -> 0 bytes .../site-packages/pytz/zoneinfo/Pacific/Efate | Bin 538 -> 0 bytes .../pytz/zoneinfo/Pacific/Enderbury | Bin 234 -> 0 bytes .../pytz/zoneinfo/Pacific/Fakaofo | Bin 200 -> 0 bytes .../site-packages/pytz/zoneinfo/Pacific/Fiji | Bin 1077 -> 0 bytes .../pytz/zoneinfo/Pacific/Funafuti | Bin 166 -> 0 bytes .../pytz/zoneinfo/Pacific/Galapagos | Bin 238 -> 0 bytes .../pytz/zoneinfo/Pacific/Gambier | Bin 164 -> 0 bytes .../pytz/zoneinfo/Pacific/Guadalcanal | Bin 166 -> 0 bytes .../site-packages/pytz/zoneinfo/Pacific/Guam | Bin 494 -> 0 bytes .../pytz/zoneinfo/Pacific/Honolulu | Bin 329 -> 0 bytes .../pytz/zoneinfo/Pacific/Johnston | Bin 329 -> 0 bytes .../pytz/zoneinfo/Pacific/Kiritimati | Bin 238 -> 0 bytes .../pytz/zoneinfo/Pacific/Kosrae | Bin 351 -> 0 bytes .../pytz/zoneinfo/Pacific/Kwajalein | Bin 316 -> 0 bytes .../pytz/zoneinfo/Pacific/Majuro | Bin 310 -> 0 bytes .../pytz/zoneinfo/Pacific/Marquesas | Bin 173 -> 0 bytes .../pytz/zoneinfo/Pacific/Midway | Bin 175 -> 0 bytes .../site-packages/pytz/zoneinfo/Pacific/Nauru | Bin 252 -> 0 bytes .../site-packages/pytz/zoneinfo/Pacific/Niue | Bin 241 -> 0 bytes .../pytz/zoneinfo/Pacific/Norfolk | Bin 880 -> 0 bytes .../pytz/zoneinfo/Pacific/Noumea | Bin 304 -> 0 bytes .../pytz/zoneinfo/Pacific/Pago_Pago | Bin 175 -> 0 bytes .../site-packages/pytz/zoneinfo/Pacific/Palau | Bin 180 -> 0 bytes .../pytz/zoneinfo/Pacific/Pitcairn | Bin 202 -> 0 bytes .../pytz/zoneinfo/Pacific/Pohnpei | Bin 303 -> 0 bytes .../pytz/zoneinfo/Pacific/Ponape | Bin 303 -> 0 bytes .../pytz/zoneinfo/Pacific/Port_Moresby | Bin 186 -> 0 bytes .../pytz/zoneinfo/Pacific/Rarotonga | Bin 577 -> 0 bytes .../pytz/zoneinfo/Pacific/Saipan | Bin 494 -> 0 bytes .../site-packages/pytz/zoneinfo/Pacific/Samoa | Bin 175 -> 0 bytes .../pytz/zoneinfo/Pacific/Tahiti | Bin 165 -> 0 bytes .../pytz/zoneinfo/Pacific/Tarawa | Bin 166 -> 0 bytes .../pytz/zoneinfo/Pacific/Tongatapu | Bin 372 -> 0 bytes .../site-packages/pytz/zoneinfo/Pacific/Truk | Bin 269 -> 0 bytes .../site-packages/pytz/zoneinfo/Pacific/Wake | Bin 166 -> 0 bytes .../pytz/zoneinfo/Pacific/Wallis | Bin 166 -> 0 bytes .../site-packages/pytz/zoneinfo/Pacific/Yap | Bin 269 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Poland | Bin 2654 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Portugal | Bin 3469 -> 0 bytes .../.venv/Lib/site-packages/pytz/zoneinfo/ROC | Bin 761 -> 0 bytes .../.venv/Lib/site-packages/pytz/zoneinfo/ROK | Bin 617 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Singapore | Bin 383 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Turkey | Bin 1947 -> 0 bytes .../.venv/Lib/site-packages/pytz/zoneinfo/UCT | Bin 114 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/US/Alaska | Bin 2371 -> 0 bytes .../site-packages/pytz/zoneinfo/US/Aleutian | Bin 2356 -> 0 bytes .../site-packages/pytz/zoneinfo/US/Arizona | Bin 328 -> 0 bytes .../site-packages/pytz/zoneinfo/US/Central | Bin 3576 -> 0 bytes .../pytz/zoneinfo/US/East-Indiana | Bin 1666 -> 0 bytes .../site-packages/pytz/zoneinfo/US/Eastern | Bin 3536 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/US/Hawaii | Bin 329 -> 0 bytes .../pytz/zoneinfo/US/Indiana-Starke | Bin 2428 -> 0 bytes .../site-packages/pytz/zoneinfo/US/Michigan | Bin 2230 -> 0 bytes .../site-packages/pytz/zoneinfo/US/Mountain | Bin 2444 -> 0 bytes .../site-packages/pytz/zoneinfo/US/Pacific | Bin 2836 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/US/Samoa | Bin 175 -> 0 bytes .../.venv/Lib/site-packages/pytz/zoneinfo/UTC | Bin 114 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Universal | Bin 114 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/W-SU | Bin 1535 -> 0 bytes .../.venv/Lib/site-packages/pytz/zoneinfo/WET | Bin 1905 -> 0 bytes .../Lib/site-packages/pytz/zoneinfo/Zulu | Bin 114 -> 0 bytes .../site-packages/pytz/zoneinfo/iso3166.tab | 274 - .../site-packages/pytz/zoneinfo/leapseconds | 82 - .../Lib/site-packages/pytz/zoneinfo/tzdata.zi | 4459 --- .../Lib/site-packages/pytz/zoneinfo/zone.tab | 451 - .../site-packages/pytz/zoneinfo/zone1970.tab | 383 - .../__pycache__/__init__.cpython-39.pyc | Bin 3854 -> 3853 bytes .../__pycache__/__version__.cpython-39.pyc | Bin 532 -> 531 bytes .../_internal_utils.cpython-39.pyc | Bin 1279 -> 1278 bytes .../__pycache__/adapters.cpython-39.pyc | Bin 16878 -> 16877 bytes .../requests/__pycache__/api.cpython-39.pyc | Bin 6696 -> 6695 bytes .../requests/__pycache__/auth.cpython-39.pyc | Bin 8308 -> 8307 bytes .../requests/__pycache__/certs.cpython-39.pyc | Bin 598 -> 597 bytes .../__pycache__/compat.cpython-39.pyc | Bin 1688 -> 1687 bytes .../__pycache__/cookies.cpython-39.pyc | Bin 18799 -> 18798 bytes .../__pycache__/exceptions.cpython-39.pyc | Bin 5370 -> 5369 bytes .../requests/__pycache__/help.cpython-39.pyc | Bin 2850 -> 2849 bytes .../requests/__pycache__/hooks.cpython-39.pyc | Bin 967 -> 966 bytes .../__pycache__/models.cpython-39.pyc | Bin 24375 -> 24374 bytes .../__pycache__/packages.cpython-39.pyc | Bin 674 -> 673 bytes .../__pycache__/sessions.cpython-39.pyc | Bin 19834 -> 19833 bytes .../__pycache__/status_codes.cpython-39.pyc | Bin 4216 -> 4215 bytes .../__pycache__/structures.cpython-39.pyc | Bin 4437 -> 4436 bytes .../requests/__pycache__/utils.cpython-39.pyc | Bin 23289 -> 23288 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 8615 -> 8614 bytes .../_deprecation_warning.cpython-39.pyc | Bin 541 -> 540 bytes .../__pycache__/_imp.cpython-39.pyc | Bin 2076 -> 2075 bytes .../__pycache__/archive_util.cpython-39.pyc | Bin 5805 -> 5804 bytes .../__pycache__/build_meta.cpython-39.pyc | Bin 9064 -> 9063 bytes .../__pycache__/config.cpython-39.pyc | Bin 19839 -> 19838 bytes .../__pycache__/dep_util.cpython-39.pyc | Bin 848 -> 847 bytes .../__pycache__/depends.cpython-39.pyc | Bin 5240 -> 5239 bytes .../__pycache__/dist.cpython-39.pyc | Bin 33323 -> 33322 bytes .../__pycache__/errors.cpython-39.pyc | Bin 841 -> 840 bytes .../__pycache__/extension.cpython-39.pyc | Bin 1935 -> 1934 bytes .../__pycache__/glob.cpython-39.pyc | Bin 3685 -> 3684 bytes .../__pycache__/installer.cpython-39.pyc | Bin 2762 -> 2761 bytes .../__pycache__/launch.cpython-39.pyc | Bin 892 -> 891 bytes .../__pycache__/lib2to3_ex.cpython-39.pyc | Bin 2694 -> 2693 bytes .../__pycache__/monkey.cpython-39.pyc | Bin 4604 -> 4603 bytes .../__pycache__/msvc.cpython-39.pyc | Bin 43261 -> 43260 bytes .../__pycache__/namespaces.cpython-39.pyc | Bin 3591 -> 3590 bytes .../__pycache__/package_index.cpython-39.pyc | Bin 33085 -> 33084 bytes .../__pycache__/py34compat.cpython-39.pyc | Bin 471 -> 470 bytes .../__pycache__/sandbox.cpython-39.pyc | Bin 15765 -> 15764 bytes .../__pycache__/ssl_support.cpython-39.pyc | Bin 6852 -> 6851 bytes .../__pycache__/unicode_utils.cpython-39.pyc | Bin 1105 -> 1104 bytes .../__pycache__/version.cpython-39.pyc | Bin 315 -> 314 bytes .../__pycache__/wheel.cpython-39.pyc | Bin 7271 -> 7270 bytes .../windows_support.cpython-39.pyc | Bin 1014 -> 1013 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 449 -> 448 bytes .../__pycache__/_msvccompiler.cpython-39.pyc | Bin 13804 -> 13803 bytes .../__pycache__/archive_util.cpython-39.pyc | Bin 6636 -> 6635 bytes .../__pycache__/bcppcompiler.cpython-39.pyc | Bin 6547 -> 6546 bytes .../__pycache__/ccompiler.cpython-39.pyc | Bin 33252 -> 33251 bytes .../_distutils/__pycache__/cmd.cpython-39.pyc | Bin 13975 -> 13974 bytes .../__pycache__/config.cpython-39.pyc | Bin 3578 -> 3577 bytes .../__pycache__/core.cpython-39.pyc | Bin 6703 -> 6702 bytes .../cygwinccompiler.cpython-39.pyc | Bin 8552 -> 8551 bytes .../__pycache__/debug.cpython-39.pyc | Bin 245 -> 244 bytes .../__pycache__/dep_util.cpython-39.pyc | Bin 2765 -> 2764 bytes .../__pycache__/dir_util.cpython-39.pyc | Bin 5866 -> 5865 bytes .../__pycache__/dist.cpython-39.pyc | Bin 34436 -> 34435 bytes .../__pycache__/errors.cpython-39.pyc | Bin 5301 -> 5300 bytes .../__pycache__/extension.cpython-39.pyc | Bin 6966 -> 6965 bytes .../__pycache__/fancy_getopt.cpython-39.pyc | Bin 10674 -> 10673 bytes .../__pycache__/file_util.cpython-39.pyc | Bin 6032 -> 6031 bytes .../__pycache__/filelist.cpython-39.pyc | Bin 9884 -> 9883 bytes .../_distutils/__pycache__/log.cpython-39.pyc | Bin 2364 -> 2363 bytes .../__pycache__/msvc9compiler.cpython-39.pyc | Bin 17561 -> 17560 bytes .../__pycache__/msvccompiler.cpython-39.pyc | Bin 14756 -> 14755 bytes .../__pycache__/py35compat.cpython-39.pyc | Bin 621 -> 620 bytes .../__pycache__/py38compat.cpython-39.pyc | Bin 416 -> 415 bytes .../__pycache__/spawn.cpython-39.pyc | Bin 3417 -> 3416 bytes .../__pycache__/sysconfig.cpython-39.pyc | Bin 12398 -> 12397 bytes .../__pycache__/text_file.cpython-39.pyc | Bin 8490 -> 8489 bytes .../__pycache__/unixccompiler.cpython-39.pyc | Bin 6651 -> 6650 bytes .../__pycache__/util.cpython-39.pyc | Bin 15684 -> 15683 bytes .../__pycache__/version.cpython-39.pyc | Bin 7390 -> 7389 bytes .../versionpredicate.cpython-39.pyc | Bin 5174 -> 5173 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 524 -> 523 bytes .../command/__pycache__/bdist.cpython-39.pyc | Bin 3654 -> 3653 bytes .../__pycache__/bdist_dumb.cpython-39.pyc | Bin 3637 -> 3636 bytes .../__pycache__/bdist_msi.cpython-39.pyc | Bin 19819 -> 19818 bytes .../__pycache__/bdist_rpm.cpython-39.pyc | Bin 12274 -> 12273 bytes .../__pycache__/bdist_wininst.cpython-39.pyc | Bin 8594 -> 8593 bytes .../command/__pycache__/build.cpython-39.pyc | Bin 3930 -> 3929 bytes .../__pycache__/build_clib.cpython-39.pyc | Bin 4849 -> 4848 bytes .../__pycache__/build_ext.cpython-39.pyc | Bin 16298 -> 16297 bytes .../__pycache__/build_py.cpython-39.pyc | Bin 10482 -> 10481 bytes .../__pycache__/build_scripts.cpython-39.pyc | Bin 4379 -> 4378 bytes .../command/__pycache__/check.cpython-39.pyc | Bin 4958 -> 4957 bytes .../command/__pycache__/clean.cpython-39.pyc | Bin 2131 -> 2130 bytes .../command/__pycache__/config.cpython-39.pyc | Bin 10261 -> 10260 bytes .../__pycache__/install.cpython-39.pyc | Bin 13848 -> 13847 bytes .../__pycache__/install_data.cpython-39.pyc | Bin 2334 -> 2333 bytes .../install_egg_info.cpython-39.pyc | Bin 3069 -> 3068 bytes .../install_headers.cpython-39.pyc | Bin 1759 -> 1758 bytes .../__pycache__/install_lib.cpython-39.pyc | Bin 5131 -> 5130 bytes .../install_scripts.cpython-39.pyc | Bin 2182 -> 2181 bytes .../__pycache__/py37compat.cpython-39.pyc | Bin 1025 -> 1024 bytes .../__pycache__/register.cpython-39.pyc | Bin 8502 -> 8501 bytes .../command/__pycache__/sdist.cpython-39.pyc | Bin 14529 -> 14528 bytes .../command/__pycache__/upload.cpython-39.pyc | Bin 5252 -> 5251 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 179 -> 178 bytes .../__pycache__/ordered_set.cpython-39.pyc | Bin 16373 -> 16372 bytes .../__pycache__/pyparsing.cpython-39.pyc | Bin 201332 -> 201331 bytes .../__pycache__/__about__.cpython-39.pyc | Bin 695 -> 694 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 541 -> 540 bytes .../__pycache__/_compat.cpython-39.pyc | Bin 1139 -> 1138 bytes .../__pycache__/_structures.cpython-39.pyc | Bin 2893 -> 2892 bytes .../__pycache__/_typing.cpython-39.pyc | Bin 1484 -> 1483 bytes .../__pycache__/markers.cpython-39.pyc | Bin 9297 -> 9296 bytes .../__pycache__/requirements.cpython-39.pyc | Bin 4074 -> 4073 bytes .../__pycache__/specifiers.cpython-39.pyc | Bin 20576 -> 20575 bytes .../packaging/__pycache__/tags.cpython-39.pyc | Bin 17255 -> 17254 bytes .../__pycache__/utils.cpython-39.pyc | Bin 1646 -> 1645 bytes .../__pycache__/version.cpython-39.pyc | Bin 13313 -> 13312 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 644 -> 643 bytes .../command/__pycache__/alias.cpython-39.pyc | Bin 2362 -> 2361 bytes .../__pycache__/bdist_egg.cpython-39.pyc | Bin 13028 -> 13027 bytes .../__pycache__/bdist_rpm.cpython-39.pyc | Bin 1348 -> 1347 bytes .../__pycache__/build_clib.cpython-39.pyc | Bin 2459 -> 2458 bytes .../__pycache__/build_ext.cpython-39.pyc | Bin 9732 -> 9731 bytes .../__pycache__/build_py.cpython-39.pyc | Bin 8686 -> 8685 bytes .../__pycache__/develop.cpython-39.pyc | Bin 6447 -> 6446 bytes .../__pycache__/dist_info.cpython-39.pyc | Bin 1386 -> 1385 bytes .../__pycache__/easy_install.cpython-39.pyc | Bin 63543 -> 63542 bytes .../__pycache__/egg_info.cpython-39.pyc | Bin 21703 -> 21702 bytes .../__pycache__/install.cpython-39.pyc | Bin 4027 -> 4026 bytes .../install_egg_info.cpython-39.pyc | Bin 2418 -> 2417 bytes .../__pycache__/install_lib.cpython-39.pyc | Bin 4125 -> 4124 bytes .../install_scripts.cpython-39.pyc | Bin 2413 -> 2412 bytes .../__pycache__/py36compat.cpython-39.pyc | Bin 4580 -> 4579 bytes .../__pycache__/register.cpython-39.pyc | Bin 836 -> 835 bytes .../command/__pycache__/rotate.cpython-39.pyc | Bin 2495 -> 2494 bytes .../__pycache__/saveopts.cpython-39.pyc | Bin 914 -> 913 bytes .../command/__pycache__/sdist.cpython-39.pyc | Bin 7614 -> 7613 bytes .../command/__pycache__/setopt.cpython-39.pyc | Bin 4526 -> 4525 bytes .../command/__pycache__/test.cpython-39.pyc | Bin 8489 -> 8488 bytes .../command/__pycache__/upload.cpython-39.pyc | Bin 809 -> 808 bytes .../__pycache__/upload_docs.cpython-39.pyc | Bin 6152 -> 6151 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 2894 -> 2893 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 3663 -> 3662 bytes .../__pycache__/__meta__.cpython-39.pyc | Bin 5772 -> 5771 bytes .../__pycache__/css_match.cpython-39.pyc | Bin 34023 -> 34022 bytes .../__pycache__/css_parser.cpython-39.pyc | Bin 26861 -> 26860 bytes .../__pycache__/css_types.cpython-39.pyc | Bin 10617 -> 10616 bytes .../soupsieve/__pycache__/util.cpython-39.pyc | Bin 2860 -> 2859 bytes .../INSTALLER | 1 - .../LICENSE | 254 - .../METADATA | 46 - .../RECORD | 8 - .../WHEEL | 5 - .../top_level.txt | 1 - .../Lib/site-packages/typing_extensions.py | 2843 -- .../__pycache__/__init__.cpython-39.pyc | Bin 2166 -> 2165 bytes .../__pycache__/_collections.cpython-39.pyc | Bin 10761 -> 10760 bytes .../__pycache__/_version.cpython-39.pyc | Bin 190 -> 189 bytes .../__pycache__/connection.cpython-39.pyc | Bin 13347 -> 13346 bytes .../__pycache__/connectionpool.cpython-39.pyc | Bin 24443 -> 24442 bytes .../__pycache__/exceptions.cpython-39.pyc | Bin 11623 -> 11622 bytes .../urllib3/__pycache__/fields.cpython-39.pyc | Bin 8138 -> 8137 bytes .../__pycache__/filepost.cpython-39.pyc | Bin 2739 -> 2738 bytes .../__pycache__/poolmanager.cpython-39.pyc | Bin 15141 -> 15140 bytes .../__pycache__/request.cpython-39.pyc | Bin 5602 -> 5601 bytes .../__pycache__/response.cpython-39.pyc | Bin 20813 -> 20812 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 176 -> 175 bytes .../_appengine_environ.cpython-39.pyc | Bin 1396 -> 1395 bytes .../__pycache__/appengine.cpython-39.pyc | Bin 8225 -> 8224 bytes .../__pycache__/ntlmpool.cpython-39.pyc | Bin 3603 -> 3602 bytes .../__pycache__/pyopenssl.cpython-39.pyc | Bin 15547 -> 15546 bytes .../securetransport.cpython-39.pyc | Bin 21863 -> 21862 bytes .../contrib/__pycache__/socks.cpython-39.pyc | Bin 5612 -> 5611 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 193 -> 192 bytes .../__pycache__/bindings.cpython-39.pyc | Bin 10688 -> 10687 bytes .../__pycache__/low_level.cpython-39.pyc | Bin 9149 -> 9148 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 290 -> 289 bytes .../packages/__pycache__/six.cpython-39.pyc | Bin 27560 -> 27559 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 187 -> 186 bytes .../__pycache__/makefile.cpython-39.pyc | Bin 1285 -> 1284 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 549 -> 548 bytes .../_implementation.cpython-39.pyc | Bin 3280 -> 3279 bytes .../util/__pycache__/__init__.cpython-39.pyc | Bin 1086 -> 1085 bytes .../__pycache__/connection.cpython-39.pyc | Bin 3426 -> 3425 bytes .../util/__pycache__/proxy.cpython-39.pyc | Bin 1322 -> 1321 bytes .../util/__pycache__/queue.cpython-39.pyc | Bin 1041 -> 1040 bytes .../util/__pycache__/request.cpython-39.pyc | Bin 3429 -> 3428 bytes .../util/__pycache__/response.cpython-39.pyc | Bin 2326 -> 2325 bytes .../util/__pycache__/retry.cpython-39.pyc | Bin 15813 -> 15812 bytes .../util/__pycache__/ssl_.cpython-39.pyc | Bin 11298 -> 11297 bytes .../__pycache__/ssltransport.cpython-39.pyc | Bin 7467 -> 7466 bytes .../util/__pycache__/timeout.cpython-39.pyc | Bin 8924 -> 8923 bytes .../util/__pycache__/url.cpython-39.pyc | Bin 10625 -> 10624 bytes .../util/__pycache__/wait.cpython-39.pyc | Bin 3109 -> 3108 bytes .../yarl-1.6.3.dist-info/INSTALLER | 1 - .../yarl-1.6.3.dist-info/LICENSE | 201 - .../yarl-1.6.3.dist-info/METADATA | 802 - .../site-packages/yarl-1.6.3.dist-info/RECORD | 20 - .../site-packages/yarl-1.6.3.dist-info/WHEEL | 5 - .../yarl-1.6.3.dist-info/top_level.txt | 1 - .../.venv/Lib/site-packages/yarl/__init__.py | 5 - .../.venv/Lib/site-packages/yarl/__init__.pyi | 111 - .../yarl/__pycache__/__init__.cpython-39.pyc | Bin 307 -> 0 bytes .../yarl/__pycache__/_quoting.cpython-39.pyc | Bin 499 -> 0 bytes .../__pycache__/_quoting_py.cpython-39.pyc | Bin 4306 -> 0 bytes .../yarl/__pycache__/_url.cpython-39.pyc | Bin 26786 -> 0 bytes .../.venv/Lib/site-packages/yarl/_quoting.py | 18 - .../.venv/Lib/site-packages/yarl/_quoting_c.c | 11612 -------- .../yarl/_quoting_c.cp39-win_amd64.pyd | Bin 80384 -> 0 bytes .../Lib/site-packages/yarl/_quoting_c.pyi | 16 - .../Lib/site-packages/yarl/_quoting_c.pyx | 371 - .../Lib/site-packages/yarl/_quoting_py.py | 198 - .../.venv/Lib/site-packages/yarl/_url.py | 1144 - .../.venv/Lib/site-packages/yarl/py.typed | 1 - IKEA_scraper/.venv/Scripts/activate | 2 +- IKEA_scraper/.venv/Scripts/activate.bat | 2 +- IKEA_scraper/.venv/Scripts/chardetect.exe | Bin 106369 -> 0 bytes IKEA_scraper/.venv/Scripts/normalizer.exe | Bin 106392 -> 106391 bytes IKEA_scraper/.venv/Scripts/pip.exe | Bin 106369 -> 106368 bytes IKEA_scraper/.venv/Scripts/pip3.9.exe | Bin 106369 -> 106368 bytes IKEA_scraper/.venv/Scripts/pip3.exe | Bin 106369 -> 106368 bytes IKEA_scraper/.venv/Scripts/pybabel.exe | Bin 106370 -> 0 bytes 2669 files changed, 8 insertions(+), 191807 deletions(-) delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/Babel-2.9.1.dist-info/INSTALLER delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/Babel-2.9.1.dist-info/LICENSE delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/Babel-2.9.1.dist-info/METADATA delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/Babel-2.9.1.dist-info/RECORD delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/Babel-2.9.1.dist-info/WHEEL delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/Babel-2.9.1.dist-info/entry_points.txt delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/Babel-2.9.1.dist-info/top_level.txt delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/__pycache__/typing_extensions.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram-2.14.3.dist-info/INSTALLER delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram-2.14.3.dist-info/LICENSE delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram-2.14.3.dist-info/METADATA delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram-2.14.3.dist-info/RECORD delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram-2.14.3.dist-info/REQUESTED delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram-2.14.3.dist-info/WHEEL delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram-2.14.3.dist-info/top_level.txt delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/__init__.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/__main__.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/__pycache__/__init__.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/__pycache__/__main__.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/bot/__init__.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/bot/__pycache__/__init__.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/bot/__pycache__/api.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/bot/__pycache__/base.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/bot/__pycache__/bot.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/bot/api.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/bot/base.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/bot/bot.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/__init__.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/__pycache__/__init__.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/fsm_storage/__init__.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/fsm_storage/__pycache__/__init__.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/fsm_storage/__pycache__/files.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/fsm_storage/__pycache__/memory.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/fsm_storage/__pycache__/mongo.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/fsm_storage/__pycache__/redis.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/fsm_storage/__pycache__/rethinkdb.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/fsm_storage/files.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/fsm_storage/memory.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/fsm_storage/mongo.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/fsm_storage/redis.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/fsm_storage/rethinkdb.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/__init__.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/__pycache__/__init__.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/__pycache__/environment.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/__pycache__/fsm.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/__pycache__/i18n.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/__pycache__/logging.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/environment.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/fsm.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/i18n.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/logging.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/__init__.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/__pycache__/__init__.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/__pycache__/dispatcher.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/__pycache__/handler.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/__pycache__/middlewares.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/__pycache__/storage.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/__pycache__/webhook.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/dispatcher.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/__init__.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/__pycache__/__init__.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/__pycache__/builtin.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/__pycache__/factory.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/__pycache__/filters.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/__pycache__/state.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/builtin.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/factory.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/filters.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/state.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/handler.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/middlewares.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/storage.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/webhook.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__init__.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/__init__.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/animation.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/audio.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/auth_widget_data.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/base.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/bot_command.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/bot_command_scope.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/callback_game.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/callback_query.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/chat.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/chat_invite_link.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/chat_location.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/chat_member.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/chat_member_updated.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/chat_permissions.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/chat_photo.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/chosen_inline_result.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/contact.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/dice.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/document.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/encrypted_credentials.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/encrypted_passport_element.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/fields.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/file.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/force_reply.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/game.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/game_high_score.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/inline_keyboard.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/inline_query.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/inline_query_result.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/input_file.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/input_media.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/input_message_content.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/invoice.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/labeled_price.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/location.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/login_url.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/mask_position.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/message.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/message_auto_delete_timer_changed.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/message_entity.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/message_id.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/mixins.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/order_info.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/passport_data.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/passport_element_error.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/passport_file.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/photo_size.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/poll.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/pre_checkout_query.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/proximity_alert_triggered.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/reply_keyboard.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/response_parameters.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/shipping_address.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/shipping_option.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/shipping_query.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/sticker.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/sticker_set.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/successful_payment.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/update.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/user.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/user_profile_photos.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/venue.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/video.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/video_note.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/voice.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/voice_chat_ended.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/voice_chat_participants_invited.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/voice_chat_scheduled.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/voice_chat_started.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/webhook_info.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/animation.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/audio.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/auth_widget_data.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/base.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/bot_command.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/bot_command_scope.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/callback_game.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/callback_query.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chat.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chat_invite_link.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chat_location.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chat_member.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chat_member_updated.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chat_permissions.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chat_photo.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chosen_inline_result.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/contact.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/dice.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/document.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/encrypted_credentials.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/encrypted_passport_element.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/fields.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/file.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/force_reply.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/game.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/game_high_score.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/inline_keyboard.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/inline_query.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/inline_query_result.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/input_file.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/input_media.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/input_message_content.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/invoice.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/labeled_price.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/location.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/login_url.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/mask_position.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/message.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/message_auto_delete_timer_changed.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/message_entity.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/message_id.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/mixins.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/order_info.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/passport_data.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/passport_element_error.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/passport_file.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/photo_size.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/poll.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/pre_checkout_query.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/proximity_alert_triggered.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/reply_keyboard.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/response_parameters.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/shipping_address.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/shipping_option.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/shipping_query.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/sticker.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/sticker_set.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/successful_payment.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/update.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/user.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/user_profile_photos.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/venue.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/video.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/video_note.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/voice.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/voice_chat_ended.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/voice_chat_participants_invited.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/voice_chat_scheduled.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/voice_chat_started.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/types/webhook_info.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__init__.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/__init__.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/auth_widget.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/callback_data.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/deep_linking.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/deprecated.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/emoji.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/exceptions.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/executor.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/helper.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/json.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/markdown.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/mixins.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/parts.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/payload.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/text_decorations.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/auth_widget.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/callback_data.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/deep_linking.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/deprecated.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/emoji.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/exceptions.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/executor.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/helper.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/json.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/markdown.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/mixins.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/parts.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/payload.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/text_decorations.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp-3.7.4.post0.dist-info/INSTALLER delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp-3.7.4.post0.dist-info/LICENSE.txt delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp-3.7.4.post0.dist-info/METADATA delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp-3.7.4.post0.dist-info/RECORD delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp-3.7.4.post0.dist-info/WHEEL delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp-3.7.4.post0.dist-info/top_level.txt delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_cparser.pxd.hash delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_find_header.pxd.hash delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_frozenlist.pyx.hash delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_helpers.pyi.hash delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_helpers.pyx.hash delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_http_parser.pyx.hash delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_http_writer.pyx.hash delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_websocket.pyx.hash delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/frozenlist.pyi.hash delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/hdrs.py.hash delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/signals.pyi.hash delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__init__.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/__init__.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/abc.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/base_protocol.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/client.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/client_exceptions.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/client_proto.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/client_reqrep.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/client_ws.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/connector.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/cookiejar.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/formdata.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/frozenlist.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/hdrs.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/helpers.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/http.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/http_exceptions.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/http_parser.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/http_websocket.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/http_writer.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/locks.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/log.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/multipart.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/payload.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/payload_streamer.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/pytest_plugin.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/resolver.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/signals.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/streams.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/tcp_helpers.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/test_utils.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/tracing.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/typedefs.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_app.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_exceptions.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_fileresponse.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_log.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_middlewares.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_protocol.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_request.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_response.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_routedef.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_runner.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_server.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_urldispatcher.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_ws.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/worker.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/_cparser.pxd delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/_find_header.c delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/_find_header.h delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/_find_header.pxd delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/_frozenlist.c delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/_frozenlist.cp39-win_amd64.pyd delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/_frozenlist.pyx delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/_headers.pxi delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/_helpers.c delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/_helpers.cp39-win_amd64.pyd delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/_helpers.pyi delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/_helpers.pyx delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/_http_parser.c delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/_http_parser.cp39-win_amd64.pyd delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/_http_parser.pyx delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/_http_writer.c delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/_http_writer.cp39-win_amd64.pyd delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/_http_writer.pyx delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/_websocket.c delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/_websocket.cp39-win_amd64.pyd delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/_websocket.pyx delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/abc.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/base_protocol.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/client.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/client_exceptions.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/client_proto.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/client_reqrep.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/client_ws.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/connector.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/cookiejar.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/formdata.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/frozenlist.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/frozenlist.pyi delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/hdrs.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/helpers.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/http.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/http_exceptions.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/http_parser.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/http_websocket.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/http_writer.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/locks.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/log.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/multipart.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/payload.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/payload_streamer.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/py.typed delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/pytest_plugin.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/resolver.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/signals.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/signals.pyi delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/streams.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/tcp_helpers.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/test_utils.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/tracing.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/typedefs.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/web.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_app.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_exceptions.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_fileresponse.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_log.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_middlewares.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_protocol.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_request.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_response.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_routedef.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_runner.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_server.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_urldispatcher.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_ws.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/aiohttp/worker.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/async_timeout-3.0.1.dist-info/INSTALLER delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/async_timeout-3.0.1.dist-info/LICENSE delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/async_timeout-3.0.1.dist-info/METADATA delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/async_timeout-3.0.1.dist-info/RECORD delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/async_timeout-3.0.1.dist-info/WHEEL delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/async_timeout-3.0.1.dist-info/top_level.txt delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/async_timeout/__init__.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/async_timeout/__pycache__/__init__.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/async_timeout/py.typed delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/__init__.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/__init__.pyi delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/__pycache__/__init__.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/__pycache__/_cmp.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/__pycache__/_compat.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/__pycache__/_config.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/__pycache__/_funcs.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/__pycache__/_make.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/__pycache__/_next_gen.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/__pycache__/_version_info.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/__pycache__/converters.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/__pycache__/exceptions.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/__pycache__/filters.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/__pycache__/setters.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/__pycache__/validators.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/_cmp.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/_cmp.pyi delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/_compat.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/_config.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/_funcs.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/_make.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/_next_gen.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/_version_info.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/_version_info.pyi delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/converters.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/converters.pyi delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/exceptions.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/exceptions.pyi delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/filters.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/filters.pyi delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/py.typed delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/setters.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/setters.pyi delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/validators.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attr/validators.pyi delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attrs-21.2.0.dist-info/AUTHORS.rst delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attrs-21.2.0.dist-info/INSTALLER delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attrs-21.2.0.dist-info/LICENSE delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attrs-21.2.0.dist-info/METADATA delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attrs-21.2.0.dist-info/RECORD delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attrs-21.2.0.dist-info/WHEEL delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/attrs-21.2.0.dist-info/top_level.txt delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/__init__.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/__pycache__/__init__.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/__pycache__/_compat.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/__pycache__/core.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/__pycache__/dates.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/__pycache__/languages.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/__pycache__/lists.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/__pycache__/localedata.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/__pycache__/numbers.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/__pycache__/plural.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/__pycache__/support.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/__pycache__/units.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/__pycache__/util.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/_compat.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/core.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/dates.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/global.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/languages.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/lists.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/af.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/af_NA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/af_ZA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/agq.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/agq_CM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ak.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ak_GH.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/am.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/am_ET.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_001.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_AE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_BH.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_DJ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_DZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_EG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_EH.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_ER.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_IL.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_IQ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_JO.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_KM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_KW.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_LB.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_LY.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_MA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_MR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_OM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_PS.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_QA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_SA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_SD.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_SO.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_SS.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_SY.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_TD.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_TN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_YE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/as.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/as_IN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/asa.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/asa_TZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ast.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ast_ES.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/az.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/az_Cyrl.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/az_Cyrl_AZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/az_Latn.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/az_Latn_AZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bas.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bas_CM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/be.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/be_BY.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bem.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bem_ZM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bez.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bez_TZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bg.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bg_BG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bm.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bm_ML.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bn.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bn_BD.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bn_IN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bo.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bo_CN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bo_IN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/br.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/br_FR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/brx.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/brx_IN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bs.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bs_Cyrl.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bs_Cyrl_BA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bs_Latn.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bs_Latn_BA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ca.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ca_AD.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ca_ES.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ca_ES_VALENCIA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ca_FR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ca_IT.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ccp.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ccp_BD.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ccp_IN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ce.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ce_RU.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ceb.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ceb_PH.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/cgg.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/cgg_UG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/chr.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/chr_US.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ckb.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ckb_IQ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ckb_IR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/cs.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/cs_CZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/cu.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/cu_RU.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/cy.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/cy_GB.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/da.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/da_DK.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/da_GL.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/dav.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/dav_KE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/de.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/de_AT.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/de_BE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/de_CH.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/de_DE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/de_IT.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/de_LI.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/de_LU.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/dje.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/dje_NE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/dsb.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/dsb_DE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/dua.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/dua_CM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/dyo.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/dyo_SN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/dz.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/dz_BT.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ebu.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ebu_KE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ee.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ee_GH.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ee_TG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/el.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/el_CY.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/el_GR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_001.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_150.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_AE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_AG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_AI.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_AS.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_AT.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_AU.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_BB.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_BE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_BI.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_BM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_BS.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_BW.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_BZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_CA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_CC.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_CH.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_CK.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_CM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_CX.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_CY.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_DE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_DG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_DK.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_DM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_ER.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_FI.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_FJ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_FK.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_FM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_GB.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_GD.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_GG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_GH.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_GI.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_GM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_GU.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_GY.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_HK.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_IE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_IL.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_IM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_IN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_IO.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_JE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_JM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_KE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_KI.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_KN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_KY.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_LC.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_LR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_LS.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_MG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_MH.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_MO.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_MP.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_MS.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_MT.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_MU.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_MW.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_MY.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_NA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_NF.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_NG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_NL.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_NR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_NU.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_NZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_PG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_PH.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_PK.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_PN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_PR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_PW.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_RW.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_SB.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_SC.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_SD.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_SE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_SG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_SH.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_SI.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_SL.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_SS.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_SX.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_SZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_TC.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_TK.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_TO.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_TT.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_TV.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_TZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_UG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_UM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_US.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_US_POSIX.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_VC.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_VG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_VI.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_VU.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_WS.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_ZA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_ZM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/en_ZW.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/eo.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/eo_001.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/es.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/es_419.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/es_AR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/es_BO.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/es_BR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/es_BZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/es_CL.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/es_CO.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/es_CR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/es_CU.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/es_DO.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/es_EA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/es_EC.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/es_ES.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/es_GQ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/es_GT.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/es_HN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/es_IC.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/es_MX.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/es_NI.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/es_PA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/es_PE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/es_PH.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/es_PR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/es_PY.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/es_SV.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/es_US.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/es_UY.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/es_VE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/et.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/et_EE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/eu.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/eu_ES.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ewo.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ewo_CM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fa.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fa_AF.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fa_IR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ff.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ff_Adlm.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ff_Adlm_BF.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ff_Adlm_CM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ff_Adlm_GH.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ff_Adlm_GM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ff_Adlm_GN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ff_Adlm_GW.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ff_Adlm_LR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ff_Adlm_MR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ff_Adlm_NE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ff_Adlm_NG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ff_Adlm_SL.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ff_Adlm_SN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ff_Latn.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ff_Latn_BF.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ff_Latn_CM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ff_Latn_GH.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ff_Latn_GM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ff_Latn_GN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ff_Latn_GW.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ff_Latn_LR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ff_Latn_MR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ff_Latn_NE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ff_Latn_NG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ff_Latn_SL.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ff_Latn_SN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fi.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fi_FI.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fil.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fil_PH.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fo.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fo_DK.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fo_FO.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_BE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_BF.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_BI.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_BJ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_BL.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_CA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_CD.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_CF.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_CG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_CH.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_CI.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_CM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_DJ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_DZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_FR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_GA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_GF.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_GN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_GP.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_GQ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_HT.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_KM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_LU.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_MA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_MC.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_MF.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_MG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_ML.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_MQ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_MR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_MU.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_NC.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_NE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_PF.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_PM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_RE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_RW.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_SC.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_SN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_SY.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_TD.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_TG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_TN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_VU.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_WF.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fr_YT.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fur.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fur_IT.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fy.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/fy_NL.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ga.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ga_GB.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ga_IE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/gd.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/gd_GB.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/gl.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/gl_ES.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/gsw.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/gsw_CH.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/gsw_FR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/gsw_LI.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/gu.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/gu_IN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/guz.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/guz_KE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/gv.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/gv_IM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ha.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ha_GH.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ha_NE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ha_NG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/haw.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/haw_US.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/he.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/he_IL.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/hi.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/hi_IN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/hr.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/hr_BA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/hr_HR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/hsb.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/hsb_DE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/hu.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/hu_HU.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/hy.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/hy_AM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ia.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ia_001.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/id.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/id_ID.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ig.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ig_NG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ii.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ii_CN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/is.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/is_IS.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/it.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/it_CH.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/it_IT.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/it_SM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/it_VA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ja.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ja_JP.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/jgo.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/jgo_CM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/jmc.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/jmc_TZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/jv.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/jv_ID.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ka.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ka_GE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/kab.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/kab_DZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/kam.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/kam_KE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/kde.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/kde_TZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/kea.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/kea_CV.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/khq.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/khq_ML.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ki.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ki_KE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/kk.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/kk_KZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/kkj.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/kkj_CM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/kl.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/kl_GL.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/kln.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/kln_KE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/km.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/km_KH.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/kn.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/kn_IN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ko.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ko_KP.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ko_KR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/kok.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/kok_IN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ks.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ks_Arab.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ks_Arab_IN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ksb.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ksb_TZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ksf.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ksf_CM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ksh.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ksh_DE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ku.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ku_TR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/kw.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/kw_GB.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ky.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ky_KG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/lag.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/lag_TZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/lb.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/lb_LU.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/lg.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/lg_UG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/lkt.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/lkt_US.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ln.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ln_AO.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ln_CD.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ln_CF.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ln_CG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/lo.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/lo_LA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/lrc.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/lrc_IQ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/lrc_IR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/lt.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/lt_LT.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/lu.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/lu_CD.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/luo.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/luo_KE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/luy.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/luy_KE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/lv.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/lv_LV.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mai.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mai_IN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mas.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mas_KE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mas_TZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mer.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mer_KE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mfe.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mfe_MU.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mg.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mg_MG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mgh.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mgh_MZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mgo.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mgo_CM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mi.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mi_NZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mk.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mk_MK.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ml.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ml_IN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mn.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mn_MN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mni.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mni_Beng.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mni_Beng_IN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mr.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mr_IN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ms.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ms_BN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ms_ID.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ms_MY.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ms_SG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mt.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mt_MT.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mua.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mua_CM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/my.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/my_MM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mzn.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/mzn_IR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/naq.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/naq_NA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/nb.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/nb_NO.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/nb_SJ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/nd.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/nd_ZW.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/nds.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/nds_DE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/nds_NL.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ne.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ne_IN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ne_NP.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/nl.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/nl_AW.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/nl_BE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/nl_BQ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/nl_CW.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/nl_NL.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/nl_SR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/nl_SX.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/nmg.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/nmg_CM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/nn.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/nn_NO.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/nnh.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/nnh_CM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/nus.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/nus_SS.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/nyn.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/nyn_UG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/om.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/om_ET.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/om_KE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/or.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/or_IN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/os.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/os_GE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/os_RU.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/pa.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/pa_Arab.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/pa_Arab_PK.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/pa_Guru.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/pa_Guru_IN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/pcm.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/pcm_NG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/pl.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/pl_PL.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/prg.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/prg_001.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ps.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ps_AF.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ps_PK.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/pt.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/pt_AO.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/pt_BR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/pt_CH.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/pt_CV.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/pt_GQ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/pt_GW.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/pt_LU.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/pt_MO.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/pt_MZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/pt_PT.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/pt_ST.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/pt_TL.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/qu.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/qu_BO.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/qu_EC.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/qu_PE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/rm.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/rm_CH.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/rn.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/rn_BI.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ro.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ro_MD.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ro_RO.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/rof.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/rof_TZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/root.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ru.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ru_BY.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ru_KG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ru_KZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ru_MD.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ru_RU.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ru_UA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/rw.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/rw_RW.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/rwk.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/rwk_TZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sah.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sah_RU.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/saq.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/saq_KE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sat.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sat_Olck.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sat_Olck_IN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sbp.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sbp_TZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sd.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sd_Arab.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sd_Arab_PK.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sd_Deva.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sd_Deva_IN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/se.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/se_FI.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/se_NO.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/se_SE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/seh.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/seh_MZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ses.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ses_ML.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sg.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sg_CF.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/shi.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/shi_Latn.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/shi_Latn_MA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/shi_Tfng.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/shi_Tfng_MA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/si.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/si_LK.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sk.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sk_SK.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sl.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sl_SI.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/smn.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/smn_FI.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sn.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sn_ZW.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/so.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/so_DJ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/so_ET.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/so_KE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/so_SO.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sq.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sq_AL.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sq_MK.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sq_XK.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sr.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sr_Cyrl.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sr_Cyrl_BA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sr_Cyrl_ME.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sr_Cyrl_RS.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sr_Cyrl_XK.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sr_Latn.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sr_Latn_BA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sr_Latn_ME.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sr_Latn_RS.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sr_Latn_XK.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/su.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/su_Latn.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/su_Latn_ID.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sv.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sv_AX.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sv_FI.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sv_SE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sw.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sw_CD.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sw_KE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sw_TZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/sw_UG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ta.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ta_IN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ta_LK.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ta_MY.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ta_SG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/te.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/te_IN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/teo.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/teo_KE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/teo_UG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/tg.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/tg_TJ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/th.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/th_TH.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ti.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ti_ER.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ti_ET.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/tk.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/tk_TM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/to.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/to_TO.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/tr.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/tr_CY.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/tr_TR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/tt.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/tt_RU.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/twq.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/twq_NE.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/tzm.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/tzm_MA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ug.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ug_CN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/uk.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/uk_UA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ur.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ur_IN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ur_PK.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/uz.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/uz_Arab.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/uz_Arab_AF.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/uz_Cyrl.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/uz_Cyrl_UZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/uz_Latn.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/uz_Latn_UZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/vai.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/vai_Latn.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/vai_Latn_LR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/vai_Vaii.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/vai_Vaii_LR.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/vi.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/vi_VN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/vo.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/vo_001.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/vun.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/vun_TZ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/wae.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/wae_CH.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/wo.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/wo_SN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/xh.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/xh_ZA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/xog.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/xog_UG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/yav.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/yav_CM.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/yi.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/yi_001.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/yo.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/yo_BJ.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/yo_NG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/yue.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/yue_Hans.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/yue_Hans_CN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/yue_Hant.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/yue_Hant_HK.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/zgh.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/zgh_MA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/zh.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/zh_Hans.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/zh_Hans_CN.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/zh_Hans_HK.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/zh_Hans_MO.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/zh_Hans_SG.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/zh_Hant.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/zh_Hant_HK.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/zh_Hant_MO.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/zh_Hant_TW.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/zu.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/zu_ZA.dat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/localedata.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/localtime/__init__.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/localtime/__pycache__/__init__.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/localtime/__pycache__/_unix.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/localtime/__pycache__/_win32.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/localtime/_unix.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/localtime/_win32.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/messages/__init__.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/messages/__pycache__/__init__.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/messages/__pycache__/catalog.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/messages/__pycache__/checkers.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/messages/__pycache__/extract.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/messages/__pycache__/frontend.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/messages/__pycache__/jslexer.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/messages/__pycache__/mofile.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/messages/__pycache__/plurals.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/messages/__pycache__/pofile.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/messages/catalog.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/messages/checkers.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/messages/extract.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/messages/frontend.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/messages/jslexer.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/messages/mofile.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/messages/plurals.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/messages/pofile.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/numbers.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/plural.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/support.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/units.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/babel/util.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet-4.0.0.dist-info/INSTALLER delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet-4.0.0.dist-info/LICENSE delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet-4.0.0.dist-info/METADATA delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet-4.0.0.dist-info/RECORD delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet-4.0.0.dist-info/WHEEL delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet-4.0.0.dist-info/entry_points.txt delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet-4.0.0.dist-info/top_level.txt delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__init__.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/__init__.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/big5freq.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/big5prober.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/chardistribution.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/charsetgroupprober.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/charsetprober.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/codingstatemachine.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/compat.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/cp949prober.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/enums.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/escprober.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/escsm.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/eucjpprober.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/euckrfreq.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/euckrprober.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/euctwfreq.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/euctwprober.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/gb2312freq.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/gb2312prober.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/hebrewprober.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/jisfreq.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/jpcntx.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/langbulgarianmodel.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/langgreekmodel.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/langhebrewmodel.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/langhungarianmodel.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/langrussianmodel.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/langthaimodel.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/langturkishmodel.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/latin1prober.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/mbcharsetprober.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/mbcsgroupprober.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/mbcssm.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/sbcharsetprober.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/sbcsgroupprober.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/sjisprober.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/universaldetector.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/utf8prober.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/__pycache__/version.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/big5freq.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/big5prober.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/chardistribution.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/charsetgroupprober.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/charsetprober.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/cli/__init__.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/cli/__pycache__/__init__.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/cli/__pycache__/chardetect.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/cli/chardetect.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/codingstatemachine.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/compat.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/cp949prober.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/enums.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/escprober.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/escsm.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/eucjpprober.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/euckrfreq.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/euckrprober.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/euctwfreq.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/euctwprober.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/gb2312freq.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/gb2312prober.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/hebrewprober.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/jisfreq.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/jpcntx.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/langbulgarianmodel.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/langgreekmodel.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/langhebrewmodel.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/langhungarianmodel.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/langrussianmodel.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/langthaimodel.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/langturkishmodel.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/latin1prober.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/mbcharsetprober.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/mbcsgroupprober.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/mbcssm.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/metadata/__init__.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/metadata/__pycache__/__init__.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/metadata/__pycache__/languages.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/metadata/languages.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/sbcharsetprober.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/sbcsgroupprober.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/sjisprober.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/universaldetector.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/utf8prober.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/chardet/version.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/multidict-5.1.0.dist-info/INSTALLER delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/multidict-5.1.0.dist-info/LICENSE delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/multidict-5.1.0.dist-info/METADATA delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/multidict-5.1.0.dist-info/RECORD delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/multidict-5.1.0.dist-info/WHEEL delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/multidict-5.1.0.dist-info/top_level.txt delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/multidict/__init__.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/multidict/__init__.pyi delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/multidict/__pycache__/__init__.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/multidict/__pycache__/_abc.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/multidict/__pycache__/_compat.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/multidict/__pycache__/_multidict_base.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/multidict/__pycache__/_multidict_py.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/multidict/_abc.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/multidict/_compat.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/multidict/_multidict.c delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/multidict/_multidict.cp39-win_amd64.pyd delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/multidict/_multidict_base.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/multidict/_multidict_py.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/multidict/_multilib/defs.h delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/multidict/_multilib/dict.h delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/multidict/_multilib/istr.h delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/multidict/_multilib/iter.h delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/multidict/_multilib/pair_list.h delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/multidict/_multilib/views.h delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/multidict/py.typed delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz-2021.1.dist-info/DESCRIPTION.rst delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz-2021.1.dist-info/INSTALLER delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz-2021.1.dist-info/LICENSE.txt delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz-2021.1.dist-info/METADATA delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz-2021.1.dist-info/RECORD delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz-2021.1.dist-info/WHEEL delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz-2021.1.dist-info/metadata.json delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz-2021.1.dist-info/top_level.txt delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz-2021.1.dist-info/zip-safe delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/__init__.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/__pycache__/__init__.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/__pycache__/exceptions.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/__pycache__/lazy.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/__pycache__/reference.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/__pycache__/tzfile.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/__pycache__/tzinfo.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/exceptions.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/lazy.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/reference.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/tzfile.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/tzinfo.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Abidjan delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Accra delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Addis_Ababa delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Algiers delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Asmara delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Asmera delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Bamako delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Bangui delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Banjul delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Bissau delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Blantyre delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Brazzaville delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Bujumbura delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Cairo delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Casablanca delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Ceuta delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Conakry delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Dakar delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Dar_es_Salaam delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Djibouti delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Douala delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/El_Aaiun delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Freetown delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Gaborone delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Harare delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Johannesburg delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Juba delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Kampala delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Khartoum delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Kigali delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Kinshasa delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Lagos delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Libreville delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Lome delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Luanda delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Lubumbashi delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Lusaka delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Malabo delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Maputo delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Maseru delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Mbabane delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Mogadishu delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Monrovia delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Nairobi delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Ndjamena delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Niamey delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Nouakchott delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Ouagadougou delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Porto-Novo delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Sao_Tome delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Timbuktu delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Tripoli delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Tunis delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Africa/Windhoek delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Adak delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Anchorage delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Anguilla delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Antigua delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Araguaina delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Argentina/Buenos_Aires delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Argentina/Catamarca delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Argentina/ComodRivadavia delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Argentina/Cordoba delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Argentina/Jujuy delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Argentina/La_Rioja delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Argentina/Mendoza delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Argentina/Rio_Gallegos delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Argentina/Salta delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Argentina/San_Juan delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Argentina/San_Luis delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Argentina/Tucuman delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Argentina/Ushuaia delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Aruba delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Asuncion delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Atikokan delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Atka delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Bahia delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Bahia_Banderas delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Barbados delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Belem delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Belize delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Blanc-Sablon delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Boa_Vista delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Bogota delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Boise delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Buenos_Aires delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Cambridge_Bay delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Campo_Grande delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Cancun delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Caracas delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Catamarca delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Cayenne delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Cayman delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Chicago delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Chihuahua delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Coral_Harbour delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Cordoba delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Costa_Rica delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Creston delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Cuiaba delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Curacao delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Danmarkshavn delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Dawson delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Dawson_Creek delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Denver delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Detroit delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Dominica delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Edmonton delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Eirunepe delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/El_Salvador delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Ensenada delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Fort_Nelson delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Fort_Wayne delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Fortaleza delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Glace_Bay delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Godthab delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Goose_Bay delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Grand_Turk delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Grenada delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Guadeloupe delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Guatemala delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Guayaquil delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Guyana delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Halifax delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Havana delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Hermosillo delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Indiana/Indianapolis delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Indiana/Knox delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Indiana/Marengo delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Indiana/Petersburg delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Indiana/Tell_City delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Indiana/Vevay delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Indiana/Vincennes delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Indiana/Winamac delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Indianapolis delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Inuvik delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Iqaluit delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Jamaica delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Jujuy delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Juneau delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Kentucky/Louisville delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Kentucky/Monticello delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Knox_IN delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Kralendijk delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/La_Paz delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Lima delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Los_Angeles delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Louisville delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Lower_Princes delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Maceio delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Managua delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Manaus delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Marigot delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Martinique delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Matamoros delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Mazatlan delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Mendoza delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Menominee delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Merida delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Metlakatla delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Mexico_City delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Miquelon delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Moncton delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Monterrey delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Montevideo delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Montreal delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Montserrat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Nassau delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/New_York delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Nipigon delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Nome delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Noronha delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/North_Dakota/Beulah delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/North_Dakota/Center delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/North_Dakota/New_Salem delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Nuuk delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Ojinaga delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Panama delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Pangnirtung delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Paramaribo delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Phoenix delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Port-au-Prince delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Port_of_Spain delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Porto_Acre delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Porto_Velho delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Puerto_Rico delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Punta_Arenas delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Rainy_River delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Rankin_Inlet delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Recife delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Regina delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Resolute delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Rio_Branco delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Rosario delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Santa_Isabel delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Santarem delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Santiago delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Santo_Domingo delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Sao_Paulo delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Scoresbysund delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Shiprock delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Sitka delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/St_Barthelemy delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/St_Johns delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/St_Kitts delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/St_Lucia delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/St_Thomas delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/St_Vincent delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Swift_Current delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Tegucigalpa delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Thule delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Thunder_Bay delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Tijuana delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Toronto delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Tortola delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Vancouver delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Virgin delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Whitehorse delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Winnipeg delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Yakutat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/America/Yellowknife delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Antarctica/Casey delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Antarctica/Davis delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Antarctica/DumontDUrville delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Antarctica/Macquarie delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Antarctica/Mawson delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Antarctica/McMurdo delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Antarctica/Palmer delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Antarctica/Rothera delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Antarctica/South_Pole delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Antarctica/Syowa delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Antarctica/Troll delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Antarctica/Vostok delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Arctic/Longyearbyen delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Aden delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Almaty delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Amman delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Anadyr delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Aqtau delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Aqtobe delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Ashgabat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Ashkhabad delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Atyrau delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Baghdad delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Bahrain delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Baku delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Bangkok delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Barnaul delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Beirut delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Bishkek delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Brunei delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Calcutta delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Chita delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Choibalsan delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Chongqing delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Chungking delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Colombo delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Dacca delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Damascus delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Dhaka delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Dili delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Dubai delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Dushanbe delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Famagusta delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Gaza delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Harbin delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Hebron delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Ho_Chi_Minh delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Hong_Kong delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Hovd delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Irkutsk delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Istanbul delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Jakarta delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Jayapura delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Jerusalem delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Kabul delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Kamchatka delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Karachi delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Kashgar delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Kathmandu delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Katmandu delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Khandyga delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Kolkata delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Krasnoyarsk delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Kuala_Lumpur delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Kuching delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Kuwait delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Macao delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Macau delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Magadan delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Makassar delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Manila delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Muscat delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Nicosia delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Novokuznetsk delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Novosibirsk delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Omsk delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Oral delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Phnom_Penh delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Pontianak delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Pyongyang delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Qatar delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Qostanay delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Qyzylorda delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Rangoon delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Riyadh delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Saigon delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Sakhalin delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Samarkand delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Seoul delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Shanghai delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Singapore delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Srednekolymsk delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Taipei delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Tashkent delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Tbilisi delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Tehran delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Tel_Aviv delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Thimbu delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Thimphu delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Tokyo delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Tomsk delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Ujung_Pandang delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Ulaanbaatar delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Ulan_Bator delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Urumqi delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Ust-Nera delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Vientiane delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Vladivostok delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Yakutsk delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Yangon delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Yekaterinburg delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Asia/Yerevan delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Atlantic/Azores delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Atlantic/Bermuda delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Atlantic/Canary delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Atlantic/Cape_Verde delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Atlantic/Faeroe delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Atlantic/Faroe delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Atlantic/Jan_Mayen delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Atlantic/Madeira delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Atlantic/Reykjavik delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Atlantic/South_Georgia delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Atlantic/St_Helena delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Atlantic/Stanley delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Australia/ACT delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Australia/Adelaide delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Australia/Brisbane delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Australia/Broken_Hill delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Australia/Canberra delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Australia/Currie delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Australia/Darwin delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Australia/Eucla delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Australia/Hobart delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Australia/LHI delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Australia/Lindeman delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Australia/Lord_Howe delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Australia/Melbourne delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Australia/NSW delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Australia/North delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Australia/Perth delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Australia/Queensland delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Australia/South delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Australia/Sydney delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Australia/Tasmania delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Australia/Victoria delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Australia/West delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Australia/Yancowinna delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Brazil/Acre delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Brazil/DeNoronha delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Brazil/East delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Brazil/West delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/CET delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/CST6CDT delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Canada/Atlantic delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Canada/Central delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Canada/Eastern delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Canada/Mountain delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Canada/Newfoundland delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Canada/Pacific delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Canada/Saskatchewan delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Canada/Yukon delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Chile/Continental delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Chile/EasterIsland delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Cuba delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/EET delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/EST delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/EST5EDT delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Egypt delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Eire delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT+0 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT+1 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT+10 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT+11 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT+12 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT+2 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT+3 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT+4 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT+5 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT+6 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT+7 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT+8 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT+9 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT-0 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT-1 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT-10 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT-11 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT-12 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT-13 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT-14 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT-2 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT-3 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT-4 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT-5 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT-6 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT-7 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT-8 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT-9 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/GMT0 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/Greenwich delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/UCT delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/UTC delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/Universal delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Etc/Zulu delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Amsterdam delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Andorra delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Astrakhan delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Athens delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Belfast delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Belgrade delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Berlin delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Bratislava delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Brussels delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Bucharest delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Budapest delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Busingen delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Chisinau delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Copenhagen delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Dublin delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Gibraltar delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Guernsey delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Helsinki delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Isle_of_Man delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Istanbul delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Jersey delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Kaliningrad delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Kiev delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Kirov delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Lisbon delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Ljubljana delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/London delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Luxembourg delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Madrid delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Malta delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Mariehamn delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Minsk delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Monaco delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Moscow delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Nicosia delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Oslo delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Paris delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Podgorica delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Prague delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Riga delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Rome delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Samara delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/San_Marino delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Sarajevo delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Saratov delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Simferopol delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Skopje delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Sofia delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Stockholm delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Tallinn delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Tirane delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Tiraspol delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Ulyanovsk delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Uzhgorod delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Vaduz delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Vatican delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Vienna delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Vilnius delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Volgograd delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Warsaw delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Zagreb delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Zaporozhye delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Europe/Zurich delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Factory delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/GB delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/GB-Eire delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/GMT delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/GMT+0 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/GMT-0 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/GMT0 delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Greenwich delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/HST delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Hongkong delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Iceland delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Indian/Antananarivo delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Indian/Chagos delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Indian/Christmas delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Indian/Cocos delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Indian/Comoro delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Indian/Kerguelen delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Indian/Mahe delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Indian/Maldives delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Indian/Mauritius delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Indian/Mayotte delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Indian/Reunion delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Iran delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Israel delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Jamaica delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Japan delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Kwajalein delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Libya delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/MET delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/MST delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/MST7MDT delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Mexico/BajaNorte delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Mexico/BajaSur delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Mexico/General delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/NZ delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/NZ-CHAT delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Navajo delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/PRC delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/PST8PDT delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Apia delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Auckland delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Bougainville delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Chatham delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Chuuk delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Easter delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Efate delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Enderbury delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Fakaofo delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Fiji delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Funafuti delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Galapagos delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Gambier delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Guadalcanal delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Guam delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Honolulu delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Johnston delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Kiritimati delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Kosrae delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Kwajalein delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Majuro delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Marquesas delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Midway delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Nauru delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Niue delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Norfolk delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Noumea delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Pago_Pago delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Palau delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Pitcairn delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Pohnpei delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Ponape delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Port_Moresby delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Rarotonga delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Saipan delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Samoa delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Tahiti delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Tarawa delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Tongatapu delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Truk delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Wake delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Wallis delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Pacific/Yap delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Poland delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Portugal delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/ROC delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/ROK delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Singapore delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Turkey delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/UCT delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/US/Alaska delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/US/Aleutian delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/US/Arizona delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/US/Central delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/US/East-Indiana delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/US/Eastern delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/US/Hawaii delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/US/Indiana-Starke delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/US/Michigan delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/US/Mountain delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/US/Pacific delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/US/Samoa delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/UTC delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Universal delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/W-SU delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/WET delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/Zulu delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/iso3166.tab delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/leapseconds delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/tzdata.zi delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/zone.tab delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/pytz/zoneinfo/zone1970.tab delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/typing_extensions-3.10.0.2.dist-info/INSTALLER delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/typing_extensions-3.10.0.2.dist-info/LICENSE delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/typing_extensions-3.10.0.2.dist-info/METADATA delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/typing_extensions-3.10.0.2.dist-info/RECORD delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/typing_extensions-3.10.0.2.dist-info/WHEEL delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/typing_extensions-3.10.0.2.dist-info/top_level.txt delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/typing_extensions.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/yarl-1.6.3.dist-info/INSTALLER delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/yarl-1.6.3.dist-info/LICENSE delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/yarl-1.6.3.dist-info/METADATA delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/yarl-1.6.3.dist-info/RECORD delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/yarl-1.6.3.dist-info/WHEEL delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/yarl-1.6.3.dist-info/top_level.txt delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/yarl/__init__.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/yarl/__init__.pyi delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/yarl/__pycache__/__init__.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/yarl/__pycache__/_quoting.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/yarl/__pycache__/_quoting_py.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/yarl/__pycache__/_url.cpython-39.pyc delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/yarl/_quoting.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/yarl/_quoting_c.c delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/yarl/_quoting_c.cp39-win_amd64.pyd delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/yarl/_quoting_c.pyi delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/yarl/_quoting_c.pyx delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/yarl/_quoting_py.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/yarl/_url.py delete mode 100644 IKEA_scraper/.venv/Lib/site-packages/yarl/py.typed delete mode 100644 IKEA_scraper/.venv/Scripts/chardetect.exe delete mode 100644 IKEA_scraper/.venv/Scripts/pybabel.exe diff --git a/.vscode/settings.json b/.vscode/settings.json index d1c013a2..7d89b861 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,4 @@ { - "git.ignoreLimitWarning": true + "git.ignoreLimitWarning": true, + "cSpell.ignoreWords": ["KHTML", "PRICEASC"] } diff --git a/IKEA_scraper/.venv/Lib/site-packages/Babel-2.9.1.dist-info/INSTALLER b/IKEA_scraper/.venv/Lib/site-packages/Babel-2.9.1.dist-info/INSTALLER deleted file mode 100644 index a1b589e3..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/Babel-2.9.1.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/IKEA_scraper/.venv/Lib/site-packages/Babel-2.9.1.dist-info/LICENSE b/IKEA_scraper/.venv/Lib/site-packages/Babel-2.9.1.dist-info/LICENSE deleted file mode 100644 index 693e1a18..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/Babel-2.9.1.dist-info/LICENSE +++ /dev/null @@ -1,29 +0,0 @@ -Copyright (c) 2013-2021 by the Babel Team, see AUTHORS for more information. - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the - distribution. - 3. The name of the author may not be used to endorse or promote - products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS -OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/IKEA_scraper/.venv/Lib/site-packages/Babel-2.9.1.dist-info/METADATA b/IKEA_scraper/.venv/Lib/site-packages/Babel-2.9.1.dist-info/METADATA deleted file mode 100644 index addcc77e..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/Babel-2.9.1.dist-info/METADATA +++ /dev/null @@ -1,31 +0,0 @@ -Metadata-Version: 2.1 -Name: Babel -Version: 2.9.1 -Summary: Internationalization utilities -Home-page: http://babel.pocoo.org/ -Author: Armin Ronacher -Author-email: armin.ronacher@active-4.com -License: BSD -Platform: UNKNOWN -Classifier: Development Status :: 5 - Production/Stable -Classifier: Environment :: Web Environment -Classifier: Intended Audience :: Developers -Classifier: License :: OSI Approved :: BSD License -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.4 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: 3.7 -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: PyPy -Classifier: Topic :: Software Development :: Libraries :: Python Modules -Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.* -Requires-Dist: pytz (>=2015.7) - -A collection of tools for internationalizing Python applications. - - diff --git a/IKEA_scraper/.venv/Lib/site-packages/Babel-2.9.1.dist-info/RECORD b/IKEA_scraper/.venv/Lib/site-packages/Babel-2.9.1.dist-info/RECORD deleted file mode 100644 index f791d73b..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/Babel-2.9.1.dist-info/RECORD +++ /dev/null @@ -1,847 +0,0 @@ -../../Scripts/pybabel.exe,sha256=F7jkcNvcBFObHlskx1hp8AY7Fx3ngaOiqy-46lYXw8Y,106370 -Babel-2.9.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -Babel-2.9.1.dist-info/LICENSE,sha256=KMl78z51BuJ3SHvao6abcPFw1q9agnhawKdMhCgELkA,1451 -Babel-2.9.1.dist-info/METADATA,sha256=mlkWT3NrQ45RhCJaK7b0eaREy0YsZfn0c4qGbvW8PWw,1223 -Babel-2.9.1.dist-info/RECORD,, -Babel-2.9.1.dist-info/WHEEL,sha256=Z-nyYpwrcSqxfdux5Mbn_DQ525iP7J2DG3JgGvOYyTQ,110 -Babel-2.9.1.dist-info/entry_points.txt,sha256=dyIkorJhQj3IvTvmMylr1wEzW7vfxTw5RTOWa8zoqh0,764 -Babel-2.9.1.dist-info/top_level.txt,sha256=mQO3vNkqlcYs_xRaL5EpRIy1IRjMp4N9_vdwmiemPXo,6 -babel/__init__.py,sha256=2isYTKcvIoYWhBj1H7DhXFGIVauRTrA5dbeC0I0px8k,714 -babel/__pycache__/__init__.cpython-39.pyc,, -babel/__pycache__/_compat.cpython-39.pyc,, -babel/__pycache__/core.cpython-39.pyc,, -babel/__pycache__/dates.cpython-39.pyc,, -babel/__pycache__/languages.cpython-39.pyc,, -babel/__pycache__/lists.cpython-39.pyc,, -babel/__pycache__/localedata.cpython-39.pyc,, -babel/__pycache__/numbers.cpython-39.pyc,, -babel/__pycache__/plural.cpython-39.pyc,, -babel/__pycache__/support.cpython-39.pyc,, -babel/__pycache__/units.cpython-39.pyc,, -babel/__pycache__/util.cpython-39.pyc,, -babel/_compat.py,sha256=DHx6vQR-LazZlNdeBE7wGTOBv1_1HWbRboKOkX76TiY,1685 -babel/core.py,sha256=5CmHhtC4GV_Nrd6oq63apsEO2nb3ZPdLsA3MYd9lzBI,36907 -babel/dates.py,sha256=cjONUhc89AMhtSpNk8jrtCGrtqwrPuS6rsXOzHZROpM,67709 -babel/global.dat,sha256=P2lM1DjyEx9SMpmXlgu4zNeodlF2Qp2hg9yEANLM3ps,254421 -babel/languages.py,sha256=UmLTj4Nai3kQrwHX6jptehVLeAw-KAdxcmcp2iDlgvI,2743 -babel/lists.py,sha256=yks1P7CNrIoicIptChdpwtDHN9eKVK1sfeDzhLgPVpM,2719 -babel/locale-data/af.dat,sha256=jjfQ33ml9BDllSSkfwcIQzzgohE645gzeehkj1KwTMw,171143 -babel/locale-data/af_NA.dat,sha256=6A8JdTF_O-lRxJZmjI6Lig4Se2aFbqWhdw34Ak4-67g,1407 -babel/locale-data/af_ZA.dat,sha256=ZaMuNgUHOKLle56lUxFOGAAk8QM-_41nuazbqNu5kgg,608 -babel/locale-data/agq.dat,sha256=gSE4vg5l5Yze-10YkHjiBaLVqC5fp0xgSr3nMuZB8lw,17339 -babel/locale-data/agq_CM.dat,sha256=AxBMSZitoHhaa6djMmFbp6iEPM8OUC04G77ZldkuHR8,609 -babel/locale-data/ak.dat,sha256=fk1o-LXIVWd8kObwIG98ltM0H9W68R1_alFWFl8U_2o,15859 -babel/locale-data/ak_GH.dat,sha256=tuOpoiGUJqZ_Dlr8xlp9oIqsFL-YQrBQpDUfG5z3YQk,589 -babel/locale-data/am.dat,sha256=qe-hJ0p-GstMzzmrdamvejKBIVwLBuJRPyfdEdUQLB0,200581 -babel/locale-data/am_ET.dat,sha256=JHNCRHUTq_8VPokwz2uGwCZPGxUR23nJdDIzi_HFIbA,608 -babel/locale-data/ar.dat,sha256=aCbEpK5EzE3tG7TDSCPJVF4srTWPDcTF7GIJjr_Z36o,345779 -babel/locale-data/ar_001.dat,sha256=Y2HUeGZn8VV7DCPv6nXTWmkqTtzGxZxdvXYYiS5mU-o,1680 -babel/locale-data/ar_AE.dat,sha256=UAOwSgM1tC_mFK1Gr8D1t_2HwylT_wv50l7LyDew6BI,1038 -babel/locale-data/ar_BH.dat,sha256=f1D15u-5clcZJvrqsnr2XShOLf6hw5hmR587r7hsKEs,651 -babel/locale-data/ar_DJ.dat,sha256=NWt7QxMxsj1-zAsJ8aXWGT1SwzKayjlbB8TxvY8P-iA,629 -babel/locale-data/ar_DZ.dat,sha256=1KdQGZH5ePC4W3nwrB1F2msNqVVnK0wYwfU-uqYAhXU,1713 -babel/locale-data/ar_EG.dat,sha256=EUDxLyjz-znR56wvAE-_IvJX-2ou_ubS3KVU83SHa5Q,688 -babel/locale-data/ar_EH.dat,sha256=OseNtW_AOGrIkKmxk2ufJXkpwOXsajJ4uyJAwUidL1g,589 -babel/locale-data/ar_ER.dat,sha256=FK8yF8SloHQoOXNpaKlnEMsS9oG0j9dhDhiSwk7euCw,610 -babel/locale-data/ar_IL.dat,sha256=TzNjvKnJXxJBRXR55WZ9yVxpHnN-2subVXqjeS7CX4I,1195 -babel/locale-data/ar_IQ.dat,sha256=G4JR6ue3O7NNz7Hy2WKKiHg9lqhaHGjZA-UFq8N9TKs,2336 -babel/locale-data/ar_JO.dat,sha256=K9WKy9urKZA7k6MIuprjN2Yu-VgySZVzK46jui9NYnY,2335 -babel/locale-data/ar_KM.dat,sha256=e0ER6Yw-J2DOL7R8JKuTBpU0_46WK0jLBKpsG56UHgk,1161 -babel/locale-data/ar_KW.dat,sha256=hsa41dETEsjs8XPCZkryiCFbPBLrv6aF5ya-ImPAT3g,651 -babel/locale-data/ar_LB.dat,sha256=b4DWnwWjHST9MvfKnu6YaGhP2ghxjpZP5TQy7w_OGtU,2336 -babel/locale-data/ar_LY.dat,sha256=QyNUUgeaUdsvLQtwRLPQed-PRiDez_ekokUwpxT9jRw,1652 -babel/locale-data/ar_MA.dat,sha256=ufYSdBIy96F6zJND6kKZuilh00Lpu-z3txPDPhsgAIk,2007 -babel/locale-data/ar_MR.dat,sha256=wjI22LINnrT_HVHqm1ZmJ9Ndb6bFBKvAFkeyvQ8tBi8,2173 -babel/locale-data/ar_OM.dat,sha256=gsBDBEK35j4M3ualnSdL6tFD4-u3dSbJX1NtS7znQ_E,651 -babel/locale-data/ar_PS.dat,sha256=tTTcOqje-rppgz46-DrkawXtoc9jIQ2vwyA8rRU2uDM,2273 -babel/locale-data/ar_QA.dat,sha256=QI6pzsVjeY_nxkk8iKhy_DUzfBJrZFWoL9uYKM3L9CM,651 -babel/locale-data/ar_SA.dat,sha256=T6x2_p8wVOfcUx9RZMwa5yM1qxVnDoJCxXPzUcsQXuM,30599 -babel/locale-data/ar_SD.dat,sha256=gUbUGVDm-V2a9ViTVska833oAys0b6Au-IJcoMo5leM,651 -babel/locale-data/ar_SO.dat,sha256=fSiIj3lwo0FJU0dXbnFUNLPDvV_jejp86mHcLiGtiJ4,608 -babel/locale-data/ar_SS.dat,sha256=eAaVq86grUAnWNST_u32IrhbryyjRvUo27UG0js6zS8,631 -babel/locale-data/ar_SY.dat,sha256=4ge-CrqdFYfvu3VOdrvd7lRqhGDf2rPfTYkaNBaO4Ks,2335 -babel/locale-data/ar_TD.dat,sha256=yVONNY9PuoKVCLjT0w0qp0NLO4kShNT9j9eM_uKtQYY,589 -babel/locale-data/ar_TN.dat,sha256=J3SolHTZQ9_7HZGluj2jFu4odczgSZlOYU7spA670XY,1651 -babel/locale-data/ar_YE.dat,sha256=tsYZG7eRROrZJyzc_jUbyxbMRT157S3ocGMh7eIiqsI,651 -babel/locale-data/as.dat,sha256=sEo9KNUT_mxPE43dnY2qd5x5PS0YptFdgQB33rCj108,234427 -babel/locale-data/as_IN.dat,sha256=BfzVFooc90N8ufCwaNAuKzefwYLUen0-o4wUafoLYc0,631 -babel/locale-data/asa.dat,sha256=RTNazZw6IqoA6jO4o2v0jUI-x6rKsBHeCEEi9_eWGto,16187 -babel/locale-data/asa_TZ.dat,sha256=aSECPcjC7UM3Bb4Cy16Et-RHtNrhlzGM_v4zNMGsreU,590 -babel/locale-data/ast.dat,sha256=7s8-hdazQXPAA8cPPc2AymyA1vAI2P6MoHOjtcuDXaM,209617 -babel/locale-data/ast_ES.dat,sha256=x4OX34OA3ztvfnETdf49lKg6Gz2q6Lv17Lrf0G4EZ1Y,627 -babel/locale-data/az.dat,sha256=2FAR_E0DODOjfyi82cqli4S484eNi8IWcGOJdvaUMXA,194898 -babel/locale-data/az_Cyrl.dat,sha256=1AcCgkkW-Oz7hXWJVoUqe1BRwdirpoY32Ub53YIUJDQ,38880 -babel/locale-data/az_Cyrl_AZ.dat,sha256=yhmkFuYZLbGzV8Q155t3UrHn-rEqAR9LVmz1sQkKcSI,608 -babel/locale-data/az_Latn.dat,sha256=EkZYNfi4vipZ7wH0cvvd1yvqOJxwCNtYADX0SgJMnAE,2225 -babel/locale-data/az_Latn_AZ.dat,sha256=yhmkFuYZLbGzV8Q155t3UrHn-rEqAR9LVmz1sQkKcSI,608 -babel/locale-data/bas.dat,sha256=SkyEjzAws6O1b_g_mtVKcLFvR_00Z8HK1ubf7X_NRIk,17128 -babel/locale-data/bas_CM.dat,sha256=NlquEbS-6vOPdnyIC4r5KRnEbj4Y0oaO56i3IeH2MmI,609 -babel/locale-data/be.dat,sha256=R4OLJNVpSSFRz34CGEFpWedQosrBKf227FweNgrhQvU,271438 -babel/locale-data/be_BY.dat,sha256=0uCaBRRcbIS46dyiHK85UMi-k3b1b_uspOzBHMos2jM,608 -babel/locale-data/bem.dat,sha256=pqGkFsWL-tAPVJfouEiYifYERtShK-WpoABWUzJP0vA,6534 -babel/locale-data/bem_ZM.dat,sha256=VbAesm4_2wMn2EmWOW7etCOWlleqpkSAjjMOtKBlEcQ,590 -babel/locale-data/bez.dat,sha256=lOnVgx-EVzJ-TL9G6tbvC5qckxtoPwIG9UEQR8RLthY,16977 -babel/locale-data/bez_TZ.dat,sha256=PHbB6bmtC5Wn46cFkmE8mjwuSUTr3gCxXkmFzqpiDRQ,590 -babel/locale-data/bg.dat,sha256=pUVekrzzgzY-8cecdX7rcvQ9-LNteX4V3yzZJyGu_qM,232833 -babel/locale-data/bg_BG.dat,sha256=rHaVmPZT-2n7w37ORQM31-InIsuCBYpv6xWIAc0akkk,626 -babel/locale-data/bm.dat,sha256=-E8armVyVSCPOqdRGc55rFLFYJcPPkvMUw5fCzRYAj8,15886 -babel/locale-data/bm_ML.dat,sha256=uOp8g5jSZ0dtvQRJ_GmriD3hafnqKpY-D8VhCY0lctk,589 -babel/locale-data/bn.dat,sha256=mLx95u-bxnHGpQ3f07-gBC6RYW658gmJzImHukcigK4,263365 -babel/locale-data/bn_BD.dat,sha256=J15p67iXhfwwTscvbnmaYH1jxiMf8n7kvXoaYiMDgCI,608 -babel/locale-data/bn_IN.dat,sha256=D5aBzoxDMmKe7Bnz25b_MTbqxm3ofuOqA73An-bd0Ic,866 -babel/locale-data/bo.dat,sha256=fG5-yWBu0eudG5gbVC5xJQF-C99BVk0zIgiYr-4Q4e4,22525 -babel/locale-data/bo_CN.dat,sha256=9gsaOvK_bYpPFDNXZ9lOj3Y-jgDTZlD6JHhlPLJ2Te4,608 -babel/locale-data/bo_IN.dat,sha256=EWXLEVA3oaBtJFiwQVxREJbR4fjpyaqQ1P1xVNsMowc,704 -babel/locale-data/br.dat,sha256=S6Rh6pNfXOlOKbqW0dpbTc05PfGfvWgfeL3eBZwk4hs,290897 -babel/locale-data/br_FR.dat,sha256=ioO-nP2x2c5STVkiH-RvhNxxq6giVfDejh4T-FoSjF8,626 -babel/locale-data/brx.dat,sha256=pQJJBfYcX8pxrFlEkfkwwprNf6c6AG3Bkvh-tNpp1YU,124289 -babel/locale-data/brx_IN.dat,sha256=9pIIjxmY4jmGi9LDci2mDhdHADN2oD3U53pBIRNNRc4,632 -babel/locale-data/bs.dat,sha256=wHmiOLJ8MBJyaM2xpKiuIrIDSn3KHu6kz33rYpzDJjQ,239326 -babel/locale-data/bs_Cyrl.dat,sha256=MBDuEafwSU1vWRHHor26JViQTwYsoyR_imtvVlp6N78,213685 -babel/locale-data/bs_Cyrl_BA.dat,sha256=49_6kE_iGTwxlkieBZvxsXvVPAUrQ3hlavg2hMkUzFQ,608 -babel/locale-data/bs_Latn.dat,sha256=jWzwo3YbhqMRkMWFgGPJ1SoBrHBL5OKB6yqVoJw3cKo,1957 -babel/locale-data/bs_Latn_BA.dat,sha256=49_6kE_iGTwxlkieBZvxsXvVPAUrQ3hlavg2hMkUzFQ,608 -babel/locale-data/ca.dat,sha256=mWNiuT8Rt5CV1YnXpjqiZP1HlvftCMz-DbaPLLbzEe4,208790 -babel/locale-data/ca_AD.dat,sha256=c0uaIsSk6XuXizMkzNYZcMzFcC9ItvvDTh9byxpdYV4,626 -babel/locale-data/ca_ES.dat,sha256=xAbDhTv0TIq0M66QrfejjMsbIIthq2CCXMr00ojFzoA,626 -babel/locale-data/ca_ES_VALENCIA.dat,sha256=i6YyGQHkRnxTuJLvjemc0tm1Iqqfm0v0dNZnLk_v7R8,3644 -babel/locale-data/ca_FR.dat,sha256=bm288L4_PW-Wgb5Ty-9jcQns0i9iVy4zQY8PV3IETHE,645 -babel/locale-data/ca_IT.dat,sha256=t21q_Bu_bo2FVP609O53DGAXPbAUGv5yZ-_m71S1bWU,626 -babel/locale-data/ccp.dat,sha256=nyA_rk-dZ4U4ATCfcCEQeAj4Df6igjI4XD7HP0j045w,275655 -babel/locale-data/ccp_BD.dat,sha256=Lns8llZesFHOnqgmiYntJhMufHDSmzHOL-sYczkVxCs,609 -babel/locale-data/ccp_IN.dat,sha256=zRmYBrG8ABv6_4YB7puTs2jsWSBBgqo0yBpvsBVHxZQ,632 -babel/locale-data/ce.dat,sha256=XtFwtrhjaJGFgmegHYgoVSqmZs_5o8S85XspljVTzSo,138778 -babel/locale-data/ce_RU.dat,sha256=rAfBzB42xX9qOXWNu1kMJ278N99ohijJoWO2XAskSkc,626 -babel/locale-data/ceb.dat,sha256=h8hImvVlmbhxs4ufAMKi_C3DExHORd8hrbdd2hQrXx8,103518 -babel/locale-data/ceb_PH.dat,sha256=nQM5vO0qo0sARNlhLIXlzxBCevhReUtYPios-RIcw8c,609 -babel/locale-data/cgg.dat,sha256=VfxK9EKS6ocduf7D3FKKHIXahll75kOwDuT6jrI6d-o,16228 -babel/locale-data/cgg_UG.dat,sha256=87p4kuJQ3R_CLR3yPT-oMPAT9idvdPVElVxpZC5A69s,613 -babel/locale-data/chr.dat,sha256=Nk70q12-m-cVNXDVMBrT1YTRtyS9t949i3oDVo6SyKk,200072 -babel/locale-data/chr_US.dat,sha256=BS6w-X9I6FuixJ2upUTEdFstYRKU7FCok38SRWahHWc,627 -babel/locale-data/ckb.dat,sha256=VfHXHCrZYFQJ0NxHji-px_rJ7gD15bVeVHEQDkjtrIc,41606 -babel/locale-data/ckb_IQ.dat,sha256=8qfAOdEjoncef0lQt6zsXiW0Nn9uY4Fb2jQMpgJSxd0,652 -babel/locale-data/ckb_IR.dat,sha256=cNWVEpmuwNkAyJm8qdtOho5FEIB-UF2dOHSXoDIdWj0,1204 -babel/locale-data/cs.dat,sha256=PzETNpoA6kgHESjeT01YFgtQd31qRnCbrfdWbZ8M7sM,297675 -babel/locale-data/cs_CZ.dat,sha256=IG8kxPUf2L53IheXDOJcGUHV5XPaEvrWlhznlScsZAw,626 -babel/locale-data/cu.dat,sha256=Ak6g9Gsf7fAe3EsC4ORWtTDTqfGjoHanPHd2VU7uqhY,20265 -babel/locale-data/cu_RU.dat,sha256=NHfB25KQf80ELweLH7Qe5OHUIC21BjJZsZvPUZ8wlN8,626 -babel/locale-data/cy.dat,sha256=wy7mLRchz59usL93zfp-wZ3iyalLaEO6QHwW7c1L2Pg,315824 -babel/locale-data/cy_GB.dat,sha256=ZHRJBfOpeOVn8rfsdEhIF5mY01XFhStFmTVeOmklOAk,626 -babel/locale-data/da.dat,sha256=2sCrVwkFfF2RHbLoon79r_JwKXCqZ0oj1dbpe6hBDSY,199867 -babel/locale-data/da_DK.dat,sha256=OZkvaI7AQcocAo2rtHtZq3d6-P4mzR0MWWOQ8EJXjSo,626 -babel/locale-data/da_GL.dat,sha256=uyqYUJOO4nd3vn92yPsEVm6mYGXWCqSUTG4DtImKc0M,589 -babel/locale-data/dav.dat,sha256=nRUgF6cL7_RI2vbdVR407MYHpJ5ALeZtY4lrGcRlVSc,16271 -babel/locale-data/dav_KE.dat,sha256=FP78PK3asgspsW7QIhV0jrOHFmDG4iZiGjFBvPQF-6o,609 -babel/locale-data/de.dat,sha256=bcoZmi61_dSmFuJN9YA6n_llVQCfbeRtVlkYm8QWpvM,206762 -babel/locale-data/de_AT.dat,sha256=-UMZ_o8YNkI3mlluBgFiSXc6ttnqo_adzxsPffafPDw,2563 -babel/locale-data/de_BE.dat,sha256=cAHuCiE_b6CoIRItE8FQIpr7fR-gSsF66MtRGhU3xyk,626 -babel/locale-data/de_CH.dat,sha256=x8MlguM2lvZtFSB8R-BWNJ2wgy8vjGNRDUPcYO7YGRA,3938 -babel/locale-data/de_DE.dat,sha256=uGWbXF2bkaVQcgna0h59yJQJctOj88om0v2NVVCJvPw,626 -babel/locale-data/de_IT.dat,sha256=y1GIOM88fIEDhz5M_Seiy5sk47wTF2X5nRspsQJRWXc,1619 -babel/locale-data/de_LI.dat,sha256=bggRqr8i9UGeDEA1tqBgRv_lWAGGbb4voVc152sl8js,1321 -babel/locale-data/de_LU.dat,sha256=rMtYa8P0yOF9Asg8mMIiBaeFzg1imA6BOFB_1AV0H9g,1065 -babel/locale-data/dje.dat,sha256=0lCk_5ABMX3iiY0QcB6N6R1JH1B5db3KFxiu-eS2Umw,16192 -babel/locale-data/dje_NE.dat,sha256=YRn5qozp8AlljDhoIVdw1KfDjTwJuQSR1O6zcfh6Z54,590 -babel/locale-data/dsb.dat,sha256=GVknAiKWopJw22chqjBGEvoq7GN201Sw64vnh-kqPeA,179644 -babel/locale-data/dsb_DE.dat,sha256=UEem7x_iq5-p3Tpzjtja0ONC1qtHvG2MCsQMx8KvTmo,627 -babel/locale-data/dua.dat,sha256=GSB_OYiEmeJM7B9QAdgr2IV06ehJUpVdy-ffO5j9SDo,5355 -babel/locale-data/dua_CM.dat,sha256=fOhCBrVImDeIe_5GZrgYvvdY70mSsENjcTEzSld5FYs,609 -babel/locale-data/dyo.dat,sha256=KJhfyqJEf8mhA9wV3xbD0VOcUm2JT0LQ8xJtHgqMVPM,10541 -babel/locale-data/dyo_SN.dat,sha256=coM-rzzSZhBVSz9gchqxki0QnX4zhOD-Lk1nt6sPCxE,590 -babel/locale-data/dz.dat,sha256=DG9YNNdDUCJkqwNdcstRrO8BgU9zqe1PTD4Em3dSOak,89908 -babel/locale-data/dz_BT.dat,sha256=__K3dx97Ynlcn2gcV40OXMmd-G1YchvffwSv4old74k,608 -babel/locale-data/ebu.dat,sha256=j6vvoYG_wPxra74yw8ldqZp_oD25AJFbUvysJkUtClY,16243 -babel/locale-data/ebu_KE.dat,sha256=8py7zy73R_NJUahomYGMJF7at0vD_TMjbQy8AT7OgO8,609 -babel/locale-data/ee.dat,sha256=EG6FqmRvtVrJdzN3p8QxU35xqBQzvhB2lbaLz-NKN-U,142527 -babel/locale-data/ee_GH.dat,sha256=B_aqQhHklFcblsk2BJmIZgwpAX17_pZENzO1Xoo1LpU,589 -babel/locale-data/ee_TG.dat,sha256=MG63DGqUVcZLwabu4o_BezzGovDY8g30wKLHkrbEU8o,1141 -babel/locale-data/el.dat,sha256=M-uy_xte0SOlEQtwdOMM92GLjpvx09PgWGO3bYsBMI0,244752 -babel/locale-data/el_CY.dat,sha256=07pyrGXJzOGhfxhX--19MAVJlDzuBGe1AfsnkOiHBeA,608 -babel/locale-data/el_GR.dat,sha256=WqPmX-_0xIHS9A8kTDJbVCJXhqr52NEiW0CyLdGm6yo,626 -babel/locale-data/en.dat,sha256=WFZgaqLZ9ZYKZdU8A5K2ZMepmtkc8-ve3vC0VA1dzqM,194682 -babel/locale-data/en_001.dat,sha256=Wsq2--QwmhqwjXx3jpyXs4SNShvNFtnQfH74-9RmU5M,27063 -babel/locale-data/en_150.dat,sha256=rbNu79tGtS6MsRHloWtHrmdPuZCmwWRThAQ8M7C_5sU,1765 -babel/locale-data/en_AE.dat,sha256=EhFOQNZpti_Z7dPcFMbQbuFA5r4LwCwGKigJgowZ5Is,4111 -babel/locale-data/en_AG.dat,sha256=AKSzhMbGCUU-P3phlu6HupABdKSEys-M96wBGbNwgBc,627 -babel/locale-data/en_AI.dat,sha256=6ihO9cDogLMcSHgmWHgJDTg0OCTfEC4fVftMAbv3-zo,1179 -babel/locale-data/en_AS.dat,sha256=XkSzLYRfcXzQ5S8kaps6cLh8lVLcEtpS7v5GVYJ0oxA,608 -babel/locale-data/en_AT.dat,sha256=jKCuj9au7zT3QiZd6mRgjRutjPTd3rW7k_aSCopd3lU,1200 -babel/locale-data/en_AU.dat,sha256=GgFVbFesUa_9FbZYqtHtgW3fDyUvQCxBMO1KPcH3wl0,23385 -babel/locale-data/en_BB.dat,sha256=qYW0ov3TXlP5U49PsDwBoGuNqydFwIDvAzb9g_PU4BQ,608 -babel/locale-data/en_BE.dat,sha256=sLyuId-scSREYGWTIRr-jmU6cuaSkgQbNc_jd5ij3Rc,1493 -babel/locale-data/en_BI.dat,sha256=FPbgGK-AHgRjz__MFHCzzOUIGhAmhx662sqL-CZWyXk,1162 -babel/locale-data/en_BM.dat,sha256=xkpTQIMT4L5hhYXe9ANWZkxgyS2H6wsMdG1qtacDJH8,627 -babel/locale-data/en_BS.dat,sha256=zHTFOmXUvagki_mtGdj0lht3V82InuI8-9cTPhvQ8UA,811 -babel/locale-data/en_BW.dat,sha256=R88jGKkwpex2QzxjAVOj-tu5HreJy6DlO3ZqqcD7sKw,2771 -babel/locale-data/en_BZ.dat,sha256=0gOIW5WU8lL15-_mWj9Xg0uDjtQiQHsWAl34U2sN3lI,2950 -babel/locale-data/en_CA.dat,sha256=QiSNMW4tsb8v4mvvKSJ0fjYx9wKvFyOnqZv6G3ih9xQ,25449 -babel/locale-data/en_CC.dat,sha256=n1D9R3tb0Kbc3Umv3cS_2IfDv6gXJDkauUmLRQ85stk,1160 -babel/locale-data/en_CH.dat,sha256=hU3jzJbghrq6qpPAcRCsN3_UzYw2XNJCvnC0KScoOMk,1100 -babel/locale-data/en_CK.dat,sha256=Te6ZAYFDOE6v9domOnOXCxMrCpBSt4y8i6xxX8zplZM,1160 -babel/locale-data/en_CM.dat,sha256=vogNfPzFKhhNfFR3TzWWE-P8wKdkeGujj--c757Iy-M,1410 -babel/locale-data/en_CX.dat,sha256=CkFYiGUksAivYRZlmH-sfvwQ8HUgJ5Iqx1LD0UXbcCg,1160 -babel/locale-data/en_CY.dat,sha256=Vl4Oa2RNsxbDmyq7cJaN9UbtK3KSvSpBQZ3ouieaDXc,608 -babel/locale-data/en_DE.dat,sha256=yW9FX1tuZCAANFhM095trr-p-k39XN6VwN5wYMEDS6A,952 -babel/locale-data/en_DG.dat,sha256=db0CYrcJAtcIl9MFAGUuzVUfUS4x-I0ppd4nNP_igGs,1141 -babel/locale-data/en_DK.dat,sha256=YFMkEHF_fAzY7w7CsIFe7eDhRuw31mfH-oLlniAkqhc,2350 -babel/locale-data/en_DM.dat,sha256=d1muNBxiDWlN78TXhEJiANVe_0UxZGjJ96NoIzmPQH0,627 -babel/locale-data/en_ER.dat,sha256=ZCZFGjPQWwc95TKwRCihywYh1yj-TaRmnmJqj26-dqE,860 -babel/locale-data/en_FI.dat,sha256=D8c6wssToJyrWdn61FXBz0h35HW3BZC_iGA0_MF4npA,2282 -babel/locale-data/en_FJ.dat,sha256=4dotX9Otp56WxZz2vqeHMl-FVcBKiT8BlqGktxoWKFM,645 -babel/locale-data/en_FK.dat,sha256=VC91FNLl2QBhA5qkxhodFR6TWRlIus-UHJ4dzJNtebk,1183 -babel/locale-data/en_FM.dat,sha256=kwQ5xP5wBGKlO-Mb2iqvsStkTC2JfMc46gBnlFTiI3M,589 -babel/locale-data/en_GB.dat,sha256=1rovCqWVd8rHtaNZiudq9tj9j1ZSdQpj85HcXMXRCNM,25821 -babel/locale-data/en_GD.dat,sha256=MbV-yK2BeGhQSajMlcL9TvEWWmch0zGbfBFcKj5eBzs,608 -babel/locale-data/en_GG.dat,sha256=qW--gYp58HZQysSEvEs2e-PzujR6nxJw76OKtml_R9g,1246 -babel/locale-data/en_GH.dat,sha256=WfV3h6HkT4PhJVSqNqIcrYOA-eWWywIMUCk6GX2DGkc,862 -babel/locale-data/en_GI.dat,sha256=Pcy6njgp-RTvil94c1DoD8gPEJfDqJxSa6Ap3hz4hLQ,1201 -babel/locale-data/en_GM.dat,sha256=1-9El_7BaSwYnE2NvFGES1XWvUOA3h31FOz48SyWhGw,858 -babel/locale-data/en_GU.dat,sha256=Msmmrz-7nw0Mm50eo0Df8mPsJFRBBbbDtCgjNN8K4Do,688 -babel/locale-data/en_GY.dat,sha256=U8FjrK6RICyHeGXrXRziQ-x5MYJv-67aiNk870rRU3U,667 -babel/locale-data/en_HK.dat,sha256=-or_oYC7dQt4KP_QTE8085lo6lNr9Sxd15MGoKBpMOg,2008 -babel/locale-data/en_IE.dat,sha256=N2NXGWi7XPi2TcOw4lC3Q7YVGESIhF3LoxX2WPor8e4,2043 -babel/locale-data/en_IL.dat,sha256=KmYFTJlvN4yPA1h81uPevqnBJbEMySjB6BwcgvtARKY,1397 -babel/locale-data/en_IM.dat,sha256=PYHp1IMNWDea7-pfiNMq0lMSwlw6jrd1W8PijFVp_-c,1246 -babel/locale-data/en_IN.dat,sha256=coaqyAiTCcprH5Un1jvvgWZCylIgGkVoKVWryR-RtiU,3767 -babel/locale-data/en_IO.dat,sha256=KdFDEZ-ATOiBnVWa2p-QJovncI2Voygei_GH8ole4vM,1141 -babel/locale-data/en_JE.dat,sha256=7Cmj2eNyJOMB2YSUAkna9CGLn9cHuAMoQedkWzTJtZ8,1246 -babel/locale-data/en_JM.dat,sha256=4EK16ZNGL65bz9xtQrucMOxSITM8wVwqhdKEG04s154,1599 -babel/locale-data/en_KE.dat,sha256=KFU4dptHt5iSqN9zSPGv5_HkLkN8tcXdMoZZlSaK3OE,1431 -babel/locale-data/en_KI.dat,sha256=O13XFTeRaltrxnCjO4PA2NvM_dw-ye0xpJZeEnF0UAI,608 -babel/locale-data/en_KN.dat,sha256=G3xPxRBLVKbANLsnKR7b_rFGy6gYCC4YLzRI5gT8i4Y,608 -babel/locale-data/en_KY.dat,sha256=TV5QaWQr32vWrQWyBUskv1f3oq2TJVYqQPGEGJyh5lQ,792 -babel/locale-data/en_LC.dat,sha256=C_KqmNUBK_9-uE4_kYbUwNIOBeO9VJ9fpLOcaWwWDjM,608 -babel/locale-data/en_LR.dat,sha256=768u6chWYyWCDWWpSWkm8CFsSskf4e4-aayUrLDppFI,858 -babel/locale-data/en_LS.dat,sha256=K_G56Rgw6R7d6pMU5_KfwOAUvJk_hwdZe9GqU3NNfCI,858 -babel/locale-data/en_MG.dat,sha256=HA_OJPZu4eEyZP07J0MtTm8dAz4c5cXns2d5EjLArwc,1411 -babel/locale-data/en_MH.dat,sha256=lWjdFRFi5Cw9EBkpRifvGV93XeQke2MudP1tv7MXV6I,1341 -babel/locale-data/en_MO.dat,sha256=oal8-XgFkxo3F77Z5wKqP16pocMuo77-Ac9v6doamvY,803 -babel/locale-data/en_MP.dat,sha256=4ES9-ArZ1PI5CbAQ3LLDb8sLM6LVHhAnX6KgAz0VSoQ,1322 -babel/locale-data/en_MS.dat,sha256=HMWyIEh0-s1zUWHDC6XnKM8inpIDA36BSA_bN2spR0w,1160 -babel/locale-data/en_MT.dat,sha256=4LAEeC9KAdPb17kLcMe_p6U1bBuiySoOGQpdVphMNv0,1927 -babel/locale-data/en_MU.dat,sha256=Bq5ftR9nbRzJOacnOFQ7qluvifHCFAU81X4SsWWMHVM,1411 -babel/locale-data/en_MW.dat,sha256=1-D7UAzwljnuUlgPKs2HNP0ubNQ9HGEKgIUdpkxwc4Y,859 -babel/locale-data/en_MY.dat,sha256=koZHcYmaYIjYT6OANOlHdFfPuF-RmF5iyjVbkbtb1pg,689 -babel/locale-data/en_NA.dat,sha256=384TeL01HX5bShF-vJgFfy5m65jRjC_SfITw9K852BI,858 -babel/locale-data/en_NF.dat,sha256=rEdi2JCWTfieeeS2G0OCnKMblzSSc6NsoiEg0-JO-3c,1160 -babel/locale-data/en_NG.dat,sha256=KnyRrrpnzpV97teswZmDpq3eolhm_geKohcIrryBZEA,1412 -babel/locale-data/en_NL.dat,sha256=nWoZ94n1gMwXFwzvMAFraJLYNjiXkZMx5vzAM029PRI,1097 -babel/locale-data/en_NR.dat,sha256=SVPL_wXvdKEYdWqUYhkRrgwOMc-f0YP1Uaznxqv4NP4,1160 -babel/locale-data/en_NU.dat,sha256=0cg8LGLPIboWlBVxtmd4c10rEjqPvUUz2tyyi7kUksY,1160 -babel/locale-data/en_NZ.dat,sha256=x-zR1SoiPc9fpAvtblZLyzHZXrW-Np6ydJdqyXQrPnQ,2234 -babel/locale-data/en_PG.dat,sha256=Cq0NrSqmEseFhwCIo6noFliCfKnx3wAOenRn3VkED_Y,608 -babel/locale-data/en_PH.dat,sha256=W7ezPkuNS7JqciskJ3G25Ic0SbHZTmmmmenv0a39NgI,629 -babel/locale-data/en_PK.dat,sha256=0AD-WPif80PqSYV67bzVTvlj_h074ham3WETqh3NoDk,1959 -babel/locale-data/en_PN.dat,sha256=zxKpA6olu6dMYMtZpzaq35mSoMKh6AttZc6wSprPtxM,1160 -babel/locale-data/en_PR.dat,sha256=GbsBjcumdJ8L-rzRYD1cXU2uzmIUYHQX4chTgkJw02Q,608 -babel/locale-data/en_PW.dat,sha256=LH6T7NOgz_1iwCBhMne8ZH2hjPh-JHL2MOY3xktPyho,773 -babel/locale-data/en_RW.dat,sha256=RdqSwsBE4s_LG92OJvPPTxK3BoC-qzltS8PFWM2xogQ,1411 -babel/locale-data/en_SB.dat,sha256=cW7aw5w5Wos4_O_aRX1Xj4IXuEIq7eQpF50vnCEHKjw,608 -babel/locale-data/en_SC.dat,sha256=uVgNnrmBfJL7Jlv_wpfDtbdk5yFjpsTeyCTBKhiSmig,1161 -babel/locale-data/en_SD.dat,sha256=5JQaakikEVwEQ0YJm2AdZ2Zgg44mDPfl3ZKEatwChCI,901 -babel/locale-data/en_SE.dat,sha256=gpyVY45RU4nB4BKswErRq6UvnyFU6mQqzxzEBR0tDfQ,1427 -babel/locale-data/en_SG.dat,sha256=Yky7Bpen7HGGG4IpzKRb3folOUIfQ9nh0YiPqj2THv8,2017 -babel/locale-data/en_SH.dat,sha256=slAAeHdppQ8lHrVY8Pat5VFVwP-imbX9RbClTrFJkbE,1183 -babel/locale-data/en_SI.dat,sha256=TJey3lYp_l99RHcPcbxFkJ1u4tyP0Yb7TcY-JYAdehw,968 -babel/locale-data/en_SL.dat,sha256=daqNUYE7AgFpgo8PjtGYKm1YKqW8WgVQE4ViUnvh-_g,859 -babel/locale-data/en_SS.dat,sha256=2e53Ov3bAoJClI2KxnghO_q68wsvBYm5y69cFpvZpGM,881 -babel/locale-data/en_SX.dat,sha256=Ldsv42f1G7kgTFRcGdbyL_RnXUj2_whkfivt9xCS9oQ,1163 -babel/locale-data/en_SZ.dat,sha256=qidm3zACYSmI6TgdvkJ-URbDk7BdHg1JmENh3jFUsm8,858 -babel/locale-data/en_TC.dat,sha256=BqCmasVKStg1Mia681u6ZqtglR5TxC0QgCD2j1XqAwM,589 -babel/locale-data/en_TK.dat,sha256=KmgyiXJLdOlswDEemXHOLEuZb5de5ZM0YmdDxNnAHog,1160 -babel/locale-data/en_TO.dat,sha256=wOZyazP1wVbQhv9Y_H_NDHb0ldHsMPdZPN8O-O1c5ZE,609 -babel/locale-data/en_TT.dat,sha256=UwplYXlbOs4hLPyDovdYDv6yz8KGChSZ6ufJ5htjfQo,627 -babel/locale-data/en_TV.dat,sha256=Z_vPwZ0HZB4aDDibrbzesmYFzgKRqk22hS2ZKqhq3_E,1160 -babel/locale-data/en_TZ.dat,sha256=syqDYFfemhw375IYXAM-F03S4gxAe7EbaJcYVbjt834,1412 -babel/locale-data/en_UG.dat,sha256=yczBoonl1zmDZpeNyAHAKvQ_OArvhP7AWVLOtKv9Jkg,1435 -babel/locale-data/en_UM.dat,sha256=QpePixV3RZ9RiqrYuz49bkN6Xeg-UG2y0Po_yaLbSOQ,626 -babel/locale-data/en_US.dat,sha256=JU7XRlKyRBNlDNbGDabuIBWP_tfuFahFBUNDL16cE8I,626 -babel/locale-data/en_US_POSIX.dat,sha256=22rJAk0xIO2lY6r_nfKPBUtruaYmgtYeTjq9nz4RN0g,1204 -babel/locale-data/en_VC.dat,sha256=udrNbZKYSjk5vRAlIMd_k7255C5GUjBmQjOVm_GSshk,608 -babel/locale-data/en_VG.dat,sha256=_MFcYRjyNuFMVYGYjGBQMC3C2_IZjcSXGLxNFUt15z4,589 -babel/locale-data/en_VI.dat,sha256=ptodXPLBh9jA4d91bhhHarqlw8t0BuiigzyLPxAX3Vw,626 -babel/locale-data/en_VU.dat,sha256=OKNpgxA_p9zCpKhmDA-r2qAUHQmeEY-ITSvz6Hqlp8U,609 -babel/locale-data/en_WS.dat,sha256=_qLMqdSB0O18FukP062U6fiMk7uFaNUp-u8qjJXB3SU,629 -babel/locale-data/en_ZA.dat,sha256=MYqHr53tM6t70LgMH7_wdkltFYoUWLEG-u9T8PK8bbU,3269 -babel/locale-data/en_ZM.dat,sha256=Zphtlz3AeWJ4xZaeDtX29_xuSN-aHrmFX8-dg4j9ePs,858 -babel/locale-data/en_ZW.dat,sha256=cgE3J3Wk8y0K6uki7a377LFVPQFmDFPCCn5dngZQxMI,3199 -babel/locale-data/eo.dat,sha256=8RBQNNdJRH9CcD1IPXEl4pl9Z8U2OBio9vmJg8Z6f2E,40689 -babel/locale-data/eo_001.dat,sha256=Mlc_rMI2tpO1RL6ZJcuMDcO5ou3NuFOxZ16TomDvwrs,823 -babel/locale-data/es.dat,sha256=Xj1wyewmRlgXf3qDEsDQpFFAovauJMn7tL9VLlOoOFg,199638 -babel/locale-data/es_419.dat,sha256=dtalpa188kCJUE70v4IywI7YGXtRKWv61kCBoyEd0gQ,23299 -babel/locale-data/es_AR.dat,sha256=fHbtdPaXDRqdHGGB7NNOn_e2aNSX7OZQ1BiysR9PZo0,8828 -babel/locale-data/es_BO.dat,sha256=Ks0Vs-LYS9eSPux9FeV6HZnhdWDgSzPB8RWuDLglzkM,1888 -babel/locale-data/es_BR.dat,sha256=CQBretr3RreqaOiCUo5-cmR3EIlSUiQVJMd_fhPktIw,628 -babel/locale-data/es_BZ.dat,sha256=whnvRybQayDyZH7OFfVQHMR3aHYLZhpDU2gY-j_PbYo,627 -babel/locale-data/es_CL.dat,sha256=HPawCg0SjTK7JIBSvE0JJY7gxeirRz5DdkcXUgY9eH8,5128 -babel/locale-data/es_CO.dat,sha256=B7TtJd_eH_7KNClQGfsFbFNwwLmL72t305awqTOMIK8,8665 -babel/locale-data/es_CR.dat,sha256=Vh36FfFDvJeTDnmjYlOTd2ruW-5I2Wkv34BqALvJHyc,1719 -babel/locale-data/es_CU.dat,sha256=hjouuq52dJG7NJR3ypl_nAHpBIOYgV88AYWnR_i0378,629 -babel/locale-data/es_DO.dat,sha256=q_tRNydo2SG6AsDS0CJb7FPQvPHuIYi6hjJpBbGmWk4,4020 -babel/locale-data/es_EA.dat,sha256=vYi5_0kkB6gIqCXTdtHnD755-gzO2y_Gd-lAy8ahpMU,589 -babel/locale-data/es_EC.dat,sha256=VBBKHoCazqVryt0jzkeu2RadhDAityjxxkSXfsBYIq8,3294 -babel/locale-data/es_ES.dat,sha256=VCWxAz9w1EHetI06vwya_gkk7vDXGGSXJumViKKb4Ww,626 -babel/locale-data/es_GQ.dat,sha256=v1NY_AGhDyOAq1jIFJIQ9FWosDL_RHNvIIufvaEYdWM,872 -babel/locale-data/es_GT.dat,sha256=VjbMTOJSdaBbIhZfbeLcF5KTNtCDNN5Q-Y8mYIrICTM,4896 -babel/locale-data/es_HN.dat,sha256=_cSRFPkE1DrBlZFmQFO415ymztO6xQo7zZxHaixq9CU,3476 -babel/locale-data/es_IC.dat,sha256=ap4rHt9hZKqaWzlIZXgs92V3EWTmkCULMIY6Hf91T3k,589 -babel/locale-data/es_MX.dat,sha256=QGf8oLoSurcTEe41nR0B6mFVMQyfqEXttL-tLL0dsPg,24708 -babel/locale-data/es_NI.dat,sha256=2C0CW32DPFe5bwQFn0-yGXup7iVdYncLI7ByU-yGSVY,1653 -babel/locale-data/es_PA.dat,sha256=TvrAZFMO0Auv5Et41DcMNQKASC3ZrGCalqbxyqVEReA,3884 -babel/locale-data/es_PE.dat,sha256=dYZY6-VdFeUIYLzm9wyWQ7fpDc2_prQh_Nm5UsOoOC8,4848 -babel/locale-data/es_PH.dat,sha256=az00tcCjyCZo-DL4wkdCwFGwuue6M3KwlrCvT6UJCI4,1205 -babel/locale-data/es_PR.dat,sha256=D-Qc8ImING-Wu5LZpSvgfb5tTgKdqtLE6B-IyvJnXck,3798 -babel/locale-data/es_PY.dat,sha256=UCgFkmRSNtsFZAZ1QbauP8511OKtbj0OAOdkJJ-0N3M,5319 -babel/locale-data/es_SV.dat,sha256=DZ5zGJp04BA99FVtOQIpROt0Mei6Esua2Nw0m48rViI,1402 -babel/locale-data/es_US.dat,sha256=8_RWSFk2Vj3v0dHc7iX6Ge20ZWX-M7_wYxH1BtTfv9c,25343 -babel/locale-data/es_UY.dat,sha256=-Jw0bOdLf3LWpBykOF6dZ0nIy0I4alpSH5oTo1AXAWM,2540 -babel/locale-data/es_VE.dat,sha256=DuMDeGoUvTE_qUGtOUnS7eIpbImIP5x2YeR5KxFRmnA,3752 -babel/locale-data/et.dat,sha256=pGdCv2OqghUpVp6vOMfldspch91G98i6kIm6eji2FKE,200192 -babel/locale-data/et_EE.dat,sha256=xpoZTzSn447SsQklqYnKUUL27DkZuNsRpQxTn87Tmlc,626 -babel/locale-data/eu.dat,sha256=gq-LZDCqk_bt-R29APS4rVYl-K_D3d5sIb5nhjzdZnE,176850 -babel/locale-data/eu_ES.dat,sha256=xvTtCQUjEml-wPLAZR4kU_hhXZ-j5oIE5MO577tCdFg,626 -babel/locale-data/ewo.dat,sha256=kZQmUNXQ8t64WMf8lNY9_i03WVdbmJA92_wAMK8p1jc,17595 -babel/locale-data/ewo_CM.dat,sha256=NirWcwhJ0SSdkIex0afT1IDuwyfJBBcfX7CGnJNIOAQ,609 -babel/locale-data/fa.dat,sha256=qX7byceg8QHSgGdOQuJlOPvw1G7B1V7Ge5d_cieSwnI,217724 -babel/locale-data/fa_AF.dat,sha256=donKj3WGTXbFV1upg-DOI-7fZgrLoUZjL9mQrj58NDo,11247 -babel/locale-data/fa_IR.dat,sha256=ZnDClkeVc1IPiEGa63b7BhvnhklUhgige3sTjeEK6mU,651 -babel/locale-data/ff.dat,sha256=fFDGP7W7WqzDGCEe5jMrIWsD9ODm2h_4iZobPVhcRRc,16084 -babel/locale-data/ff_Adlm.dat,sha256=ZuHELP4Qnng1f83guWn-4zQ2QsIvvJJfQh_yT-VDgv8,174659 -babel/locale-data/ff_Adlm_BF.dat,sha256=7b8PdK1LA0V-odNH3iwuNDDR1vQYQhXvHp-5bB5ZwLc,610 -babel/locale-data/ff_Adlm_CM.dat,sha256=32kFf1KDw82I2SKzaVB4P8dBfmkw_mmG6fYAuThS99g,629 -babel/locale-data/ff_Adlm_GH.dat,sha256=90UIh5AUwO8eqvY2d7MzCmPwJ2XNFfAMfHqqEr-QZio,1209 -babel/locale-data/ff_Adlm_GM.dat,sha256=NqlOMO7KDanw-Z-dnG4jSX1SUESFQrNG1MVCMutQs0w,1205 -babel/locale-data/ff_Adlm_GN.dat,sha256=VAK9og8mz1WVXD9RnykNOiKkC69nIF_gGgkwKensMX0,589 -babel/locale-data/ff_Adlm_GW.dat,sha256=_BVL7y6irTvBSRhVMmICwv4uNllP5nxIqPGpU5i9sCs,610 -babel/locale-data/ff_Adlm_LR.dat,sha256=UYThYdKlKFe4XX52x7WO2xmkiHA9heV9E3K2Mg0RP6o,1205 -babel/locale-data/ff_Adlm_MR.dat,sha256=anYa5CmU8BiiYRz2nL12UDCwLJIsUIbZqajTFSYmvd8,1206 -babel/locale-data/ff_Adlm_NE.dat,sha256=EmZR_KWVdW7b5TxkRsivHLoYKwHU029v-R0k7zieWQs,610 -babel/locale-data/ff_Adlm_NG.dat,sha256=OLPxRiTM2InmMtH2gCRJRhbmwhawtdSR--6001ckT5k,631 -babel/locale-data/ff_Adlm_SL.dat,sha256=DE0siwIkfETd-Pd5nvDRWK5F3_55bSYpJFBZfYKHquE,1206 -babel/locale-data/ff_Adlm_SN.dat,sha256=9USLkiIrnIVKikQHcPqyF0bwUqc4OiAm9vDisk9boyA,610 -babel/locale-data/ff_Latn.dat,sha256=byAYS1KDI0NXZf0r5uEtjiW_dvH3S7nniynJX6jR30w,839 -babel/locale-data/ff_Latn_BF.dat,sha256=NNCmS9PhIhnRzZlE6Zn7Sjt560T_zY0oAGvs-wkJQjo,589 -babel/locale-data/ff_Latn_CM.dat,sha256=-vhCSM41OmNfJwpW2ArLlVSOBAmbxI4qkdGrOuG7jxw,608 -babel/locale-data/ff_Latn_GH.dat,sha256=rAV1pDUEzSqrxYJi7c_bB9eVweCRaIzw1qGZkBw9HB4,1188 -babel/locale-data/ff_Latn_GM.dat,sha256=_xfcaqyGrO0UdRy19lGMjo3X_jk_MGCMSvgQjfyL0p4,1184 -babel/locale-data/ff_Latn_GN.dat,sha256=cdoXME19UJX1H7WkepaiJEiUql4zOY7h5uO8GKQoZ_4,609 -babel/locale-data/ff_Latn_GW.dat,sha256=lIrg2frFHCvM8guhuR5OmGU9Np_yUTIcORKQITZSFYs,589 -babel/locale-data/ff_Latn_LR.dat,sha256=Lg_t_ANpKoAXV_TeCGXpGFZOnmMmYIdS9GfylT6Y6h8,1184 -babel/locale-data/ff_Latn_MR.dat,sha256=qhCUin06n7Ow841YyfQ_aYJnDB1gCwbh3A-pozV-75s,1185 -babel/locale-data/ff_Latn_NE.dat,sha256=vYqMUR9LCykf0H_rTE_oeS9fYK7t-ajKpbK1IpF9-Cs,589 -babel/locale-data/ff_Latn_NG.dat,sha256=NAMpFyNWE3dSzIwJTRBwH2SUhoJlu_AzinAtCByfyJA,610 -babel/locale-data/ff_Latn_SL.dat,sha256=AMk0G4KKcrT9Yh1902tRDC8JBwXHRDqRgOcw6W8Ne4o,1185 -babel/locale-data/ff_Latn_SN.dat,sha256=Idf9JfDjAfWlKouD9gYB6m6_qg9P9xUIRAgMQ5O1-Lg,589 -babel/locale-data/fi.dat,sha256=mQkPOSvYmGw1T0FjSrtJ0vgGOZYYTV9Ixz8oTvfFoPQ,227195 -babel/locale-data/fi_FI.dat,sha256=CqHzlsNe9s14gZWMaUn9abl4FmLAZknXRX1lP5Pdrc4,626 -babel/locale-data/fil.dat,sha256=xZADFjoyLySL2eXDQqLicMAFPoaRfdLo6KX-DGk69hY,179405 -babel/locale-data/fil_PH.dat,sha256=U-tLxLn0lDKKpUqEQPLTumOuJOIYi80HvPnUk2SsObY,609 -babel/locale-data/fo.dat,sha256=c3gHwJxgpzyEo5QTL_VGVE14Ledk5QJdkedX9a2LIIk,165657 -babel/locale-data/fo_DK.dat,sha256=V7Kq03gQkns2EDztSyIiRLr80EtZsGZnmoYPsChW__w,647 -babel/locale-data/fo_FO.dat,sha256=WZJB7n6uQpGsPNWVXqP851OGZd5RmfSMbQ-s_C-00tQ,626 -babel/locale-data/fr.dat,sha256=PuqjeWNTBK-3hLx2xl3WMzDRjOsHSvq3s9pi9OVRYPk,225342 -babel/locale-data/fr_BE.dat,sha256=QW5XQfg_MDjZQazIkAJTp19ZeRRYLEwTP2Q6ix3W3C0,1254 -babel/locale-data/fr_BF.dat,sha256=gVdej2f-lrFMVDjQNCma1-odtbYzezlFw8YR16ZuMas,589 -babel/locale-data/fr_BI.dat,sha256=hCmnp8GizMpXqkYPSnRFUMb1ltL9xT1aIHUOt8uzR5s,610 -babel/locale-data/fr_BJ.dat,sha256=CZgeRt0F7zcnCbuwouXBxTg1Ht6M4UpS1JYNgdnGZOk,589 -babel/locale-data/fr_BL.dat,sha256=mN3e240_oM-t97i3jZ33ptBFR3XJFtq2519QXQskeDw,589 -babel/locale-data/fr_CA.dat,sha256=hUfSdAwXBvfuhc3dFBmHdmgllVG8dmH62gsD5jYn80U,65858 -babel/locale-data/fr_CD.dat,sha256=KqBJ-62QyyMteiPxaihTP7AZAbjuoZothXcV7YBv9cA,1106 -babel/locale-data/fr_CF.dat,sha256=zElh_1aCiSapkL83eytl19hKu0R6lrE3xmb_a2lf_cM,589 -babel/locale-data/fr_CG.dat,sha256=XqZxi9XodrhYnQqagiCv8zc51Aqv8S_E3AKgZxPO6QA,589 -babel/locale-data/fr_CH.dat,sha256=MHWdTsv0DY1KNjVQCSHuEOa1PQ_Mtbm0b3mThVRXkzg,2970 -babel/locale-data/fr_CI.dat,sha256=PULA-d30mWwNN2Zsg_58tbUde8ljeA7ej6_bQSvyngM,589 -babel/locale-data/fr_CM.dat,sha256=sA21F_q-PMRWez-fKSoxNz8yyaTtxBg78qRRukmbMR0,2083 -babel/locale-data/fr_DJ.dat,sha256=retYu_VKqCAemcxMH2ieVzYXLQDnM6-FkxJLfRksBMg,1205 -babel/locale-data/fr_DZ.dat,sha256=lT9Bd_4OA78pLByWz-ub9pRT4pfKANUsAG9Gk2NhTtU,1247 -babel/locale-data/fr_FR.dat,sha256=oucSQVTi8gnvWNQ07WJPnYh1YQRxbYR6afhy8Wd2YgI,626 -babel/locale-data/fr_GA.dat,sha256=hjGGeVpmPCTxP7LEMxE_iUUS-uSfRnY3unJ-800ilGk,589 -babel/locale-data/fr_GF.dat,sha256=FwIBhmnYvA-VIAgc_n9JLiENGTZMXFANqyFFpeNjNYc,692 -babel/locale-data/fr_GN.dat,sha256=BIJ_Gl1Yp5fVwQNISO_f4o5U3vgOWPKB-4UWMjp_SMw,609 -babel/locale-data/fr_GP.dat,sha256=7IjXNU_xYD73C0EaZ2IWMxZ8kzIFRLWgrE07-xHFB8s,626 -babel/locale-data/fr_GQ.dat,sha256=zMNFOsgv_5JFDvnqB6AovINlxEdr_QYBGw2Rl6LsdGM,589 -babel/locale-data/fr_HT.dat,sha256=FIn4weL4_b_phmnIIQFDdwhqY3UFaLITSGKAZh_sIJw,1873 -babel/locale-data/fr_KM.dat,sha256=SaUGzyArQSXa_pwsb9hw0_fs1TjcZq7o2CFW1mAfvQk,609 -babel/locale-data/fr_LU.dat,sha256=OZ6lHBdT7fHpiMgMaIEJhNB4ohZVMZRQiJQT98n2gLE,687 -babel/locale-data/fr_MA.dat,sha256=7-FeaIFIZGfbunjR-M-lTr0WkTGljmC354Iadk3_S-I,1277 -babel/locale-data/fr_MC.dat,sha256=se81gvlIKgey2DgfCYayuXiwV0Wykw-QM4otwduegCQ,626 -babel/locale-data/fr_MF.dat,sha256=asOP0aSNk9sx2Jx3R5QigjvOQmgEzRP0atpznWTZEII,589 -babel/locale-data/fr_MG.dat,sha256=GL58hdcr_DZePturTSmv-8WScEg60WajuKuijeBs5hQ,609 -babel/locale-data/fr_ML.dat,sha256=x_UkTI0saDvoYCiYdNF9CWoyc1VvMAQFBw8APjCEL78,1126 -babel/locale-data/fr_MQ.dat,sha256=v3tmYxQ45BkuVen2er9vMsxTceL196E98XYPsGWKXTM,626 -babel/locale-data/fr_MR.dat,sha256=0qY-kxib1lGMlxGNcyjEZwj7BV8Da3CZq8DGyiRbcrM,1185 -babel/locale-data/fr_MU.dat,sha256=UVc2y4RDe6Jy6_48f043AXBUqWLvktTjnj2osTeAJO0,609 -babel/locale-data/fr_NC.dat,sha256=Liy4q5CQx43KEep69njgxfUENHEJRfXaZJlsK_UcIbw,589 -babel/locale-data/fr_NE.dat,sha256=beqoAaHiYhcvUeABHOBD_9cJQ01DQzo5nbAZb5JZb88,589 -babel/locale-data/fr_PF.dat,sha256=mSlv8dzrvNyo9XfC8yczKIKGaEPGTIpf71Oi1IH_f78,589 -babel/locale-data/fr_PM.dat,sha256=yukgtaee7ROFoFHM7dUO9CSYlCmipm1i5ZEIsbvvP0o,589 -babel/locale-data/fr_RE.dat,sha256=IN73Uw9cZdifS4rK4SfWiecLcAX0R2F4j1aV_DusCUQ,1142 -babel/locale-data/fr_RW.dat,sha256=b6cY_0EAjkJjlLAjdYr7o8vkdzB0sQbIgwgWsFlaO1M,609 -babel/locale-data/fr_SC.dat,sha256=ejzZtxh5_XDx1B0oZFQx7oDpuuxAsmNp1mYxGtnRs34,609 -babel/locale-data/fr_SN.dat,sha256=AzbXwg-QV0b_-M08HrFFVoi0CvQSW9tK-rNHQ-N-9d0,1277 -babel/locale-data/fr_SY.dat,sha256=nc1VVE9d1H23_Kppl-NQLCOyQHhUc3hVpFvIHKFwZ1Q,1247 -babel/locale-data/fr_TD.dat,sha256=sUvrTreI6gzMwlLxXI-uLQmmO3bSFSa7zgdrxQqH1_w,1165 -babel/locale-data/fr_TG.dat,sha256=GWo6BaOsi8-YZfuWYIEDMyodmtktbkK54R3fNEwvsNY,589 -babel/locale-data/fr_TN.dat,sha256=0OMk3LdpZvhd0ZFbYRh2ioViNakNsBe8DQIbGnkCeQo,1185 -babel/locale-data/fr_VU.dat,sha256=yly1_BvKQwMXPMXZSc-ZRbAZ04qjatwiNPrglkTge_M,1185 -babel/locale-data/fr_WF.dat,sha256=_LOp9Pd-uVPzUqTOLmdKAVmqdhJSc9TQxN-q0AvFZMA,589 -babel/locale-data/fr_YT.dat,sha256=M-OawlEGCEqzxMFehDb_3Ofb76HA6nwXEBFBKEi4qMw,589 -babel/locale-data/fur.dat,sha256=kBxHiHga0PnTMJY38zYNV29C6Y1hw44T2qazrXRDBQE,35027 -babel/locale-data/fur_IT.dat,sha256=-jYgvCMGoV9qmo1lNuPbfFhw2RiwM9-XrMAaisqk3ck,627 -babel/locale-data/fy.dat,sha256=cNAuTsUGZ03hww_0oz20axWibvGvrSc_qtjNwX6qT30,110221 -babel/locale-data/fy_NL.dat,sha256=6kDdfEWgZuA0BeiB9BM8qhtPVPqUB4zBkpQBmEulOpU,626 -babel/locale-data/ga.dat,sha256=BWeLf2Ib-AwjhXVaP8Tj1Np23kyKwpOBuNTOIjueIAg,316865 -babel/locale-data/ga_GB.dat,sha256=DVKT5Ub0mvXWADwJua35XUCwxPrRj8olUR-xGv9x07A,626 -babel/locale-data/ga_IE.dat,sha256=cCW_n5mlSTNu6JzFj5bZMiJbEXFiOHH8BrCB4MnAi5Y,626 -babel/locale-data/gd.dat,sha256=11GEkGyo2nBzMBCd7vfzaif9d_xgR8KIEvJmPrAZ_Lw,302010 -babel/locale-data/gd_GB.dat,sha256=6VHHQkNfDnsLrshZ5VM0AvbuOmAkVWFf6KIBK6dXxhk,626 -babel/locale-data/gl.dat,sha256=VdJBH1gVlN8SYNhZOZ8-h6svbEAMapF4HVOtgqFXQ44,176367 -babel/locale-data/gl_ES.dat,sha256=taQiFoK4jse9XR19xt95xT_BXnzftMPMJgKk_ZIh1xg,626 -babel/locale-data/gsw.dat,sha256=BZgIpYmp-FUl1rjUf0EG_pUQERu1aQb9kvqIOG_LD-k,108049 -babel/locale-data/gsw_CH.dat,sha256=oNDsu5FZKmaMx0q94MsggWUHYobgGv6lNNwqRbm6mes,627 -babel/locale-data/gsw_FR.dat,sha256=4rf2w5Q1j3qezQ5Jf1-0qkY3K2Yk-ArQBBFCciWNfiU,627 -babel/locale-data/gsw_LI.dat,sha256=4aFdXjXWs0W3IE-cqe06PKFdB1l1MbQre8NY2sm3lWM,627 -babel/locale-data/gu.dat,sha256=Bn86qx8SplDJcC2V5jLIOeAavwh7EWkDZEAKz2nY92Y,246649 -babel/locale-data/gu_IN.dat,sha256=4mup-pKABihWun3Ougbz8HiGoXtPDPdAqAKMBma7Gvg,631 -babel/locale-data/guz.dat,sha256=bzP0aY17_xjZaiVCMTACE8ThMfl9HcD-ICcMFLjN7B8,16016 -babel/locale-data/guz_KE.dat,sha256=S-xrYnojrbkIXv_AMMaLR-0Et8CtW6Ty3FDkikLYqS0,609 -babel/locale-data/gv.dat,sha256=lWBEcD66RJTHCg0L0uUEk3twf9iApg0VHCUvCmUGNjw,4146 -babel/locale-data/gv_IM.dat,sha256=32eF8Qm1U-NzDs6CsC1a5G40zereETci2vy066Dq9m8,607 -babel/locale-data/ha.dat,sha256=YZzU6hOiWG1eQjBfS8xKzG8FLFYroDh0wMIQnp1xnV8,78016 -babel/locale-data/ha_GH.dat,sha256=WAVJ2CogGv-7o3KHNfd9YIThisXhPcKkOCStIkCJYOo,1188 -babel/locale-data/ha_NE.dat,sha256=4LR2guLb66Q9ptMpxPP1o9RoCbMUvWh0xdbfOtOg92Y,1248 -babel/locale-data/ha_NG.dat,sha256=7ArPguvlMmsMd_KuhyAy5K0PTuvdzDgbCrmY5c3hyKk,589 -babel/locale-data/haw.dat,sha256=daT0jGNbH-c8-byXW8Ev8k7x6FxWzWzM4kwyGowZrgY,16106 -babel/locale-data/haw_US.dat,sha256=0npKxik41EG4w134GeOKBCqQiyn4W_4RU9Xol9An9vI,627 -babel/locale-data/he.dat,sha256=B0Bypmykcuj6aTi6m1EOjpPExBZ_wQewVW3AYFRYaiY,271008 -babel/locale-data/he_IL.dat,sha256=tv1zu6LbE2qFr5KkxegGM6sl5YjsHeOohznihTWqul4,651 -babel/locale-data/hi.dat,sha256=R8gru5lLOJotWFqfLJm7RLkQ9F_k82wCa4KWk0XRnXo,244568 -babel/locale-data/hi_IN.dat,sha256=laF8SEGi7j2jIwdbvx9jumoN_ZSlsmM2qct5Qpdzy8g,631 -babel/locale-data/hr.dat,sha256=_Bnj62FHBemVoPsm6v2atZTwG_4RgIvKCN-UOxpyMj4,247517 -babel/locale-data/hr_BA.dat,sha256=cb0WcMYeSmL0iyadbeYGokENF3IdPgPG8Ir3pt2QWhI,1161 -babel/locale-data/hr_HR.dat,sha256=FBTFejY7tzVjCu1TCX5PtUIXfhL2iN0DukagJf7dS6E,608 -babel/locale-data/hsb.dat,sha256=7JQcT8q6VIK3yOG2Jx41ksSJj2G_oqcrZH3UXHS0jvo,179178 -babel/locale-data/hsb_DE.dat,sha256=mJpofwRoSQoD4uMNdi0xcLP0qyq0IysbE2VkXNYniug,627 -babel/locale-data/hu.dat,sha256=0Gvk8Gl8uJtKpPezPTWfR3XX2wkDKIRQsPuTTAYcahg,192963 -babel/locale-data/hu_HU.dat,sha256=KndrzgNop55GlUso27Dfpf6rW3RA7YhQibwBFTzufk4,626 -babel/locale-data/hy.dat,sha256=cx7Ap0eLvzTGjVGdK30x_8TLZ5QLsFgbCnbqrYu4s8I,214313 -babel/locale-data/hy_AM.dat,sha256=4HM865GP-TvuBp3XjB41rgc1QuXLLITSt3skVtB0QHA,608 -babel/locale-data/ia.dat,sha256=kIIuryj5kmGxdG2NWtOdPOezBSO3NQGbCVI7dl1Bndk,112822 -babel/locale-data/ia_001.dat,sha256=onWUTi-JeTzCyFGYj9VWyvYFnE-0w59rnsDeP3WZfCY,914 -babel/locale-data/id.dat,sha256=_jTwyiD3gWQWvaU0Re3tJ6nQI0BEmeQzc6AL2PTBZXg,163265 -babel/locale-data/id_ID.dat,sha256=Q10Fz7etpCtqpGmEOzhzIAluNUViuPV6fJ8Ibp4TMDw,608 -babel/locale-data/ig.dat,sha256=-aYZuS7od7VW9iec3iOwyWRKdHtdxhISdJIIkeLLgB8,52036 -babel/locale-data/ig_NG.dat,sha256=qvl7ZtJLFgRf6Jbys3rPutuwKL0nImrLIyI2KxDJNMY,589 -babel/locale-data/ii.dat,sha256=crBpYsdPGu1KoOSjCWHUy67ssD13AfvmK261h-VRMhk,12588 -babel/locale-data/ii_CN.dat,sha256=NptEx8Tehw_ZnxhDc7qbpFsDxF_2Dxjx403D2fg2kKA,608 -babel/locale-data/is.dat,sha256=ltT4Iwckwve2QSs3Z0MzA1x4KXXK66cFUOcRnlLDG_g,188046 -babel/locale-data/is_IS.dat,sha256=vkGTcivdc7UMK2uv1QCKnJkoGh1cFUyK877xmLKNWfQ,626 -babel/locale-data/it.dat,sha256=7JMCTHE2jVXjGEkfgmmFdwlQbKCwRo1PfTecsagqfVg,188460 -babel/locale-data/it_CH.dat,sha256=aBS-dqAT_jYf8DFLYCQJ4A4MfLi9u_rAekJ5fU8eTLs,2776 -babel/locale-data/it_IT.dat,sha256=EPq-ZuC7fD9sVQNf7K7dGReI7pvxix55SFteRJlEheo,626 -babel/locale-data/it_SM.dat,sha256=gpwEWv5kVspUSBElJAoge82X76LK1lsgxShdk_BdxwY,626 -babel/locale-data/it_VA.dat,sha256=drgEDlw3k2saTMXzEz5-BkkHgCCdnXVQ-aiCHUMYAUk,626 -babel/locale-data/ja.dat,sha256=m8MJqRkZ-VMiUTOqi0zTmQe7CMDT5pT_Vj8Ek5nbyG0,200287 -babel/locale-data/ja_JP.dat,sha256=fqV-tzCjVKeIhB1TH9R2vsz_kpEwD2KSdYUMOL2zVQY,608 -babel/locale-data/jgo.dat,sha256=eEw-8GRRYT4SB36fdEfaLJX76RKeEhJomcYa7wl3WvA,12628 -babel/locale-data/jgo_CM.dat,sha256=4EKGSIDydn6xezIwTpMhOZFnheOhhMWfwadqa9rRRpg,609 -babel/locale-data/jmc.dat,sha256=q2xbrOlR1h4dKkAb5f-FFeG1yY1zAO6vZ2PqN9tgTLs,16068 -babel/locale-data/jmc_TZ.dat,sha256=bpvlP-1bAXEnvIRsPxFHel5X-8eLxF8dUOlkJctN78k,590 -babel/locale-data/jv.dat,sha256=LaOeOox55UzDPRCZzpKBtS91S8visMnBQiwFsKvcuYE,129461 -babel/locale-data/jv_ID.dat,sha256=H5wi4GL8eID9c2QUxpz6qpFn5ORgdpE2mjYxdkozJiQ,608 -babel/locale-data/ka.dat,sha256=isStz_8QWtbWBJidLjlvr1wqrm3DJHYSLoeZkpzJAy4,260705 -babel/locale-data/ka_GE.dat,sha256=4G3wWIQOIZM5Z8r1Px0d4DvTOMwbR4Ubvq4expe_gY0,608 -babel/locale-data/kab.dat,sha256=-rQbUS5U939yjCgkQd9aA4PFolU4h3cZnP1brEqMLRA,135263 -babel/locale-data/kab_DZ.dat,sha256=KbrMqfLO_TlWJlCQVmK5IjqCwVppZUryATx2Rq5YTaE,652 -babel/locale-data/kam.dat,sha256=lr-AmdEqLfe0Asb3wwfFYGjzMMqobCr9-ZyDb8Cg-YQ,16175 -babel/locale-data/kam_KE.dat,sha256=vfQX-o-otm5WDwv2qrHY1lesX-AQ9cX_2HW-nO820AM,609 -babel/locale-data/kde.dat,sha256=iV4F5CHX9rYrt0R_iioeDnTv21snL0t8hZ95QNcGMBE,16475 -babel/locale-data/kde_TZ.dat,sha256=RdJ-ovdj55xBfaOc5mE41fqsNdLN_7oSIOcyq7-aApQ,590 -babel/locale-data/kea.dat,sha256=Wf1pAdN0uMYvlUpOiQdLgMvvS03rkpkdDwU-P8XzvWA,85757 -babel/locale-data/kea_CV.dat,sha256=7lbONkE-y9_doiZJxjyGYM50Yz41JNGwy7dV53vvhEs,590 -babel/locale-data/khq.dat,sha256=jmjjC1r6-Cxur_0Uh_WXk92MBgw4fR41PzwlhVnr3qc,15939 -babel/locale-data/khq_ML.dat,sha256=CbrIcKwmxw5THhW-nZ-sPFZjsfgpHZUDl-hhWH2toDQ,590 -babel/locale-data/ki.dat,sha256=abQFXbMy9mdR96-Nebj3PL4_frRUGAEcsk3_-DQ0TYM,16123 -babel/locale-data/ki_KE.dat,sha256=-fcVNnw6zrxr3Bw7mi-vpkzP0v4v9t2hkj5ZEuG_5Zw,608 -babel/locale-data/kk.dat,sha256=V4lqjiOozZQv3Zwukg1UlrXhsuDx5u2aA_k--eEsVAM,210242 -babel/locale-data/kk_KZ.dat,sha256=DhjfmmZRmr-w8q98Mqr8h_v2hosJAjTtTFo53E3QGQY,608 -babel/locale-data/kkj.dat,sha256=466fsXBV_YSBSPGZx0z2FYvYrU8Ql_QIIZjXfNGv4KM,4888 -babel/locale-data/kkj_CM.dat,sha256=KY8LZH7ZqifH7BTxFz4ylu4d1LAAxMAD8W-a0gYsjZo,609 -babel/locale-data/kl.dat,sha256=gHhmdk-As6QszK0V703UfVG9XcDZo-zA-AKfX3YboWs,58200 -babel/locale-data/kl_GL.dat,sha256=RojeiBiofKUHvk9f_ITt44uxy9gGhxz-sVy6sBn4Zcg,589 -babel/locale-data/kln.dat,sha256=RvTuZqeDDB_BKquwaUuXRjL89K0d8kcpj5rvD8oaIpc,18003 -babel/locale-data/kln_KE.dat,sha256=RydM7LQVL9u4kqeFACUbNwf4M8vQQhP0qkKM_oL2oGM,609 -babel/locale-data/km.dat,sha256=wMIgFZSCkKBp1QkkhFPVEgAof5LuMFxz0jEzIWRdMQY,202267 -babel/locale-data/km_KH.dat,sha256=xVjkyVxn_hrWpEp6JOzSZKxZFDZ_3UQjRQsVPvBy0CM,608 -babel/locale-data/kn.dat,sha256=ZnwTJdH60MjTwgKjjgLR_vEUIHFRreimD4eMv1rAA7A,263580 -babel/locale-data/kn_IN.dat,sha256=Kzg5Bayf-ACbA0Nun8rTGYcbi5r2PmghFxlbyQIiKV8,631 -babel/locale-data/ko.dat,sha256=5disPatHT9WJa6UOmZXl6iuL0PWplfHyQMjlNzFqki8,175158 -babel/locale-data/ko_KP.dat,sha256=2Z1Rbojo6MHJGQdInFOjfZHbpRdwvZfM-FU_08oFGng,789 -babel/locale-data/ko_KR.dat,sha256=y-3hO1aBM61NXG2L4o41zAPNlUvfA3RE14q_8SdarcM,608 -babel/locale-data/kok.dat,sha256=Ot2FE1ar2aHOhP6L29tqcxHSYoTc46KoQffIDHGkNQM,182871 -babel/locale-data/kok_IN.dat,sha256=e5cBMZY7kU_9H69kTorB93cUe7xFASM-2hUfGY3A-ec,632 -babel/locale-data/ks.dat,sha256=0DI2B4YMdtXgQZMQKTKL7FrEH8ntI8NMZuK0wMP35x4,102570 -babel/locale-data/ks_Arab.dat,sha256=kfXVFhHX_NrcA7tZO6yYXym5wsDvpjma53urJPVeGJg,823 -babel/locale-data/ks_Arab_IN.dat,sha256=_fjJMmIU0OJMR66po8yq9ByOzZZ3tomRqVt6RM4BJFw,631 -babel/locale-data/ksb.dat,sha256=SxZYlQUncKnA8ljqLb7k84GzFoGzaV1mhC9b8y03mEs,16043 -babel/locale-data/ksb_TZ.dat,sha256=2Wzocj-_i0wMu7oi3-8ynqirioha6nG9PPI1-5EMbnY,590 -babel/locale-data/ksf.dat,sha256=fE1YgWMw1RpxNYkJyieh2Cwm4NCE9FQbM9P4he1cviw,16515 -babel/locale-data/ksf_CM.dat,sha256=1CFxJU8F4NverN5cPa9xvVI-we8x7wbZgP3UfXVnL0o,609 -babel/locale-data/ksh.dat,sha256=6ttxGMPLhYNiad_7avsUIF2B7rFuLLxKw3Bv3nB1rsI,88937 -babel/locale-data/ksh_DE.dat,sha256=vTdZCAi8MAGFb4wE_zjnNTREloPZHNGc38eXQ0uwtPE,627 -babel/locale-data/ku.dat,sha256=s-_gQdcuJLmxKWYuUftIvv4TSjViNOeLQWiQp4Q38zk,28771 -babel/locale-data/ku_TR.dat,sha256=EsO9U5XN30PqoR6A-7q72uLJ6An2BMuGbrh6sYrZoFU,608 -babel/locale-data/kw.dat,sha256=A-aMyXGee3cHKH3Vrd1rP11oz8Mzvrm05B6DB_c7E9s,7242 -babel/locale-data/kw_GB.dat,sha256=nvzq6ku288buMZIPacs8IGm5rrD0LdzYFZQxBe9a_jw,626 -babel/locale-data/ky.dat,sha256=5xH7IcsPFiBp80H8j6Se0o2imNAELzqORSyNHqGrm3k,202058 -babel/locale-data/ky_KG.dat,sha256=I9WGUgCDXB09jIycutdV0trTbhHFKvbM8Cr4_eTvHmk,608 -babel/locale-data/lag.dat,sha256=r2Ms6wyrXqZ_u1eGycN4gIHvoDmq3LHisiMzAVvoLP4,17141 -babel/locale-data/lag_TZ.dat,sha256=gB3iS13Egu-2TLYBYwM2xbve9HxMHCQwgoxELuIuxTI,590 -babel/locale-data/lb.dat,sha256=4jKUN0pdyWrEMhXiWo8iLEKsx_NQppk41f_21Asp7IA,164597 -babel/locale-data/lb_LU.dat,sha256=oksbNG3kkuxhnrv6goNlYcBj0Oejpr9-ptrmWHF6EW4,626 -babel/locale-data/lg.dat,sha256=vV3xAg1xWrx9LbkPFxvjeZgQ0w26fXZFPhf6lwBDM00,16434 -babel/locale-data/lg_UG.dat,sha256=1HeWA7IllosO0gp2T_nevwD0f2CSAx9lMfQYK-JpafA,612 -babel/locale-data/lkt.dat,sha256=NdUx996UtMv1MiuP3iqWSl8T5QDZV8cfVGxpfgzc41s,12766 -babel/locale-data/lkt_US.dat,sha256=KoED03rqibBCmXUUHPR12gR0xc9ox489Wxavkf3hJl4,627 -babel/locale-data/ln.dat,sha256=hXo1sqtv_f1zrGVd9DAyMJPChHy4oxSAxN2yM8WOeiU,25891 -babel/locale-data/ln_AO.dat,sha256=Df8fip-BEQDkkdNenJMZYVEwNEFpJU3e7TBDFk1GCFw,609 -babel/locale-data/ln_CD.dat,sha256=cya8q___2YF--XiQKag0Z2j67S_3MXvGMkqjjvao8Js,589 -babel/locale-data/ln_CF.dat,sha256=GI1_WE8tFKny1XT5c7Vdr1xpgTYtA20qoi-LbfXcNmA,589 -babel/locale-data/ln_CG.dat,sha256=gR1qJakj6apKRWJfeXchgBbbmOYiZJs-sWBiOVC4giI,589 -babel/locale-data/lo.dat,sha256=wFheTwOpB9qwdWoEHy0qyUpEPf8zMbKw8tvCc2zpLK8,220343 -babel/locale-data/lo_LA.dat,sha256=Le3oiQxOdMmSpTmRje_U-gYUmJIgsRuIrll3v9Gvn9U,608 -babel/locale-data/lrc.dat,sha256=FxK5wDraPcV82EnRK7L8Lc6pOpd9DlOz93hqbBlvp4Q,19021 -babel/locale-data/lrc_IQ.dat,sha256=IulRzfQLGQNFx-m2GA1E-996l3AmXam6Kb2yxEU7Pzs,1228 -babel/locale-data/lrc_IR.dat,sha256=Xwe6srYtOSobQ5_3dgtaFUJPpdCzPfqdMdFw5u3h7iE,652 -babel/locale-data/lt.dat,sha256=eQLIpUDmVcOlDL3RWzcvVlUdsaquYCLxuxbJ8MjTWEA,284211 -babel/locale-data/lt_LT.dat,sha256=xpcc0-LW9jbhEMcG4_YJ_1Zh8gjMuO_pFWRRl71WVUI,626 -babel/locale-data/lu.dat,sha256=39-6RP_EimDpNfh7e9Rfh24evWwSEnaSoXTxU4Xus0g,15888 -babel/locale-data/lu_CD.dat,sha256=NLQ9XNdydBzo-3BIWY7FrESS7yLG1BFyU8wsX_QclOw,589 -babel/locale-data/luo.dat,sha256=dmxwIb10UL-N2Gx5ymbXU55MakSpMFCGneBfBu5k6f4,15885 -babel/locale-data/luo_KE.dat,sha256=NEKNpjQX9ul04z2QZGvlKaYQEpG7qpLnz0fraetUD2w,609 -babel/locale-data/luy.dat,sha256=zIdy-rfqrSkpjJVvZEWb5Eh-kvFHltSyVR4Rr_d-jHk,15859 -babel/locale-data/luy_KE.dat,sha256=3uCT5nrrTWh8Qcd2-x0vAMbsqdBfLbVNllWdTBPXVk0,609 -babel/locale-data/lv.dat,sha256=AxTgcKRkQs4L0G18VPpwyKW2f0pgFl1aB3e0AAIBVDM,214988 -babel/locale-data/lv_LV.dat,sha256=DVQGeBkn2bfyW4oBFSk-FG5YDgYoPrcy4P1i2msqbKw,608 -babel/locale-data/mai.dat,sha256=TGGQKi7YoVCYMbQcgUkYvWVeHeqPda-wkHv1tdh9ElY,14710 -babel/locale-data/mai_IN.dat,sha256=lZ93VuH0KWuLZAwFYQOlGidLcq19FwAh5FcTkbmWHIQ,632 -babel/locale-data/mas.dat,sha256=VAYNJuZSIHxhdo-sjuiIa8lLzVywzE6Pt8WnKsmkjmw,17297 -babel/locale-data/mas_KE.dat,sha256=H37wvJs04-E8bNfKwZQhqeDajPo6SvpdVwuo3PyJ1AY,609 -babel/locale-data/mas_TZ.dat,sha256=9JwDj_IR1VKGVgWxstev2mrAXxIodBYOH4UDM6Q3q1o,611 -babel/locale-data/mer.dat,sha256=OLCqftXJD2C30EM8YVyuLO6qPnMb1PSzlwTYmmpc6wM,16088 -babel/locale-data/mer_KE.dat,sha256=99Q8eh6kJb1wkSHx_J0OroOC7WZ23Gp5IGAFc-NBQpc,609 -babel/locale-data/mfe.dat,sha256=W4iO82UorOHb30ajoWPGnDjhjIWUIIr6HEbcWAlg8yo,15117 -babel/locale-data/mfe_MU.dat,sha256=TFnNwSIFyDkJUAVbw4Y2RyGH5uG4nvbKg8uNubPWXpA,590 -babel/locale-data/mg.dat,sha256=N388wocbzVzKtwYxGmUZRQ_Xfqdl_8pfhN2EVs191kU,23550 -babel/locale-data/mg_MG.dat,sha256=cwl6h3aaMkDtvF9Ei8qvlnO4N1FTSI_VOEVa54g3eHs,589 -babel/locale-data/mgh.dat,sha256=rXDO2pNXJITPslfwWEAO_8eTuME2YyKX7EBsBAIVBb8,10479 -babel/locale-data/mgh_MZ.dat,sha256=uJyr7jkKxWqYOJ7CmhjAs8AKMOz_cWlojWjFXRj_jPc,609 -babel/locale-data/mgo.dat,sha256=C512Q78AJ4yDUul2Wf0liRWjQh-GNv3XDENtmeCq58M,8206 -babel/locale-data/mgo_CM.dat,sha256=T5kZuEQ7hzI616QF05Grrv-RZb59B86medbIafdhrtU,609 -babel/locale-data/mi.dat,sha256=Nr8tmNRL5KurZuLLC9lojHHjScK_s2V-gCNZINEYmtY,20727 -babel/locale-data/mi_NZ.dat,sha256=7o2jTlC9sR5dX2mxLI4qjVIr897Xd5keBTxs7a-_DYU,608 -babel/locale-data/mk.dat,sha256=GIgzd7ykCmMFSFI0nEWeXGuQQYf-0CWvfI8cnLSgAQk,234490 -babel/locale-data/mk_MK.dat,sha256=DtPgHruh_KrDRllM_vDipwCsbMWzk2bua0lfFsstTus,608 -babel/locale-data/ml.dat,sha256=YRd4HGpa2b-k6G8EETwwIc_-klPwXhu5MIc9odvPtqg,285214 -babel/locale-data/ml_IN.dat,sha256=_vPZnTZA2VgZoDi31tfu-tR4uRzfj-cFFVMmcB8XZgI,631 -babel/locale-data/mn.dat,sha256=Iw1P5tKBu0KAl2JgsbS72Vq99Ye-t9_c5d2oZcoD3Bg,202642 -babel/locale-data/mn_MN.dat,sha256=gne5zuFemBThyeemcmnNvI751-rsRwCrCBUQ6uvuK4c,608 -babel/locale-data/mni.dat,sha256=GvLzWZHUo046TkH_05BSwDHFtkPTeSJVEaLG_nvWhUE,14622 -babel/locale-data/mni_Beng.dat,sha256=NiCHewI8Yl4k7ylwMAZVB7mtk6TZboLcvZl22n9uG9M,666 -babel/locale-data/mni_Beng_IN.dat,sha256=Lx0qjRdIKxv05uZIp8e9W-Onti_kqLE-bZiu4yEgCOU,632 -babel/locale-data/mr.dat,sha256=CCiBBjuwlhte5k72NPs7U_fpEqRMcI5PPOZDoO6BedM,246797 -babel/locale-data/mr_IN.dat,sha256=RkYd5HIWUeP8yK3zFCRWvxvu3FzaK0ta7H1HTQQMUdY,631 -babel/locale-data/ms.dat,sha256=KFfk5lBMcmtQcWGOBAyTMqEo4Ghf5S8wg3f1MbZt-W8,152238 -babel/locale-data/ms_BN.dat,sha256=CecewZU-8cYw5zaaIteTNbPOE7FqS_IGj6emNKzy3TM,1257 -babel/locale-data/ms_ID.dat,sha256=WcRbSIc4fsZMR56iv_9PE24j_rQLUCYPwU7NdEDO7gw,3272 -babel/locale-data/ms_MY.dat,sha256=8RsVjifl5WL8sXV_aNTdgjqquxny2SsSBXc4KqJuqlY,608 -babel/locale-data/ms_SG.dat,sha256=_nfWkz663QdJKVxb2AQQQUt_Hhl9bMk7hIQcqpVSPbU,627 -babel/locale-data/mt.dat,sha256=tnI8T6enmDliuHbzDfAq7Z97GDcdQ1MOfprVbqHVbRQ,78243 -babel/locale-data/mt_MT.dat,sha256=2vQihLOtB1H_Ca6e9ZvGCgZ73gVlB_RBsBMFOw22cDs,608 -babel/locale-data/mua.dat,sha256=k5P4AS4jugmg9aNeL2jUK6xoTlRW1DvPz2XMtumjFT0,16547 -babel/locale-data/mua_CM.dat,sha256=fQm0rv5p23ity5H_pu8jhbHVdaWDpqITuEPRev9q44I,609 -babel/locale-data/my.dat,sha256=M0Y81MUWIrt-aQVRHA04KZ73wPMvhd7DihayFm9pVmY,210242 -babel/locale-data/my_MM.dat,sha256=9DsxnFuIB4ImQJmOXpJ0Ujt1zMSUin-KV_a7R-irE-w,608 -babel/locale-data/mzn.dat,sha256=op9NwjJ4msszz0JO60nljP2t8pWh1jidWAAr9yONCrE,65499 -babel/locale-data/mzn_IR.dat,sha256=nw-iEKlN_b_C0VzjCY1SCElyqMgg3jQDZ4whD-lJrpg,652 -babel/locale-data/naq.dat,sha256=sfE12PpbssOaqdt_XWnykuk7rTArRVzg2DHBcAdHblY,16617 -babel/locale-data/naq_NA.dat,sha256=1Mh98XoWsJgytl-IvQuMXYJlLkYQvvoQ5_rptyu5ZME,590 -babel/locale-data/nb.dat,sha256=QaUKfFqj6AfimZOOiGI9DOxReUm-Jv6RysMhTdQ6XV0,210593 -babel/locale-data/nb_NO.dat,sha256=bXb8K_1FTSDsqIXeZu2C0oYPCrTUpX0Y5GxKs3vXwBc,626 -babel/locale-data/nb_SJ.dat,sha256=kCfUzsB6JilDQnWsVF1CFyg-7Ewq5VOdM-EWC7PJKP4,607 -babel/locale-data/nd.dat,sha256=_qfCNG-XGpi-qBzGvXKmKHxVu2WspuqdH_8ECspD1xY,16312 -babel/locale-data/nd_ZW.dat,sha256=szM5GcRhUeN0V1SGix3RkcgDkRNJF7D3BWJMYMOkNlY,608 -babel/locale-data/nds.dat,sha256=yjSK-CUxMes8T-cNuxynP6Av2MYxnNmn23PsGguUTA0,50632 -babel/locale-data/nds_DE.dat,sha256=wQlAFyMOkjMYQd9LVFTqLFt5GuntavA1RWhBf6E3DpM,627 -babel/locale-data/nds_NL.dat,sha256=VPodVrFivmTiPf4v5OZ3Foc0_FaQwgRBuK7QiD8xmhU,627 -babel/locale-data/ne.dat,sha256=oha7M56GETdAdz6rLbS65qD1oo_w8ab60lDltNGouec,248497 -babel/locale-data/ne_IN.dat,sha256=Pc3G-flVbWniVZRu4RzMVYB099rVPhUvxUC1TiTCr8U,1265 -babel/locale-data/ne_NP.dat,sha256=lhhB2jPqSBwBrxK6piIkUD0YHwGUNYdlmqlPBOJhb0o,608 -babel/locale-data/nl.dat,sha256=Cz1A8HnVqxHnoUgZIy8Ob0Kb_R8a8RbA5jfgO5oLleI,215801 -babel/locale-data/nl_AW.dat,sha256=6gmsswLqSrJ0XRfJJguCU0QFSU_dTpUOlPanbq5KGpM,611 -babel/locale-data/nl_BE.dat,sha256=IZZy26NCmKbOgbU-ZHHeviTctmUMFxmBeOmloDOCN6c,1835 -babel/locale-data/nl_BQ.dat,sha256=E39EYJYegrYGpAdLuSfkizgwgoBtfyRp-1Crb_I5PkI,608 -babel/locale-data/nl_CW.dat,sha256=Ho1si5eWdnrkT1_OA7ZWxarnzgfNdUmTlJLUkynzNck,611 -babel/locale-data/nl_NL.dat,sha256=kLT_7mliQl_5XhGi5lU_guTBSD6V-DUK92xhdWQxzjk,626 -babel/locale-data/nl_SR.dat,sha256=VVLYKCz48vdDn000ZzlokZnD1Qr1T7Tmn47j2wPG9fQ,669 -babel/locale-data/nl_SX.dat,sha256=FTjEPrmwtpu8IQVixzrdl0dEyAH524Ml8cWUxd0pvjE,611 -babel/locale-data/nmg.dat,sha256=CTnRxMH09auUbe_gky2WT9aYX7OiS_3FEXvxzVDH2-U,16189 -babel/locale-data/nmg_CM.dat,sha256=4wv7ftQl9xu_DkfdjxoJ97gcm-pMhM51OCXYX3CQ6gU,609 -babel/locale-data/nn.dat,sha256=5rU8EBZu8-b1HBGXSeaeEiPItaYqKWupiG06aTbIBgE,179884 -babel/locale-data/nn_NO.dat,sha256=yc4l2fwSD9fD1-sCQirXzrAkfxIqD_garBegapCzWs8,626 -babel/locale-data/nnh.dat,sha256=jO3oG64qBHal9MpjumyI90ETg9LoNJ8CuKliElSLnHk,6766 -babel/locale-data/nnh_CM.dat,sha256=azweVaEFbSCMHLptoZQ46yKcr_antYfr2pRmxIuZQCk,609 -babel/locale-data/nus.dat,sha256=x_agBjiW-ZVuFQenH9AT5Rdn4TbFCJoL8n_N1AbmXBE,9153 -babel/locale-data/nus_SS.dat,sha256=XQQtE8pKShDclBfN4yU1Rh_zEqrYFVndB-t2ScdGGUs,590 -babel/locale-data/nyn.dat,sha256=PIizZE2pabGtsXhhg6TFiv0OlM352lMKqO2Fb-Wrizo,16275 -babel/locale-data/nyn_UG.dat,sha256=i2Qcu0KO73WK35o2BvnFV9yd6dLK_p69_LtbVTMkCJA,613 -babel/locale-data/om.dat,sha256=agj_n2fMWPhqLD3cZ3Pkux0y6b9r64pXXBQcl1nB5Bs,16588 -babel/locale-data/om_ET.dat,sha256=MhyQf6WK9JWcW9TuiTrQwo2C8tKIELtGKBiJ5Scrt1A,608 -babel/locale-data/om_KE.dat,sha256=A-EqNdXkq-j_TZK182yI6rnZYaFGGgAMyM76Q68FdG0,1566 -babel/locale-data/or.dat,sha256=-VmSkqqCokDThjp6Jhc0ENRKPAU1Gp3W0NkZfbiOwUA,241213 -babel/locale-data/or_IN.dat,sha256=tUmTnuoY49gDDU8WbdUCLyhv_2Yo-JJc_iTZlOJrH2Q,631 -babel/locale-data/os.dat,sha256=VRCyHyBI0alMKelyuYpaQw5Z3WEEZxkN0-GC039oqf8,17627 -babel/locale-data/os_GE.dat,sha256=bGm3R8Bz7k8wmb2GK_Ol83ud254rlJMbs26c1zN0w4Y,608 -babel/locale-data/os_RU.dat,sha256=A2armkX5bdC0hKe6ie0WxB1IB0exTMHAZWk_0PNjFD4,668 -babel/locale-data/pa.dat,sha256=oKoR7WJ7Ii8MNYowoXnZ8Lsgbgw25NPBbDYkgVEMPkc,244684 -babel/locale-data/pa_Arab.dat,sha256=T7-060vg7GELKQvqGl2tfZSn5_eN4dqGS_gBwymurvE,3984 -babel/locale-data/pa_Arab_PK.dat,sha256=-x9ycmOmzJ0ZIzy8J1ryO7nhRuBceY7ravgHBLEgyDY,608 -babel/locale-data/pa_Guru.dat,sha256=risWFebHubet9zREjGQ-AIrrtBdOtKXo0yafgX6FhJU,1249 -babel/locale-data/pa_Guru_IN.dat,sha256=tyUJVyrhCWckcBP10pfvLg2Xgv9shPpvWBaSiXg-G9c,631 -babel/locale-data/pcm.dat,sha256=e7YrXsfssCZkE5qlRy1BRYA4CPZOUiWsrSoYchqqpYE,174311 -babel/locale-data/pcm_NG.dat,sha256=E8wPtqkOJFSjTkU6T9V4RCZcer0Vc52PBvZ_LioI3S4,590 -babel/locale-data/pl.dat,sha256=OP4mD1-bddsjgwLV2FSJgpTAnlX-2rATEv4qHqdxnQA,236139 -babel/locale-data/pl_PL.dat,sha256=V62k9TTJ4FpN6KYLXzlsBBAMjHXnlNFuBnGoY9TBdDc,626 -babel/locale-data/prg.dat,sha256=1lqaf6Rcgbak-QLb0gFocafAWd3MXC8rM6Zcgn5ct00,20167 -babel/locale-data/prg_001.dat,sha256=m1nhpZ2Lh8TiVNCuKOVyBElL3M0Q9YIRZSC19jqZymE,1567 -babel/locale-data/ps.dat,sha256=ln_T0uNZqoPpDfA0obDhJAG6L6YADt_o66ZyFxdx4l0,180248 -babel/locale-data/ps_AF.dat,sha256=goJChlJTUKnh7pZiMUkZiRMMth5lshKHVDZFwKq3Iwg,651 -babel/locale-data/ps_PK.dat,sha256=_MSs-UxrpD1DJvl72MouRRhRmYbE8F6-MQ6q7ansCVw,7954 -babel/locale-data/pt.dat,sha256=xNKXRfbr-VRWZ1xT_p_gx99OW9I16x9Wgf2NyvP7RXk,195079 -babel/locale-data/pt_AO.dat,sha256=cTQSDeLXeH4NvRK6Kydc1LB3QyQO9qOSwh4UE7Ngga0,995 -babel/locale-data/pt_BR.dat,sha256=PoV5yebMbOhPwgtPQJ4qoKxOhQd3E5NCYcjjgOsvqu4,608 -babel/locale-data/pt_CH.dat,sha256=aFs_w4Xa1ZxFfw0GnV7IAj92XFa0xpK9mN4uY4ynDho,626 -babel/locale-data/pt_CV.dat,sha256=G5LMZLQqplotaUIvlv1iR3hgaIkwsYhMK0TXzjrmIzI,1015 -babel/locale-data/pt_GQ.dat,sha256=mQbJaJxvrVnC7MaTHD8r36VIe7vTfJfudKJc5XjzFg0,589 -babel/locale-data/pt_GW.dat,sha256=DTJrtZaU3wXwYHJvKkJK8BAZCcT9fSnsspJ25xuM4Po,975 -babel/locale-data/pt_LU.dat,sha256=rgoGwpHgeahu8nLnT-uyVsrkD4CrWWwTCqDct0NBJmw,645 -babel/locale-data/pt_MO.dat,sha256=gkvSsQQWHZFLT7SALzaYT0inBlWKH2tTt3R1KDMXc5g,1592 -babel/locale-data/pt_MZ.dat,sha256=hmhU3Y7HgDXrsyTUootEEdjCO4dy8wxGRvZRezeWq_Y,1015 -babel/locale-data/pt_PT.dat,sha256=C7vXAMw_2sCavBd1R62VD0n3r08CZAA49hFMT_ti9cY,99144 -babel/locale-data/pt_ST.dat,sha256=YBm07Nws76viG-9eMRgf3fn-n2B0jCptD5N5s6OWySA,995 -babel/locale-data/pt_TL.dat,sha256=qG2kU_auBSaMJNnYn6fYwxspLJ3OK0EpL6Qd9-Qtzi4,975 -babel/locale-data/qu.dat,sha256=ghWjIAkE8YxHAfaLXgXiAKedoohrLikSTsUBiM3MnYU,107964 -babel/locale-data/qu_BO.dat,sha256=CGWYNs1_AuQG3T-fYwe-q2AwDl9LAEITGRRYzc_MdKQ,836 -babel/locale-data/qu_EC.dat,sha256=WewzwnSQA5llc9gb5UYy2ue5Y8_HRb1HnddOVIXcf6Q,810 -babel/locale-data/qu_PE.dat,sha256=gT0fXlP3-rFSzIy6SdYVt-6viGPP79ukYHbBynqU4Bk,608 -babel/locale-data/rm.dat,sha256=V12vyZyv0wD6Nu84Gl5V33yohhcm-dpGSJ2I9Ot1GwY,67934 -babel/locale-data/rm_CH.dat,sha256=atueKnCga8bqm2GrXOwBjQf1ypER1IAjcv4RX6Oz0Sk,626 -babel/locale-data/rn.dat,sha256=Dk-PN1zn4fjGlXZXwhEOfUmpJBu_2DlHZaDI_ins0Q0,16781 -babel/locale-data/rn_BI.dat,sha256=II-eZWKAf73Hh0aGZifK2NLJvvXWws8a7Uv_2TUZ2VA,589 -babel/locale-data/ro.dat,sha256=4B1VWnRbEV3KkNT3hbnkbtq2bAZdNqZIDV4DdD2AEZE,225782 -babel/locale-data/ro_MD.dat,sha256=tkVS0RiHpOA2ZjCZbufnznw8aVIFj-XLoWr8whLVN3w,3215 -babel/locale-data/ro_RO.dat,sha256=rFeMpPnG0zRek72AxhPuZAuJFKAuA-UL5fAyLAnPiQ8,608 -babel/locale-data/rof.dat,sha256=jx81EEsVRwsEnaROsGiG4vQ1jm1wFW_V3yNpPsYZwmM,16170 -babel/locale-data/rof_TZ.dat,sha256=6mZ6eFqNAqwuWCZuT7oZClLSv9eWSdGH0efVoQqxj40,590 -babel/locale-data/root.dat,sha256=W5zvjlEJQD3MWdvhMHuW72ERorcD51LDhqtyXmmYARk,42432 -babel/locale-data/ru.dat,sha256=TM12Pev9K3Ccwr5Z_Wj6hClv_qY_Hqk91f9nD6YSt8k,305212 -babel/locale-data/ru_BY.dat,sha256=Pb4BHcT6RF6ONtgLhPcGQXQHVGj9dPrrodoI4ihsTSk,649 -babel/locale-data/ru_KG.dat,sha256=iQapNW3xr7lH-HEbM7CIbdQwmUjm2Tgq3iJAMFUC7zc,632 -babel/locale-data/ru_KZ.dat,sha256=OnFw_fadGFUzN0KL3WKvL0ekAwCCv5NOIhz2IFbHK0g,629 -babel/locale-data/ru_MD.dat,sha256=vZr7Dz0UZlMeWWSisvdMuyOcLyreeihFbILXdQemOXM,627 -babel/locale-data/ru_RU.dat,sha256=QhIIdAW2iPQ6LcErVIuxwvaBi1ku8V5-zsy1MZV1YU8,626 -babel/locale-data/ru_UA.dat,sha256=ZALhQpV7aWxa78cxM54zedaE6-0YNGkB7NeL5BAeHOs,1747 -babel/locale-data/rw.dat,sha256=OJ5hT_uLwSOdlkjZkrP5WmriCJTqE48b2bJTS4cRV6g,16215 -babel/locale-data/rw_RW.dat,sha256=G6ta2DtZdiILzTdyZlXTCzoL-oRoF1gekRFCmN_dEyg,589 -babel/locale-data/rwk.dat,sha256=uZEibGF11hKUyRFeC3IcSTrxMuWJsK9Z0c2VtykOGu0,16057 -babel/locale-data/rwk_TZ.dat,sha256=RtQRCyT2DbqRtc4uzP8Nna10O8KouCqtbtSxCJ-PukI,590 -babel/locale-data/sah.dat,sha256=eXy9sdtMoVJcQM3C1-m9w8iGOzgqVguyHD1b_J_Xg78,48180 -babel/locale-data/sah_RU.dat,sha256=-Hi7VNsxTYaC-4G8qYQsnSPVMc5jXBYQJBvd5UeC-lo,627 -babel/locale-data/saq.dat,sha256=T_ODjjLim-CJKf2XIGBOfuEGtEqeN4I4VbyY6N_Rcl8,16455 -babel/locale-data/saq_KE.dat,sha256=uHKDZR4LUK5CGvcVC-dIpdYM3uY1KXVh6vkAOnOrc-w,609 -babel/locale-data/sat.dat,sha256=FRyhxW7p0BSz3oG0GLb96hg4e49rufWbNgOX5HifceM,12597 -babel/locale-data/sat_Olck.dat,sha256=XNqbalNvgWolPY1M9vZXPpLzFkzYzjSAvKtoP1x5oBs,878 -babel/locale-data/sat_Olck_IN.dat,sha256=Rx6KNBVSK2m0PvmKzotwxqBIp30-b5dCQU5-hqSB8tQ,632 -babel/locale-data/sbp.dat,sha256=N_zsOwROvCa1Nd1geNViDAkUsWkkPLDrpfXFmjJBwII,16479 -babel/locale-data/sbp_TZ.dat,sha256=myr2BmLmSpSCCyRFCjm70nQfdeUAopZ29zxfemg6F8c,590 -babel/locale-data/sd.dat,sha256=QoU7MJunjYKrj_TjLuMS6x0BuFxAsE4UcXnJw5XCrXk,194219 -babel/locale-data/sd_Arab.dat,sha256=EOWPc5-ACgE6NQEHILMBA_BP6mK35sTdUEEuEFCv748,852 -babel/locale-data/sd_Arab_PK.dat,sha256=pNtPPmwu0jQK9V31EOv-lVoFiYwf1iHDxJmB5NNIZzU,608 -babel/locale-data/sd_Deva.dat,sha256=0Imih19CK7Tq6YdIazJNgJJMZPwPjKXSo0xFXWnliTA,15216 -babel/locale-data/sd_Deva_IN.dat,sha256=Uei2PSaYXixwn6VPwb7xeFMXt8I_jyM_myr-8lADGVs,631 -babel/locale-data/se.dat,sha256=cGes_DRLmVtVV0bjj37-QC9s_zALE7zEfrseAwvUhU4,72353 -babel/locale-data/se_FI.dat,sha256=klpIv_TDIAH88KnWG6g9AUWvdhmwMSKaSfCC0qPu0tY,46574 -babel/locale-data/se_NO.dat,sha256=k-BEm9_tnVXbt-H7pAtUU78dZfuiq7-cTcbsgsqISlg,626 -babel/locale-data/se_SE.dat,sha256=BxFV9gNTLfUF3ibsRvgeuRnuDo99396qMA-89tpdEFY,667 -babel/locale-data/seh.dat,sha256=0qAVFIAc1GZkYBCp4DP5DM1G2QfcfI0EvPQeP7Uci7c,15910 -babel/locale-data/seh_MZ.dat,sha256=feukobIWsGC_o5s_qb0UgFI7gzVCrNSydoRaXs0NUZ0,609 -babel/locale-data/ses.dat,sha256=X5NMBmnvudU3XqhKZWH8l36b4RFIf1vXuhLSIqUbgfI,15998 -babel/locale-data/ses_ML.dat,sha256=O7stcUKOw8ZkGmgnPqSWBCxPFA3_aDIcHZGAT9yRrtw,590 -babel/locale-data/sg.dat,sha256=GQNOEIiWV9wnrISbr5uFtFK9gvWoNNF6G5gUta9V1Io,16635 -babel/locale-data/sg_CF.dat,sha256=dDZMdfhJBfy2ShSVhAopU2nIEEBnTssu3Vji2v9SpHg,589 -babel/locale-data/shi.dat,sha256=yI6ilP0U3O4u2IGEJcHnEpFxPPqVIuZJRSAOyr-axtA,22036 -babel/locale-data/shi_Latn.dat,sha256=rqL_ruNuCpetsrf_JIL02XNbqkoBDDZCC-VjchfA8mY,15618 -babel/locale-data/shi_Latn_MA.dat,sha256=blTyj-JXuFz7wgjLjUC19rH4Emj7_-TOtMvBKb7qAus,590 -babel/locale-data/shi_Tfng.dat,sha256=PmToPVEqibydgF2nxMw21pujbbqf4odWn7GlEqQL2u0,947 -babel/locale-data/shi_Tfng_MA.dat,sha256=blTyj-JXuFz7wgjLjUC19rH4Emj7_-TOtMvBKb7qAus,590 -babel/locale-data/si.dat,sha256=zxzkUZZtc4uVe-G1jMp1pAtkW726ZJ872nLo6ZTSaZE,244850 -babel/locale-data/si_LK.dat,sha256=2k1GulXssuQkuKMmj4J74iAYHlfh507gp6l75lKDJwg,608 -babel/locale-data/sk.dat,sha256=BrxSaUkE6hCEqX1etX6_C6dfuCmSNAJvtH8IFqGzHAE,256860 -babel/locale-data/sk_SK.dat,sha256=b8ugTdqk71Ge03FdSEhnOmH0wP5XeDSI40ys2hGovNQ,626 -babel/locale-data/sl.dat,sha256=n8vsb9jixRFE_J7WJYW4w1GehxoGJnNHgGjFZFlmpEM,241874 -babel/locale-data/sl_SI.dat,sha256=V1oy5BlaUDjrX8b0jv9LK7Mgg4Yx84u-Iry4j3M8LYc,608 -babel/locale-data/smn.dat,sha256=iTOwk1p0Y-9jOGDIEuTz3-jwEbC3neN1n4xTKSIfyyY,42674 -babel/locale-data/smn_FI.dat,sha256=3FaHTO42uw4LsL2o9CnKHuk86tRNGaorVeYh7SPONWY,627 -babel/locale-data/sn.dat,sha256=pfT3kmp47TnfQGNvcsWF43YQaoHOtkXbRFvt3leN80Q,23252 -babel/locale-data/sn_ZW.dat,sha256=R48ZM21PI5bjz154uuK-wccs9d-M9YMdiQLtX-rbG5k,608 -babel/locale-data/so.dat,sha256=6KnXbRvPY84Ag4eBiPzLfjRvHuuuiu-ZJo5bA7qL7cU,153105 -babel/locale-data/so_DJ.dat,sha256=CWxbbQZ8iogPci77q4bpbWHOFBOKISwLOkqixb-TqRA,629 -babel/locale-data/so_ET.dat,sha256=JKebALALzWT58gltRAjWVKl3LqFGiy1iD-nbFFsvfZ8,628 -babel/locale-data/so_KE.dat,sha256=Ooas5zUI6mtrajAybdc2YQyFlS4RFNUxeXqT0pUQ2fo,1181 -babel/locale-data/so_SO.dat,sha256=WtbiqTAukA-EouWNpajrPLIyRqUNmh0A6bcbXQywwqc,589 -babel/locale-data/sq.dat,sha256=Gj2LUjCjKeRcNUF86vv8cbX1j_VPUmSBjQxHP8HETHQ,175659 -babel/locale-data/sq_AL.dat,sha256=061xsDws549-glqPY5No20svTFqs0pO6Cn9oUtwquVA,608 -babel/locale-data/sq_MK.dat,sha256=8D6OAIV9T29UVST-ZD0zjtgYgrScEKaeZDaf8fJBk4E,1181 -babel/locale-data/sq_XK.dat,sha256=nFWTBnEjpW6ux-oMbSov3ta96NrvwhjtQ80viYXFfKY,1160 -babel/locale-data/sr.dat,sha256=PtgWUhY4n2x_GzfWOjZbYvPrliijqBNBO0KBJmk5v0s,277763 -babel/locale-data/sr_Cyrl.dat,sha256=PqtXXFd7yu1Bweljv2UkBHFUYVPlIFY2abO3lfl8t4Y,1957 -babel/locale-data/sr_Cyrl_BA.dat,sha256=dShsmp6LRaSkv8ASEvrPf6KeovR0BHLg7DUu-CJp8_8,4710 -babel/locale-data/sr_Cyrl_ME.dat,sha256=kT_iSmJ3fWaM4XDKSSCWgfT-zdxMxm8Mg3hISHZC9m8,3873 -babel/locale-data/sr_Cyrl_RS.dat,sha256=AAJ6aaa8D73J6na-RIjuqhEfLWKReHLwzYavdFaobhs,608 -babel/locale-data/sr_Cyrl_XK.dat,sha256=hXdgzDWE5gDdWBbiNBaEHTl1hjEqqtd9dmnFXPFRkfc,2756 -babel/locale-data/sr_Latn.dat,sha256=uGrDTKlSnMMQg7XORMw8Lg5v17HB-mNAFlD0Kczta1I,230252 -babel/locale-data/sr_Latn_BA.dat,sha256=ohHi1ZC9VzvqIIRkemStv_FVS9U5CPiLr8I2QUCt0ag,3994 -babel/locale-data/sr_Latn_ME.dat,sha256=gPaIdFD34NWU-69gmIOuCw6b8klXWs6RJUeU8ihcSqQ,3074 -babel/locale-data/sr_Latn_RS.dat,sha256=AAJ6aaa8D73J6na-RIjuqhEfLWKReHLwzYavdFaobhs,608 -babel/locale-data/sr_Latn_XK.dat,sha256=_BATf9SVmbg1Knn5nGG5srTFj0suBkMuTG5gcF46MO8,2194 -babel/locale-data/su.dat,sha256=tjQYu8CY2Y_Hz12pRczCaxX7LrRJK4xOvYthqwFgVBg,12452 -babel/locale-data/su_Latn.dat,sha256=AoqRqUqiJYE1G-ZRCIIhkYSRQ8s71qDefLwv70XrgZA,718 -babel/locale-data/su_Latn_ID.dat,sha256=Hi1QalxGc49vElzHunyzz1Mfc6_1KgzXkGjcj04mq8c,608 -babel/locale-data/sv.dat,sha256=DLFxWbJiUU2870aLFBVVDW3_OEWpE2yL8p-Q1h0J9aw,221078 -babel/locale-data/sv_AX.dat,sha256=4LqqSZFfMV2iRBS5TyTdWWKfdoN_ahxotRUbyuoaX8g,626 -babel/locale-data/sv_FI.dat,sha256=WDEfn4f8iqbtpxYsGA_6mDW_jk4gFolp7gU58aRKt1w,2584 -babel/locale-data/sv_SE.dat,sha256=OtNxgFxUFAH5mYJ4yGqp_wLMmnMu9mwVnvJ57BKUOKs,626 -babel/locale-data/sw.dat,sha256=LxA1OYCK0j4dbhSCT8KgSwrsF_wA94vHs30XAP-vQ5A,179207 -babel/locale-data/sw_CD.dat,sha256=6HlO0ltwzAj1j8ns4jxCI0P36r7MauG7h5EQqpQhFkY,2660 -babel/locale-data/sw_KE.dat,sha256=GKdU3qzg_MR2lQE7gRkAZqHA8gD0nBUhgSqNOkS0fbY,35934 -babel/locale-data/sw_TZ.dat,sha256=rRGQVQ_Vp0bQ6_KnZTZDn7YDY5HDNiIsUMFLSnKD6nA,589 -babel/locale-data/sw_UG.dat,sha256=GN6zqbWL7dor3RJWaJ7EwhMX8BIA6HVUzN7xWswPgbU,633 -babel/locale-data/ta.dat,sha256=ytGi4rbhhefQHdKzbgWOCheyBDU6H6JJGOYHWJvuMxE,263466 -babel/locale-data/ta_IN.dat,sha256=1D_ISTGx78nHVtYBoccQpH04o6CCL5dIIGRm4RWkMDg,631 -babel/locale-data/ta_LK.dat,sha256=sHPH1bp1O7mbhnp0WgIyHfKckEIATHbtNtSGQPdbVSU,1181 -babel/locale-data/ta_MY.dat,sha256=SVPpzoaW_lDTyUaLLP05lUjx5bnkv5G0QFrnMC3WRGs,1238 -babel/locale-data/ta_SG.dat,sha256=9e057sNK17LS7GQfZ74fzkPmHndampHvierKZNX6vT4,1257 -babel/locale-data/te.dat,sha256=QZ7c7f3RbUpaJfZ7fr4tWqrUowkXNnCBOlGGAfH9y4I,262280 -babel/locale-data/te_IN.dat,sha256=uRakP3CRkBJKNlCxMpMDOGOi5aeiq5OiLxBbUWn2NZk,631 -babel/locale-data/teo.dat,sha256=67b09CdiUgLq-6n63Ox1CvkkxExMIWAJh82HVSoyah8,16671 -babel/locale-data/teo_KE.dat,sha256=yZVnSmYqZ77jAPlyuyY_yivRqbj4dwbb99MW52EJNvU,630 -babel/locale-data/teo_UG.dat,sha256=o5PkAO5zi67Lxbh5vKaOJF6qerkAFvJu3RrQ0iHlmwA,613 -babel/locale-data/tg.dat,sha256=D0Rhojw2aiooD1a0COKgtkD3nvxhPwkvOaBJuqoQgRQ,36303 -babel/locale-data/tg_TJ.dat,sha256=ge5GlIElwu5VzdLeWCCEz5A2-F9ihtOH9Ic9k5ii4wY,608 -babel/locale-data/th.dat,sha256=qvpR1DSefc-FR-cvQXpDw_sADav-_oRt0RLnBBZd_eU,235280 -babel/locale-data/th_TH.dat,sha256=aQd6NJ_y5ObTF2koe4cI_s_mVdG0c7JfaiivpLN8M50,608 -babel/locale-data/ti.dat,sha256=wLPieG3yJtUVM8VrrwEjhqnO8El_xTQaTlgsTL2qFP4,73036 -babel/locale-data/ti_ER.dat,sha256=c0K7KojJP6dMJAGn1SRfi6lmNy8BvijIUNC4m9gqc2I,958 -babel/locale-data/ti_ET.dat,sha256=vT6Tl0BBaMupoRD4fb3kmM_Mufx2EGuqP460HO_Bh7Q,608 -babel/locale-data/tk.dat,sha256=CJVPDLCt8C3T8GhrgEsnnWTnwoWm2RcNDfvQ4bjDZSE,167927 -babel/locale-data/tk_TM.dat,sha256=06szpphDghkTBac9nMge32AzZKeQdxXeZjsXF0X1-Nk,608 -babel/locale-data/to.dat,sha256=ZSHEXy-JD4xKehjprq07mYbMgXKEy0j3kA0P6RKiClw,166458 -babel/locale-data/to_TO.dat,sha256=UaceT8b6KsoNoQd68finqhXDLVr_4GtcGFsgTwJaYTc,589 -babel/locale-data/tr.dat,sha256=xeuwfXivD-H9zszsBigvaEqV57cp7jkngzv8es_trSQ,209226 -babel/locale-data/tr_CY.dat,sha256=sHH4XyRX7XNKfRzQPuDEVNlfBCdyg7jy-bvyP7yPTBw,1184 -babel/locale-data/tr_TR.dat,sha256=lUyZY1ya9qqjmhdYhAkP6j4V953QWx_cC16GrVZCaYM,608 -babel/locale-data/tt.dat,sha256=szBjiq0ZOV4gwKairWY_axw1_Q2WuV9CO9XotiJtI9A,33588 -babel/locale-data/tt_RU.dat,sha256=MqxY1dPvSLsO7huGCYIhaTqwfGw9qHzq-oUt3VwVPyU,626 -babel/locale-data/twq.dat,sha256=AW_qiBsx_oBOrFVQ9yvnHEms3jqkxNFRY0hYF8ErVrs,16171 -babel/locale-data/twq_NE.dat,sha256=yv89EP--ZBgtvC_Vfy7UN37T7OktzntjGpRKfo89AW4,590 -babel/locale-data/tzm.dat,sha256=oVsKo32vfNoupn0mwkP0QmlYCh0irKQvAoIhauxhD1c,16149 -babel/locale-data/tzm_MA.dat,sha256=jOAK87vFm-WpZK130vSvCLE8fWxfjeyPs_G1elc5TMk,590 -babel/locale-data/ug.dat,sha256=N05TG_7CnVabGWTTHoVWlxPQ6MseNb_y3_YI2_pLiRw,128534 -babel/locale-data/ug_CN.dat,sha256=EMQBXnc07gL0zsdKDerIo0Sl6DtZVJaapUCoOL9V22k,608 -babel/locale-data/uk.dat,sha256=GfQIacOGkBh-WmYgbPOlmiu6mLYADuzVi919Lk2p9Ig,315834 -babel/locale-data/uk_UA.dat,sha256=YE9ivxv_h3qwHTeFyWTV4gt5JaYgYdKQTLHHadAQQT8,608 -babel/locale-data/ur.dat,sha256=q4apEHeXrfxzm0HJrKkdHJd6Y54ZUwFC_6lZzzkxvjU,197918 -babel/locale-data/ur_IN.dat,sha256=YSaoN2o4C1InByihAFCDOBE_HlCt7xkRl9lyOrfoCTk,12595 -babel/locale-data/ur_PK.dat,sha256=VXzQfSYJAIlzcDjPva4UM67jhqIwDUqAVNRGB2YPcfI,608 -babel/locale-data/uz.dat,sha256=KvGhlHDdpSZtTcqMENPN-zCjmsIIIwu8o1Oc2MTHjDA,173590 -babel/locale-data/uz_Arab.dat,sha256=WrXXAaoKSVPU_PeGQIGU0jmdaVzPtkZQxzhtOlH7VjM,4111 -babel/locale-data/uz_Arab_AF.dat,sha256=ONnsHyim0Q-GRD6BAHPTj2Ri4aR41EB5HWhJQrKKXAU,651 -babel/locale-data/uz_Cyrl.dat,sha256=_q-bVsz4aZwG1LVqQC5rN_aCn5o-ocAJ1zD8eqVOMj8,98924 -babel/locale-data/uz_Cyrl_UZ.dat,sha256=D2g0Iy4gME1-ZrXDPgcs1VlFNW1FWKRD607VKgUsFwA,608 -babel/locale-data/uz_Latn.dat,sha256=wkn_uCtrZQx7Ut7_pTVXVU9X956I30Nr4seILvPnZ_o,1265 -babel/locale-data/uz_Latn_UZ.dat,sha256=D2g0Iy4gME1-ZrXDPgcs1VlFNW1FWKRD607VKgUsFwA,608 -babel/locale-data/vai.dat,sha256=Y2F73JC5rT_LyIvVXYCJEMwnLE0YwmOTiEh-ZsUhx9A,18988 -babel/locale-data/vai_Latn.dat,sha256=qys9gT6Krcg_09r52_SMMrAEyI2XzngIuKlPKWpZnhg,14989 -babel/locale-data/vai_Latn_LR.dat,sha256=mFG8a5AB_Cnv2lwGAVg5SxhF0lgkrS4vB3UdqB1L8Y4,590 -babel/locale-data/vai_Vaii.dat,sha256=rZi5j11eMQeE9MzTRK4Gl5EhqEy_X6o3V06k_E4ioOY,666 -babel/locale-data/vai_Vaii_LR.dat,sha256=mFG8a5AB_Cnv2lwGAVg5SxhF0lgkrS4vB3UdqB1L8Y4,590 -babel/locale-data/vi.dat,sha256=pfW__H9jiCPiorXwYFxodzP4CjbHhGh6AwCye8RznAQ,162325 -babel/locale-data/vi_VN.dat,sha256=hn8-pr09TFtQwAvAau15ETGT4bmPay2o_LGOvLA6Bsk,608 -babel/locale-data/vo.dat,sha256=nmu1bYpYLcTQzd5w4nGKygzPddIlbRfHZIJCYPT8bIM,5225 -babel/locale-data/vo_001.dat,sha256=sQnDTedm-Ec9H8JaIqP3ZLpsAvJOr8GRr1BADz4lNRc,823 -babel/locale-data/vun.dat,sha256=_9UYsm8lOz6Q0DNjRQDTaZU8wR5sv5PS4y-oDn7siqE,16067 -babel/locale-data/vun_TZ.dat,sha256=1lrpmdkRCqdDzX4Cel249MWWRGVDmubt9OiMf6Qsrnk,590 -babel/locale-data/wae.dat,sha256=hLrXzFfFW-jPsSrA0ZFzjZdhV60X1etEZOKlb6f0Dbw,28660 -babel/locale-data/wae_CH.dat,sha256=5fOXgR-rrWoIYbf230jds8iOj1dsbvNW2Qv2XBNaCto,627 -babel/locale-data/wo.dat,sha256=btSGt-pyMUGCK1wCUkG_9dccsvl_w9qPmAv1OV9Q5Iw,25698 -babel/locale-data/wo_SN.dat,sha256=ryU-hZj708JELq9ldfmRU8I2EDihWGM_6v8QQY4qRuE,589 -babel/locale-data/xh.dat,sha256=FILfYkTCJIqiqqcEo29ID_9AxcUGdWePyXJnbOI_kGM,15055 -babel/locale-data/xh_ZA.dat,sha256=LPaE6z0iRUaCSVd2CeuJzy_0GfhGCs2KgtYPHqLL18I,608 -babel/locale-data/xog.dat,sha256=TU2N1WKiMwbPTe7tF_Hj300hT6Hn-_f5H12h5HU1Xf8,16555 -babel/locale-data/xog_UG.dat,sha256=5B_ozUekB9sXcaT_-7brqH1nfv_XEP5CnB2PG84_JlM,613 -babel/locale-data/yav.dat,sha256=R_FIP-S4MiI3XULYddxjJtYhFPPwILvVDbHd3S6C1dc,15302 -babel/locale-data/yav_CM.dat,sha256=y9SNKPJTMwmSdGc0MO-vn7hUeK4arphzRDp2zBFYigs,609 -babel/locale-data/yi.dat,sha256=XNca4NO0IFPfGXT-E7HlW-9BOGi9ZvJSxrx8O13tHUs,30314 -babel/locale-data/yi_001.dat,sha256=wdIcCz3ZcZHFJqT28rBWo4iYmRffPPVWpxod_13KIYY,885 -babel/locale-data/yo.dat,sha256=a1uZep-5fpoV77z6eDBYeaaWw3c8AMXswNgYdHqpyWs,68429 -babel/locale-data/yo_BJ.dat,sha256=oy0uMgotXzVGUeC1paiyc0YEoxsXHf1qQ5eYr9dl5TE,34481 -babel/locale-data/yo_NG.dat,sha256=vVCmItRDqtBEzSXYDsXGoiobciBukV84o_LpnAZRiDs,589 -babel/locale-data/yue.dat,sha256=kgkc69B6aeh8K1K-iNS1nVb_xi4IWHUcIG9CgIWmjz4,183333 -babel/locale-data/yue_Hans.dat,sha256=aXi0gwVQezQ6RZDRAd09wLWhwlKUTfrSyDF-ZjEIJvo,183225 -babel/locale-data/yue_Hans_CN.dat,sha256=0SEPKM5hD5K5TXbakL6_Q7mE-Te_ea6eOhSy1uwwJXA,609 -babel/locale-data/yue_Hant.dat,sha256=_BWk9N_79PzY7EPWu-O_M8j1ISYhkN29HEbuo-i0AoI,1279 -babel/locale-data/yue_Hant_HK.dat,sha256=8iSo-1wkebNgS7h3iCFLd9s-nW8TuQ3-4UFUMUEmbMM,609 -babel/locale-data/zgh.dat,sha256=52E-cKoUGWnMZMAeTavTmgj666axYtF6L9u5tHn1JYQ,30498 -babel/locale-data/zgh_MA.dat,sha256=sIGElmHSGowAduz_ykRA_-PotBTJaOqmBtRhXJ_swJc,590 -babel/locale-data/zh.dat,sha256=ffkBVzcOpHqTELueQekXu2xkPOiFnhAH88ImnVX7ZT8,181044 -babel/locale-data/zh_Hans.dat,sha256=-JH1KTn0ibMkBj6gw2V2Q6ixLBL5x0n7B7AkCpU0TRI,1278 -babel/locale-data/zh_Hans_CN.dat,sha256=sTrrw5ttuMLr70IDoBM02f7vGVzuB-0gQNQK0IDNyXA,608 -babel/locale-data/zh_Hans_HK.dat,sha256=gy8r4jqxvwhNf1BUPjnkRmJGzweemtJ1ylkumHBmUgg,3138 -babel/locale-data/zh_Hans_MO.dat,sha256=C1N9WHRhsqPiq-9su32Ar1ZcBpN5P0pTJapGAFRCOrM,3270 -babel/locale-data/zh_Hans_SG.dat,sha256=qCiYdP4MAwcVyJyJ-YJ9B_kvsNUxu9nWkeR3XwgNYpQ,3466 -babel/locale-data/zh_Hant.dat,sha256=dzsvtbyAGj7fzzCl2xBJ010IQzq9IJsi59vW7Qf2d9Y,185029 -babel/locale-data/zh_Hant_HK.dat,sha256=71VE9xyc0m5Gh4gJ1STha37iLm5lvpISG3fZsKFuQ9g,56895 -babel/locale-data/zh_Hant_MO.dat,sha256=gTS5IdcTsRoMwAnANseIbj2nyflLj0tBQn2-4AFAaf4,630 -babel/locale-data/zh_Hant_TW.dat,sha256=QYchBgi8JmeZgs7rQrUYn93CNNL9aavsOWYzAaTndwM,608 -babel/locale-data/zu.dat,sha256=8ONW9eqg4gnEisbcMQeDl71dCVY1ckM4nJOXat9rPuM,167684 -babel/locale-data/zu_ZA.dat,sha256=YO0tFWUiAdda0x3XEoL98oPNFGRLuk5OZ8DaR3lUX38,608 -babel/localedata.py,sha256=bp9ZCXKgvJ08oOwrOIeknZ3Ks7QVi03HS_IhIDOf_ow,7931 -babel/localtime/__init__.py,sha256=43mNcGAGljnTjngbhTMl6xhfeHMR1Sabby2O-Deh4gE,1721 -babel/localtime/__pycache__/__init__.cpython-39.pyc,, -babel/localtime/__pycache__/_unix.cpython-39.pyc,, -babel/localtime/__pycache__/_win32.cpython-39.pyc,, -babel/localtime/_unix.py,sha256=P66o3ErKXzhFvj3e3Qk6MBS7AR0qsDqSQclIAMHKp18,4801 -babel/localtime/_win32.py,sha256=dGzhQ8AlY5iItSd-i3Fi2O3YWuVJ83PFSWe7EG2BaBg,3086 -babel/messages/__init__.py,sha256=mYEtObYlyGT9zKJog4IjXFN-au3uxnc16wg89edsMxo,254 -babel/messages/__pycache__/__init__.cpython-39.pyc,, -babel/messages/__pycache__/catalog.cpython-39.pyc,, -babel/messages/__pycache__/checkers.cpython-39.pyc,, -babel/messages/__pycache__/extract.cpython-39.pyc,, -babel/messages/__pycache__/frontend.cpython-39.pyc,, -babel/messages/__pycache__/jslexer.cpython-39.pyc,, -babel/messages/__pycache__/mofile.cpython-39.pyc,, -babel/messages/__pycache__/plurals.cpython-39.pyc,, -babel/messages/__pycache__/pofile.cpython-39.pyc,, -babel/messages/catalog.py,sha256=lQUVsuoNKL8yy--XqrHWX2AEKk6_qj4vpTNwuJJEtOE,32291 -babel/messages/checkers.py,sha256=tCqwgZpzwJwhouwSIpKNHW0m48338W1omEllOFDxv9s,6085 -babel/messages/extract.py,sha256=V-_eVZzxtANiue1ST3Yp6Kv1N3z5Swy4eu2_GuEt2WU,26474 -babel/messages/frontend.py,sha256=skgwlQry-3Sbf2v448eL3KxwUhd4pFRLa_5kkilKgvc,38729 -babel/messages/jslexer.py,sha256=NU2h-nZxoNnycllWViSv3X-jB_p1Vpw53uvqVklsMQ4,6334 -babel/messages/mofile.py,sha256=2JBYxNfuBqO35U-H_VqB1rgW2gocS0Has1YgGZwYxLI,7204 -babel/messages/plurals.py,sha256=GOD89ObneG4--qFbt_PQOvpEY-72o9LdghOsztNgRiw,7206 -babel/messages/pofile.py,sha256=fMUcLVi5-vIyKfDjkOde6He1QTSr0n4iYEis560zHSw,22146 -babel/numbers.py,sha256=-V_bQC6whhEalzEmYkFtvydZB0_knjLDgzu2C2SzGbM,39872 -babel/plural.py,sha256=bo-QkRGinKBBF58KgJoE7aUFKTG9PrFYtpTYvOSfYMw,21314 -babel/support.py,sha256=uO02VsCqKTcgBopi1RkQGhco2gRTZi4q3hlrbhgnxsw,22622 -babel/units.py,sha256=QPa8jqWKdS_dB4zTp60ffty2PClONBdlbKc885hb2RA,11291 -babel/util.py,sha256=o6JpnIY9-dhVdTgli0MAUknu4haiag_swAcLYdi8wVY,7576 diff --git a/IKEA_scraper/.venv/Lib/site-packages/Babel-2.9.1.dist-info/WHEEL b/IKEA_scraper/.venv/Lib/site-packages/Babel-2.9.1.dist-info/WHEEL deleted file mode 100644 index 01b8fc7d..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/Babel-2.9.1.dist-info/WHEEL +++ /dev/null @@ -1,6 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.36.2) -Root-Is-Purelib: true -Tag: py2-none-any -Tag: py3-none-any - diff --git a/IKEA_scraper/.venv/Lib/site-packages/Babel-2.9.1.dist-info/entry_points.txt b/IKEA_scraper/.venv/Lib/site-packages/Babel-2.9.1.dist-info/entry_points.txt deleted file mode 100644 index 18c3a58b..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/Babel-2.9.1.dist-info/entry_points.txt +++ /dev/null @@ -1,22 +0,0 @@ - - [console_scripts] - pybabel = babel.messages.frontend:main - - [distutils.commands] - compile_catalog = babel.messages.frontend:compile_catalog - extract_messages = babel.messages.frontend:extract_messages - init_catalog = babel.messages.frontend:init_catalog - update_catalog = babel.messages.frontend:update_catalog - - [distutils.setup_keywords] - message_extractors = babel.messages.frontend:check_message_extractors - - [babel.checkers] - num_plurals = babel.messages.checkers:num_plurals - python_format = babel.messages.checkers:python_format - - [babel.extractors] - ignore = babel.messages.extract:extract_nothing - python = babel.messages.extract:extract_python - javascript = babel.messages.extract:extract_javascript - \ No newline at end of file diff --git a/IKEA_scraper/.venv/Lib/site-packages/Babel-2.9.1.dist-info/top_level.txt b/IKEA_scraper/.venv/Lib/site-packages/Babel-2.9.1.dist-info/top_level.txt deleted file mode 100644 index 98f65931..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/Babel-2.9.1.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -babel diff --git a/IKEA_scraper/.venv/Lib/site-packages/__pycache__/typing_extensions.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/__pycache__/typing_extensions.cpython-39.pyc deleted file mode 100644 index e2f6f8978a804f888ee498841250c714aec8164a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83295 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

b0zanZuC7qb=}ll;uEqJvvC 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 F{|13_M4A8q diff --git a/IKEA_scraper/.venv/Lib/site-packages/_distutils_hack/__pycache__/__init__.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/_distutils_hack/__pycache__/__init__.cpython-39.pyc index 8b859a6b1ea7240a868613b8dbb2dbc392e847e4..626d2141ae8f0904af4c21ebe656e3606964db57 100644 GIT binary patch delta 31 lcmaE^{!E=ak(ZZ?0SE%)?Kg5uGc$%vR%e#m?8dxM004SG2T}k4 delta 31 lcmaE+{#>0qk(ZZ?0SK55T5RN&W@ZeXtj;XA*@bzL004T%2VMXG diff --git a/IKEA_scraper/.venv/Lib/site-packages/_distutils_hack/__pycache__/override.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/_distutils_hack/__pycache__/override.cpython-39.pyc index 6e7260c486897607bc4b1a60cec902560026db54..e9b54f7bf33e56cc9a4642938dd83955a6f63e9d 100644 GIT binary patch delta 27 hcmaFN_=u4^k(ZZ?0SE%)?I&{QGlop8mYX=s698QV2Soq? delta 27 hcmaFF_?VG9k(ZZ?0SK55T1@25XAGTKEjMw77XV#a2T=e3 diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram-2.14.3.dist-info/INSTALLER b/IKEA_scraper/.venv/Lib/site-packages/aiogram-2.14.3.dist-info/INSTALLER deleted file mode 100644 index a1b589e3..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram-2.14.3.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram-2.14.3.dist-info/LICENSE b/IKEA_scraper/.venv/Lib/site-packages/aiogram-2.14.3.dist-info/LICENSE deleted file mode 100644 index 12244562..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram-2.14.3.dist-info/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -Copyright (c) 2017-2018 Alex Root Junior - -Permission is hereby granted, free of charge, to any person obtaining a copy of this -software and associated documentation files (the "Software"), to deal in the Software -without restriction, including without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell copies of the Software, -and to permit persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included in all copies -or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE -OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram-2.14.3.dist-info/METADATA b/IKEA_scraper/.venv/Lib/site-packages/aiogram-2.14.3.dist-info/METADATA deleted file mode 100644 index f9d7bb8a..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram-2.14.3.dist-info/METADATA +++ /dev/null @@ -1,85 +0,0 @@ -Metadata-Version: 2.1 -Name: aiogram -Version: 2.14.3 -Summary: Is a pretty simple and fully asynchronous framework for Telegram Bot API -Home-page: https://github.com/aiogram/aiogram -Author: Alex Root Junior -Author-email: jroot.junior@gmail.com -License: MIT -Platform: UNKNOWN -Classifier: Development Status :: 5 - Production/Stable -Classifier: Environment :: Console -Classifier: Framework :: AsyncIO -Classifier: Intended Audience :: Developers -Classifier: Intended Audience :: System Administrators -Classifier: License :: OSI Approved :: MIT License -Classifier: Programming Language :: Python :: 3.7 -Classifier: Programming Language :: Python :: 3.8 -Classifier: Programming Language :: Python :: 3.9 -Classifier: Topic :: Software Development :: Libraries :: Application Frameworks -Requires-Dist: aiohttp (<4.0.0,>=3.7.2) -Requires-Dist: Babel (>=2.8.0) -Requires-Dist: certifi (>=2020.6.20) -Provides-Extra: fast -Requires-Dist: uvloop (<0.15.0,>=0.14.0) ; extra == 'fast' -Requires-Dist: ujson (>=1.35) ; extra == 'fast' -Provides-Extra: proxy -Requires-Dist: aiohttp-socks (<0.6.0,>=0.5.3) ; extra == 'proxy' - -AIOGramBot -========== - -.. image:: https://img.shields.io/badge/telegram-aiogram-blue.svg?style=flat-square - :target: https://t.me/aiogram_live - :alt: [Telegram] aiogram live - -.. image:: https://img.shields.io/pypi/v/aiogram.svg?style=flat-square - :target: https://pypi.python.org/pypi/aiogram - :alt: PyPi Package Version - -.. image:: https://img.shields.io/pypi/status/aiogram.svg?style=flat-square - :target: https://pypi.python.org/pypi/aiogram - :alt: PyPi status - -.. image:: https://img.shields.io/pypi/dm/aiogram.svg?style=flat-square - :target: https://pypi.python.org/pypi/aiogram - :alt: PyPi downloads - -.. image:: https://img.shields.io/pypi/pyversions/aiogram.svg?style=flat-square - :target: https://pypi.python.org/pypi/aiogram - :alt: Supported python versions - -.. image:: https://img.shields.io/badge/Telegram%20Bot%20API-5.3-blue.svg?style=flat-square&logo=telegram - :target: https://core.telegram.org/bots/api - :alt: Telegram Bot API - -.. image:: https://img.shields.io/readthedocs/aiogram?style=flat-square - :target: http://docs.aiogram.dev/en/latest/?badge=latest - :alt: Documentation Status - -.. image:: https://img.shields.io/github/issues/aiogram/aiogram.svg?style=flat-square - :target: https://github.com/aiogram/aiogram/issues - :alt: Github issues - -.. image:: https://img.shields.io/pypi/l/aiogram.svg?style=flat-square - :target: https://opensource.org/licenses/MIT - :alt: MIT License - - -**aiogram** is a pretty simple and fully asynchronous framework for `Telegram Bot API `_ written in Python 3.7 with `asyncio `_ and `aiohttp `_. It helps you to make your bots faster and simpler. - -You can `read the docs here `_. - -Official aiogram resources --------------------------- - -- News: `@aiogram_live `_ -- Community: `@aiogram `_ -- Russian community: `@aiogram_ru `_ -- Pip: `aiogram `_ -- Docs: `ReadTheDocs `_ -- Source: `Github repo `_ -- Issues/Bug tracker: `Github issues tracker `_ -- Test bot: `@aiogram_bot `_ - - diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram-2.14.3.dist-info/RECORD b/IKEA_scraper/.venv/Lib/site-packages/aiogram-2.14.3.dist-info/RECORD deleted file mode 100644 index 714eedd9..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram-2.14.3.dist-info/RECORD +++ /dev/null @@ -1,237 +0,0 @@ -aiogram-2.14.3.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -aiogram-2.14.3.dist-info/LICENSE,sha256=dsHq3STDQqe8E_gn3RwwGQ3JglVUWW2eSjviR0u3kDk,1064 -aiogram-2.14.3.dist-info/METADATA,sha256=S1bF0mNu5rfquDHQo83G2lw18-cpXc5lAN7ut_7xrb8,3460 -aiogram-2.14.3.dist-info/RECORD,, -aiogram-2.14.3.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -aiogram-2.14.3.dist-info/WHEEL,sha256=p46_5Uhzqz6AzeSosiOnxK-zmFja1i22CrQCjmYe8ec,92 -aiogram-2.14.3.dist-info/top_level.txt,sha256=glLhE1GuNFQxEVRhRIm2lR2YxenVMqt8Q31x2ewaZQ4,8 -aiogram/__init__.py,sha256=tjmseIDVm3WUOtFlgiiRDvoOCwR5nNbeoSFZCCdBFaQ,1011 -aiogram/__main__.py,sha256=EiBMkaWdfb_fwJWnHgHAm1JPHvNHcztX1A0rMWg_jxM,1676 -aiogram/__pycache__/__init__.cpython-39.pyc,, -aiogram/__pycache__/__main__.cpython-39.pyc,, -aiogram/bot/__init__.py,sha256=OLC2y5Iy7pTHPPAaSrRpk0mnb7I_l-GU0HxW16Gzk3M,117 -aiogram/bot/__pycache__/__init__.cpython-39.pyc,, -aiogram/bot/__pycache__/api.cpython-39.pyc,, -aiogram/bot/__pycache__/base.cpython-39.pyc,, -aiogram/bot/__pycache__/bot.cpython-39.pyc,, -aiogram/bot/api.py,sha256=ijelbA0gbxZFBYNnxo4b_W0bicVpGrACveU1NMdyU4o,10319 -aiogram/bot/base.py,sha256=qyvL--msJgdRUg7hzDHcGyKaKjyLidxIjMPIxF8AT4Y,10973 -aiogram/bot/bot.py,sha256=ETM-EEJnkMYxYz5jsP2mhXuFzhwYD4rcvtRExzlWN1w,171145 -aiogram/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -aiogram/contrib/__pycache__/__init__.cpython-39.pyc,, -aiogram/contrib/fsm_storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -aiogram/contrib/fsm_storage/__pycache__/__init__.cpython-39.pyc,, -aiogram/contrib/fsm_storage/__pycache__/files.cpython-39.pyc,, -aiogram/contrib/fsm_storage/__pycache__/memory.cpython-39.pyc,, -aiogram/contrib/fsm_storage/__pycache__/mongo.cpython-39.pyc,, -aiogram/contrib/fsm_storage/__pycache__/redis.cpython-39.pyc,, -aiogram/contrib/fsm_storage/__pycache__/rethinkdb.cpython-39.pyc,, -aiogram/contrib/fsm_storage/files.py,sha256=x-V7oagYARLep7qdGL6Ob4MJOgrt94mXdYc_RSvoiSc,1422 -aiogram/contrib/fsm_storage/memory.py,sha256=Jq30iYqQieTTrAhqTqGUW51xn-tzGd3z2VDj5MOeHO8,4627 -aiogram/contrib/fsm_storage/mongo.py,sha256=r-JDWyXQ_WIfm8rJN2sfcSrw_7LLDs4eziXZ7GXk9rw,7941 -aiogram/contrib/fsm_storage/redis.py,sha256=AOQHMS1N2lVZ-7Cuvjc-92HNnMqcX-keoq75g2ptbmI,15937 -aiogram/contrib/fsm_storage/rethinkdb.py,sha256=2GsWZfiaGxYHpMy50JoSgC5B3L6ZEcg-ezUOtLW3iko,7332 -aiogram/contrib/middlewares/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -aiogram/contrib/middlewares/__pycache__/__init__.cpython-39.pyc,, -aiogram/contrib/middlewares/__pycache__/environment.cpython-39.pyc,, -aiogram/contrib/middlewares/__pycache__/fsm.cpython-39.pyc,, -aiogram/contrib/middlewares/__pycache__/i18n.cpython-39.pyc,, -aiogram/contrib/middlewares/__pycache__/logging.cpython-39.pyc,, -aiogram/contrib/middlewares/environment.py,sha256=kwyzzhEflW6suV_R-Mw-l4_vtkb-qREZHHkghVWyxg4,746 -aiogram/contrib/middlewares/fsm.py,sha256=xKOSSRMxAFOO5y5TRJbg6mYlkJa9Opk48EC3Qb2pcRI,2331 -aiogram/contrib/middlewares/i18n.py,sha256=hb8kgKpNkhq1zxhkuD_R7dE5HvR_naRhlK825bnYK9g,4404 -aiogram/contrib/middlewares/logging.py,sha256=Nnq4IZngEWhNdb65IK8vvYry8cbcT7Fg4sX-Th4n8n8,21689 -aiogram/dispatcher/__init__.py,sha256=Nkrg2GKVGo5HXJVauYIojrR0NTgILnyKbrjOe5rVgeo,336 -aiogram/dispatcher/__pycache__/__init__.cpython-39.pyc,, -aiogram/dispatcher/__pycache__/dispatcher.cpython-39.pyc,, -aiogram/dispatcher/__pycache__/handler.cpython-39.pyc,, -aiogram/dispatcher/__pycache__/middlewares.cpython-39.pyc,, -aiogram/dispatcher/__pycache__/storage.cpython-39.pyc,, -aiogram/dispatcher/__pycache__/webhook.cpython-39.pyc,, -aiogram/dispatcher/dispatcher.py,sha256=mxn7wF4pNXsWZASYoi9rps_EDUUz3VGu5Y6T7NTgaQM,54782 -aiogram/dispatcher/filters/__init__.py,sha256=O-HF8XQq6NAsQb65q-bDYque0fR2cTq-p7-jN_OSUso,1127 -aiogram/dispatcher/filters/__pycache__/__init__.cpython-39.pyc,, -aiogram/dispatcher/filters/__pycache__/builtin.cpython-39.pyc,, -aiogram/dispatcher/filters/__pycache__/factory.cpython-39.pyc,, -aiogram/dispatcher/filters/__pycache__/filters.cpython-39.pyc,, -aiogram/dispatcher/filters/__pycache__/state.cpython-39.pyc,, -aiogram/dispatcher/filters/builtin.py,sha256=xIjPbpqHRnAOZyra0VSfD5HwCYzJXfR7UCX_OBjYo5s,25538 -aiogram/dispatcher/filters/factory.py,sha256=S6NJIKwJFzPFyOmTRd-oWCbzAMy3pzcLOb0V2I0I56A,2517 -aiogram/dispatcher/filters/filters.py,sha256=A6PbDNVha29Agyx_u13U-dd5sJJubGtvdbgjkZFp0Dw,8383 -aiogram/dispatcher/filters/state.py,sha256=TnWEiilNDRhdY1lKLc6H4yGnvqNB2KWF_dZKj4rtt9c,5176 -aiogram/dispatcher/handler.py,sha256=nz0pstovw_JguTZR4_v29K-nMmJon4mGUkcJkxoM6SM,4130 -aiogram/dispatcher/middlewares.py,sha256=kqWjVbwq0tOUNQp3FeKaoTpuYOpJzeKEALe6UksXGQo,3253 -aiogram/dispatcher/storage.py,sha256=vTmnFDl7qJ-yywqx0TTFMvRTPDjZp-sZ11X8NvNe9SU,15580 -aiogram/dispatcher/webhook.py,sha256=N8ofR_yeDaLsOya-RZJGocSafDM5XgwTLesnoiq1tQ8,90302 -aiogram/types/__init__.py,sha256=w4DZ_oOpBwx744rVw1c4TNbENLPRH3Ny7RqF8QKlFEM,7432 -aiogram/types/__pycache__/__init__.cpython-39.pyc,, -aiogram/types/__pycache__/animation.cpython-39.pyc,, -aiogram/types/__pycache__/audio.cpython-39.pyc,, -aiogram/types/__pycache__/auth_widget_data.cpython-39.pyc,, -aiogram/types/__pycache__/base.cpython-39.pyc,, -aiogram/types/__pycache__/bot_command.cpython-39.pyc,, -aiogram/types/__pycache__/bot_command_scope.cpython-39.pyc,, -aiogram/types/__pycache__/callback_game.cpython-39.pyc,, -aiogram/types/__pycache__/callback_query.cpython-39.pyc,, -aiogram/types/__pycache__/chat.cpython-39.pyc,, -aiogram/types/__pycache__/chat_invite_link.cpython-39.pyc,, -aiogram/types/__pycache__/chat_location.cpython-39.pyc,, -aiogram/types/__pycache__/chat_member.cpython-39.pyc,, -aiogram/types/__pycache__/chat_member_updated.cpython-39.pyc,, -aiogram/types/__pycache__/chat_permissions.cpython-39.pyc,, -aiogram/types/__pycache__/chat_photo.cpython-39.pyc,, -aiogram/types/__pycache__/chosen_inline_result.cpython-39.pyc,, -aiogram/types/__pycache__/contact.cpython-39.pyc,, -aiogram/types/__pycache__/dice.cpython-39.pyc,, -aiogram/types/__pycache__/document.cpython-39.pyc,, -aiogram/types/__pycache__/encrypted_credentials.cpython-39.pyc,, -aiogram/types/__pycache__/encrypted_passport_element.cpython-39.pyc,, -aiogram/types/__pycache__/fields.cpython-39.pyc,, -aiogram/types/__pycache__/file.cpython-39.pyc,, -aiogram/types/__pycache__/force_reply.cpython-39.pyc,, -aiogram/types/__pycache__/game.cpython-39.pyc,, -aiogram/types/__pycache__/game_high_score.cpython-39.pyc,, -aiogram/types/__pycache__/inline_keyboard.cpython-39.pyc,, -aiogram/types/__pycache__/inline_query.cpython-39.pyc,, -aiogram/types/__pycache__/inline_query_result.cpython-39.pyc,, -aiogram/types/__pycache__/input_file.cpython-39.pyc,, -aiogram/types/__pycache__/input_media.cpython-39.pyc,, -aiogram/types/__pycache__/input_message_content.cpython-39.pyc,, -aiogram/types/__pycache__/invoice.cpython-39.pyc,, -aiogram/types/__pycache__/labeled_price.cpython-39.pyc,, -aiogram/types/__pycache__/location.cpython-39.pyc,, -aiogram/types/__pycache__/login_url.cpython-39.pyc,, -aiogram/types/__pycache__/mask_position.cpython-39.pyc,, -aiogram/types/__pycache__/message.cpython-39.pyc,, -aiogram/types/__pycache__/message_auto_delete_timer_changed.cpython-39.pyc,, -aiogram/types/__pycache__/message_entity.cpython-39.pyc,, -aiogram/types/__pycache__/message_id.cpython-39.pyc,, -aiogram/types/__pycache__/mixins.cpython-39.pyc,, -aiogram/types/__pycache__/order_info.cpython-39.pyc,, -aiogram/types/__pycache__/passport_data.cpython-39.pyc,, -aiogram/types/__pycache__/passport_element_error.cpython-39.pyc,, -aiogram/types/__pycache__/passport_file.cpython-39.pyc,, -aiogram/types/__pycache__/photo_size.cpython-39.pyc,, -aiogram/types/__pycache__/poll.cpython-39.pyc,, -aiogram/types/__pycache__/pre_checkout_query.cpython-39.pyc,, -aiogram/types/__pycache__/proximity_alert_triggered.cpython-39.pyc,, -aiogram/types/__pycache__/reply_keyboard.cpython-39.pyc,, -aiogram/types/__pycache__/response_parameters.cpython-39.pyc,, -aiogram/types/__pycache__/shipping_address.cpython-39.pyc,, -aiogram/types/__pycache__/shipping_option.cpython-39.pyc,, -aiogram/types/__pycache__/shipping_query.cpython-39.pyc,, -aiogram/types/__pycache__/sticker.cpython-39.pyc,, -aiogram/types/__pycache__/sticker_set.cpython-39.pyc,, -aiogram/types/__pycache__/successful_payment.cpython-39.pyc,, -aiogram/types/__pycache__/update.cpython-39.pyc,, -aiogram/types/__pycache__/user.cpython-39.pyc,, -aiogram/types/__pycache__/user_profile_photos.cpython-39.pyc,, -aiogram/types/__pycache__/venue.cpython-39.pyc,, -aiogram/types/__pycache__/video.cpython-39.pyc,, -aiogram/types/__pycache__/video_note.cpython-39.pyc,, -aiogram/types/__pycache__/voice.cpython-39.pyc,, -aiogram/types/__pycache__/voice_chat_ended.cpython-39.pyc,, -aiogram/types/__pycache__/voice_chat_participants_invited.cpython-39.pyc,, -aiogram/types/__pycache__/voice_chat_scheduled.cpython-39.pyc,, -aiogram/types/__pycache__/voice_chat_started.cpython-39.pyc,, -aiogram/types/__pycache__/webhook_info.cpython-39.pyc,, -aiogram/types/animation.py,sha256=YtZiRt-YYGiefhy2bIWosI4Tch8vHBYZyMgyLwQmEc4,845 -aiogram/types/audio.py,sha256=NR5TyMg-lYycE0jbfY65ytTzW_1KtHURQrFGRWKA0Xc,707 -aiogram/types/auth_widget_data.py,sha256=NFjrpzNOstqU9hSgRtGK5L41rAhc8Hpz6UnykCTWxD8,1377 -aiogram/types/base.py,sha256=OAPxU0pXQKkrK38zlKr_TpmI3soC4Yy5GjWse5MOCNE,8228 -aiogram/types/bot_command.py,sha256=0oVwFoVY1VM3IqcYTPQ9ATvCjweoBxvYh64dHeVVpUE,433 -aiogram/types/bot_command_scope.py,sha256=FbHqYr5Xzwx1Ao3Qc-EXVJQpz2FnGW_oc2xfTf9DrvQ,4355 -aiogram/types/callback_game.py,sha256=rdlqjxiKqnmU89AwmhsOdtsYCNsfK1QcXwqB1cSmF40,226 -aiogram/types/callback_query.py,sha256=VfpfdkkH4Df9HYB_hxUz0qy5NGeCxGLuVIxOR_Wm1Ek,3058 -aiogram/types/chat.py,sha256=-uwSFnacYVVV_RfhrlOlNxeIg304DgmPFxkptuzV9lY,34415 -aiogram/types/chat_invite_link.py,sha256=a5hf1_t2jsftjIdIjBB6-KiU3pMuaosrD0-_OQfdlU4,534 -aiogram/types/chat_location.py,sha256=ymG2LCOjfe_uB0g59qDTCOW1GYSRH0HDp3dJz1p2_Fk,449 -aiogram/types/chat_member.py,sha256=h2SkBF6gSYzi9MQ-DZmQilLK6QfokL2Y3-iWktLq6Ss,6380 -aiogram/types/chat_member_updated.py,sha256=J5k-qePjpxq9xO7f-bkblOcZBYEut8kioK5CNLJU66U,723 -aiogram/types/chat_permissions.py,sha256=RynykTfyScq4z51UAqtuONMmzy6b3t6DCRsZ0K0k4Yc,1673 -aiogram/types/chat_photo.py,sha256=0ajMgflTGvVlke6oehsCzxViW3HcyY9TiWCatGB8rf0,2905 -aiogram/types/chosen_inline_result.py,sha256=VbzJUYnkQG_CgfikEXd2rBpv36GDZU2bh1-xcwzj-MQ,961 -aiogram/types/contact.py,sha256=9GllGkYqdVhQBzM8QVY6vNgs5DXz9Yy87ZhlsI5g3fg,640 -aiogram/types/dice.py,sha256=c5tHBvXMeD5ooFXgRLutoU7cx7oQj_tD39KX10Qui_k,430 -aiogram/types/document.py,sha256=KLPdspuob_KLPg534l_oSn7PSTG0KniX9ETTgFc9PA0,1455 -aiogram/types/encrypted_credentials.py,sha256=7rC5u3kvrAyMpOzX2FbPAwvQOP-prQ3XBqdDhwmTfZw,503 -aiogram/types/encrypted_passport_element.py,sha256=zu1ke7yQwcrkIHK6BZ5iWtdky7Df3HOHow5S1yJSfnA,769 -aiogram/types/fields.py,sha256=_Ty_4aR3o81PUa7h_NuFXyHkfQvkRxGtvF7yQx2346g,5843 -aiogram/types/file.py,sha256=lwDtE0yzN-dobkOf9hvQ79T6JBGyCBcOJdbkyf3f4Qo,704 -aiogram/types/force_reply.py,sha256=zGJ4SkjBjjpMiFK7ZUJGr99ujpCmhHpmIUMiybiORwo,1092 -aiogram/types/game.py,sha256=LT4KjMzHUOns3x5Aaezql-4qDQNA5sdmbPNv1A7Cvuw,725 -aiogram/types/game_high_score.py,sha256=WzgG1csKkpiQUVm-JGqpwEiXbJz0-8M5crtg_SwZCuY,485 -aiogram/types/inline_keyboard.py,sha256=UYjPEUUIa8FAc8-2krxntEEqrG8DUHnk_xamUA1i9lw,4089 -aiogram/types/inline_query.py,sha256=J-6pmPwes84aqjFKyo4ZynuLpilWRk6UKdew_vjdYlQ,3549 -aiogram/types/inline_query_result.py,sha256=zuhyE_3oqlWdvsHYCPX71J_zXKNZnAMCWBhLwBj8NK8,37458 -aiogram/types/input_file.py,sha256=a_T7k-aFC6-Tihvi7QIWJT2xDHXIMIbIG7Or8In1PIE,5960 -aiogram/types/input_media.py,sha256=ESZxZwyZecnmb1UAtaORrTY3TGYOTXxI44e2_eU4TO0,14778 -aiogram/types/input_message_content.py,sha256=QF8Pyz9iEblDN20D_i3cbUC1pJ-48fCtAF3rHxSfgrc,8322 -aiogram/types/invoice.py,sha256=OJe3ea6zbHiU0v_PfQJFhWljTPGtLSuzBzqGKYxKHqg,430 -aiogram/types/labeled_price.py,sha256=oNGpHXL8ArrkeMp1ct8a1MDea_Y5zvEN89Rja74BqHc,445 -aiogram/types/location.py,sha256=PegQG2XiaA67D23uNQXGZTj14DpN04XLpU7M3LCgqo0,560 -aiogram/types/login_url.py,sha256=N78VBH79VtPmuwlYxmZrYcOmD4mEGU4M3doa2hkqmEc,1107 -aiogram/types/mask_position.py,sha256=xwP2mHQCwK8LxYmNv7HJv7FxP-4vnSWVw4QEPYlWG9I,403 -aiogram/types/message.py,sha256=MxGWnmsAcADTNrfOptUc8Ev0PhH17i-VmFKMYwsVSxs,134937 -aiogram/types/message_auto_delete_timer_changed.py,sha256=lSzTbHsUP_AmCaEo0l7lfSgGBUW-eQOFRF72g9Fwais,337 -aiogram/types/message_entity.py,sha256=kvf0bCxumov5I6PbvHcTSHfORPmT9vdic1oJjXJJXrs,4248 -aiogram/types/message_id.py,sha256=c9Ws62UlHyiu07YiidYLAUXcPEdqPlK_aBeVDUj9Rx4,234 -aiogram/types/mixins.py,sha256=KhQU0UuRoemD8ZL5Ji5UkEdZClRyOO5jo8cG30ZJJOg,1873 -aiogram/types/order_info.py,sha256=vCcVqabJvPdD5ZNiqrn7-wn05Wxt-UYnU14iQgFW_kQ,448 -aiogram/types/passport_data.py,sha256=mKM9nzkDVMUvVT9IFDBGKs3cB1FOYUI-4hO_L0FS7s8,554 -aiogram/types/passport_element_error.py,sha256=O2BHrF31usOKWLBuA5aoo5wCZZSGl9SG5sQRtsmKodc,4341 -aiogram/types/passport_file.py,sha256=ktZVp7kY2ECLriCxF83g54Qn1I1lv13ApOhfB_oZc10,497 -aiogram/types/photo_size.py,sha256=4ewLUutlDwvRSZFh5ZQMwvWKr51-i558YGRadx7bcAk,485 -aiogram/types/poll.py,sha256=Bb16Yxr4myM45PFe6ih0J4z3to9D95gz9uXlw7aGnC8,2356 -aiogram/types/pre_checkout_query.py,sha256=VzzWeCBFlf4rJl726vyzpDjP7eHD0yxK5y846yR5-CM,1166 -aiogram/types/proximity_alert_triggered.py,sha256=3HVR9Ch-_Wx8YaOp98JPCtzcf8T2vciFzr9fxjpDKHA,458 -aiogram/types/reply_keyboard.py,sha256=YBLpeJlLhHIWDUhzi6vppQFoMtXE8FrJivhXt4h6mic,5254 -aiogram/types/response_parameters.py,sha256=3WjIHLqlM5aruJCYWoxgsC4-EdGlmI55gJ6s_yycBQI,328 -aiogram/types/shipping_address.py,sha256=QyN8hy7iXMmFnuquw8hHl5qiWsQLXtTY2y7k43i2WHc,469 -aiogram/types/shipping_option.py,sha256=tUwtLepy0J3_4LH3kaeEVE4UQPKvaQjjG4AgZPviuHE,825 -aiogram/types/shipping_query.py,sha256=Q7ruEe4rd0uN0OYUESDZpXui58y50eR-VB75LzpLLFk,707 -aiogram/types/sticker.py,sha256=ITYOI8nsIJ6UbgEOIJGdXMJ1Itc9-01QR2ZEcriixLU,1790 -aiogram/types/sticker_set.py,sha256=gdnu5Xu5B0VmL0KWP7r94krM_NSsNE2Q6k2nVsFsDMc,564 -aiogram/types/successful_payment.py,sha256=OYa5vFeNCgrhOjbsG-JzLIg6b1msjsH8pMz9LcoNLRo,640 -aiogram/types/update.py,sha256=JnwBaaSTh1tVY8LunLtwwHzGmGSI1aXJ-Df5DmhoeQg,3065 -aiogram/types/user.py,sha256=eakT6DkHgkrIMQPRwtIhxwZBd6TWwdGQEwQcM2-_a20,2650 -aiogram/types/user_profile_photos.py,sha256=KYitXWtf9pVVg6Om6cs4DNatYl3yEAk7NUmJ-hp1_ac,396 -aiogram/types/venue.py,sha256=0FovO15JG29hTa-Ei6hGs0ypji4CiqXkXVsOnW81rGw,540 -aiogram/types/video.py,sha256=j_d7U-1RDANsYattZ-9oQKXKgoIgmLRb9coDfSoNRoY,658 -aiogram/types/video_note.py,sha256=xwjW-CMgAbjOflcTd1fIFA8edyQhMIQMLP5PitDorFQ,581 -aiogram/types/voice.py,sha256=4A0-WI5vZYszqB7Kc-SQ9z_VvlHuY-9gnUU1ILJyzTY,445 -aiogram/types/voice_chat_ended.py,sha256=b_aNbuxmYXFfAt0J_Lb4JIEGbepVSb_FWWBYwfQ3aL0,326 -aiogram/types/voice_chat_participants_invited.py,sha256=8XTP5Jc3mpwbaU1qVDKv9ZIhAzeIycSXCaG-sSfwWD0,412 -aiogram/types/voice_chat_scheduled.py,sha256=mNfF_fzsS1PjhbGSpNDIXm7AsDUs7-dYrtMMxWxzTyM,356 -aiogram/types/voice_chat_started.py,sha256=cGLxDMRw2X_-61CKHpfY4Gj7utDbHx_USn1CATSBN2k,311 -aiogram/types/webhook_info.py,sha256=0O6_l_EX5BFy4CVzqpQ1cLBUFr-ypisLUQ4y2QDCP2s,648 -aiogram/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -aiogram/utils/__pycache__/__init__.cpython-39.pyc,, -aiogram/utils/__pycache__/auth_widget.cpython-39.pyc,, -aiogram/utils/__pycache__/callback_data.cpython-39.pyc,, -aiogram/utils/__pycache__/deep_linking.cpython-39.pyc,, -aiogram/utils/__pycache__/deprecated.cpython-39.pyc,, -aiogram/utils/__pycache__/emoji.cpython-39.pyc,, -aiogram/utils/__pycache__/exceptions.cpython-39.pyc,, -aiogram/utils/__pycache__/executor.cpython-39.pyc,, -aiogram/utils/__pycache__/helper.cpython-39.pyc,, -aiogram/utils/__pycache__/json.cpython-39.pyc,, -aiogram/utils/__pycache__/markdown.cpython-39.pyc,, -aiogram/utils/__pycache__/mixins.cpython-39.pyc,, -aiogram/utils/__pycache__/parts.cpython-39.pyc,, -aiogram/utils/__pycache__/payload.cpython-39.pyc,, -aiogram/utils/__pycache__/text_decorations.cpython-39.pyc,, -aiogram/utils/auth_widget.py,sha256=d-hDz-zhVA9As6IKufNmI5FsLSKb0bz5saOl0U9zvPA,2126 -aiogram/utils/callback_data.py,sha256=DkRXt1Nqr6mh8PYI9jiL4EhsQi4ga-H2YzaAkLJSeX8,4089 -aiogram/utils/deep_linking.py,sha256=9OB1JQVQ9ovYotAMjglylWtGrIZSWGEp96xFUu5nz9I,3721 -aiogram/utils/deprecated.py,sha256=Oz8GYy-Odwj0eiYAKjm7yQvQ-l-Vmhecr28WkMnkgCY,5539 -aiogram/utils/emoji.py,sha256=jedTnV32L_mMZFC6d6RKA8QbaHPtDCJrtuEtW48k72I,220 -aiogram/utils/exceptions.py,sha256=QqNu4NAXGWdJ5YfIZ-lPhKwp2BT_OYpBzEjZ6ZtGAAA,14895 -aiogram/utils/executor.py,sha256=cBh4JUNxuKtbC2qNwS1Ty3kgJOl4fXuJisCgWiDkMj4,13018 -aiogram/utils/helper.py,sha256=6p7yRLe8pZUVjmIYAvGHFhsLjrXdLjxTB2VwVRRpXbo,5779 -aiogram/utils/json.py,sha256=Yzaufq_bts3YTzZ1x0v8p1MlRmxjTbinZrtNltJfIz8,843 -aiogram/utils/markdown.py,sha256=RKng7KJpGB2WRwBip0UkWNkdJmKPMNROw6WtiOf19EU,5006 -aiogram/utils/mixins.py,sha256=t3ZqwMI9Qzws7sw_eB4GS06e1xr8IVwudx9PYtL-xig,1284 -aiogram/utils/parts.py,sha256=Oq9AL4kxkBWtYgHdQk0rTimTaA0uLvuQbtsBe16vslc,1556 -aiogram/utils/payload.py,sha256=PI789pjTqFSpp5LvKjtw5p0mA5pSYc4cOtXhOLVRLjg,2138 -aiogram/utils/text_decorations.py,sha256=DeN3J832_J2RQ4G2s7m-1kamVap1j_qU0l-17RWJWYU,5945 diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram-2.14.3.dist-info/REQUESTED b/IKEA_scraper/.venv/Lib/site-packages/aiogram-2.14.3.dist-info/REQUESTED deleted file mode 100644 index e69de29b..00000000 diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram-2.14.3.dist-info/WHEEL b/IKEA_scraper/.venv/Lib/site-packages/aiogram-2.14.3.dist-info/WHEEL deleted file mode 100644 index 3b5c4038..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram-2.14.3.dist-info/WHEEL +++ /dev/null @@ -1,5 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.33.6) -Root-Is-Purelib: true -Tag: py3-none-any - diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram-2.14.3.dist-info/top_level.txt b/IKEA_scraper/.venv/Lib/site-packages/aiogram-2.14.3.dist-info/top_level.txt deleted file mode 100644 index 6e165ed5..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram-2.14.3.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -aiogram diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/__init__.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/__init__.py deleted file mode 100644 index ceca7f58..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/__init__.py +++ /dev/null @@ -1,47 +0,0 @@ -import sys -if sys.version_info < (3, 7): - raise ImportError('Your Python version {0} is not supported by aiogram, please install ' - 'Python 3.7+'.format('.'.join(map(str, sys.version_info[:3])))) - -import asyncio -import os - -from . import bot -from . import contrib -from . import dispatcher -from . import types -from . import utils -from .bot import Bot -from .dispatcher import Dispatcher -from .dispatcher import filters -from .dispatcher import middlewares -from .utils import exceptions, executor, helper, markdown as md - -try: - import uvloop -except ImportError: - uvloop = None -else: - if 'DISABLE_UVLOOP' not in os.environ: - asyncio.set_event_loop_policy(uvloop.EventLoopPolicy()) - -__all__ = ( - 'Bot', - 'Dispatcher', - '__api_version__', - '__version__', - 'bot', - 'contrib', - 'dispatcher', - 'exceptions', - 'executor', - 'filters', - 'helper', - 'md', - 'middlewares', - 'types', - 'utils', -) - -__version__ = '2.14.3' -__api_version__ = '5.3' diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/__main__.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/__main__.py deleted file mode 100644 index bcbbbe0b..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/__main__.py +++ /dev/null @@ -1,83 +0,0 @@ -import platform -import sys - -import aiohttp - -import aiogram -from aiogram.utils import json - - -class SysInfo: - @property - def os(self): - return platform.platform() - - @property - def python_implementation(self): - return platform.python_implementation() - - @property - def python(self): - return sys.version.replace('\n', '') - - @property - def aiogram(self): - return aiogram.__version__ - - @property - def api(self): - return aiogram.__api_version__ - - @property - def uvloop(self): - try: - import uvloop - except ImportError: - return - return uvloop.__version__ - - @property - def ujson(self): - try: - import ujson - except ImportError: - return - return ujson.__version__ - - @property - def rapidjson(self): - try: - import rapidjson - except ImportError: - return - return rapidjson.__version__ - - @property - def aiohttp(self): - return aiohttp.__version__ - - def collect(self): - yield f'{self.python_implementation}: {self.python}' - yield f'OS: {self.os}' - yield f'aiogram: {self.aiogram}' - yield f'aiohttp: {self.aiohttp}' - - uvloop = self.uvloop - if uvloop: - yield f'uvloop: {uvloop}' - - yield f'JSON mode: {json.mode}' - - rapidjson = self.rapidjson - if rapidjson: - yield f'rapidjson: {rapidjson}' - ujson = self.ujson - if ujson: - yield f'ujson: {ujson}' - - def __str__(self): - return '\n'.join(self.collect()) - - -if __name__ == '__main__': - print(SysInfo()) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/__pycache__/__init__.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index 2d0f2a0fe34c64dc35732af674304c67ba9b4aca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1083 zcmZ9KPj4JG7{=|H&CX=@U$V)TEfg4u(~5Q}4HSV8f~q-G3M5iRt6D2r&e&<3c*Y~! zyX~anLdBhrkR16+KEf#yH*Q?u_0W>4Gn&UgzxHcCe#dMu$Phfg$6vC)Vubz(oj0E_ z`Yn8RiV@<7V}%G3=mhiV6q&ms;_-RRJLes-Cc14L^R-{1>*!^4fiLh&{4;K|5|XrS zN>bkCiCQl+l3@g#0{2L-<#pgb>9?E#56Gb99`KM1Tkfl@9FbAW1Jy4#$VSUU;7zjG z@(6fL#w~BCVYx-N%5Ab;PROLZM&7~btlzqslIdeqUF#qbHGg6hUXIE1394?~MtoDG zC)Zc_S8P&|oWCok=kHyh3k-9{lq}@9ypG(jOn~ z?e8DVMy3Z2O&`RMC}p*zuZ~Zt@6oG{>4tfsSSAfJ3bGMo5M&d?M@>DQt3&U#o zA&WVzxLWMV!-bVj+^Sh|%AN|lcy+Ztp;T7VQ97?1pMG6xzEt9yaF^^IkQ8UQi>Lo| X;}oY+AHV%hqo|E#FgA=j;|~58>~|Vm diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/__pycache__/__main__.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/__pycache__/__main__.cpython-39.pyc deleted file mode 100644 index 7ec67d269b79923f4d71b8bc44a7945fdb136bde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2444 zcmb_dOK%)S5bo}I?i9>=qu7d>N(U9C^{ zfdk^eHA1qF{!4v?6MumdRXwwlS!YFrlo@sRS3T2JUsqLE`@LS9!1Jf^k^ier$X_Tl z9|MHXpyf}Y6GYI6c;!evs%7ReJsO??Ba6(~@+?ZeB*GBp1rg>s^X$M8)-jWh12?eG z$vLHba+yT5LZfV>V+hXT}cs;QzZo}9YcYyU><&5X~ zqvSB1(gs_^4BF?=au>RST#_p?Cf5{q=w^{$9Huh9hTY~tba+i9{`Jo{;$V`^C(=(u z8c*`+QJO}R@Hp^!K9zo!1#+@~8YHKa$Kj8YJS>9uGk<#QKMV4SAEwWwA3x+g_QQnp z{cNsSns<-^QXy>7uBh&(`77B{WGhWrH)PU+LG5Pq;wVjc7-vxs2T9=y$ zbsB8qqwLb|c7sxXozhDjFoK!`?hiTC-cU~EYSrPqGSB%YyYd#Sz0)u{SQ)J}{12;I zmp9TfEyp0`NY2*ja-G`Rzg2Nc? z!t2sS9h6e(>me(5!4fdFPOz>>jK>*d#i10IUa9N*l) z5$7Im;JCHoSnFHkiE(>Havv2%rd_l#sow$xAEMo=sx*@tSFTyZqijH%;)36yTap=h z4iz6p`kee>dRuDG?&@B@ZQ0MFMlhIzBiU5V$ z#UMC3Cl2<8ZC(H57VK7Hg6pFz(QV~nK))#yRY)CIOtzufI4$+;jkHwGG>xKQT6_#E z@_Wz`xS5zuaBE((Je>(A_>WiDn6z;fUUiuBM zk4#y+A3*0)M%%`Q=D^&l8Sb{kRmi!# zOouIf2THt<%19z3uU93@{z(x=xx~Qgg%XRKvN9Pa#U@V5{iO83rx=DDwYt=0@Y1f) I|H`HR0%_mPLjV8( diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/bot/__init__.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/bot/__init__.py deleted file mode 100644 index 19c051bf..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/bot/__init__.py +++ /dev/null @@ -1,9 +0,0 @@ -from . import api -from .base import BaseBot -from .bot import Bot - -__all__ = ( - 'BaseBot', - 'Bot', - 'api', -) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/bot/__pycache__/__init__.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/bot/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index fbc2f249c45a89140722ca9830cb1eee860986ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 299 zcmYjL%}N6?5KcDxQ;L0%1#QoY6zN$6@fHGMb`xr7vI)ty&`0u>a@3Qr;K|8)afbQ6 zZ~mBp&1Ox|KG{8-k-tjv-zrR=Fw!l8B8pn#D5tdO%2tkXwrFN+*YE~)&0E#Hk-q(= zxYEV0`XwFoy9z4`_Hh)5g& diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/bot/__pycache__/api.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/bot/__pycache__/api.cpython-39.pyc deleted file mode 100644 index 10ec210db7828288186bde9f2fac3f2662d88e3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8381 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

dK~;J7d?$Vr}T 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 Z&vw;FHFrgf?C*~TyLXxY4R(+9{1@Eikr4m@ diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/bot/api.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/bot/api.py deleted file mode 100644 index 1bf00d47..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/bot/api.py +++ /dev/null @@ -1,290 +0,0 @@ -import logging -import os -from dataclasses import dataclass -from http import HTTPStatus - -import aiohttp - -from .. import types -from ..utils import exceptions, json -from ..utils.helper import Helper, HelperMode, Item - -# Main aiogram logger -log = logging.getLogger('aiogram') - - -@dataclass(frozen=True) -class TelegramAPIServer: - """ - Base config for API Endpoints - """ - - base: str - file: str - - def api_url(self, token: str, method: str) -> str: - """ - Generate URL for API methods - - :param token: Bot token - :param method: API method name (case insensitive) - :return: URL - """ - return self.base.format(token=token, method=method) - - def file_url(self, token: str, path: str) -> str: - """ - Generate URL for downloading files - - :param token: Bot token - :param path: file path - :return: URL - """ - return self.file.format(token=token, path=path) - - @classmethod - def from_base(cls, base: str) -> 'TelegramAPIServer': - base = base.rstrip("/") - return cls( - base=f"{base}/bot{{token}}/{{method}}", - file=f"{base}/file/bot{{token}}/{{path}}", - ) - - -TELEGRAM_PRODUCTION = TelegramAPIServer.from_base("https://api.telegram.org") - - -def check_token(token: str) -> bool: - """ - Validate BOT token - - :param token: - :return: - """ - if not isinstance(token, str): - message = (f"Token is invalid! " - f"It must be 'str' type instead of {type(token)} type.") - raise exceptions.ValidationError(message) - - if any(x.isspace() for x in token): - message = "Token is invalid! It can't contains spaces." - raise exceptions.ValidationError(message) - - left, sep, right = token.partition(':') - if (not sep) or (not left.isdigit()) or (not right): - raise exceptions.ValidationError('Token is invalid!') - - return True - - -def check_result(method_name: str, content_type: str, status_code: int, body: str): - """ - Checks whether `result` is a valid API response. - A result is considered invalid if: - - The server returned an HTTP response code other than 200 - - The content of the result is invalid JSON. - - The method call was unsuccessful (The JSON 'ok' field equals False) - - :param method_name: The name of the method called - :param status_code: status code - :param content_type: content type of result - :param body: result body - :return: The result parsed to a JSON dictionary - :raises ApiException: if one of the above listed cases is applicable - """ - log.debug('Response for %s: [%d] "%r"', method_name, status_code, body) - - if content_type != 'application/json': - raise exceptions.NetworkError(f"Invalid response with content type {content_type}: \"{body}\"") - - try: - result_json = json.loads(body) - except ValueError: - result_json = {} - - description = result_json.get('description') or body - parameters = types.ResponseParameters(**result_json.get('parameters', {}) or {}) - - if HTTPStatus.OK <= status_code <= HTTPStatus.IM_USED: - return result_json.get('result') - elif parameters.retry_after: - raise exceptions.RetryAfter(parameters.retry_after) - elif parameters.migrate_to_chat_id: - raise exceptions.MigrateToChat(parameters.migrate_to_chat_id) - elif status_code == HTTPStatus.BAD_REQUEST: - exceptions.BadRequest.detect(description) - elif status_code == HTTPStatus.NOT_FOUND: - exceptions.NotFound.detect(description) - elif status_code == HTTPStatus.CONFLICT: - exceptions.ConflictError.detect(description) - elif status_code in (HTTPStatus.UNAUTHORIZED, HTTPStatus.FORBIDDEN): - exceptions.Unauthorized.detect(description) - elif status_code == HTTPStatus.REQUEST_ENTITY_TOO_LARGE: - raise exceptions.NetworkError('File too large for uploading. ' - 'Check telegram api limits https://core.telegram.org/bots/api#senddocument') - elif status_code >= HTTPStatus.INTERNAL_SERVER_ERROR: - if 'restart' in description: - raise exceptions.RestartingTelegram() - raise exceptions.TelegramAPIError(description) - raise exceptions.TelegramAPIError(f"{description} [{status_code}]") - - -async def make_request(session, server, token, method, data=None, files=None, **kwargs): - log.debug('Make request: "%s" with data: "%r" and files "%r"', method, data, files) - - url = server.api_url(token=token, method=method) - - req = compose_data(data, files) - try: - async with session.post(url, data=req, **kwargs) as response: - return check_result(method, response.content_type, response.status, await response.text()) - except aiohttp.ClientError as e: - raise exceptions.NetworkError(f"aiohttp client throws an error: {e.__class__.__name__}: {e}") - - -def guess_filename(obj): - """ - Get file name from object - - :param obj: - :return: - """ - name = getattr(obj, 'name', None) - if name and isinstance(name, str) and name[0] != '<' and name[-1] != '>': - return os.path.basename(name) - - -def compose_data(params=None, files=None): - """ - Prepare request data - - :param params: - :param files: - :return: - """ - data = aiohttp.formdata.FormData(quote_fields=False) - - if params: - for key, value in params.items(): - data.add_field(key, str(value)) - - if files: - for key, f in files.items(): - if isinstance(f, tuple): - if len(f) == 2: - filename, fileobj = f - else: - raise ValueError('Tuple must have exactly 2 elements: filename, fileobj') - elif isinstance(f, types.InputFile): - filename, fileobj = f.filename, f.file - else: - filename, fileobj = guess_filename(f) or key, f - - data.add_field(key, fileobj, filename=filename) - - return data - - -class Methods(Helper): - """ - Helper for Telegram API Methods listed on https://core.telegram.org/bots/api - - List is updated to Bot API 5.3 - """ - mode = HelperMode.lowerCamelCase - - # Getting Updates - GET_UPDATES = Item() # getUpdates - SET_WEBHOOK = Item() # setWebhook - DELETE_WEBHOOK = Item() # deleteWebhook - GET_WEBHOOK_INFO = Item() # getWebhookInfo - - # Available methods - GET_ME = Item() # getMe - LOG_OUT = Item() # logOut - CLOSE = Item() # close - SEND_MESSAGE = Item() # sendMessage - FORWARD_MESSAGE = Item() # forwardMessage - COPY_MESSAGE = Item() # copyMessage - SEND_PHOTO = Item() # sendPhoto - SEND_AUDIO = Item() # sendAudio - SEND_DOCUMENT = Item() # sendDocument - SEND_VIDEO = Item() # sendVideo - SEND_ANIMATION = Item() # sendAnimation - SEND_VOICE = Item() # sendVoice - SEND_VIDEO_NOTE = Item() # sendVideoNote - SEND_MEDIA_GROUP = Item() # sendMediaGroup - SEND_LOCATION = Item() # sendLocation - EDIT_MESSAGE_LIVE_LOCATION = Item() # editMessageLiveLocation - STOP_MESSAGE_LIVE_LOCATION = Item() # stopMessageLiveLocation - SEND_VENUE = Item() # sendVenue - SEND_CONTACT = Item() # sendContact - SEND_POLL = Item() # sendPoll - SEND_DICE = Item() # sendDice - SEND_CHAT_ACTION = Item() # sendChatAction - GET_USER_PROFILE_PHOTOS = Item() # getUserProfilePhotos - GET_FILE = Item() # getFile - KICK_CHAT_MEMBER = Item() # kickChatMember - BAN_CHAT_MEMBER = Item() # banChatMember - UNBAN_CHAT_MEMBER = Item() # unbanChatMember - RESTRICT_CHAT_MEMBER = Item() # restrictChatMember - PROMOTE_CHAT_MEMBER = Item() # promoteChatMember - SET_CHAT_ADMINISTRATOR_CUSTOM_TITLE = Item() # setChatAdministratorCustomTitle - SET_CHAT_PERMISSIONS = Item() # setChatPermissions - EXPORT_CHAT_INVITE_LINK = Item() # exportChatInviteLink - CREATE_CHAT_INVITE_LINK = Item() # createChatInviteLink - EDIT_CHAT_INVITE_LINK = Item() # editChatInviteLink - REVOKE_CHAT_INVITE_LINK = Item() # revokeChatInviteLink - SET_CHAT_PHOTO = Item() # setChatPhoto - DELETE_CHAT_PHOTO = Item() # deleteChatPhoto - SET_CHAT_TITLE = Item() # setChatTitle - SET_CHAT_DESCRIPTION = Item() # setChatDescription - PIN_CHAT_MESSAGE = Item() # pinChatMessage - UNPIN_CHAT_MESSAGE = Item() # unpinChatMessage - UNPIN_ALL_CHAT_MESSAGES = Item() # unpinAllChatMessages - LEAVE_CHAT = Item() # leaveChat - GET_CHAT = Item() # getChat - GET_CHAT_ADMINISTRATORS = Item() # getChatAdministrators - GET_CHAT_MEMBER_COUNT = Item() # getChatMemberCount - GET_CHAT_MEMBERS_COUNT = Item() # getChatMembersCount (renamed to getChatMemberCount) - GET_CHAT_MEMBER = Item() # getChatMember - SET_CHAT_STICKER_SET = Item() # setChatStickerSet - DELETE_CHAT_STICKER_SET = Item() # deleteChatStickerSet - ANSWER_CALLBACK_QUERY = Item() # answerCallbackQuery - SET_MY_COMMANDS = Item() # setMyCommands - DELETE_MY_COMMANDS = Item() # deleteMyCommands - GET_MY_COMMANDS = Item() # getMyCommands - - # Updating messages - EDIT_MESSAGE_TEXT = Item() # editMessageText - EDIT_MESSAGE_CAPTION = Item() # editMessageCaption - EDIT_MESSAGE_MEDIA = Item() # editMessageMedia - EDIT_MESSAGE_REPLY_MARKUP = Item() # editMessageReplyMarkup - STOP_POLL = Item() # stopPoll - DELETE_MESSAGE = Item() # deleteMessage - - # Stickers - SEND_STICKER = Item() # sendSticker - GET_STICKER_SET = Item() # getStickerSet - UPLOAD_STICKER_FILE = Item() # uploadStickerFile - CREATE_NEW_STICKER_SET = Item() # createNewStickerSet - ADD_STICKER_TO_SET = Item() # addStickerToSet - SET_STICKER_POSITION_IN_SET = Item() # setStickerPositionInSet - DELETE_STICKER_FROM_SET = Item() # deleteStickerFromSet - SET_STICKER_SET_THUMB = Item() # setStickerSetThumb - - # Inline mode - ANSWER_INLINE_QUERY = Item() # answerInlineQuery - - # Payments - SEND_INVOICE = Item() # sendInvoice - ANSWER_SHIPPING_QUERY = Item() # answerShippingQuery - ANSWER_PRE_CHECKOUT_QUERY = Item() # answerPreCheckoutQuery - - # Telegram Passport - SET_PASSPORT_DATA_ERRORS = Item() # setPassportDataErrors - - # Games - SEND_GAME = Item() # sendGame - SET_GAME_SCORE = Item() # setGameScore - GET_GAME_HIGH_SCORES = Item() # getGameHighScores diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/bot/base.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/bot/base.py deleted file mode 100644 index 07e44c1c..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/bot/base.py +++ /dev/null @@ -1,298 +0,0 @@ -import asyncio -import contextlib -import io -import ssl -import typing -import warnings -from contextvars import ContextVar -from typing import Dict, List, Optional, Union, Type - -import aiohttp -import certifi -from aiohttp.helpers import sentinel - -from . import api -from .api import TelegramAPIServer, TELEGRAM_PRODUCTION -from ..types import ParseMode, base -from ..utils import json -from ..utils.auth_widget import check_integrity -from ..utils.deprecated import deprecated - - -class BaseBot: - """ - Base class for bot. It's raw bot. - """ - _ctx_timeout = ContextVar('TelegramRequestTimeout') - _ctx_token = ContextVar('BotDifferentToken') - - def __init__( - self, - token: base.String, - loop: Optional[Union[asyncio.BaseEventLoop, asyncio.AbstractEventLoop]] = None, - connections_limit: Optional[base.Integer] = None, - proxy: Optional[base.String] = None, - proxy_auth: Optional[aiohttp.BasicAuth] = None, - validate_token: Optional[base.Boolean] = True, - parse_mode: typing.Optional[base.String] = None, - timeout: typing.Optional[typing.Union[base.Integer, base.Float, aiohttp.ClientTimeout]] = None, - server: TelegramAPIServer = TELEGRAM_PRODUCTION - ): - """ - Instructions how to get Bot token is found here: https://core.telegram.org/bots#3-how-do-i-create-a-bot - - :param token: token from @BotFather - :type token: :obj:`str` - :param loop: event loop - :type loop: Optional Union :obj:`asyncio.BaseEventLoop`, :obj:`asyncio.AbstractEventLoop` - :param connections_limit: connections limit for aiohttp.ClientSession - :type connections_limit: :obj:`int` - :param proxy: HTTP proxy URL - :type proxy: :obj:`str` - :param proxy_auth: Authentication information - :type proxy_auth: Optional :obj:`aiohttp.BasicAuth` - :param validate_token: Validate token. - :type validate_token: :obj:`bool` - :param parse_mode: You can set default parse mode - :type parse_mode: :obj:`str` - :param timeout: Request timeout - :type timeout: :obj:`typing.Optional[typing.Union[base.Integer, base.Float, aiohttp.ClientTimeout]]` - :param server: Telegram Bot API Server endpoint. - :type server: :obj:`TelegramAPIServer` - :raise: when token is invalid throw an :obj:`aiogram.utils.exceptions.ValidationError` - """ - self._main_loop = loop - - # Authentication - if validate_token: - api.check_token(token) - self._token = None - self.__token = token - self.id = int(token.split(sep=':')[0]) - self.server = server - - self.proxy = proxy - self.proxy_auth = proxy_auth - - # aiohttp main session - ssl_context = ssl.create_default_context(cafile=certifi.where()) - - self._session: Optional[aiohttp.ClientSession] = None - self._connector_class: Type[aiohttp.TCPConnector] = aiohttp.TCPConnector - self._connector_init = dict(limit=connections_limit, ssl=ssl_context) - - if isinstance(proxy, str) and (proxy.startswith('socks5://') or proxy.startswith('socks4://')): - from aiohttp_socks import SocksConnector - from aiohttp_socks.utils import parse_proxy_url - - socks_ver, host, port, username, password = parse_proxy_url(proxy) - if proxy_auth: - if not username: - username = proxy_auth.login - if not password: - password = proxy_auth.password - - self._connector_class = SocksConnector - self._connector_init.update( - socks_ver=socks_ver, host=host, port=port, - username=username, password=password, rdns=True, - ) - self.proxy = None - self.proxy_auth = None - - self._timeout = None - self.timeout = timeout - - self.parse_mode = parse_mode - - def get_new_session(self) -> aiohttp.ClientSession: - return aiohttp.ClientSession( - connector=self._connector_class(**self._connector_init, loop=self._main_loop), - loop=self._main_loop, - json_serialize=json.dumps - ) - - @property - def loop(self) -> Optional[asyncio.AbstractEventLoop]: - return self._main_loop - - @property - def session(self) -> Optional[aiohttp.ClientSession]: - if self._session is None or self._session.closed: - self._session = self.get_new_session() - return self._session - - @staticmethod - def _prepare_timeout( - value: typing.Optional[typing.Union[base.Integer, base.Float, aiohttp.ClientTimeout]] - ) -> typing.Optional[aiohttp.ClientTimeout]: - if value is None or isinstance(value, aiohttp.ClientTimeout): - return value - return aiohttp.ClientTimeout(total=value) - - @property - def timeout(self): - timeout = self._ctx_timeout.get(self._timeout) - if timeout is None: - return sentinel - return timeout - - @timeout.setter - def timeout(self, value): - self._timeout = self._prepare_timeout(value) - - @timeout.deleter - def timeout(self): - self.timeout = None - - @contextlib.contextmanager - def request_timeout(self, timeout: typing.Union[base.Integer, base.Float, aiohttp.ClientTimeout]): - """ - Context manager implements opportunity to change request timeout in current context - - :param timeout: Request timeout - :type timeout: :obj:`typing.Optional[typing.Union[base.Integer, base.Float, aiohttp.ClientTimeout]]` - :return: - """ - timeout = self._prepare_timeout(timeout) - token = self._ctx_timeout.set(timeout) - try: - yield - finally: - self._ctx_timeout.reset(token) - - @property - def __token(self): - return self._ctx_token.get(self._token) - - @__token.setter - def __token(self, value): - self._token = value - - @contextlib.contextmanager - def with_token(self, bot_token: base.String, validate_token: Optional[base.Boolean] = True): - if validate_token: - api.check_token(bot_token) - token = self._ctx_token.set(bot_token) - try: - yield - finally: - self._ctx_token.reset(token) - - @deprecated("This method's behavior will be changed in aiogram v3.0. " - "More info: https://core.telegram.org/bots/api#close", stacklevel=3) - async def close(self): - """ - Close all client sessions - """ - await self.session.close() - - async def request(self, method: base.String, - data: Optional[Dict] = None, - files: Optional[Dict] = None, **kwargs) -> Union[List, Dict, base.Boolean]: - """ - Make an request to Telegram Bot API - - https://core.telegram.org/bots/api#making-requests - - :param method: API method - :type method: :obj:`str` - :param data: request parameters - :type data: :obj:`dict` - :param files: files - :type files: :obj:`dict` - :return: result - :rtype: Union[List, Dict] - :raise: :obj:`aiogram.exceptions.TelegramApiError` - """ - return await api.make_request(self.session, self.server, self.__token, method, data, files, - proxy=self.proxy, proxy_auth=self.proxy_auth, timeout=self.timeout, **kwargs) - - async def download_file(self, file_path: base.String, - destination: Optional[base.InputFile] = None, - timeout: Optional[base.Integer] = sentinel, - chunk_size: Optional[base.Integer] = 65536, - seek: Optional[base.Boolean] = True) -> Union[io.BytesIO, io.FileIO]: - """ - Download file by file_path to destination - - if You want to automatically create destination (:class:`io.BytesIO`) use default - value of destination and handle result of this method. - - :param file_path: file path on telegram server (You can get it from :obj:`aiogram.types.File`) - :type file_path: :obj:`str` - :param destination: filename or instance of :class:`io.IOBase`. For e. g. :class:`io.BytesIO` - :param timeout: Integer - :param chunk_size: Integer - :param seek: Boolean - go to start of file when downloading is finished. - :return: destination - """ - if destination is None: - destination = io.BytesIO() - - url = self.get_file_url(file_path) - - dest = destination if isinstance(destination, io.IOBase) else open(destination, 'wb') - async with self.session.get(url, timeout=timeout, proxy=self.proxy, proxy_auth=self.proxy_auth) as response: - while True: - chunk = await response.content.read(chunk_size) - if not chunk: - break - dest.write(chunk) - dest.flush() - if seek: - dest.seek(0) - return dest - - def get_file_url(self, file_path): - return self.server.file_url(token=self.__token, path=file_path) - - async def send_file(self, file_type, method, file, payload) -> Union[Dict, base.Boolean]: - """ - Send file - - https://core.telegram.org/bots/api#inputfile - - :param file_type: field name - :param method: API method - :param file: String or io.IOBase - :param payload: request payload - :return: response - """ - if file is None: - files = {} - elif isinstance(file, str): - # You can use file ID or URL in the most of requests - payload[file_type] = file - files = None - else: - files = {file_type: file} - - return await self.request(method, payload, files) - - @property - def parse_mode(self): - return getattr(self, '_parse_mode', None) - - @parse_mode.setter - def parse_mode(self, value): - if value is None: - setattr(self, '_parse_mode', None) - else: - if not isinstance(value, str): - raise TypeError(f"Parse mode must be str, not {type(value)}") - value = value.lower() - if value not in ParseMode.all(): - raise ValueError(f"Parse mode must be one of {ParseMode.all()}") - setattr(self, '_parse_mode', value) - if value == 'markdown': - warnings.warn("Parse mode `Markdown` is legacy since Telegram Bot API 4.5, " - "retained for backward compatibility. Use `MarkdownV2` instead.\n" - "https://core.telegram.org/bots/api#markdown-style", stacklevel=3) - - @parse_mode.deleter - def parse_mode(self): - self.parse_mode = None - - def check_auth_widget(self, data): - return check_integrity(self.__token, data) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/bot/bot.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/bot/bot.py deleted file mode 100644 index 435def3e..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/bot/bot.py +++ /dev/null @@ -1,3243 +0,0 @@ -from __future__ import annotations - -import datetime -import typing -import warnings - -from .base import BaseBot, api -from .. import types -from ..types import base -from ..utils.deprecated import deprecated -from ..utils.exceptions import ValidationError -from ..utils.mixins import DataMixin, ContextInstanceMixin -from ..utils.payload import generate_payload, prepare_arg, prepare_attachment, prepare_file - - -class Bot(BaseBot, DataMixin, ContextInstanceMixin): - """ - Base bot class - """ - - @property - async def me(self) -> types.User: - """ - Alias for self.get_me() but lazy and with caching. - - :return: :class:`aiogram.types.User` - """ - if not hasattr(self, '_me'): - setattr(self, '_me', await self.get_me()) - return getattr(self, '_me') - - @me.deleter - def me(self): - """ - Reset `me` - - .. code-block:: python3 - - await bot.me - - :return: :obj:`aiogram.types.User` - """ - if hasattr(self, '_me'): - delattr(self, '_me') - - async def download_file_by_id(self, file_id: base.String, destination=None, - timeout: base.Integer = 30, chunk_size: base.Integer = 65536, - seek: base.Boolean = True): - """ - Download file by file_id to destination - - if You want to automatically create destination (:class:`io.BytesIO`) use default - value of destination and handle result of this method. - - :param file_id: str - :param destination: filename or instance of :class:`io.IOBase`. For e. g. :class:`io.BytesIO` - :param timeout: int - :param chunk_size: int - :param seek: bool - go to start of file when downloading is finished - :return: destination - """ - file = await self.get_file(file_id) - return await self.download_file(file_path=file.file_path, destination=destination, - timeout=timeout, chunk_size=chunk_size, seek=seek) - - # === Getting updates === - # https://core.telegram.org/bots/api#getting-updates - - async def get_updates(self, offset: typing.Optional[base.Integer] = None, - limit: typing.Optional[base.Integer] = None, - timeout: typing.Optional[base.Integer] = None, - allowed_updates: - typing.Union[typing.List[base.String], None] = None) -> typing.List[types.Update]: - """ - Use this method to receive incoming updates using long polling (wiki). - - Notes - 1. This method will not work if an outgoing webhook is set up. - 2. In order to avoid getting duplicate updates, recalculate offset after each server response. - - Source: https://core.telegram.org/bots/api#getupdates - - :param offset: Identifier of the first update to be returned - :type offset: :obj:`typing.Optional[base.Integer]` - :param limit: Limits the number of updates to be retrieved - :type limit: :obj:`typing.Optional[base.Integer]` - :param timeout: Timeout in seconds for long polling - :type timeout: :obj:`typing.Optional[base.Integer]` - :param allowed_updates: List the types of updates you want your bot to receive - :type allowed_updates: :obj:`typing.Union[typing.List[base.String], None]` - :return: An Array of Update objects is returned - :rtype: :obj:`typing.List[types.Update]` - """ - allowed_updates = prepare_arg(allowed_updates) - payload = generate_payload(**locals()) - - result = await self.request(api.Methods.GET_UPDATES, payload) - return [types.Update(**update) for update in result] - - async def set_webhook(self, - url: base.String, - certificate: typing.Optional[base.InputFile] = None, - ip_address: typing.Optional[base.String] = None, - max_connections: typing.Optional[base.Integer] = None, - allowed_updates: typing.Optional[typing.List[base.String]] = None, - drop_pending_updates: typing.Optional[base.Boolean] = None, - ) -> base.Boolean: - """ - Use this method to specify a url and receive incoming updates via an outgoing - webhook. Whenever there is an update for the bot, we will send an HTTPS POST - request to the specified url, containing a JSON-serialized Update. In case - of an unsuccessful request, we will give up after a reasonable amount of - attempts. Returns True on success. - - If you'd like to make sure that the Webhook request comes from Telegram, - we recommend using a secret path in the URL, e.g. - `https://www.example.com/`. - Since nobody else knows your bot's token, you can be pretty sure it's us. - - Source: https://core.telegram.org/bots/api#setwebhook - - :param url: HTTPS url to send updates to. Use an empty string to remove - webhook integration - :type url: :obj:`base.String` - - :param certificate: Upload your public key certificate so that the root - certificate in use can be checked. See our self-signed guide for details: - https://core.telegram.org/bots/self-signed - :type certificate: :obj:`typing.Optional[base.InputFile]` - - :param ip_address: The fixed IP address which will be used to send webhook - requests instead of the IP address resolved through DNS - :type ip_address: :obj:`typing.Optional[base.String]` - - :param max_connections: Maximum allowed number of simultaneous HTTPS - connections to the webhook for update delivery, 1-100. Defaults to 40. - Use lower values to limit the load on your bot's server, and higher - values to increase your bot's throughput. - :type max_connections: :obj:`typing.Optional[base.Integer]` - - :param allowed_updates: A list of the update types you want your bot to - receive. For example, specify [“message”, “edited_channel_post”, - “callback_query”] to only receive updates of these types. See Update for - a complete list of available update types. Specify an empty list to - receive all updates regardless of type (default). If not specified, the - previous setting will be used. - Please note that this parameter doesn't affect updates created before the - call to the setWebhook, so unwanted updates may be received for a short - period of time. - :type allowed_updates: :obj:`typing.Optional[typing.List[base.String]]` - - :param drop_pending_updates: Pass True to drop all pending updates - :type drop_pending_updates: :obj:`typing.Optional[base.Boolean]` - - :return: Returns true - :rtype: :obj:`base.Boolean` - """ - allowed_updates = prepare_arg(allowed_updates) - payload = generate_payload(**locals(), exclude=['certificate']) - - files = {} - prepare_file(payload, files, 'certificate', certificate) - - return await self.request(api.Methods.SET_WEBHOOK, payload, files) - - async def delete_webhook(self, - drop_pending_updates: typing.Optional[base.Boolean] = None, - ) -> base.Boolean: - """ - Use this method to remove webhook integration if you decide to switch back - to getUpdates. Returns True on success. - - Source: https://core.telegram.org/bots/api#deletewebhook - - :param drop_pending_updates: Pass True to drop all pending updates - :type drop_pending_updates: :obj:`typing.Optional[base.Boolean]` - - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - payload = generate_payload(**locals()) - - return await self.request(api.Methods.DELETE_WEBHOOK, payload) - - async def get_webhook_info(self) -> types.WebhookInfo: - """ - Use this method to get current webhook status. Requires no parameters. - - If the bot is using getUpdates, will return an object with the url field empty. - - Source: https://core.telegram.org/bots/api#getwebhookinfo - - :return: On success, returns a WebhookInfo object - :rtype: :obj:`types.WebhookInfo` - """ - payload = generate_payload(**locals()) - - result = await self.request(api.Methods.GET_WEBHOOK_INFO, payload) - return types.WebhookInfo(**result) - - # === Base methods === - # https://core.telegram.org/bots/api#available-methods - - async def get_me(self) -> types.User: - """ - A simple method for testing your bot's auth token. Requires no parameters. - - Source: https://core.telegram.org/bots/api#getme - - :return: Returns basic information about the bot in form of a User object - :rtype: :obj:`types.User` - """ - payload = generate_payload(**locals()) - - result = await self.request(api.Methods.GET_ME, payload) - return types.User(**result) - - async def log_out(self) -> base.Boolean: - """ - Use this method to log out from the cloud Bot API server before launching - the bot locally. You **must** log out the bot before running it locally, - otherwise there is no guarantee that the bot will receive updates. - After a successful call, you will not be able to log in again using the - same token for 10 minutes. Returns True on success. Requires no parameters. - - Source: https://core.telegram.org/bots/api#logout - - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - payload = generate_payload(**locals()) - - return await self.request(api.Methods.LOG_OUT, payload) - - @deprecated("This method will be renamed to `close` in aiogram v3.0") - async def close_bot(self) -> base.Boolean: - """ - Use this method to close the bot instance before moving it from one local - server to another. You need to delete the webhook before calling this method - to ensure that the bot isn't launched again after server restart. The method - will return error 429 in the first 10 minutes after the bot is launched. - Returns True on success. Requires no parameters. - - Source: https://core.telegram.org/bots/api#close - - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - payload = generate_payload(**locals()) - - return await self.request(api.Methods.CLOSE, payload) - - async def send_message(self, - chat_id: typing.Union[base.Integer, base.String], - text: base.String, - parse_mode: typing.Optional[base.String] = None, - entities: typing.Optional[typing.List[types.MessageEntity]] = None, - disable_web_page_preview: typing.Optional[base.Boolean] = None, - disable_notification: typing.Optional[base.Boolean] = None, - reply_to_message_id: typing.Optional[base.Integer] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, - types.ReplyKeyboardRemove, - types.ForceReply, None] = None, - ) -> types.Message: - """ - Use this method to send text messages. - - Source: https://core.telegram.org/bots/api#sendmessage - - :param chat_id: Unique identifier for the target chat or username of the target channel - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - - :param text: Text of the message to be sent - :type text: :obj:`base.String` - - :param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic, - fixed-width text or inline URLs in your bot's message. - :type parse_mode: :obj:`typing.Optional[base.String]` - - :param entities: List of special entities that appear in message text, - which can be specified instead of parse_mode - :type entities: :obj:`typing.Optional[typing.List[types.MessageEntity]]` - - :param disable_web_page_preview: Disables link previews for links in this message - :type disable_web_page_preview: :obj:`typing.Optional[base.Boolean]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param reply_to_message_id: If the message is a reply, ID of the original message - :type reply_to_message_id: :obj:`typing.Optional[base.Integer]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]` - - :return: On success, the sent Message is returned - :rtype: :obj:`types.Message` - """ - - reply_markup = prepare_arg(reply_markup) - entities = prepare_arg(entities) - payload = generate_payload(**locals()) - if self.parse_mode and entities is None: - payload.setdefault('parse_mode', self.parse_mode) - - result = await self.request(api.Methods.SEND_MESSAGE, payload) - return types.Message(**result) - - async def forward_message(self, chat_id: typing.Union[base.Integer, base.String], - from_chat_id: typing.Union[base.Integer, base.String], message_id: base.Integer, - disable_notification: typing.Optional[base.Boolean] = None) -> types.Message: - """ - Use this method to forward messages of any kind. - - Source: https://core.telegram.org/bots/api#forwardmessage - - :param chat_id: Unique identifier for the target chat or username of the target channel - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - :param from_chat_id: Unique identifier for the chat where the original message was sent - :type from_chat_id: :obj:`typing.Union[base.Integer, base.String]` - :param disable_notification: Sends the message silently. Users will receive a notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - :param message_id: Message identifier in the chat specified in from_chat_id - :type message_id: :obj:`base.Integer` - :return: On success, the sent Message is returned - :rtype: :obj:`types.Message` - """ - payload = generate_payload(**locals()) - - result = await self.request(api.Methods.FORWARD_MESSAGE, payload) - return types.Message(**result) - - async def copy_message(self, - chat_id: typing.Union[base.Integer, base.String], - from_chat_id: typing.Union[base.Integer, base.String], - message_id: base.Integer, - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[types.MessageEntity]] = None, - disable_notification: typing.Optional[base.Boolean] = None, - reply_to_message_id: typing.Optional[base.Integer] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, - types.ReplyKeyboardRemove, - types.ForceReply, None] = None, - ) -> types.MessageId: - """ - Use this method to copy messages of any kind. The method is analogous to the - method forwardMessages, but the copied message doesn't have a link to the - original message. Returns the MessageId of the sent message on success. - - Source: https://core.telegram.org/bots/api#copymessage - - :param chat_id: Unique identifier for the target chat or username of the - target channel (in the format @channelusername) - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - - :param from_chat_id: Unique identifier for the chat where the original - message was sent (or channel username in the format @channelusername) - :type from_chat_id: :obj:`typing.Union[base.Integer, base.String]` - - :param message_id: Message identifier in the chat specified in from_chat_id - :type message_id: :obj:`base.Integer` - - :param caption: New caption for media, 0-1024 characters after entities - parsing. If not specified, the original caption is kept - :type caption: :obj:`typing.Optional[base.String]` - - :param parse_mode: Mode for parsing entities in the new caption. See - formatting options for more details: - https://core.telegram.org/bots/api#formatting-options - :type parse_mode: :obj:`typing.Optional[base.String]` - - :param caption_entities: List of special entities that appear in the new - caption, which can be specified instead of parse_mode - :type caption_entities: :obj:`typing.Optional[typing.List[types.MessageEntity]]` - - :param disable_notification: Sends the message silently. Users will receive - a notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param reply_to_message_id: If the message is a reply, ID of the original - message - :type reply_to_message_id: :obj:`typing.Optional[base.Integer]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object - for an inline keyboard, custom reply keyboard, instructions to remove - reply keyboard or to force a reply from the user. - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, - None]` - - :return: On success, the sent Message is returned - :rtype: :obj:`types.Message` - """ - reply_markup = prepare_arg(reply_markup) - caption_entities = prepare_arg(caption_entities) - payload = generate_payload(**locals()) - - if self.parse_mode and caption_entities is None: - payload.setdefault('parse_mode', self.parse_mode) - - result = await self.request(api.Methods.COPY_MESSAGE, payload) - return types.MessageId(**result) - - async def send_photo(self, - chat_id: typing.Union[base.Integer, base.String], - photo: typing.Union[base.InputFile, base.String], - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[types.MessageEntity]] = None, - disable_notification: typing.Optional[base.Boolean] = None, - reply_to_message_id: typing.Optional[base.Integer] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, - types.ReplyKeyboardRemove, - types.ForceReply, None] = None, - ) -> types.Message: - """ - Use this method to send photos. - - Source: https://core.telegram.org/bots/api#sendphoto - - :param chat_id: Unique identifier for the target chat or username of the target channel - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - - :param photo: Photo to send - :type photo: :obj:`typing.Union[base.InputFile, base.String]` - - :param caption: Photo caption (may also be used when resending photos by file_id), 0-1024 characters - :type caption: :obj:`typing.Optional[base.String]` - - :param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic, - fixed-width text or inline URLs in your bot's message. - :type parse_mode: :obj:`typing.Optional[base.String]` - - :param caption_entities: List of special entities that appear in message text, - which can be specified instead of parse_mode - :type caption_entities: :obj:`typing.Optional[typing.List[types.MessageEntity]]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param reply_to_message_id: If the message is a reply, ID of the original message - :type reply_to_message_id: :obj:`typing.Optional[base.Integer]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]` - - :return: On success, the sent Message is returned - :rtype: :obj:`types.Message` - """ - reply_markup = prepare_arg(reply_markup) - caption_entities = prepare_arg(caption_entities) - payload = generate_payload(**locals(), exclude=['photo']) - if self.parse_mode and caption_entities is None: - payload.setdefault('parse_mode', self.parse_mode) - - files = {} - prepare_file(payload, files, 'photo', photo) - - result = await self.request(api.Methods.SEND_PHOTO, payload, files) - return types.Message(**result) - - async def send_audio(self, - chat_id: typing.Union[base.Integer, base.String], - audio: typing.Union[base.InputFile, base.String], - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[types.MessageEntity]] = None, - duration: typing.Optional[base.Integer] = None, - performer: typing.Optional[base.String] = None, - title: typing.Optional[base.String] = None, - thumb: typing.Union[base.InputFile, base.String, None] = None, - disable_notification: typing.Optional[base.Boolean] = None, - reply_to_message_id: typing.Optional[base.Integer] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, - types.ReplyKeyboardRemove, - types.ForceReply, None] = None, - ) -> types.Message: - """ - Use this method to send audio files, if you want Telegram clients to display them in the music player. - Your audio must be in the .mp3 format. - - For sending voice messages, use the sendVoice method instead. - - Source: https://core.telegram.org/bots/api#sendaudio - - :param chat_id: Unique identifier for the target chat or username of the target channel - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - - :param audio: Audio file to send - :type audio: :obj:`typing.Union[base.InputFile, base.String]` - - :param caption: Audio caption, 0-1024 characters - :type caption: :obj:`typing.Optional[base.String]` - - :param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic, - fixed-width text or inline URLs in your bot's message. - :type parse_mode: :obj:`typing.Optional[base.String]` - - :param caption_entities: List of special entities that appear in message text, - which can be specified instead of parse_mode - :type caption_entities: :obj:`typing.Optional[typing.List[types.MessageEntity]]` - - :param duration: Duration of the audio in seconds - :type duration: :obj:`typing.Optional[base.Integer]` - - :param performer: Performer - :type performer: :obj:`typing.Optional[base.String]` - - :param title: Track name - :type title: :obj:`typing.Optional[base.String]` - - :param thumb: Thumbnail of the file sent - :type thumb: :obj:`typing.Union[base.InputFile, base.String, None]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param reply_to_message_id: If the message is a reply, ID of the original message - :type reply_to_message_id: :obj:`typing.Optional[base.Integer]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup, - types.ReplyKeyboardRemove, types.ForceReply, None]` - - :return: On success, the sent Message is returned - :rtype: :obj:`types.Message` - """ - reply_markup = prepare_arg(reply_markup) - caption_entities = prepare_arg(caption_entities) - payload = generate_payload(**locals(), exclude=['audio', 'thumb']) - if self.parse_mode and caption_entities is None: - payload.setdefault('parse_mode', self.parse_mode) - - files = {} - prepare_file(payload, files, 'audio', audio) - prepare_attachment(payload, files, 'thumb', thumb) - - result = await self.request(api.Methods.SEND_AUDIO, payload, files) - return types.Message(**result) - - async def send_document(self, - chat_id: typing.Union[base.Integer, base.String], - document: typing.Union[base.InputFile, base.String], - thumb: typing.Union[base.InputFile, base.String, None] = None, - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[types.MessageEntity]] = None, - disable_content_type_detection: typing.Optional[base.Boolean] = None, - disable_notification: typing.Optional[base.Boolean] = None, - reply_to_message_id: typing.Optional[base.Integer] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, - types.ReplyKeyboardRemove, - types.ForceReply, - None] = None, - ) -> types.Message: - """ - Use this method to send general files. On success, the sent Message is - returned. Bots can currently send files of any type of up to 50 MB in size, - this limit may be changed in the future. - - Source: https://core.telegram.org/bots/api#senddocument - - :param chat_id: Unique identifier for the target chat or username of the - target channel - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - - :param document: File to send - :type document: :obj:`typing.Union[base.InputFile, base.String]` - - :param thumb: Thumbnail of the file sent - :type thumb: :obj:`typing.Union[base.InputFile, base.String, None]` - - :param caption: Document caption (may also be used when resending documents - by file_id), 0-1024 characters - :type caption: :obj:`typing.Optional[base.String]` - - :param disable_content_type_detection: Disables automatic server-side content - type detection for files uploaded using multipart/form-data - :type disable_content_type_detection: :obj:`typing.Optional[base.Boolean]` - - :param parse_mode: Send Markdown or HTML, if you want Telegram apps to show - bold, italic, fixed-width text or inline URLs in your bot's message. - :type parse_mode: :obj:`typing.Optional[base.String]` - - :param caption_entities: List of special entities that appear in message text, - which can be specified instead of parse_mode - :type caption_entities: :obj:`typing.Optional[typing.List[types.MessageEntity]]` - - :param disable_notification: Sends the message silently. Users will receive a - notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param reply_to_message_id: If the message is a reply, ID of the original - message - :type reply_to_message_id: :obj:`typing.Optional[base.Integer]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object - for an inline keyboard, custom reply keyboard, instructions to remove - reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply], - None]` - - :return: On success, the sent Message is returned - :rtype: :obj:`types.Message` - """ - reply_markup = prepare_arg(reply_markup) - caption_entities = prepare_arg(caption_entities) - payload = generate_payload(**locals(), exclude=['document']) - if self.parse_mode and caption_entities is None: - payload.setdefault('parse_mode', self.parse_mode) - - files = {} - prepare_file(payload, files, 'document', document) - prepare_attachment(payload, files, 'thumb', thumb) - - result = await self.request(api.Methods.SEND_DOCUMENT, payload, files) - return types.Message(**result) - - async def send_video(self, chat_id: typing.Union[base.Integer, base.String], - video: typing.Union[base.InputFile, base.String], - duration: typing.Optional[base.Integer] = None, - width: typing.Optional[base.Integer] = None, - height: typing.Optional[base.Integer] = None, - thumb: typing.Union[base.InputFile, base.String, None] = None, - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[types.MessageEntity]] = None, - supports_streaming: typing.Optional[base.Boolean] = None, - disable_notification: typing.Optional[base.Boolean] = None, - reply_to_message_id: typing.Optional[base.Integer] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, - types.ReplyKeyboardRemove, - types.ForceReply, None] = None) -> types.Message: - """ - Use this method to send video files, Telegram clients support mp4 videos - (other formats may be sent as Document). - - Source: https://core.telegram.org/bots/api#sendvideo - - :param chat_id: Unique identifier for the target chat or username of the target channel - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - - :param video: Video to send - :type video: :obj:`typing.Union[base.InputFile, base.String]` - - :param duration: Duration of sent video in seconds - :type duration: :obj:`typing.Optional[base.Integer]` - - :param width: Video width - :type width: :obj:`typing.Optional[base.Integer]` - - :param height: Video height - :type height: :obj:`typing.Optional[base.Integer]` - - :param thumb: Thumbnail of the file sent - :type thumb: :obj:`typing.Union[base.InputFile, base.String, None]` - - :param caption: Video caption (may also be used when resending videos by file_id), 0-1024 characters - :type caption: :obj:`typing.Optional[base.String]` - - :param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic, - fixed-width text or inline URLs in your bot's message. - :type parse_mode: :obj:`typing.Optional[base.String]` - - :param caption_entities: List of special entities that appear in message text, - which can be specified instead of parse_mode - :type caption_entities: :obj:`typing.Optional[typing.List[types.MessageEntity]]` - - :param supports_streaming: Pass True, if the uploaded video is suitable for streaming - :type supports_streaming: :obj:`typing.Optional[base.Boolean]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param reply_to_message_id: If the message is a reply, ID of the original message - :type reply_to_message_id: :obj:`typing.Optional[base.Integer]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]` - - :return: On success, the sent Message is returned - :rtype: :obj:`types.Message` - """ - reply_markup = prepare_arg(reply_markup) - caption_entities = prepare_arg(caption_entities) - payload = generate_payload(**locals(), exclude=['video', 'thumb']) - if self.parse_mode and caption_entities is None: - payload.setdefault('parse_mode', self.parse_mode) - - files = {} - prepare_file(payload, files, 'video', video) - prepare_attachment(payload, files, 'thumb', thumb) - - result = await self.request(api.Methods.SEND_VIDEO, payload, files) - return types.Message(**result) - - async def send_animation(self, - chat_id: typing.Union[base.Integer, base.String], - animation: typing.Union[base.InputFile, base.String], - duration: typing.Optional[base.Integer] = None, - width: typing.Optional[base.Integer] = None, - height: typing.Optional[base.Integer] = None, - thumb: typing.Union[typing.Union[base.InputFile, base.String], None] = None, - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[types.MessageEntity]] = None, - disable_notification: typing.Optional[base.Boolean] = None, - reply_to_message_id: typing.Optional[base.Integer] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, - types.ReplyKeyboardRemove, - types.ForceReply], None] = None, - ) -> types.Message: - """ - Use this method to send animation files (GIF or H.264/MPEG-4 AVC video without sound). - - On success, the sent Message is returned. - Bots can currently send animation files of up to 50 MB in size, this limit may be changed in the future. - - Source https://core.telegram.org/bots/api#sendanimation - - :param chat_id: Unique identifier for the target chat or username of the target channel - (in the format @channelusername) - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - - :param animation: Animation to send. Pass a file_id as String to send an animation that exists - on the Telegram servers (recommended), pass an HTTP URL as a String for Telegram to get an animation - from the Internet, or upload a new animation using multipart/form-data - :type animation: :obj:`typing.Union[base.InputFile, base.String]` - - :param duration: Duration of sent animation in seconds - :type duration: :obj:`typing.Optional[base.Integer]` - - :param width: Animation width - :type width: :obj:`typing.Optional[base.Integer]` - - :param height: Animation height - :type height: :obj:`typing.Optional[base.Integer]` - - :param thumb: Thumbnail of the file sent. The thumbnail should be in JPEG format and less than 200 kB in size. - A thumbnail‘s width and height should not exceed 320. - :type thumb: :obj:`typing.Union[typing.Union[base.InputFile, base.String], None]` - - :param caption: Animation caption (may also be used when resending animation by file_id), 0-1024 characters - :type caption: :obj:`typing.Optional[base.String]` - - :param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic, - fixed-width text or inline URLs in the media caption - :type parse_mode: :obj:`typing.Optional[base.String]` - - :param caption_entities: List of special entities that appear in message text, - which can be specified instead of parse_mode - :type caption_entities: :obj:`typing.Optional[typing.List[types.MessageEntity]]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param reply_to_message_id: If the message is a reply, ID of the original message - :type reply_to_message_id: :obj:`typing.Optional[base.Integer]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[typing.Union[types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup, - types.ReplyKeyboardRemove, types.ForceReply], None]` - - :return: On success, the sent Message is returned - :rtype: :obj:`types.Message` - """ - reply_markup = prepare_arg(reply_markup) - caption_entities = prepare_arg(caption_entities) - payload = generate_payload(**locals(), exclude=["animation", "thumb"]) - if self.parse_mode and caption_entities is None: - payload.setdefault('parse_mode', self.parse_mode) - - files = {} - prepare_file(payload, files, 'animation', animation) - prepare_attachment(payload, files, 'thumb', thumb) - - result = await self.request(api.Methods.SEND_ANIMATION, payload, files) - return types.Message(**result) - - async def send_voice(self, - chat_id: typing.Union[base.Integer, base.String], - voice: typing.Union[base.InputFile, base.String], - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[types.MessageEntity]] = None, - duration: typing.Optional[base.Integer] = None, - disable_notification: typing.Optional[base.Boolean] = None, - reply_to_message_id: typing.Optional[base.Integer] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, - types.ReplyKeyboardRemove, - types.ForceReply, None] = None, - ) -> types.Message: - """ - Use this method to send audio files, if you want Telegram clients to display the file - as a playable voice message. - - For this to work, your audio must be in an .ogg file encoded with OPUS - (other formats may be sent as Audio or Document). - - Source: https://core.telegram.org/bots/api#sendvoice - - :param chat_id: Unique identifier for the target chat or username of the target channel - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - - :param voice: Audio file to send - :type voice: :obj:`typing.Union[base.InputFile, base.String]` - - :param caption: Voice message caption, 0-1024 characters - :type caption: :obj:`typing.Optional[base.String]` - - :param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic, - fixed-width text or inline URLs in your bot's message. - :type parse_mode: :obj:`typing.Optional[base.String]` - - :param caption_entities: List of special entities that appear in message text, - which can be specified instead of parse_mode - :type caption_entities: :obj:`typing.Optional[typing.List[types.MessageEntity]]` - - :param duration: Duration of the voice message in seconds - :type duration: :obj:`typing.Optional[base.Integer]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param reply_to_message_id: If the message is a reply, ID of the original message - :type reply_to_message_id: :obj:`typing.Optional[base.Integer]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]` - - :return: On success, the sent Message is returned - :rtype: :obj:`types.Message` - """ - reply_markup = prepare_arg(reply_markup) - caption_entities = prepare_arg(caption_entities) - payload = generate_payload(**locals(), exclude=['voice']) - if self.parse_mode and caption_entities is None: - payload.setdefault('parse_mode', self.parse_mode) - - files = {} - prepare_file(payload, files, 'voice', voice) - - result = await self.request(api.Methods.SEND_VOICE, payload, files) - return types.Message(**result) - - async def send_video_note(self, chat_id: typing.Union[base.Integer, base.String], - video_note: typing.Union[base.InputFile, base.String], - duration: typing.Optional[base.Integer] = None, - length: typing.Optional[base.Integer] = None, - thumb: typing.Union[base.InputFile, base.String, None] = None, - disable_notification: typing.Optional[base.Boolean] = None, - reply_to_message_id: typing.Optional[base.Integer] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, - types.ReplyKeyboardRemove, - types.ForceReply, None] = None) -> types.Message: - """ - As of v.4.0, Telegram clients support rounded square mp4 videos of up to 1 minute long. - Use this method to send video messages. - - Source: https://core.telegram.org/bots/api#sendvideonote - - :param chat_id: Unique identifier for the target chat or username of the target channel - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - - :param video_note: Video note to send - :type video_note: :obj:`typing.Union[base.InputFile, base.String]` - - :param duration: Duration of sent video in seconds - :type duration: :obj:`typing.Optional[base.Integer]` - - :param length: Video width and height - :type length: :obj:`typing.Optional[base.Integer]` - - :param thumb: Thumbnail of the file sent - :type thumb: :obj:`typing.Union[base.InputFile, base.String, None]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param reply_to_message_id: If the message is a reply, ID of the original message - :type reply_to_message_id: :obj:`typing.Optional[base.Integer]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup, - types.ReplyKeyboardRemove, types.ForceReply, None]` - - :return: On success, the sent Message is returned - :rtype: :obj:`types.Message` - """ - reply_markup = prepare_arg(reply_markup) - payload = generate_payload(**locals(), exclude=['video_note']) - - files = {} - prepare_file(payload, files, 'video_note', video_note) - - result = await self.request(api.Methods.SEND_VIDEO_NOTE, payload, files) - return types.Message(**result) - - async def send_media_group(self, - chat_id: typing.Union[base.Integer, base.String], - media: typing.Union[types.MediaGroup, typing.List], - disable_notification: typing.Optional[base.Boolean] = None, - reply_to_message_id: typing.Optional[base.Integer] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - ) -> typing.List[types.Message]: - """ - Use this method to send a group of photos, videos, documents or audios as - an album. Documents and audio files can be only group in an album with - messages of the same type. On success, an array of Messages that were sent - is returned. - - Source: https://core.telegram.org/bots/api#sendmediagroup - - :param chat_id: Unique identifier for the target chat or username of the - target channel (in the format @channelusername) - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - - :param media: A JSON-serialized array describing messages to be sent, must - include 2-10 items - :type media: :obj:`typing.Union[types.MediaGroup, typing.List]` - - :param disable_notification: Sends messages silently. Users will receive a - notification with no sound. - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param reply_to_message_id: If the messages are a reply, ID of the original - message - :type reply_to_message_id: :obj:`typing.Optional[base.Integer]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :return: On success, an array of the sent Messages is returned - :rtype: typing.List[types.Message] - """ - # Convert list to MediaGroup - if isinstance(media, list): - media = types.MediaGroup(media) - - # check MediaGroup quantity - if 2 > len(media.media) > 10: - raise ValidationError("Media group must include 2-10 items") - - files = dict(media.get_files()) - - media = prepare_arg(media) - payload = generate_payload(**locals(), exclude=['files']) - - result = await self.request(api.Methods.SEND_MEDIA_GROUP, payload, files) - return [types.Message(**message) for message in result] - - async def send_location(self, chat_id: typing.Union[base.Integer, base.String], - latitude: base.Float, longitude: base.Float, - horizontal_accuracy: typing.Optional[base.Float] = None, - live_period: typing.Optional[base.Integer] = None, - heading: typing.Optional[base.Integer] = None, - proximity_alert_radius: typing.Optional[base.Integer] = None, - disable_notification: typing.Optional[base.Boolean] = None, - reply_to_message_id: typing.Optional[base.Integer] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, - types.ReplyKeyboardRemove, - types.ForceReply, None] = None) -> types.Message: - """ - Use this method to send point on the map. - - Source: https://core.telegram.org/bots/api#sendlocation - - :param chat_id: Unique identifier for the target chat or username of the target channel - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - - :param latitude: Latitude of the location - :type latitude: :obj:`base.Float` - - :param longitude: Longitude of the location - :type longitude: :obj:`base.Float` - - :param horizontal_accuracy: The radius of uncertainty for the location, - measured in meters; 0-1500 - :type horizontal_accuracy: :obj:`typing.Optional[base.Float]` - - :param live_period: Period in seconds for which the location will be updated - :type live_period: :obj:`typing.Optional[base.Integer]` - - :param heading: For live locations, a direction in which the user is moving, - in degrees. Must be between 1 and 360 if specified. - :type heading: :obj:`typing.Optional[base.Integer]` - - :param proximity_alert_radius: For live locations, a maximum distance for - proximity alerts about approaching another chat member, in meters. Must - be between 1 and 100000 if specified. - :type proximity_alert_radius: :obj:`typing.Optional[base.Integer]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param reply_to_message_id: If the message is a reply, ID of the original message - :type reply_to_message_id: :obj:`typing.Optional[base.Integer]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]` - - :return: On success, the sent Message is returned - :rtype: :obj:`types.Message` - """ - reply_markup = prepare_arg(reply_markup) - payload = generate_payload(**locals()) - - result = await self.request(api.Methods.SEND_LOCATION, payload) - return types.Message(**result) - - async def edit_message_live_location(self, - latitude: base.Float, - longitude: base.Float, - chat_id: typing.Union[base.Integer, base.String, None] = None, - message_id: typing.Optional[base.Integer] = None, - inline_message_id: typing.Optional[base.String] = None, - horizontal_accuracy: typing.Optional[base.Float] = None, - heading: typing.Optional[base.Integer] = None, - proximity_alert_radius: typing.Optional[base.Integer] = None, - reply_markup: typing.Optional[types.InlineKeyboardMarkup] = None, - ) -> types.Message or base.Boolean: - """ - Use this method to edit live location messages sent by the bot or via the bot (for inline bots). - A location can be edited until its live_period expires or editing is explicitly disabled by a call - to stopMessageLiveLocation. - - Source: https://core.telegram.org/bots/api#editmessagelivelocation - - :param chat_id: Required if inline_message_id is not specified - :type chat_id: :obj:`typing.Union[base.Integer, base.String, None]` - - :param message_id: Required if inline_message_id is not specified. Identifier of the sent message - :type message_id: :obj:`typing.Optional[base.Integer]` - - :param inline_message_id: Required if chat_id and message_id are not specified. Identifier of the inline message - :type inline_message_id: :obj:`typing.Optional[base.String]` - - :param latitude: Latitude of new location - :type latitude: :obj:`base.Float` - - :param longitude: Longitude of new location - :type longitude: :obj:`base.Float` - - :param horizontal_accuracy: The radius of uncertainty for the location, - measured in meters; 0-1500 - :type horizontal_accuracy: :obj:`typing.Optional[base.Float]` - - :param heading: Direction in which the user is moving, in degrees. Must be - between 1 and 360 if specified. - :type heading: :obj:`typing.Optional[base.Integer]` - - :param proximity_alert_radius: For live locations, a maximum distance for - proximity alerts about approaching another chat member, in meters. Must - be between 1 and 100000 if specified. - :type proximity_alert_radius: :obj:`typing.Optional[base.Integer]` - - :param reply_markup: A JSON-serialized object for a new inline keyboard - :type reply_markup: :obj:`typing.Optional[types.InlineKeyboardMarkup]` - - :return: On success, if the edited message was sent by the bot, the edited Message is returned, - otherwise True is returned. - :rtype: :obj:`typing.Union[types.Message, base.Boolean]` - """ - reply_markup = prepare_arg(reply_markup) - payload = generate_payload(**locals()) - - result = await self.request(api.Methods.EDIT_MESSAGE_LIVE_LOCATION, payload) - if isinstance(result, bool): - return result - return types.Message(**result) - - async def stop_message_live_location(self, - chat_id: typing.Union[base.Integer, base.String, None] = None, - message_id: typing.Optional[base.Integer] = None, - inline_message_id: typing.Optional[base.String] = None, - reply_markup: typing.Union[types.InlineKeyboardMarkup, - None] = None) -> types.Message or base.Boolean: - """ - Use this method to stop updating a live location message sent by the bot or via the bot - (for inline bots) before live_period expires. - - Source: https://core.telegram.org/bots/api#stopmessagelivelocation - - :param chat_id: Required if inline_message_id is not specified - :type chat_id: :obj:`typing.Union[base.Integer, base.String, None]` - :param message_id: Required if inline_message_id is not specified. Identifier of the sent message - :type message_id: :obj:`typing.Optional[base.Integer]` - :param inline_message_id: Required if chat_id and message_id are not specified. Identifier of the inline message - :type inline_message_id: :obj:`typing.Optional[base.String]` - :param reply_markup: A JSON-serialized object for a new inline keyboard - :type reply_markup: :obj:`typing.Optional[types.InlineKeyboardMarkup]` - :return: On success, if the message was sent by the bot, the sent Message is returned, - otherwise True is returned. - :rtype: :obj:`typing.Union[types.Message, base.Boolean]` - """ - reply_markup = prepare_arg(reply_markup) - payload = generate_payload(**locals()) - - result = await self.request(api.Methods.STOP_MESSAGE_LIVE_LOCATION, payload) - if isinstance(result, bool): - return result - return types.Message(**result) - - async def send_venue(self, - chat_id: typing.Union[base.Integer, base.String], - latitude: base.Float, - longitude: base.Float, - title: base.String, - address: base.String, - foursquare_id: typing.Optional[base.String] = None, - foursquare_type: typing.Optional[base.String] = None, - google_place_id: typing.Optional[base.String] = None, - google_place_type: typing.Optional[base.String] = None, - disable_notification: typing.Optional[base.Boolean] = None, - reply_to_message_id: typing.Optional[base.Integer] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, - types.ReplyKeyboardRemove, - types.ForceReply, None] = None, - ) -> types.Message: - """ - Use this method to send information about a venue. - - Source: https://core.telegram.org/bots/api#sendvenue - - :param chat_id: Unique identifier for the target chat or username of the - target channel (in the format @channelusername) - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - - :param latitude: Latitude of the venue - :type latitude: :obj:`base.Float` - - :param longitude: Longitude of the venue - :type longitude: :obj:`base.Float` - - :param title: Name of the venue - :type title: :obj:`base.String` - - :param address: Address of the venue - :type address: :obj:`base.String` - - :param foursquare_id: Foursquare identifier of the venue - :type foursquare_id: :obj:`typing.Optional[base.String]` - - :param foursquare_type: Foursquare type of the venue, if known - :type foursquare_type: :obj:`typing.Optional[base.String]` - - :param google_place_id: Google Places identifier of the venue - :type google_place_id: :obj:`typing.Optional[base.String]` - - :param google_place_type: Google Places type of the venue. See supported - types: https://developers.google.com/places/web-service/supported_types - :type google_place_type: :obj:`typing.Optional[base.String]` - - :param disable_notification: Sends the message silently. Users will receive - a notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param reply_to_message_id: If the message is a reply, ID of the original - message - :type reply_to_message_id: :obj:`typing.Optional[base.Integer]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object - for an inline keyboard, custom reply keyboard, instructions to remove - reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, - None]` - - :return: On success, the sent Message is returned - :rtype: :obj:`types.Message` - """ - reply_markup = prepare_arg(reply_markup) - payload = generate_payload(**locals()) - - result = await self.request(api.Methods.SEND_VENUE, payload) - return types.Message(**result) - - async def send_contact(self, chat_id: typing.Union[base.Integer, base.String], - phone_number: base.String, first_name: base.String, - last_name: typing.Optional[base.String] = None, - vcard: typing.Optional[base.String] = None, - disable_notification: typing.Optional[base.Boolean] = None, - reply_to_message_id: typing.Optional[base.Integer] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, - types.ReplyKeyboardRemove, - types.ForceReply, None] = None) -> types.Message: - """ - Use this method to send phone contacts. - - Source: https://core.telegram.org/bots/api#sendcontact - - :param chat_id: Unique identifier for the target chat or username of the target channel - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - - :param phone_number: Contact's phone number - :type phone_number: :obj:`base.String` - - :param first_name: Contact's first name - :type first_name: :obj:`base.String` - - :param last_name: Contact's last name - :type last_name: :obj:`typing.Optional[base.String]` - - :param vcard: vcard - :type vcard: :obj:`typing.Optional[base.String]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param reply_to_message_id: If the message is a reply, ID of the original message - :type reply_to_message_id: :obj:`typing.Optional[base.Integer]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]` - - :return: On success, the sent Message is returned - :rtype: :obj:`types.Message` - """ - reply_markup = prepare_arg(reply_markup) - payload = generate_payload(**locals()) - - result = await self.request(api.Methods.SEND_CONTACT, payload) - return types.Message(**result) - - async def send_poll(self, - chat_id: typing.Union[base.Integer, base.String], - question: base.String, - options: typing.List[base.String], - is_anonymous: typing.Optional[base.Boolean] = None, - type: typing.Optional[base.String] = None, - allows_multiple_answers: typing.Optional[base.Boolean] = None, - correct_option_id: typing.Optional[base.Integer] = None, - explanation: typing.Optional[base.String] = None, - explanation_parse_mode: typing.Optional[base.String] = None, - explanation_entities: typing.Optional[typing.List[types.MessageEntity]] = None, - open_period: typing.Optional[base.Integer] = None, - close_date: typing.Union[ - base.Integer, - datetime.datetime, - datetime.timedelta, - None] = None, - is_closed: typing.Optional[base.Boolean] = None, - disable_notification: typing.Optional[base.Boolean] = None, - reply_to_message_id: typing.Optional[base.Integer] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, - types.ReplyKeyboardRemove, - types.ForceReply, None] = None, - ) -> types.Message: - """ - Use this method to send a native poll. On success, the sent Message is - returned. - - Source: https://core.telegram.org/bots/api#sendpoll - - :param chat_id: Unique identifier for the target chat or username of the - target channel (in the format @channelusername) - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - - :param question: Poll question, 1-300 characters - :type question: :obj:`base.String` - - :param options: A list of answer options, 2-10 strings 1-100 characters each - :type options: :obj:`typing.List[base.String]` - - :param is_anonymous: True, if the poll needs to be anonymous, defaults to True - :type is_anonymous: :obj:`typing.Optional[base.Boolean]` - - :param type: Poll type, “quiz” or “regular”, defaults to “regular” - :type type: :obj:`typing.Optional[base.String]` - - :param allows_multiple_answers: True, if the poll allows multiple answers, - ignored for polls in quiz mode, defaults to False - :type allows_multiple_answers: :obj:`typing.Optional[base.Boolean]` - - :param correct_option_id: 0-based identifier of the correct answer option, - required for polls in quiz mode - :type correct_option_id: :obj:`typing.Optional[base.Integer]` - - :param explanation: Text that is shown when a user chooses an incorrect - answer or taps on the lamp icon in a quiz-style poll, 0-200 characters - with at most 2 line feeds after entities parsing - :type explanation: :obj:`typing.Optional[base.String]` - - :param explanation_parse_mode: Mode for parsing entities in the explanation. - See formatting options for more details. - :type explanation_parse_mode: :obj:`typing.Optional[base.String]` - - :param explanation_entities: List of special entities that appear in message - text, which can be specified instead of parse_mode - :type explanation_entities: :obj:`typing.Optional[typing.List[types.MessageEntity]]` - - :param open_period: Amount of time in seconds the poll will be active after - creation, 5-600. Can't be used together with close_date. - :type open_period: :obj:`typing.Optional[base.Integer]` - - :param close_date: Point in time (Unix timestamp) when the poll will be - automatically closed. Must be at least 5 and no more than 600 seconds in - the future. Can't be used together with open_period. - :type close_date: :obj:`typing.Union[base.Integer, datetime.datetime, - datetime.timedelta, None]` - - :param is_closed: Pass True, if the poll needs to be immediately closed - :type is_closed: :obj:`typing.Optional[base.Boolean]` - - :param disable_notification: Sends the message silently. Users will receive - a notification with no sound. - :type disable_notification: :obj:`typing.Optional[Boolean]` - - :param reply_to_message_id: If the message is a reply, ID of the original - message - :type reply_to_message_id: :obj:`typing.Optional[Integer]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object - for an inline keyboard, custom reply keyboard, instructions to remove - reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, - None]` - - :return: On success, the sent Message is returned - :rtype: :obj:`types.Message` - """ - options = prepare_arg(options) - explanation_entities = prepare_arg(explanation_entities) - open_period = prepare_arg(open_period) - close_date = prepare_arg(close_date) - payload = generate_payload(**locals()) - if self.parse_mode and explanation_entities is None: - payload.setdefault('explanation_parse_mode', self.parse_mode) - - result = await self.request(api.Methods.SEND_POLL, payload) - return types.Message(**result) - - async def send_dice(self, - chat_id: typing.Union[base.Integer, base.String], - disable_notification: typing.Optional[base.Boolean] = None, - emoji: typing.Optional[base.String] = None, - reply_to_message_id: typing.Optional[base.Integer] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, - types.ReplyKeyboardRemove, - types.ForceReply, None] = None, - ) -> types.Message: - """ - Use this method to send an animated emoji that will display a random value. - On success, the sent Message is returned. - - Source: https://core.telegram.org/bots/api#senddice - - :param chat_id: Unique identifier for the target chat or username of the - target channel (in the format @channelusername) - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - - :param emoji: Emoji on which the dice throw animation is based. Currently, - must be one of “🎲”, “🎯”, “🏀”, “⚽”, or “🎰”. Dice can have values 1-6 - for “🎲” and “🎯”, values 1-5 for “🏀” and “⚽”, and values 1-64 for “🎰”. - Defaults to “🎲” - :type emoji: :obj:`typing.Optional[base.String]` - - :param disable_notification: Sends the message silently. Users will receive - a notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param reply_to_message_id: If the message is a reply, ID of the original message - :type reply_to_message_id: :obj:`typing.Optional[base.Integer]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object - for an inline keyboard, custom reply keyboard, instructions to remove - reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]` - - :return: On success, the sent Message is returned - :rtype: :obj:`types.Message` - """ - - reply_markup = prepare_arg(reply_markup) - payload = generate_payload(**locals()) - - result = await self.request(api.Methods.SEND_DICE, payload) - return types.Message(**result) - - async def send_chat_action(self, chat_id: typing.Union[base.Integer, base.String], - action: base.String) -> base.Boolean: - """ - Use this method when you need to tell the user that something is - happening on the bot's side. The status is set for 5 seconds or - less (when a message arrives from your bot, Telegram clients - clear its typing status). Returns True on success. - - Example: The ImageBot needs some time to process a request and - upload the image. Instead of sending a text message along the - lines of “Retrieving image, please wait…”, the bot may use - sendChatAction with action = upload_photo. The user will see a - “sending photo” status for the bot. - - We only recommend using this method when a response from the bot - will take a noticeable amount of time to arrive. - - Source: https://core.telegram.org/bots/api#sendchataction - - :param chat_id: Unique identifier for the target chat or - username of the target channel (in the format - @channelusername) - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - - :param action: Type of action to broadcast. Choose one, - depending on what the user is about to receive: `typing` for - text messages, `upload_photo` for photos, `record_video` or - `upload_video` for videos, `record_voice` or `upload_voice` - for voice notes, `upload_document` for general files, - `find_location` for location data, `record_video_note` or - `upload_video_note` for video notes. - :type action: :obj:`base.String` - - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - payload = generate_payload(**locals()) - - return await self.request(api.Methods.SEND_CHAT_ACTION, payload) - - async def get_user_profile_photos(self, user_id: base.Integer, offset: typing.Optional[base.Integer] = None, - limit: typing.Optional[base.Integer] = None) -> types.UserProfilePhotos: - """ - Use this method to get a list of profile pictures for a user. Returns a UserProfilePhotos object. - - Source: https://core.telegram.org/bots/api#getuserprofilephotos - - :param user_id: Unique identifier of the target user - :type user_id: :obj:`base.Integer` - :param offset: Sequential number of the first photo to be returned. By default, all photos are returned - :type offset: :obj:`typing.Optional[base.Integer]` - :param limit: Limits the number of photos to be retrieved. Values between 1—100 are accepted. Defaults to 100 - :type limit: :obj:`typing.Optional[base.Integer]` - :return: Returns a UserProfilePhotos object - :rtype: :obj:`types.UserProfilePhotos` - """ - payload = generate_payload(**locals()) - - result = await self.request(api.Methods.GET_USER_PROFILE_PHOTOS, payload) - return types.UserProfilePhotos(**result) - - async def get_file(self, file_id: base.String) -> types.File: - """ - Use this method to get basic info about a file and prepare it for downloading. - For the moment, bots can download files of up to 20MB in size. - - Note: This function may not preserve the original file name and MIME type. - You should save the file's MIME type and name (if available) when the File object is received. - - Source: https://core.telegram.org/bots/api#getfile - - :param file_id: File identifier to get info about - :type file_id: :obj:`base.String` - :return: On success, a File object is returned - :rtype: :obj:`types.File` - """ - payload = generate_payload(**locals()) - - result = await self.request(api.Methods.GET_FILE, payload) - return types.File(**result) - - async def ban_chat_member(self, - chat_id: typing.Union[base.Integer, base.String], - user_id: base.Integer, - until_date: typing.Union[base.Integer, datetime.datetime, - datetime.timedelta, None] = None, - revoke_messages: typing.Optional[base.Boolean] = None, - ) -> base.Boolean: - """ - Use this method to ban a user in a group, a supergroup or a - channel. In the case of supergroups and channels, the user will - not be able to return to the chat on their own using invite - links, etc., unless unbanned first. The bot must be an - administrator in the chat for this to work and must have the - appropriate admin rights. Returns True on success. - - Source: https://core.telegram.org/bots/api#banchatmember - - :param chat_id: Unique identifier for the target group or - username of the target supergroup or channel (in the format - @channelusername) - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - - :param user_id: Unique identifier of the target user - :type user_id: :obj:`base.Integer` - - :param until_date: Date when the user will be unbanned, unix - time. If user is banned for more than 366 days or less than - 30 seconds from the current time they are considered to be - banned forever. Applied for supergroups and channels only. - :type until_date: :obj:`typing.Union[base.Integer, - datetime.datetime, datetime.timedelta, None]` - - :param revoke_messages: Pass True to delete all messages from - the chat for the user that is being removed. If False, the user - will be able to see messages in the group that were sent before - the user was removed. Always True for supergroups and channels. - :type revoke_messages: :obj:`typing.Optional[base.Boolean]` - - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - until_date = prepare_arg(until_date) - payload = generate_payload(**locals()) - - return await self.request(api.Methods.BAN_CHAT_MEMBER, payload) - - async def kick_chat_member(self, - chat_id: typing.Union[base.Integer, base.String], - user_id: base.Integer, - until_date: typing.Union[base.Integer, datetime.datetime, - datetime.timedelta, None] = None, - revoke_messages: typing.Optional[base.Boolean] = None, - ) -> base.Boolean: - """Renamed to ban_chat_member.""" - return await self.ban_chat_member( - chat_id=chat_id, - user_id=user_id, - until_date=until_date, - revoke_messages=revoke_messages, - ) - - async def unban_chat_member(self, - chat_id: typing.Union[base.Integer, base.String], - user_id: base.Integer, - only_if_banned: typing.Optional[base.Boolean] = None, - ) -> base.Boolean: - """ - Use this method to unban a previously kicked user in a supergroup or channel. - The user will not return to the group or channel automatically, but will be - able to join via link, etc. The bot must be an administrator for this to - work. By default, this method guarantees that after the call the user is not - a member of the chat, but will be able to join it. So if the user is a member - of the chat they will also be removed from the chat. If you don't want this, - use the parameter only_if_banned. Returns True on success. - - Source: https://core.telegram.org/bots/api#unbanchatmember - - :param chat_id: Unique identifier for the target group or username of the - target supergroup or channel (in the format @username) - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - - :param user_id: Unique identifier of the target user - :type user_id: :obj:`base.Integer` - - :param only_if_banned: Do nothing if the user is not banned - :type only_if_banned: :obj:`typing.Optional[base.Boolean]` - - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - payload = generate_payload(**locals()) - - return await self.request(api.Methods.UNBAN_CHAT_MEMBER, payload) - - async def restrict_chat_member(self, chat_id: typing.Union[base.Integer, base.String], - user_id: base.Integer, - permissions: typing.Optional[types.ChatPermissions] = None, - # permissions argument need to be required after removing other `can_*` arguments - until_date: typing.Union[ - base.Integer, datetime.datetime, datetime.timedelta, None] = None, - can_send_messages: typing.Optional[base.Boolean] = None, - can_send_media_messages: typing.Optional[base.Boolean] = None, - can_send_other_messages: typing.Optional[base.Boolean] = None, - can_add_web_page_previews: typing.Optional[base.Boolean] = None) -> base.Boolean: - """ - Use this method to restrict a user in a supergroup. - The bot must be an administrator in the supergroup for this to work and must have the appropriate admin rights. - Pass True for all boolean parameters to lift restrictions from a user. - - Source: https://core.telegram.org/bots/api#restrictchatmember - - :param chat_id: Unique identifier for the target chat or username of the target supergroup - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - :param user_id: Unique identifier of the target user - :type user_id: :obj:`base.Integer` - :param permissions: New user permissions - :type permissions: :obj:`ChatPermissions` - :param until_date: Date when restrictions will be lifted for the user, unix time - :type until_date: :obj:`typing.Optional[base.Integer]` - :param can_send_messages: Pass True, if the user can send text messages, contacts, locations and venues - :type can_send_messages: :obj:`typing.Optional[base.Boolean]` - :param can_send_media_messages: Pass True, if the user can send audios, documents, photos, videos, - video notes and voice notes, implies can_send_messages - :type can_send_media_messages: :obj:`typing.Optional[base.Boolean]` - :param can_send_other_messages: Pass True, if the user can send animations, games, stickers and - use inline bots, implies can_send_media_messages - :type can_send_other_messages: :obj:`typing.Optional[base.Boolean]` - :param can_add_web_page_previews: Pass True, if the user may add web page previews to their messages, - implies can_send_media_messages - :type can_add_web_page_previews: :obj:`typing.Optional[base.Boolean]` - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - until_date = prepare_arg(until_date) - permissions = prepare_arg(permissions) - payload = generate_payload(**locals()) - - for permission in ('can_send_messages', - 'can_send_media_messages', - 'can_send_other_messages', - 'can_add_web_page_previews'): - if permission in payload: - warnings.warn(f"The method `restrict_chat_member` now takes the new user permissions " - f"in a single argument of the type ChatPermissions instead of " - f"passing regular argument {payload[permission]}", - DeprecationWarning, stacklevel=2) - - return await self.request(api.Methods.RESTRICT_CHAT_MEMBER, payload) - - async def promote_chat_member(self, - chat_id: typing.Union[base.Integer, base.String], - user_id: base.Integer, - is_anonymous: typing.Optional[base.Boolean] = None, - can_manage_chat: typing.Optional[base.Boolean] = None, - can_change_info: typing.Optional[base.Boolean] = None, - can_post_messages: typing.Optional[base.Boolean] = None, - can_edit_messages: typing.Optional[base.Boolean] = None, - can_delete_messages: typing.Optional[base.Boolean] = None, - can_manage_voice_chats: typing.Optional[base.Boolean] = None, - can_invite_users: typing.Optional[base.Boolean] = None, - can_restrict_members: typing.Optional[base.Boolean] = None, - can_pin_messages: typing.Optional[base.Boolean] = None, - can_promote_members: typing.Optional[base.Boolean] = None, - ) -> base.Boolean: - """ - Use this method to promote or demote a user in a supergroup or a channel. - The bot must be an administrator in the chat for this to work and must have the appropriate admin rights. - Pass False for all boolean parameters to demote a user. - - Source: https://core.telegram.org/bots/api#promotechatmember - - :param chat_id: Unique identifier for the target chat or username of the target channel - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - - :param user_id: Unique identifier of the target user - :type user_id: :obj:`base.Integer` - - :param is_anonymous: Pass True, if the administrator's presence in the chat is hidden - :type is_anonymous: :obj:`typing.Optional[base.Boolean]` - - :param can_manage_chat: Pass True, if the administrator can access the chat event log, chat statistics, - message statistics in channels, see channel members, see anonymous administrators in supergroups - and ignore slow mode. Implied by any other administrator privilege - :type can_manage_chat: :obj:`typing.Optional[base.Boolean]` - - :param can_change_info: Pass True, if the administrator can change chat title, photo and other settings - :type can_change_info: :obj:`typing.Optional[base.Boolean]` - - :param can_post_messages: Pass True, if the administrator can create channel posts, channels only - :type can_post_messages: :obj:`typing.Optional[base.Boolean]` - - :param can_edit_messages: Pass True, if the administrator can edit messages of other users, channels only - :type can_edit_messages: :obj:`typing.Optional[base.Boolean]` - - :param can_delete_messages: Pass True, if the administrator can delete messages of other users - :type can_delete_messages: :obj:`typing.Optional[base.Boolean]` - - :param can_manage_voice_chats: Pass True, if the administrator can manage voice chats, supergroups only - :type can_manage_voice_chats: :obj:`typing.Optional[base.Boolean]` - - :param can_invite_users: Pass True, if the administrator can invite new users to the chat - :type can_invite_users: :obj:`typing.Optional[base.Boolean]` - - :param can_restrict_members: Pass True, if the administrator can restrict, ban or unban chat members - :type can_restrict_members: :obj:`typing.Optional[base.Boolean]` - - :param can_pin_messages: Pass True, if the administrator can pin messages, supergroups only - :type can_pin_messages: :obj:`typing.Optional[base.Boolean]` - - :param can_promote_members: Pass True, if the administrator can add new administrators - with a subset of his own privileges or demote administrators that he has promoted, - directly or indirectly (promoted by administrators that were appointed by him) - :type can_promote_members: :obj:`typing.Optional[base.Boolean]` - - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - payload = generate_payload(**locals()) - - return await self.request(api.Methods.PROMOTE_CHAT_MEMBER, payload) - - async def set_chat_administrator_custom_title(self, chat_id: typing.Union[base.Integer, base.String], - user_id: base.Integer, custom_title: base.String) -> base.Boolean: - """ - Use this method to set a custom title for an administrator in a supergroup promoted by the bot. - - Returns True on success. - - Source: https://core.telegram.org/bots/api#setchatadministratorcustomtitle - - :param chat_id: Unique identifier for the target chat or username of the target supergroup - :param user_id: Unique identifier of the target user - :param custom_title: New custom title for the administrator; 0-16 characters, emoji are not allowed - :return: True on success. - """ - payload = generate_payload(**locals()) - - return await self.request(api.Methods.SET_CHAT_ADMINISTRATOR_CUSTOM_TITLE, payload) - - async def set_chat_permissions(self, chat_id: typing.Union[base.Integer, base.String], - permissions: types.ChatPermissions) -> base.Boolean: - """ - Use this method to set default chat permissions for all members. - The bot must be an administrator in the group or a supergroup for this to work and must have the - can_restrict_members admin rights. - - Returns True on success. - - :param chat_id: Unique identifier for the target chat or username of the target supergroup - :param permissions: New default chat permissions - :return: True on success. - """ - permissions = prepare_arg(permissions) - payload = generate_payload(**locals()) - - return await self.request(api.Methods.SET_CHAT_PERMISSIONS, payload) - - async def export_chat_invite_link(self, chat_id: typing.Union[base.Integer, base.String]) -> base.String: - """ - Use this method to generate a new invite link for a chat; any previously generated link is revoked. - The bot must be an administrator in the chat for this to work and must have the appropriate admin rights. - - Source: https://core.telegram.org/bots/api#exportchatinvitelink - - :param chat_id: Unique identifier for the target chat or username of the target channel - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - :return: Returns exported invite link as String on success - :rtype: :obj:`base.String` - """ - payload = generate_payload(**locals()) - - return await self.request(api.Methods.EXPORT_CHAT_INVITE_LINK, payload) - - async def create_chat_invite_link(self, - chat_id: typing.Union[base.Integer, base.String], - expire_date: typing.Union[base.Integer, datetime.datetime, - datetime.timedelta, None] = None, - member_limit: typing.Optional[base.Integer] = None, - ) -> types.ChatInviteLink: - """ - Use this method to create an additional invite link for a chat. - The bot must be an administrator in the chat for this to work and must have - the appropriate admin rights. The link can be revoked using the method - revokeChatInviteLink. - - Source: https://core.telegram.org/bots/api#createchatinvitelink - - :param chat_id: Unique identifier for the target chat or username of the - target channel (in the format @channelusername) - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - - :param expire_date: Point in time when the link will expire - :type expire_date: :obj:`typing.Union[base.Integer, datetime.datetime, - datetime.timedelta, None]` - - :param member_limit: Maximum number of users that can be members of the chat - simultaneously after joining the chat via this invite link; 1-99999 - :type member_limit: :obj:`typing.Optional[base.Integer]` - - :return: the new invite link as ChatInviteLink object. - :rtype: :obj:`types.ChatInviteLink` - """ - expire_date = prepare_arg(expire_date) - payload = generate_payload(**locals()) - - result = await self.request(api.Methods.CREATE_CHAT_INVITE_LINK, payload) - return types.ChatInviteLink(**result) - - async def edit_chat_invite_link(self, - chat_id: typing.Union[base.Integer, base.String], - invite_link: base.String, - expire_date: typing.Union[base.Integer, datetime.datetime, - datetime.timedelta, None] = None, - member_limit: typing.Optional[base.Integer] = None, - ) -> types.ChatInviteLink: - """ - Use this method to edit a non-primary invite link created by the bot. - The bot must be an administrator in the chat for this to work and must have - the appropriate admin rights. - - Source: https://core.telegram.org/bots/api#editchatinvitelink - - :param chat_id: Unique identifier for the target chat or username of the - target channel (in the format @channelusername) - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - - :param invite_link: The invite link to edit - :type invite_link: :obj:`base.String` - - :param expire_date: Point in time (Unix timestamp) when the link will expire - :type expire_date: :obj:`typing.Union[base.Integer, datetime.datetime, - datetime.timedelta, None]` - - :param member_limit: Maximum number of users that can be members of the chat - simultaneously after joining the chat via this invite link; 1-99999 - :type member_limit: :obj:`typing.Optional[base.Integer]` - - :return: edited invite link as a ChatInviteLink object. - """ - expire_date = prepare_arg(expire_date) - payload = generate_payload(**locals()) - - result = await self.request(api.Methods.EDIT_CHAT_INVITE_LINK, payload) - return types.ChatInviteLink(**result) - - async def revoke_chat_invite_link(self, - chat_id: typing.Union[base.Integer, base.String], - invite_link: base.String, - ) -> types.ChatInviteLink: - """ - Use this method to revoke an invite link created by the bot. - If the primary link is revoked, a new link is automatically generated. - The bot must be an administrator in the chat for this to work and must have - the appropriate admin rights. - - Source: https://core.telegram.org/bots/api#revokechatinvitelink - - :param chat_id: Unique identifier for the target chat or username of the - target channel (in the format @channelusername) - :param invite_link: The invite link to revoke - :return: the revoked invite link as ChatInviteLink object - """ - payload = generate_payload(**locals()) - - result = await self.request(api.Methods.REVOKE_CHAT_INVITE_LINK, payload) - return types.ChatInviteLink(**result) - - async def set_chat_photo(self, chat_id: typing.Union[base.Integer, base.String], - photo: base.InputFile) -> base.Boolean: - """ - Use this method to set a new profile photo for the chat. Photos can't be changed for private chats. - The bot must be an administrator in the chat for this to work and must have the appropriate admin rights. - - Note: In regular groups (non-supergroups), this method will only work if the ‘All Members Are Admins’ - setting is off in the target group. - - Source: https://core.telegram.org/bots/api#setchatphoto - - :param chat_id: Unique identifier for the target chat or username of the target channel - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - :param photo: New chat photo, uploaded using multipart/form-data - :type photo: :obj:`base.InputFile` - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - payload = generate_payload(**locals(), exclude=['photo']) - - files = {} - prepare_file(payload, files, 'photo', photo) - - return await self.request(api.Methods.SET_CHAT_PHOTO, payload, files) - - async def delete_chat_photo(self, chat_id: typing.Union[base.Integer, base.String]) -> base.Boolean: - """ - Use this method to delete a chat photo. Photos can't be changed for private chats. - The bot must be an administrator in the chat for this to work and must have the appropriate admin rights. - - Note: In regular groups (non-supergroups), this method will only work if the ‘All Members Are Admins’ - setting is off in the target group. - - Source: https://core.telegram.org/bots/api#deletechatphoto - - :param chat_id: Unique identifier for the target chat or username of the target channel - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - payload = generate_payload(**locals()) - - return await self.request(api.Methods.DELETE_CHAT_PHOTO, payload) - - async def set_chat_title(self, chat_id: typing.Union[base.Integer, base.String], - title: base.String) -> base.Boolean: - """ - Use this method to change the title of a chat. Titles can't be changed for private chats. - The bot must be an administrator in the chat for this to work and must have the appropriate admin rights. - - Note: In regular groups (non-supergroups), this method will only work if the ‘All Members Are Admins’ - setting is off in the target group. - - Source: https://core.telegram.org/bots/api#setchattitle - - :param chat_id: Unique identifier for the target chat or username of the target channel - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - :param title: New chat title, 1-255 characters - :type title: :obj:`base.String` - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - payload = generate_payload(**locals()) - - return await self.request(api.Methods.SET_CHAT_TITLE, payload) - - async def set_chat_description(self, chat_id: typing.Union[base.Integer, base.String], - description: typing.Optional[base.String] = None) -> base.Boolean: - """ - Use this method to change the description of a supergroup or a channel. - The bot must be an administrator in the chat for this to work and must have the appropriate admin rights. - - Source: https://core.telegram.org/bots/api#setchatdescription - - :param chat_id: Unique identifier for the target chat or username of the target channel - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - :param description: New chat description, 0-255 characters - :type description: :obj:`typing.Optional[base.String]` - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - payload = generate_payload(**locals()) - - return await self.request(api.Methods.SET_CHAT_DESCRIPTION, payload) - - async def pin_chat_message(self, - chat_id: typing.Union[base.Integer, base.String], - message_id: base.Integer, - disable_notification: typing.Optional[base.Boolean] = None, - ) -> base.Boolean: - """ - Use this method to add a message to the list of pinned messages in a chat. - If the chat is not a private chat, the bot must be an administrator in the - chat for this to work and must have the 'can_pin_messages' admin right in a - supergroup or 'can_edit_messages' admin right in a channel. Returns True on - success. - - Source: https://core.telegram.org/bots/api#pinchatmessage - - :param chat_id: Unique identifier for the target chat or username of the - target channel (in the format @channelusername) - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - - :param message_id: Identifier of a message to pin - :type message_id: :obj:`base.Integer` - - :param disable_notification: Pass True, if it is not necessary to send a - notification to all group members about the new pinned message - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - payload = generate_payload(**locals()) - - return await self.request(api.Methods.PIN_CHAT_MESSAGE, payload) - - async def unpin_chat_message(self, - chat_id: typing.Union[base.Integer, base.String], - message_id: typing.Optional[base.Integer] = None, - ) -> base.Boolean: - """ - Use this method to remove a message from the list of pinned messages in a - chat. If the chat is not a private chat, the bot must be an administrator in - the chat for this to work and must have the 'can_pin_messages' admin right in - a supergroup or 'can_edit_messages' admin right in a channel. Returns True on - success. - - Source: https://core.telegram.org/bots/api#unpinchatmessage - - :param chat_id: Unique identifier for the target chat or username of the - target channel (in the format @channelusername) - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - - :param message_id: Identifier of a message to unpin. If not specified, the - most recent pinned message (by sending date) will be unpinned. - :type message_id: :obj:`typing.Optional[base.Integer]` - - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - payload = generate_payload(**locals()) - - return await self.request(api.Methods.UNPIN_CHAT_MESSAGE, payload) - - async def unpin_all_chat_messages(self, - chat_id: typing.Union[base.Integer, base.String], - ) -> base.Boolean: - """ - Use this method to clear the list of pinned messages in a chat. If the chat - is not a private chat, the bot must be an administrator in the chat for this - to work and must have the 'can_pin_messages' admin right in a supergroup or - 'can_edit_messages' admin right in a channel. Returns True on success. - - Source: https://core.telegram.org/bots/api#unpinallchatmessages - - :param chat_id: Unique identifier for the target chat or username of the - target channel (in the format @channelusername) - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - payload = generate_payload(**locals()) - - return await self.request(api.Methods.UNPIN_ALL_CHAT_MESSAGES, payload) - - async def leave_chat(self, chat_id: typing.Union[base.Integer, base.String]) -> base.Boolean: - """ - Use this method for your bot to leave a group, supergroup or channel. - - Source: https://core.telegram.org/bots/api#leavechat - - :param chat_id: Unique identifier for the target chat or username of the target supergroup or channel - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - payload = generate_payload(**locals()) - - return await self.request(api.Methods.LEAVE_CHAT, payload) - - async def get_chat(self, chat_id: typing.Union[base.Integer, base.String]) -> types.Chat: - """ - Use this method to get up to date information about the chat - (current name of the user for one-on-one conversations, current username of a user, group or channel, etc.). - - Source: https://core.telegram.org/bots/api#getchat - - :param chat_id: Unique identifier for the target chat or username of the target supergroup or channel - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - :return: Returns a Chat object on success - :rtype: :obj:`types.Chat` - """ - payload = generate_payload(**locals()) - - result = await self.request(api.Methods.GET_CHAT, payload) - return types.Chat(**result) - - async def get_chat_administrators(self, chat_id: typing.Union[base.Integer, base.String] - ) -> typing.List[types.ChatMember]: - """ - Use this method to get a list of administrators in a chat. - - Source: https://core.telegram.org/bots/api#getchatadministrators - - :param chat_id: Unique identifier for the target chat or username of the target supergroup or channel - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - :return: On success, returns an Array of ChatMember objects that contains information about all - chat administrators except other bots. - If the chat is a group or a supergroup and no administrators were appointed, - only the creator will be returned. - :rtype: :obj:`typing.List[types.ChatMember]` - """ - payload = generate_payload(**locals()) - - result = await self.request(api.Methods.GET_CHAT_ADMINISTRATORS, payload) - return [types.ChatMember.resolve(**chat_member) for chat_member in result] - - async def get_chat_member_count(self, chat_id: typing.Union[base.Integer, base.String]) -> base.Integer: - """ - Use this method to get the number of members in a chat. - - Source: https://core.telegram.org/bots/api#getchatmembercount - - :param chat_id: Unique identifier for the target chat or username of the target supergroup or channel - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - :return: Returns Int on success - :rtype: :obj:`base.Integer` - """ - payload = generate_payload(**locals()) - - return await self.request(api.Methods.GET_CHAT_MEMBER_COUNT, payload) - - async def get_chat_members_count(self, chat_id: typing.Union[base.Integer, base.String]) -> base.Integer: - """Renamed to get_chat_member_count.""" - return await self.get_chat_member_count(chat_id) - - async def get_chat_member(self, chat_id: typing.Union[base.Integer, base.String], - user_id: base.Integer) -> types.ChatMember: - """ - Use this method to get information about a member of a chat. - - Source: https://core.telegram.org/bots/api#getchatmember - - :param chat_id: Unique identifier for the target chat or username of the target supergroup or channel - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - :param user_id: Unique identifier of the target user - :type user_id: :obj:`base.Integer` - :return: Returns a ChatMember object on success - :rtype: :obj:`types.ChatMember` - """ - payload = generate_payload(**locals()) - - result = await self.request(api.Methods.GET_CHAT_MEMBER, payload) - return types.ChatMember.resolve(**result) - - async def set_chat_sticker_set(self, chat_id: typing.Union[base.Integer, base.String], - sticker_set_name: base.String) -> base.Boolean: - """ - Use this method to set a new group sticker set for a supergroup. - The bot must be an administrator in the chat for this to work and must have the appropriate admin rights. - - Use the field can_set_sticker_set optionally returned in getChat requests to check - if the bot can use this method. - - Source: https://core.telegram.org/bots/api#setchatstickerset - - :param chat_id: Unique identifier for the target chat or username of the target supergroup - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - :param sticker_set_name: Name of the sticker set to be set as the group sticker set - :type sticker_set_name: :obj:`base.String` - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - payload = generate_payload(**locals()) - - return await self.request(api.Methods.SET_CHAT_STICKER_SET, payload) - - async def delete_chat_sticker_set(self, chat_id: typing.Union[base.Integer, base.String]) -> base.Boolean: - """ - Use this method to delete a group sticker set from a supergroup. - The bot must be an administrator in the chat for this to work and must have the appropriate admin rights. - - Use the field can_set_sticker_set optionally returned in getChat requests - to check if the bot can use this method. - - Source: https://core.telegram.org/bots/api#deletechatstickerset - - :param chat_id: Unique identifier for the target chat or username of the target supergroup - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - payload = generate_payload(**locals()) - - return await self.request(api.Methods.DELETE_CHAT_STICKER_SET, payload) - - async def answer_callback_query(self, callback_query_id: base.String, - text: typing.Optional[base.String] = None, - show_alert: typing.Optional[base.Boolean] = None, - url: typing.Optional[base.String] = None, - cache_time: typing.Optional[base.Integer] = None) -> base.Boolean: - """ - Use this method to send answers to callback queries sent from inline keyboards. - The answer will be displayed to the user as a notification at the top of the chat screen or as an alert. - - Alternatively, the user can be redirected to the specified Game URL. - For this option to work, you must first create a game for your bot via @Botfather and accept the terms. - Otherwise, you may use links like t.me/your_bot?start=XXXX that open your bot with a parameter. - - Source: https://core.telegram.org/bots/api#answercallbackquery - - :param callback_query_id: Unique identifier for the query to be answered - :type callback_query_id: :obj:`base.String` - :param text: Text of the notification. If not specified, nothing will be shown to the user, 0-1024 characters - :type text: :obj:`typing.Optional[base.String]` - :param show_alert: If true, an alert will be shown by the client instead of a notification - at the top of the chat screen. Defaults to false. - :type show_alert: :obj:`typing.Optional[base.Boolean]` - :param url: URL that will be opened by the user's client - :type url: :obj:`typing.Optional[base.String]` - :param cache_time: The maximum amount of time in seconds that the - result of the callback query may be cached client-side. - :type cache_time: :obj:`typing.Optional[base.Integer]` - :return: On success, True is returned - :rtype: :obj:`base.Boolean` - """ - payload = generate_payload(**locals()) - - return await self.request(api.Methods.ANSWER_CALLBACK_QUERY, payload) - - async def set_my_commands(self, - commands: typing.List[types.BotCommand], - scope: typing.Optional[types.BotCommandScope] = None, - language_code: typing.Optional[base.String] = None, - ) -> base.Boolean: - """ - Use this method to change the list of the bot's commands. - - Source: https://core.telegram.org/bots/api#setmycommands - - :param commands: A JSON-serialized list of bot commands to be - set as the list of the bot's commands. At most 100 commands - can be specified. - :type commands: :obj: `typing.List[types.BotCommand]` - - :param scope: A JSON-serialized object, describing scope of - users for which the commands are relevant. Defaults to - BotCommandScopeDefault. - :type scope: :obj: `typing.Optional[types.BotCommandScope]` - - :param language_code: A two-letter ISO 639-1 language code. If - empty, commands will be applied to all users from the given - scope, for whose language there are no dedicated commands - :type language_code: :obj: `typing.Optional[base.String]` - - :return: Returns True on success. - :rtype: :obj:`base.Boolean` - """ - commands = prepare_arg(commands) - scope = prepare_arg(scope) - payload = generate_payload(**locals()) - - return await self.request(api.Methods.SET_MY_COMMANDS, payload) - - async def delete_my_commands(self, - scope: typing.Optional[types.BotCommandScope] = None, - language_code: typing.Optional[base.String] = None, - ) -> base.Boolean: - """ - Use this method to delete the list of the bot's commands for the - given scope and user language. After deletion, higher level - commands will be shown to affected users. - - Source: https://core.telegram.org/bots/api#deletemycommands - - :param scope: A JSON-serialized object, describing scope of - users for which the commands are relevant. Defaults to - BotCommandScopeDefault. - :type scope: :obj: `typing.Optional[types.BotCommandScope]` - - :param language_code: A two-letter ISO 639-1 language code. If - empty, commands will be applied to all users from the given - scope, for whose language there are no dedicated commands - :type language_code: :obj: `typing.Optional[base.String]` - - :return: Returns True on success. - :rtype: :obj:`base.Boolean` - """ - scope = prepare_arg(scope) - payload = generate_payload(**locals()) - - return await self.request(api.Methods.DELETE_MY_COMMANDS, payload) - - async def get_my_commands(self, - scope: typing.Optional[types.BotCommandScope] = None, - language_code: typing.Optional[base.String] = None, - ) -> typing.List[types.BotCommand]: - """ - Use this method to get the current list of the bot's commands - for the given scope and user language. Returns Array of - BotCommand on success. If commands aren't set, an empty list is - returned. - - Source: https://core.telegram.org/bots/api#getmycommands - - :param scope: A JSON-serialized object, describing scope of - users for which the commands are relevant. Defaults to - BotCommandScopeDefault. - :type scope: :obj: `typing.Optional[types.BotCommandScope]` - - :param language_code: A two-letter ISO 639-1 language code. If - empty, commands will be applied to all users from the given - scope, for whose language there are no dedicated commands - :type language_code: :obj: `typing.Optional[base.String]` - - :return: Returns Array of BotCommand on success or empty list. - :rtype: :obj:`typing.List[types.BotCommand]` - """ - scope = prepare_arg(scope) - payload = generate_payload(**locals()) - - result = await self.request(api.Methods.GET_MY_COMMANDS, payload) - return [types.BotCommand(**bot_command_data) for bot_command_data in result] - - async def edit_message_text(self, - text: base.String, - chat_id: typing.Union[base.Integer, base.String, None] = None, - message_id: typing.Optional[base.Integer] = None, - inline_message_id: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - entities: typing.Optional[typing.List[types.MessageEntity]] = None, - disable_web_page_preview: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[types.InlineKeyboardMarkup, - None] = None, - ) -> types.Message or base.Boolean: - """ - Use this method to edit text and game messages sent by the bot or via the bot (for inline bots). - - Source: https://core.telegram.org/bots/api#editmessagetext - - :param chat_id: Required if inline_message_id is not specified - Unique identifier for the target chat or username of the target channel - :type chat_id: :obj:`typing.Union[base.Integer, base.String, None]` - - :param message_id: Required if inline_message_id is not specified. Identifier of the sent message - :type message_id: :obj:`typing.Optional[base.Integer]` - - :param inline_message_id: Required if chat_id and message_id are not specified. Identifier of the inline message - :type inline_message_id: :obj:`typing.Optional[base.String]` - - :param text: New text of the message - :type text: :obj:`base.String` - - :param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic, - fixed-width text or inline URLs in your bot's message. - :type parse_mode: :obj:`typing.Optional[base.String]` - - :param entities: List of special entities that appear in message text, - which can be specified instead of parse_mode - :type entities: :obj:`typing.Optional[typing.List[types.MessageEntity]]` - - :param disable_web_page_preview: Disables link previews for links in this message - :type disable_web_page_preview: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: A JSON-serialized object for an inline keyboard - :type reply_markup: :obj:`typing.Optional[types.InlineKeyboardMarkup]` - - :return: On success, if edited message is sent by the bot, - the edited Message is returned, otherwise True is returned. - :rtype: :obj:`typing.Union[types.Message, base.Boolean]` - """ - reply_markup = prepare_arg(reply_markup) - entities = prepare_arg(entities) - payload = generate_payload(**locals()) - if self.parse_mode and entities is None: - payload.setdefault('parse_mode', self.parse_mode) - - result = await self.request(api.Methods.EDIT_MESSAGE_TEXT, payload) - if isinstance(result, bool): - return result - return types.Message(**result) - - async def edit_message_caption(self, chat_id: typing.Union[base.Integer, base.String, None] = None, - message_id: typing.Optional[base.Integer] = None, - inline_message_id: typing.Optional[base.String] = None, - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[types.MessageEntity]] = None, - reply_markup: typing.Union[types.InlineKeyboardMarkup, - None] = None) -> types.Message or base.Boolean: - """ - Use this method to edit captions of messages sent by the bot or via the bot (for inline bots). - - Source: https://core.telegram.org/bots/api#editmessagecaption - - :param chat_id: Required if inline_message_id is not specified - Unique identifier for the target chat or username of the target channel - :type chat_id: :obj:`typing.Union[base.Integer, base.String, None]` - - :param message_id: Required if inline_message_id is not specified. Identifier of the sent message - :type message_id: :obj:`typing.Optional[base.Integer]` - - :param inline_message_id: Required if chat_id and message_id are not specified. Identifier of the inline message - :type inline_message_id: :obj:`typing.Optional[base.String]` - - :param caption: New caption of the message - :type caption: :obj:`typing.Optional[base.String]` - - :param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic, - fixed-width text or inline URLs in your bot's message. - :type parse_mode: :obj:`typing.Optional[base.String]` - - :param caption_entities: List of special entities that appear in message text, - which can be specified instead of parse_mode - :type caption_entities: :obj:`typing.Optional[typing.List[types.MessageEntity]]` - - :param reply_markup: A JSON-serialized object for an inline keyboard - :type reply_markup: :obj:`typing.Optional[types.InlineKeyboardMarkup]` - - :return: On success, if edited message is sent by the bot, the edited Message is returned, - otherwise True is returned. - :rtype: :obj:`typing.Union[types.Message, base.Boolean]` - """ - reply_markup = prepare_arg(reply_markup) - caption_entities = prepare_arg(caption_entities) - payload = generate_payload(**locals()) - if self.parse_mode and caption_entities is None: - payload.setdefault('parse_mode', self.parse_mode) - - result = await self.request(api.Methods.EDIT_MESSAGE_CAPTION, payload) - if isinstance(result, bool): - return result - return types.Message(**result) - - async def edit_message_media(self, - media: types.InputMedia, - chat_id: typing.Union[typing.Union[base.Integer, base.String], None] = None, - message_id: typing.Optional[base.Integer] = None, - inline_message_id: typing.Optional[base.String] = None, - reply_markup: typing.Optional[types.InlineKeyboardMarkup] = None, - ) -> typing.Union[types.Message, base.Boolean]: - """ - Use this method to edit audio, document, photo, or video messages. - If a message is a part of a message album, then it can be edited only to a photo or a video. - Otherwise, message type can be changed arbitrarily. - When inline message is edited, new file can't be uploaded. - Use previously uploaded file via its file_id or specify a URL. - - On success, if the edited message was sent by the bot, - the edited Message is returned, otherwise True is returned. - - Source https://core.telegram.org/bots/api#editmessagemedia - - :param chat_id: Required if inline_message_id is not specified - :type chat_id: :obj:`typing.Union[typing.Union[base.Integer, base.String], None]` - :param message_id: Required if inline_message_id is not specified. Identifier of the sent message - :type message_id: :obj:`typing.Optional[base.Integer]` - :param inline_message_id: Required if chat_id and message_id are not specified. Identifier of the inline message - :type inline_message_id: :obj:`typing.Optional[base.String]` - :param media: A JSON-serialized object for a new media content of the message - :type media: :obj:`types.InputMedia` - :param reply_markup: A JSON-serialized object for a new inline keyboard - :type reply_markup: :obj:`typing.Optional[types.InlineKeyboardMarkup]` - :return: On success, if the edited message was sent by the bot, the edited Message is returned, - otherwise True is returned - :rtype: :obj:`typing.Union[types.Message, base.Boolean]` - """ - reply_markup = prepare_arg(reply_markup) - payload = generate_payload(**locals()) - - if isinstance(media, types.InputMedia): - files = dict(media.get_files()) - else: - files = None - - result = await self.request(api.Methods.EDIT_MESSAGE_MEDIA, payload, files) - if isinstance(result, bool): - return result - return types.Message(**result) - - async def edit_message_reply_markup(self, - chat_id: typing.Union[base.Integer, base.String, None] = None, - message_id: typing.Optional[base.Integer] = None, - inline_message_id: typing.Optional[base.String] = None, - reply_markup: typing.Union[types.InlineKeyboardMarkup, - None] = None) -> types.Message or base.Boolean: - """ - Use this method to edit only the reply markup of messages sent by the bot or via the bot (for inline bots). - - Source: https://core.telegram.org/bots/api#editmessagereplymarkup - - :param chat_id: Required if inline_message_id is not specified - Unique identifier for the target chat or username of the target channel - :type chat_id: :obj:`typing.Union[base.Integer, base.String, None]` - :param message_id: Required if inline_message_id is not specified. Identifier of the sent message - :type message_id: :obj:`typing.Optional[base.Integer]` - :param inline_message_id: Required if chat_id and message_id are not specified. Identifier of the inline message - :type inline_message_id: :obj:`typing.Optional[base.String]` - :param reply_markup: A JSON-serialized object for an inline keyboard - :type reply_markup: :obj:`typing.Optional[types.InlineKeyboardMarkup]` - :return: On success, if edited message is sent by the bot, the edited Message is returned, - otherwise True is returned. - :rtype: :obj:`typing.Union[types.Message, base.Boolean]` - """ - reply_markup = prepare_arg(reply_markup) - payload = generate_payload(**locals()) - - result = await self.request(api.Methods.EDIT_MESSAGE_REPLY_MARKUP, payload) - if isinstance(result, bool): - return result - return types.Message(**result) - - async def stop_poll(self, chat_id: typing.Union[base.String, base.Integer], - message_id: base.Integer, - reply_markup: typing.Optional[types.InlineKeyboardMarkup] = None) -> types.Poll: - """ - Use this method to stop a poll which was sent by the bot. - On success, the stopped Poll with the final results is returned. - - :param chat_id: Unique identifier for the target chat or username of the target channel - :type chat_id: :obj:`typing.Union[base.String, base.Integer]` - :param message_id: Identifier of the original message with the poll - :type message_id: :obj:`base.Integer` - :param reply_markup: A JSON-serialized object for a new message inline keyboard. - :type reply_markup: :obj:`typing.Optional[types.InlineKeyboardMarkup]` - :return: On success, the stopped Poll with the final results is returned. - :rtype: :obj:`types.Poll` - """ - payload = generate_payload(**locals()) - - result = await self.request(api.Methods.STOP_POLL, payload) - return types.Poll(**result) - - async def delete_message(self, chat_id: typing.Union[base.Integer, base.String], - message_id: base.Integer) -> base.Boolean: - """ - Use this method to delete a message, including service messages, with the following limitations: - - A message can only be deleted if it was sent less than 48 hours ago. - - Bots can delete outgoing messages in private chats, groups, and supergroups. - - Bots can delete incoming messages in private chats. - - Bots granted can_post_messages permissions can delete outgoing messages in channels. - - If the bot is an administrator of a group, it can delete any message there. - - If the bot has can_delete_messages permission in a supergroup or a channel, it can delete any message there. - - Source: https://core.telegram.org/bots/api#deletemessage - - :param chat_id: Unique identifier for the target chat or username of the target channel - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - :param message_id: Identifier of the message to delete - :type message_id: :obj:`base.Integer` - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - payload = generate_payload(**locals()) - - return await self.request(api.Methods.DELETE_MESSAGE, payload) - - # === Stickers === - # https://core.telegram.org/bots/api#stickers - - async def send_sticker(self, chat_id: typing.Union[base.Integer, base.String], - sticker: typing.Union[base.InputFile, base.String], - disable_notification: typing.Optional[base.Boolean] = None, - reply_to_message_id: typing.Optional[base.Integer] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, - types.ReplyKeyboardRemove, - types.ForceReply, None] = None) -> types.Message: - """ - Use this method to send .webp stickers. - - Source: https://core.telegram.org/bots/api#sendsticker - - :param chat_id: Unique identifier for the target chat or username of the target channel - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - - :param sticker: Sticker to send - :type sticker: :obj:`typing.Union[base.InputFile, base.String]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param reply_to_message_id: If the message is a reply, ID of the original message - :type reply_to_message_id: :obj:`typing.Optional[base.Integer]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]` - - :return: On success, the sent Message is returned - :rtype: :obj:`types.Message` - """ - reply_markup = prepare_arg(reply_markup) - payload = generate_payload(**locals(), exclude=['sticker']) - - files = {} - prepare_file(payload, files, 'sticker', sticker) - - result = await self.request(api.Methods.SEND_STICKER, payload, files) - return types.Message(**result) - - async def get_sticker_set(self, name: base.String) -> types.StickerSet: - """ - Use this method to get a sticker set. - - Source: https://core.telegram.org/bots/api#getstickerset - - :param name: Name of the sticker set - :type name: :obj:`base.String` - :return: On success, a StickerSet object is returned - :rtype: :obj:`types.StickerSet` - """ - payload = generate_payload(**locals()) - - result = await self.request(api.Methods.GET_STICKER_SET, payload) - return types.StickerSet(**result) - - async def upload_sticker_file(self, user_id: base.Integer, png_sticker: base.InputFile) -> types.File: - """ - Use this method to upload a .png file with a sticker for later use in createNewStickerSet - and addStickerToSet methods (can be used multiple times). - - Source: https://core.telegram.org/bots/api#uploadstickerfile - - :param user_id: User identifier of sticker file owner - :type user_id: :obj:`base.Integer` - :param png_sticker: Png image with the sticker, must be up to 512 kilobytes in size, - dimensions must not exceed 512px, and either width or height must be exactly 512px. - :type png_sticker: :obj:`base.InputFile` - :return: Returns the uploaded File on success - :rtype: :obj:`types.File` - """ - payload = generate_payload(**locals(), exclude=['png_sticker']) - - files = {} - prepare_file(payload, files, 'png_sticker', png_sticker) - - result = await self.request(api.Methods.UPLOAD_STICKER_FILE, payload, files) - return types.File(**result) - - async def create_new_sticker_set(self, - user_id: base.Integer, - name: base.String, - title: base.String, - emojis: base.String, - png_sticker: typing.Union[base.InputFile, base.String] = None, - tgs_sticker: base.InputFile = None, - contains_masks: typing.Optional[base.Boolean] = None, - mask_position: typing.Optional[types.MaskPosition] = None) -> base.Boolean: - """ - Use this method to create a new sticker set owned by a user. - The bot will be able to edit the sticker set thus created. - You must use exactly one of the fields png_sticker or tgs_sticker. - - Source: https://core.telegram.org/bots/api#createnewstickerset - - :param user_id: User identifier of created sticker set owner - :type user_id: :obj:`base.Integer` - :param name: Short name of sticker set, to be used in t.me/addstickers/ URLs (e.g., animals). - Can contain only english letters, digits and underscores. - Must begin with a letter, can't contain consecutive underscores and must end in “_by_”. - is case insensitive. 1-64 characters. - :type name: :obj:`base.String` - :param title: Sticker set title, 1-64 characters - :type title: :obj:`base.String` - :param png_sticker: PNG image with the sticker, must be up to 512 kilobytes in size, - dimensions must not exceed 512px, and either width or height must be exactly 512px. - Pass a file_id as a String to send a file that already exists on the Telegram servers, - pass an HTTP URL as a String for Telegram to get a file from the Internet, or - upload a new one using multipart/form-data. More info on https://core.telegram.org/bots/api#sending-files - :type png_sticker: :obj:`typing.Union[base.InputFile, base.String]` - :param tgs_sticker: TGS animation with the sticker, uploaded using multipart/form-data. - See https://core.telegram.org/animated_stickers#technical-requirements for technical requirements - :type tgs_sticker: :obj:`base.InputFile` - :param emojis: One or more emoji corresponding to the sticker - :type emojis: :obj:`base.String` - :param contains_masks: Pass True, if a set of mask stickers should be created - :type contains_masks: :obj:`typing.Optional[base.Boolean]` - :param mask_position: A JSON-serialized object for position where the mask should be placed on faces - :type mask_position: :obj:`typing.Optional[types.MaskPosition]` - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - mask_position = prepare_arg(mask_position) - payload = generate_payload(**locals(), exclude=['png_sticker', 'tgs_sticker']) - - files = {} - prepare_file(payload, files, 'png_sticker', png_sticker) - prepare_file(payload, files, 'tgs_sticker', tgs_sticker) - - return await self.request(api.Methods.CREATE_NEW_STICKER_SET, payload, files) - - async def add_sticker_to_set(self, - user_id: base.Integer, - name: base.String, - emojis: base.String, - png_sticker: typing.Union[base.InputFile, base.String] = None, - tgs_sticker: base.InputFile = None, - mask_position: typing.Optional[types.MaskPosition] = None) -> base.Boolean: - """ - Use this method to add a new sticker to a set created by the bot. - You must use exactly one of the fields png_sticker or tgs_sticker. - Animated stickers can be added to animated sticker sets and only to them. - Animated sticker sets can have up to 50 stickers. - Static sticker sets can have up to 120 stickers. - - Source: https://core.telegram.org/bots/api#addstickertoset - - :param user_id: User identifier of sticker set owner - :type user_id: :obj:`base.Integer` - :param name: Sticker set name - :type name: :obj:`base.String` - :param png_sticker: PNG image with the sticker, must be up to 512 kilobytes in size, - dimensions must not exceed 512px, and either width or height must be exactly 512px. - Pass a file_id as a String to send a file that already exists on the Telegram servers, - pass an HTTP URL as a String for Telegram to get a file from the Internet, or - upload a new one using multipart/form-data. More info on https://core.telegram.org/bots/api#sending-files - :type png_sticker: :obj:`typing.Union[base.InputFile, base.String]` - :param tgs_sticker: TGS animation with the sticker, uploaded using multipart/form-data. - See https://core.telegram.org/animated_stickers#technical-requirements for technical requirements - :type tgs_sticker: :obj:`base.InputFile` - :param emojis: One or more emoji corresponding to the sticker - :type emojis: :obj:`base.String` - :param mask_position: A JSON-serialized object for position where the mask should be placed on faces - :type mask_position: :obj:`typing.Optional[types.MaskPosition]` - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - mask_position = prepare_arg(mask_position) - payload = generate_payload(**locals(), exclude=['png_sticker', 'tgs_sticker']) - - files = {} - prepare_file(payload, files, 'png_sticker', png_sticker) - prepare_file(payload, files, 'tgs_sticker', tgs_sticker) - - return await self.request(api.Methods.ADD_STICKER_TO_SET, payload, files) - - async def set_sticker_position_in_set(self, sticker: base.String, position: base.Integer) -> base.Boolean: - """ - Use this method to move a sticker in a set created by the bot to a specific position. - - Source: https://core.telegram.org/bots/api#setstickerpositioninset - - :param sticker: File identifier of the sticker - :type sticker: :obj:`base.String` - :param position: New sticker position in the set, zero-based - :type position: :obj:`base.Integer` - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - payload = generate_payload(**locals()) - - return await self.request(api.Methods.SET_STICKER_POSITION_IN_SET, payload) - - async def delete_sticker_from_set(self, sticker: base.String) -> base.Boolean: - """ - Use this method to delete a sticker from a set created by the bot. - - Source: https://core.telegram.org/bots/api#deletestickerfromset - - :param sticker: File identifier of the sticker - :type sticker: :obj:`base.String` - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - payload = generate_payload(**locals()) - - return await self.request(api.Methods.DELETE_STICKER_FROM_SET, payload) - - async def set_sticker_set_thumb(self, - name: base.String, - user_id: base.Integer, - thumb: typing.Union[base.InputFile, base.String] = None) -> base.Boolean: - """ - Use this method to set the thumbnail of a sticker set. - Animated thumbnails can be set for animated sticker sets only. - - Source: https://core.telegram.org/bots/api#setstickersetthumb - - :param name: Sticker set name - :type name: :obj:`base.String` - :param user_id: User identifier of the sticker set owner - :type user_id: :obj:`base.Integer` - :param thumb: A PNG image with the thumbnail, must be up to 128 kilobytes in size and have width and height - exactly 100px, or a TGS animation with the thumbnail up to 32 kilobytes in size; - see https://core.telegram.org/animated_stickers#technical-requirements for animated sticker technical - requirements. Pass a file_id as a String to send a file that already exists on the Telegram servers, - pass an HTTP URL as a String for Telegram to get a file from the Internet, or upload a new one using - multipart/form-data. More info on https://core.telegram.org/bots/api#sending-files. - Animated sticker set thumbnail can't be uploaded via HTTP URL. - :type thumb: :obj:`typing.Union[base.InputFile, base.String]` - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - payload = generate_payload(**locals(), exclude=['thumb']) - - files = {} - prepare_file(payload, files, 'thumb', thumb) - - return await self.request(api.Methods.SET_STICKER_SET_THUMB, payload, files) - - async def answer_inline_query(self, inline_query_id: base.String, - results: typing.List[types.InlineQueryResult], - cache_time: typing.Optional[base.Integer] = None, - is_personal: typing.Optional[base.Boolean] = None, - next_offset: typing.Optional[base.String] = None, - switch_pm_text: typing.Optional[base.String] = None, - switch_pm_parameter: typing.Optional[base.String] = None) -> base.Boolean: - """ - Use this method to send answers to an inline query. - No more than 50 results per query are allowed. - - Source: https://core.telegram.org/bots/api#answerinlinequery - - :param inline_query_id: Unique identifier for the answered query - :type inline_query_id: :obj:`base.String` - :param results: A JSON-serialized array of results for the inline query - :type results: :obj:`typing.List[types.InlineQueryResult]` - :param cache_time: The maximum amount of time in seconds that the result of the - inline query may be cached on the server. Defaults to 300. - :type cache_time: :obj:`typing.Optional[base.Integer]` - :param is_personal: Pass True, if results may be cached on the server side only - for the user that sent the query. By default, results may be returned to any user who sends the same query - :type is_personal: :obj:`typing.Optional[base.Boolean]` - :param next_offset: Pass the offset that a client should send in the - next query with the same text to receive more results. - Pass an empty string if there are no more results or if you don‘t support pagination. - Offset length can’t exceed 64 bytes. - :type next_offset: :obj:`typing.Optional[base.String]` - :param switch_pm_text: If passed, clients will display a button with specified text that - switches the user to a private chat with the bot and sends the bot a start message - with the parameter switch_pm_parameter - :type switch_pm_text: :obj:`typing.Optional[base.String]` - :param switch_pm_parameter: Deep-linking parameter for the /start message sent to the bot when - user presses the switch button. 1-64 characters, only A-Z, a-z, 0-9, _ and - are allowed. - :type switch_pm_parameter: :obj:`typing.Optional[base.String]` - :return: On success, True is returned - :rtype: :obj:`base.Boolean` - """ - results = prepare_arg(results) - payload = generate_payload(**locals()) - - return await self.request(api.Methods.ANSWER_INLINE_QUERY, payload) - - # === Payments === - # https://core.telegram.org/bots/api#payments - - async def send_invoice(self, - chat_id: typing.Union[base.Integer, base.String], - title: base.String, - description: base.String, - payload: base.String, - provider_token: base.String, - currency: base.String, - prices: typing.List[types.LabeledPrice], - max_tip_amount: typing.Optional[base.Integer] = None, - suggested_tip_amounts: typing.Optional[ - typing.List[base.Integer] - ] = None, - start_parameter: typing.Optional[base.String] = None, - provider_data: typing.Optional[typing.Dict] = None, - photo_url: typing.Optional[base.String] = None, - photo_size: typing.Optional[base.Integer] = None, - photo_width: typing.Optional[base.Integer] = None, - photo_height: typing.Optional[base.Integer] = None, - need_name: typing.Optional[base.Boolean] = None, - need_phone_number: typing.Optional[base.Boolean] = None, - need_email: typing.Optional[base.Boolean] = None, - need_shipping_address: typing.Optional[base.Boolean] = None, - send_phone_number_to_provider: typing.Optional[base.Boolean] = None, - send_email_to_provider: typing.Optional[base.Boolean] = None, - is_flexible: typing.Optional[base.Boolean] = None, - disable_notification: typing.Optional[base.Boolean] = None, - reply_to_message_id: typing.Optional[base.Integer] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Optional[types.InlineKeyboardMarkup] = None, - ) -> types.Message: - """ - Use this method to send invoices. - - Source: https://core.telegram.org/bots/api#sendinvoice - - :param chat_id: Unique identifier for the target chat or - username of the target channel (in the format - @channelusername) - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - - :param title: Product name, 1-32 characters - :type title: :obj:`base.String` - - :param description: Product description, 1-255 characters - :type description: :obj:`base.String` - - :param payload: Bot-defined invoice payload, 1-128 bytes - This will not be displayed to the user, use for your internal processes. - :type payload: :obj:`base.String` - - :param provider_token: Payments provider token, obtained via Botfather - :type provider_token: :obj:`base.String` - - :param currency: Three-letter ISO 4217 currency code, see more on currencies - :type currency: :obj:`base.String` - - :param prices: Price breakdown, a list of components - (e.g. product price, tax, discount, delivery cost, delivery tax, bonus, etc.) - :type prices: :obj:`typing.List[types.LabeledPrice]` - - :param max_tip_amount: The maximum accepted amount for tips in - the smallest units of the currency (integer, not - float/double). For example, for a maximum tip of US$ 1.45 - pass max_tip_amount = 145. See the exp parameter in - currencies.json, it shows the number of digits past the - decimal point for each currency (2 for the majority of - currencies). Defaults to 0 - :type max_tip_amount: :obj:`typing.Optional[base.Integer]` - - :param suggested_tip_amounts: A JSON-serialized array of suggested - amounts of tips in the smallest units of the currency - (integer, not float/double). At most 4 suggested tip amounts - can be specified. The suggested tip amounts must be - positive, passed in a strictly increased order and must not - exceed max_tip_amount. - :type suggested_tip_amounts: :obj:`typing.Optional[typing.List[base.Integer]]` - - :param start_parameter: Unique deep-linking parameter. If left - empty, forwarded copies of the sent message will have a Pay - button, allowing multiple users to pay directly from the - forwarded message, using the same invoice. If non-empty, - forwarded copies of the sent message will have a URL button - with a deep link to the bot (instead of a Pay button), with - the value used as the start parameter - :type start_parameter: :obj:`typing.Optional[base.String]` - - :param provider_data: JSON-encoded data about the invoice, which will be shared with the payment provider - :type provider_data: :obj:`typing.Optional[typing.Dict]` - - :param photo_url: URL of the product photo for the invoice - :type photo_url: :obj:`typing.Optional[base.String]` - - :param photo_size: Photo size - :type photo_size: :obj:`typing.Optional[base.Integer]` - - :param photo_width: Photo width - :type photo_width: :obj:`typing.Optional[base.Integer]` - - :param photo_height: Photo height - :type photo_height: :obj:`typing.Optional[base.Integer]` - - :param need_name: Pass True, if you require the user's full name to complete the order - :type need_name: :obj:`typing.Optional[base.Boolean]` - - :param need_phone_number: Pass True, if you require the user's phone number to complete the order - :type need_phone_number: :obj:`typing.Optional[base.Boolean]` - - :param need_email: Pass True, if you require the user's email to complete the order - :type need_email: :obj:`typing.Optional[base.Boolean]` - - :param need_shipping_address: Pass True, if you require the user's shipping address to complete the order - :type need_shipping_address: :obj:`typing.Optional[base.Boolean]` - - :param send_phone_number_to_provider: Pass True, if user's phone number should be sent to provider - :type send_phone_number_to_provider: :obj:`typing.Optional[base.Boolean]` - - :param send_email_to_provider: Pass True, if user's email address should be sent to provider - :type send_email_to_provider: :obj:`typing.Optional[base.Boolean]` - - :param is_flexible: Pass True, if the final price depends on the shipping method - :type is_flexible: :obj:`typing.Optional[base.Boolean]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param reply_to_message_id: If the message is a reply, ID of the original message - :type reply_to_message_id: :obj:`typing.Optional[base.Integer]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: A JSON-serialized object for an inline keyboard - If empty, one 'Pay total price' button will be shown. If not empty, the first button must be a Pay button. - :type reply_markup: :obj:`typing.Optional[types.InlineKeyboardMarkup]` - - :return: On success, the sent Message is returned - :rtype: :obj:`types.Message` - """ - prices = prepare_arg([price.to_python() if hasattr(price, 'to_python') else price for price in prices]) - reply_markup = prepare_arg(reply_markup) - provider_data = prepare_arg(provider_data) - payload_ = generate_payload(**locals()) - - result = await self.request(api.Methods.SEND_INVOICE, payload_) - return types.Message(**result) - - async def answer_shipping_query(self, shipping_query_id: base.String, ok: base.Boolean, - shipping_options: typing.Union[typing.List[types.ShippingOption], None] = None, - error_message: typing.Optional[base.String] = None) -> base.Boolean: - """ - If you sent an invoice requesting a shipping address and the parameter is_flexible was specified, - the Bot API will send an Update with a shipping_query field to the bot. - - Source: https://core.telegram.org/bots/api#answershippingquery - - :param shipping_query_id: Unique identifier for the query to be answered - :type shipping_query_id: :obj:`base.String` - :param ok: Specify True if delivery to the specified address is possible and False if there are any problems - (for example, if delivery to the specified address is not possible) - :type ok: :obj:`base.Boolean` - :param shipping_options: Required if ok is True. A JSON-serialized array of available shipping options - :type shipping_options: :obj:`typing.Union[typing.List[types.ShippingOption], None]` - :param error_message: Required if ok is False - Error message in human readable form that explains why it is impossible to complete the order - (e.g. "Sorry, delivery to your desired address is unavailable'). - Telegram will display this message to the user. - :type error_message: :obj:`typing.Optional[base.String]` - :return: On success, True is returned - :rtype: :obj:`base.Boolean` - """ - if shipping_options: - shipping_options = prepare_arg([shipping_option.to_python() - if hasattr(shipping_option, 'to_python') - else shipping_option - for shipping_option in shipping_options]) - payload = generate_payload(**locals()) - - return await self.request(api.Methods.ANSWER_SHIPPING_QUERY, payload) - - async def answer_pre_checkout_query(self, pre_checkout_query_id: base.String, ok: base.Boolean, - error_message: typing.Optional[base.String] = None) -> base.Boolean: - """ - Once the user has confirmed their payment and shipping details, - the Bot API sends the final confirmation in the form of an Update with the field pre_checkout_query. - Use this method to respond to such pre-checkout queries. - - Source: https://core.telegram.org/bots/api#answerprecheckoutquery - - :param pre_checkout_query_id: Unique identifier for the query to be answered - :type pre_checkout_query_id: :obj:`base.String` - :param ok: Specify True if everything is alright (goods are available, etc.) and the - bot is ready to proceed with the order. Use False if there are any problems. - :type ok: :obj:`base.Boolean` - :param error_message: Required if ok is False - Error message in human readable form that explains the reason for failure to proceed with the checkout - (e.g. "Sorry, somebody just bought the last of our amazing black T-shirts while you were busy filling - out your payment details. Please choose a different color or garment!"). - Telegram will display this message to the user. - :type error_message: :obj:`typing.Optional[base.String]` - :return: On success, True is returned - :rtype: :obj:`base.Boolean` - """ - payload = generate_payload(**locals()) - - return await self.request(api.Methods.ANSWER_PRE_CHECKOUT_QUERY, payload) - - # === Games === - # https://core.telegram.org/bots/api#games - - async def set_passport_data_errors(self, - user_id: base.Integer, - errors: typing.List[types.PassportElementError]) -> base.Boolean: - """ - Informs a user that some of the Telegram Passport elements they provided contains errors. - The user will not be able to re-submit their Passport to you until the errors are fixed - (the contents of the field for which you returned the error must change). - Returns True on success. - - Use this if the data submitted by the user doesn't satisfy the standards your service - requires for any reason. For example, if a birthday date seems invalid, a submitted document - is blurry, a scan shows evidence of tampering, etc. Supply some details in the error message - to make sure the user knows how to correct the issues. - - Source https://core.telegram.org/bots/api#setpassportdataerrors - - :param user_id: User identifier - :type user_id: :obj:`base.Integer` - :param errors: A JSON-serialized array describing the errors - :type errors: :obj:`typing.List[types.PassportElementError]` - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - errors = prepare_arg(errors) - payload = generate_payload(**locals()) - - return await self.request(api.Methods.SET_PASSPORT_DATA_ERRORS, payload) - - # === Games === - # https://core.telegram.org/bots/api#games - - async def send_game(self, - chat_id: base.Integer, - game_short_name: base.String, - disable_notification: typing.Optional[base.Boolean] = None, - reply_to_message_id: typing.Optional[base.Integer] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Optional[types.InlineKeyboardMarkup] = None, - ) -> types.Message: - """ - Use this method to send a game. - - Source: https://core.telegram.org/bots/api#sendgame - - :param chat_id: Unique identifier for the target chat - :type chat_id: :obj:`base.Integer` - - :param game_short_name: Short name of the game, serves as the unique identifier for the game. - Set up your games via Botfather. - :type game_short_name: :obj:`base.String` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param reply_to_message_id: If the message is a reply, ID of the original message - :type reply_to_message_id: :obj:`typing.Optional[base.Integer]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: A JSON-serialized object for an inline keyboard - If empty, one ‘Play game_title’ button will be shown. If not empty, the first button must launch the game. - :type reply_markup: :obj:`typing.Optional[types.InlineKeyboardMarkup]` - - :return: On success, the sent Message is returned - :rtype: :obj:`types.Message` - """ - reply_markup = prepare_arg(reply_markup) - payload = generate_payload(**locals()) - - result = await self.request(api.Methods.SEND_GAME, payload) - return types.Message(**result) - - async def set_game_score(self, user_id: base.Integer, score: base.Integer, - force: typing.Optional[base.Boolean] = None, - disable_edit_message: typing.Optional[base.Boolean] = None, - chat_id: typing.Optional[base.Integer] = None, - message_id: typing.Optional[base.Integer] = None, - inline_message_id: typing.Union[base.String, - None] = None) -> types.Message or base.Boolean: - """ - Use this method to set the score of the specified user in a game. - - Source: https://core.telegram.org/bots/api#setgamescore - - :param user_id: User identifier - :type user_id: :obj:`base.Integer` - :param score: New score, must be non-negative - :type score: :obj:`base.Integer` - :param force: Pass True, if the high score is allowed to decrease - This can be useful when fixing mistakes or banning cheaters - :type force: :obj:`typing.Optional[base.Boolean]` - :param disable_edit_message: Pass True, if the game message should not be automatically - edited to include the current scoreboard - :type disable_edit_message: :obj:`typing.Optional[base.Boolean]` - :param chat_id: Required if inline_message_id is not specified. Unique identifier for the target chat - :type chat_id: :obj:`typing.Optional[base.Integer]` - :param message_id: Required if inline_message_id is not specified. Identifier of the sent message - :type message_id: :obj:`typing.Optional[base.Integer]` - :param inline_message_id: Required if chat_id and message_id are not specified. Identifier of the inline message - :type inline_message_id: :obj:`typing.Optional[base.String]` - :return: On success, if the message was sent by the bot, returns the edited Message, otherwise returns True - Returns an error, if the new score is not greater than the user's - current score in the chat and force is False. - :rtype: :obj:`typing.Union[types.Message, base.Boolean]` - """ - payload = generate_payload(**locals()) - - result = await self.request(api.Methods.SET_GAME_SCORE, payload) - if isinstance(result, bool): - return result - return types.Message(**result) - - async def get_game_high_scores(self, user_id: base.Integer, - chat_id: typing.Optional[base.Integer] = None, - message_id: typing.Optional[base.Integer] = None, - inline_message_id: typing.Union[base.String, - None] = None) -> typing.List[types.GameHighScore]: - """ - Use this method to get data for high score tables. - - This method will currently return scores for the target user, plus two of his closest neighbors on each side. - Will also return the top three users if the user and his neighbors are not among them. - Please note that this behavior is subject to change. - - Source: https://core.telegram.org/bots/api#getgamehighscores - - :param user_id: Target user id - :type user_id: :obj:`base.Integer` - :param chat_id: Required if inline_message_id is not specified. Unique identifier for the target chat - :type chat_id: :obj:`typing.Optional[base.Integer]` - :param message_id: Required if inline_message_id is not specified. Identifier of the sent message - :type message_id: :obj:`typing.Optional[base.Integer]` - :param inline_message_id: Required if chat_id and message_id are not specified. Identifier of the inline message - :type inline_message_id: :obj:`typing.Optional[base.String]` - :return: Will return the score of the specified user and several of his neighbors in a game - On success, returns an Array of GameHighScore objects. - This method will currently return scores for the target user, - plus two of his closest neighbors on each side. Will also return the top three users if the - user and his neighbors are not among them. - :rtype: :obj:`typing.List[types.GameHighScore]` - """ - payload = generate_payload(**locals()) - result = await self.request(api.Methods.GET_GAME_HIGH_SCORES, payload) - - return [types.GameHighScore(**gamehighscore) for gamehighscore in result] diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/__init__.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/__pycache__/__init__.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index 9b060ae41606aacf2dea7b11e37ce6b20b9301af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 176 zcmYe~<>g`kf=A4ji6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o100#VV$tGNvdo zFC{-WrZ_nxKR+iXGdndgzBsukv7jKeC`PX=HLonjCo?IgII|>Gw;(Y&J25@AI3_VO tKfNe1S3fyFucRn5Nk2Y5GcU6wK3=b&@)n0pZhlH>PO2Tqy3at&006V!E?NKp diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/fsm_storage/__init__.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/fsm_storage/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/fsm_storage/__pycache__/__init__.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/fsm_storage/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index 189e9f6a17e745a240bb1edb3fd51d38fec551a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 188 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 ODP8JNw7G3m&A$Lqo{0?r diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/fsm_storage/__pycache__/mongo.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/fsm_storage/__pycache__/mongo.cpython-39.pyc deleted file mode 100644 index e591095ed55a212034e941856ea9b29f4a6f3c8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7341 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 K{099B#{U4*UEP-e diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/fsm_storage/__pycache__/redis.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/fsm_storage/__pycache__/redis.cpython-39.pyc deleted file mode 100644 index d5830cd8f7992ea6a1c3b975904245b83a9f113b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13671 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 typing.Optional[str]: - chat, user = self.resolve_address(chat=chat, user=user) - return self.data[chat][user].get("state", self.resolve_state(default)) - - async def get_data(self, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None, - default: typing.Optional[str] = None) -> typing.Dict: - chat, user = self.resolve_address(chat=chat, user=user) - return copy.deepcopy(self.data[chat][user]['data']) - - async def update_data(self, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None, - data: typing.Dict = None, **kwargs): - if data is None: - data = {} - chat, user = self.resolve_address(chat=chat, user=user) - self.data[chat][user]['data'].update(data, **kwargs) - - async def set_state(self, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None, - state: typing.AnyStr = None): - chat, user = self.resolve_address(chat=chat, user=user) - self.data[chat][user]['state'] = self.resolve_state(state) - - async def set_data(self, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None, - data: typing.Dict = None): - chat, user = self.resolve_address(chat=chat, user=user) - self.data[chat][user]['data'] = copy.deepcopy(data) - self._cleanup(chat, user) - - async def reset_state(self, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None, - with_data: typing.Optional[bool] = True): - await self.set_state(chat=chat, user=user, state=None) - if with_data: - await self.set_data(chat=chat, user=user, data={}) - self._cleanup(chat, user) - - def has_bucket(self): - return True - - async def get_bucket(self, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None, - default: typing.Optional[dict] = None) -> typing.Dict: - chat, user = self.resolve_address(chat=chat, user=user) - return copy.deepcopy(self.data[chat][user]['bucket']) - - async def set_bucket(self, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None, - bucket: typing.Dict = None): - chat, user = self.resolve_address(chat=chat, user=user) - self.data[chat][user]['bucket'] = copy.deepcopy(bucket) - self._cleanup(chat, user) - - async def update_bucket(self, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None, - bucket: typing.Dict = None, **kwargs): - if bucket is None: - bucket = {} - chat, user = self.resolve_address(chat=chat, user=user) - self.data[chat][user]['bucket'].update(bucket, **kwargs) - - def _cleanup(self, chat, user): - chat, user = self.resolve_address(chat=chat, user=user) - if self.data[chat][user] == {'state': None, 'data': {}, 'bucket': {}}: - del self.data[chat][user] - if not self.data[chat]: - del self.data[chat] diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/fsm_storage/mongo.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/fsm_storage/mongo.py deleted file mode 100644 index ab7d3176..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/fsm_storage/mongo.py +++ /dev/null @@ -1,224 +0,0 @@ -""" -This module has mongo storage for finite-state machine - based on `motor `_ driver -""" - -from typing import Union, Dict, Optional, List, Tuple, AnyStr - - -try: - import pymongo - import motor - from motor.motor_asyncio import AsyncIOMotorClient, AsyncIOMotorDatabase -except ModuleNotFoundError as e: - import warnings - warnings.warn("Install motor with `pip install motor`") - raise e - -from ...dispatcher.storage import BaseStorage - -STATE = 'aiogram_state' -DATA = 'aiogram_data' -BUCKET = 'aiogram_bucket' -COLLECTIONS = (STATE, DATA, BUCKET) - - -class MongoStorage(BaseStorage): - """ - Mongo-based storage for FSM. - - Usage: - - .. code-block:: python3 - - storage = MongoStorage(host='localhost', port=27017, db_name='aiogram_fsm') - dp = Dispatcher(bot, storage=storage) - - And need to close Mongo client connections when shutdown - - .. code-block:: python3 - - await dp.storage.close() - await dp.storage.wait_closed() - """ - - def __init__(self, host='localhost', port=27017, db_name='aiogram_fsm', uri=None, - username=None, password=None, index=True, **kwargs): - self._host = host - self._port = port - self._db_name: str = db_name - self._uri = uri - self._username = username - self._password = password - self._kwargs = kwargs - - self._mongo: Optional[AsyncIOMotorClient] = None - self._db: Optional[AsyncIOMotorDatabase] = None - - self._index = index - - async def get_client(self) -> AsyncIOMotorClient: - if isinstance(self._mongo, AsyncIOMotorClient): - return self._mongo - - if self._uri: - try: - self._mongo = AsyncIOMotorClient(self._uri) - except pymongo.errors.ConfigurationError as e: - if "query() got an unexpected keyword argument 'lifetime'" in e.args[0]: - import logging - logger = logging.getLogger("aiogram") - logger.warning("Run `pip install dnspython==1.16.0` in order to fix ConfigurationError. More information: https://github.com/mongodb/mongo-python-driver/pull/423#issuecomment-528998245") - raise e - return self._mongo - - uri = 'mongodb://' - - # set username + password - if self._username and self._password: - uri += f'{self._username}:{self._password}@' - - # set host and port (optional) - uri += f'{self._host}:{self._port}' if self._host else f'localhost:{self._port}' - - # define and return client - self._mongo = AsyncIOMotorClient(uri) - return self._mongo - - async def get_db(self) -> AsyncIOMotorDatabase: - """ - Get Mongo db - - This property is awaitable. - """ - if isinstance(self._db, AsyncIOMotorDatabase): - return self._db - - mongo = await self.get_client() - self._db = mongo.get_database(self._db_name) - - if self._index: - await self.apply_index(self._db) - return self._db - - @staticmethod - async def apply_index(db): - for collection in COLLECTIONS: - await db[collection].create_index(keys=[('chat', 1), ('user', 1)], - name="chat_user_idx", unique=True, background=True) - - async def close(self): - if self._mongo: - self._mongo.close() - - async def wait_closed(self): - return True - - async def set_state(self, *, - chat: Union[str, int, None] = None, - user: Union[str, int, None] = None, - state: Optional[AnyStr] = None): - chat, user = self.check_address(chat=chat, user=user) - db = await self.get_db() - - if state is None: - await db[STATE].delete_one(filter={'chat': chat, 'user': user}) - else: - await db[STATE].update_one( - filter={'chat': chat, 'user': user}, - update={'$set': {'state': self.resolve_state(state)}}, - upsert=True, - ) - - async def get_state(self, *, chat: Union[str, int, None] = None, user: Union[str, int, None] = None, - default: Optional[str] = None) -> Optional[str]: - chat, user = self.check_address(chat=chat, user=user) - db = await self.get_db() - result = await db[STATE].find_one(filter={'chat': chat, 'user': user}) - - return result.get('state') if result else self.resolve_state(default) - - async def set_data(self, *, chat: Union[str, int, None] = None, user: Union[str, int, None] = None, - data: Dict = None): - chat, user = self.check_address(chat=chat, user=user) - db = await self.get_db() - if not data: - await db[DATA].delete_one(filter={'chat': chat, 'user': user}) - else: - await db[DATA].update_one(filter={'chat': chat, 'user': user}, - update={'$set': {'data': data}}, upsert=True) - - async def get_data(self, *, chat: Union[str, int, None] = None, user: Union[str, int, None] = None, - default: Optional[dict] = None) -> Dict: - chat, user = self.check_address(chat=chat, user=user) - db = await self.get_db() - result = await db[DATA].find_one(filter={'chat': chat, 'user': user}) - - return result.get('data') if result else default or {} - - async def update_data(self, *, chat: Union[str, int, None] = None, user: Union[str, int, None] = None, - data: Dict = None, **kwargs): - if data is None: - data = {} - temp_data = await self.get_data(chat=chat, user=user, default={}) - temp_data.update(data, **kwargs) - await self.set_data(chat=chat, user=user, data=temp_data) - - def has_bucket(self): - return True - - async def get_bucket(self, *, chat: Union[str, int, None] = None, user: Union[str, int, None] = None, - default: Optional[dict] = None) -> Dict: - chat, user = self.check_address(chat=chat, user=user) - db = await self.get_db() - result = await db[BUCKET].find_one(filter={'chat': chat, 'user': user}) - return result.get('bucket') if result else default or {} - - async def set_bucket(self, *, chat: Union[str, int, None] = None, user: Union[str, int, None] = None, - bucket: Dict = None): - chat, user = self.check_address(chat=chat, user=user) - db = await self.get_db() - - await db[BUCKET].update_one(filter={'chat': chat, 'user': user}, - update={'$set': {'bucket': bucket}}, upsert=True) - - async def update_bucket(self, *, chat: Union[str, int, None] = None, - user: Union[str, int, None] = None, - bucket: Dict = None, **kwargs): - if bucket is None: - bucket = {} - temp_bucket = await self.get_bucket(chat=chat, user=user) - temp_bucket.update(bucket, **kwargs) - await self.set_bucket(chat=chat, user=user, bucket=temp_bucket) - - async def reset_all(self, full=True): - """ - Reset states in DB - - :param full: clean DB or clean only states - :return: - """ - db = await self.get_db() - - await db[STATE].drop() - - if full: - await db[DATA].drop() - await db[BUCKET].drop() - - async def get_states_list(self) -> List[Tuple[int, int]]: - """ - Get list of all stored chat's and user's - - :return: list of tuples where first element is chat id and second is user id - """ - db = await self.get_db() - result = [] - - items = await db[STATE].find().to_list() - for item in items: - result.append( - (int(item['chat']), int(item['user'])) - ) - - return result diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/fsm_storage/redis.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/fsm_storage/redis.py deleted file mode 100644 index 5d0b762c..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/fsm_storage/redis.py +++ /dev/null @@ -1,414 +0,0 @@ -""" -This module has redis storage for finite-state machine based on `aioredis `_ driver -""" - -import asyncio -import logging -import typing - -import aioredis - -from ...dispatcher.storage import BaseStorage -from ...utils import json - -STATE_KEY = 'state' -STATE_DATA_KEY = 'data' -STATE_BUCKET_KEY = 'bucket' - - -class RedisStorage(BaseStorage): - """ - Simple Redis-base storage for FSM. - - Usage: - - .. code-block:: python3 - - storage = RedisStorage('localhost', 6379, db=5) - dp = Dispatcher(bot, storage=storage) - - And need to close Redis connection when shutdown - - .. code-block:: python3 - - await dp.storage.close() - await dp.storage.wait_closed() - - """ - def __init__(self, host='localhost', port=6379, db=None, password=None, ssl=None, loop=None, **kwargs): - self._host = host - self._port = port - self._db = db - self._password = password - self._ssl = ssl - self._loop = loop or asyncio.get_event_loop() - self._kwargs = kwargs - - self._redis: typing.Optional[aioredis.RedisConnection] = None - self._connection_lock = asyncio.Lock(loop=self._loop) - - async def close(self): - async with self._connection_lock: - if self._redis and not self._redis.closed: - self._redis.close() - - async def wait_closed(self): - async with self._connection_lock: - if self._redis: - return await self._redis.wait_closed() - return True - - async def redis(self) -> aioredis.RedisConnection: - """ - Get Redis connection - """ - # Use thread-safe asyncio Lock because this method without that is not safe - async with self._connection_lock: - if self._redis is None or self._redis.closed: - self._redis = await aioredis.create_connection((self._host, self._port), - db=self._db, password=self._password, ssl=self._ssl, - loop=self._loop, - **self._kwargs) - return self._redis - - async def get_record(self, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None) -> typing.Dict: - """ - Get record from storage - - :param chat: - :param user: - :return: - """ - chat, user = self.check_address(chat=chat, user=user) - addr = f"fsm:{chat}:{user}" - - conn = await self.redis() - data = await conn.execute('GET', addr) - if data is None: - return {'state': None, 'data': {}} - return json.loads(data) - - async def set_record(self, *, chat: typing.Union[str, int, None] = None, user: typing.Union[str, int, None] = None, - state=None, data=None, bucket=None): - """ - Write record to storage - - :param bucket: - :param chat: - :param user: - :param state: - :param data: - :return: - """ - if data is None: - data = {} - if bucket is None: - bucket = {} - - chat, user = self.check_address(chat=chat, user=user) - addr = f"fsm:{chat}:{user}" - - conn = await self.redis() - if state is None and data == bucket == {}: - await conn.execute('DEL', addr) - else: - record = {'state': state, 'data': data, 'bucket': bucket} - await conn.execute('SET', addr, json.dumps(record)) - - async def get_state(self, *, chat: typing.Union[str, int, None] = None, user: typing.Union[str, int, None] = None, - default: typing.Optional[str] = None) -> typing.Optional[str]: - record = await self.get_record(chat=chat, user=user) - return record.get('state', self.resolve_state(default)) - - async def get_data(self, *, chat: typing.Union[str, int, None] = None, user: typing.Union[str, int, None] = None, - default: typing.Optional[str] = None) -> typing.Dict: - record = await self.get_record(chat=chat, user=user) - return record['data'] - - async def set_state(self, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None, - state: typing.Optional[typing.AnyStr] = None): - record = await self.get_record(chat=chat, user=user) - state = self.resolve_state(state) - await self.set_record(chat=chat, user=user, state=state, data=record['data']) - - async def set_data(self, *, chat: typing.Union[str, int, None] = None, user: typing.Union[str, int, None] = None, - data: typing.Dict = None): - record = await self.get_record(chat=chat, user=user) - await self.set_record(chat=chat, user=user, state=record['state'], data=data) - - async def update_data(self, *, chat: typing.Union[str, int, None] = None, user: typing.Union[str, int, None] = None, - data: typing.Dict = None, **kwargs): - if data is None: - data = {} - record = await self.get_record(chat=chat, user=user) - record_data = record.get('data', {}) - record_data.update(data, **kwargs) - await self.set_record(chat=chat, user=user, state=record['state'], data=record_data) - - async def get_states_list(self) -> typing.List[typing.Tuple[str, str]]: - """ - Get list of all stored chat's and user's - - :return: list of tuples where first element is chat id and second is user id - """ - conn = await self.redis() - result = [] - - keys = await conn.execute('KEYS', 'fsm:*') - for item in keys: - *_, chat, user = item.decode('utf-8').split(':') - result.append((chat, user)) - - return result - - async def reset_all(self, full=True): - """ - Reset states in DB - - :param full: clean DB or clean only states - :return: - """ - conn = await self.redis() - - if full: - await conn.execute('FLUSHDB') - else: - keys = await conn.execute('KEYS', 'fsm:*') - await conn.execute('DEL', *keys) - - def has_bucket(self): - return True - - async def get_bucket(self, *, chat: typing.Union[str, int, None] = None, user: typing.Union[str, int, None] = None, - default: typing.Optional[str] = None) -> typing.Dict: - record = await self.get_record(chat=chat, user=user) - return record.get('bucket', {}) - - async def set_bucket(self, *, chat: typing.Union[str, int, None] = None, user: typing.Union[str, int, None] = None, - bucket: typing.Dict = None): - record = await self.get_record(chat=chat, user=user) - await self.set_record(chat=chat, user=user, state=record['state'], data=record['data'], bucket=bucket) - - async def update_bucket(self, *, chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None, - bucket: typing.Dict = None, **kwargs): - record = await self.get_record(chat=chat, user=user) - record_bucket = record.get('bucket', {}) - if bucket is None: - bucket = {} - record_bucket.update(bucket, **kwargs) - await self.set_record(chat=chat, user=user, state=record['state'], data=record_bucket, bucket=bucket) - - -class RedisStorage2(BaseStorage): - """ - Busted Redis-base storage for FSM. - Works with Redis connection pool and customizable keys prefix. - - Usage: - - .. code-block:: python3 - - storage = RedisStorage2('localhost', 6379, db=5, pool_size=10, prefix='my_fsm_key') - dp = Dispatcher(bot, storage=storage) - - And need to close Redis connection when shutdown - - .. code-block:: python3 - - await dp.storage.close() - await dp.storage.wait_closed() - - """ - def __init__(self, host: str = 'localhost', port=6379, db=None, password=None, - ssl=None, pool_size=10, loop=None, prefix='fsm', - state_ttl: int = 0, - data_ttl: int = 0, - bucket_ttl: int = 0, - **kwargs): - self._host = host - self._port = port - self._db = db - self._password = password - self._ssl = ssl - self._pool_size = pool_size - self._loop = loop or asyncio.get_event_loop() - self._kwargs = kwargs - self._prefix = (prefix,) - - self._state_ttl = state_ttl - self._data_ttl = data_ttl - self._bucket_ttl = bucket_ttl - - self._redis: typing.Optional[aioredis.RedisConnection] = None - self._connection_lock = asyncio.Lock(loop=self._loop) - - async def redis(self) -> aioredis.Redis: - """ - Get Redis connection - """ - # Use thread-safe asyncio Lock because this method without that is not safe - async with self._connection_lock: - if self._redis is None or self._redis.closed: - self._redis = await aioredis.create_redis_pool((self._host, self._port), - db=self._db, password=self._password, ssl=self._ssl, - minsize=1, maxsize=self._pool_size, - loop=self._loop, **self._kwargs) - return self._redis - - def generate_key(self, *parts): - return ':'.join(self._prefix + tuple(map(str, parts))) - - async def close(self): - async with self._connection_lock: - if self._redis and not self._redis.closed: - self._redis.close() - - async def wait_closed(self): - async with self._connection_lock: - if self._redis: - return await self._redis.wait_closed() - return True - - async def get_state(self, *, chat: typing.Union[str, int, None] = None, user: typing.Union[str, int, None] = None, - default: typing.Optional[str] = None) -> typing.Optional[str]: - chat, user = self.check_address(chat=chat, user=user) - key = self.generate_key(chat, user, STATE_KEY) - redis = await self.redis() - return await redis.get(key, encoding='utf8') or self.resolve_state(default) - - async def get_data(self, *, chat: typing.Union[str, int, None] = None, user: typing.Union[str, int, None] = None, - default: typing.Optional[dict] = None) -> typing.Dict: - chat, user = self.check_address(chat=chat, user=user) - key = self.generate_key(chat, user, STATE_DATA_KEY) - redis = await self.redis() - raw_result = await redis.get(key, encoding='utf8') - if raw_result: - return json.loads(raw_result) - return default or {} - - async def set_state(self, *, chat: typing.Union[str, int, None] = None, user: typing.Union[str, int, None] = None, - state: typing.Optional[typing.AnyStr] = None): - chat, user = self.check_address(chat=chat, user=user) - key = self.generate_key(chat, user, STATE_KEY) - redis = await self.redis() - if state is None: - await redis.delete(key) - else: - await redis.set(key, self.resolve_state(state), expire=self._state_ttl) - - async def set_data(self, *, chat: typing.Union[str, int, None] = None, user: typing.Union[str, int, None] = None, - data: typing.Dict = None): - chat, user = self.check_address(chat=chat, user=user) - key = self.generate_key(chat, user, STATE_DATA_KEY) - redis = await self.redis() - if data: - await redis.set(key, json.dumps(data), expire=self._data_ttl) - else: - await redis.delete(key) - - async def update_data(self, *, chat: typing.Union[str, int, None] = None, user: typing.Union[str, int, None] = None, - data: typing.Dict = None, **kwargs): - if data is None: - data = {} - temp_data = await self.get_data(chat=chat, user=user, default={}) - temp_data.update(data, **kwargs) - await self.set_data(chat=chat, user=user, data=temp_data) - - def has_bucket(self): - return True - - async def get_bucket(self, *, chat: typing.Union[str, int, None] = None, user: typing.Union[str, int, None] = None, - default: typing.Optional[dict] = None) -> typing.Dict: - chat, user = self.check_address(chat=chat, user=user) - key = self.generate_key(chat, user, STATE_BUCKET_KEY) - redis = await self.redis() - raw_result = await redis.get(key, encoding='utf8') - if raw_result: - return json.loads(raw_result) - return default or {} - - async def set_bucket(self, *, chat: typing.Union[str, int, None] = None, user: typing.Union[str, int, None] = None, - bucket: typing.Dict = None): - chat, user = self.check_address(chat=chat, user=user) - key = self.generate_key(chat, user, STATE_BUCKET_KEY) - redis = await self.redis() - if bucket: - await redis.set(key, json.dumps(bucket), expire=self._bucket_ttl) - else: - await redis.delete(key) - - async def update_bucket(self, *, chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None, - bucket: typing.Dict = None, **kwargs): - if bucket is None: - bucket = {} - temp_bucket = await self.get_bucket(chat=chat, user=user) - temp_bucket.update(bucket, **kwargs) - await self.set_bucket(chat=chat, user=user, bucket=temp_bucket) - - async def reset_all(self, full=True): - """ - Reset states in DB - - :param full: clean DB or clean only states - :return: - """ - conn = await self.redis() - - if full: - await conn.flushdb() - else: - keys = await conn.keys(self.generate_key('*')) - await conn.delete(*keys) - - async def get_states_list(self) -> typing.List[typing.Tuple[str, str]]: - """ - Get list of all stored chat's and user's - - :return: list of tuples where first element is chat id and second is user id - """ - conn = await self.redis() - result = [] - - keys = await conn.keys(self.generate_key('*', '*', STATE_KEY), encoding='utf8') - for item in keys: - *_, chat, user, _ = item.split(':') - result.append((chat, user)) - - return result - - async def import_redis1(self, redis1): - await migrate_redis1_to_redis2(redis1, self) - - -async def migrate_redis1_to_redis2(storage1: RedisStorage, storage2: RedisStorage2): - """ - Helper for migrating from RedisStorage to RedisStorage2 - - :param storage1: instance of RedisStorage - :param storage2: instance of RedisStorage2 - :return: - """ - if not isinstance(storage1, RedisStorage): # better than assertion - raise TypeError(f"{type(storage1)} is not RedisStorage instance.") - if not isinstance(storage2, RedisStorage): - raise TypeError(f"{type(storage2)} is not RedisStorage instance.") - - log = logging.getLogger('aiogram.RedisStorage') - - for chat, user in await storage1.get_states_list(): - state = await storage1.get_state(chat=chat, user=user) - await storage2.set_state(chat=chat, user=user, state=state) - - data = await storage1.get_data(chat=chat, user=user) - await storage2.set_data(chat=chat, user=user, data=data) - - bucket = await storage1.get_bucket(chat=chat, user=user) - await storage2.set_bucket(chat=chat, user=user, bucket=bucket) - - log.info(f"Migrated user {user} in chat {chat}") diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/fsm_storage/rethinkdb.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/fsm_storage/rethinkdb.py deleted file mode 100644 index c600074e..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/fsm_storage/rethinkdb.py +++ /dev/null @@ -1,184 +0,0 @@ -import asyncio -import contextlib -import typing - -import rethinkdb -from rethinkdb.asyncio_net.net_asyncio import Connection - -from ...dispatcher.storage import BaseStorage - -__all__ = ('RethinkDBStorage',) - -r = rethinkdb.RethinkDB() -r.set_loop_type('asyncio') - - -class RethinkDBStorage(BaseStorage): - """ - RethinkDB-based storage for FSM. - - Usage: - - .. code-block:: python3 - - storage = RethinkDBStorage(db='aiogram', table='aiogram', user='aiogram', password='aiogram_secret') - dispatcher = Dispatcher(bot, storage=storage) - - And need to close connection when shutdown - - .. code-block:: python3 - - await storage.close() - await storage.wait_closed() - - """ - - def __init__(self, - host: str = 'localhost', - port: int = 28015, - db: str = 'aiogram', - table: str = 'aiogram', - auth_key: typing.Optional[str] = None, - user: typing.Optional[str] = None, - password: typing.Optional[str] = None, - timeout: int = 20, - ssl: typing.Optional[dict] = None, - loop: typing.Optional[asyncio.AbstractEventLoop] = None): - self._host = host - self._port = port - self._db = db - self._table = table - self._auth_key = auth_key - self._user = user - self._password = password - self._timeout = timeout - self._ssl = ssl or {} - self._loop = loop - - self._conn: typing.Optional[Connection] = None - - async def connect(self) -> Connection: - """ - Get or create a connection. - """ - if self._conn is None: - self._conn = await r.connect(host=self._host, - port=self._port, - db=self._db, - auth_key=self._auth_key, - user=self._user, - password=self._password, - timeout=self._timeout, - ssl=self._ssl, - io_loop=self._loop) - return self._conn - - @contextlib.asynccontextmanager - async def connection(self): - conn = await self.connect() - yield conn - - async def close(self): - """ - Close a connection. - """ - self._conn.close() - self._conn = None - - async def wait_closed(self): - """ - Does nothing - """ - pass - - async def get_state(self, *, chat: typing.Union[str, int, None] = None, user: typing.Union[str, int, None] = None, - default: typing.Optional[str] = None) -> typing.Optional[str]: - chat, user = map(str, self.check_address(chat=chat, user=user)) - async with self.connection() as conn: - return await r.table(self._table).get(chat)[user]['state'].default( - self.resolve_state(default) or None - ).run(conn) - - async def get_data(self, *, chat: typing.Union[str, int, None] = None, user: typing.Union[str, int, None] = None, - default: typing.Optional[str] = None) -> typing.Dict: - chat, user = map(str, self.check_address(chat=chat, user=user)) - async with self.connection() as conn: - return await r.table(self._table).get(chat)[user]['data'].default(default or {}).run(conn) - - async def set_state(self, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None, - state: typing.Optional[typing.AnyStr] = None): - chat, user = map(str, self.check_address(chat=chat, user=user)) - async with self.connection() as conn: - await r.table(self._table).insert( - {'id': chat, user: {'state': self.resolve_state(state)}}, - conflict="update", - ).run(conn) - - async def set_data(self, *, chat: typing.Union[str, int, None] = None, user: typing.Union[str, int, None] = None, - data: typing.Dict = None): - chat, user = map(str, self.check_address(chat=chat, user=user)) - async with self.connection() as conn: - if await r.table(self._table).get(chat).run(conn): - await r.table(self._table).get(chat).update({user: {'data': r.literal(data)}}).run(conn) - else: - await r.table(self._table).insert({'id': chat, user: {'data': data}}).run(conn) - - async def update_data(self, *, chat: typing.Union[str, int, None] = None, user: typing.Union[str, int, None] = None, - data: typing.Dict = None, - **kwargs): - chat, user = map(str, self.check_address(chat=chat, user=user)) - async with self.connection() as conn: - await r.table(self._table).insert({'id': chat, user: {'data': data}}, conflict="update").run(conn) - - def has_bucket(self): - return True - - async def get_bucket(self, *, chat: typing.Union[str, int, None] = None, user: typing.Union[str, int, None] = None, - default: typing.Optional[dict] = None) -> typing.Dict: - chat, user = map(str, self.check_address(chat=chat, user=user)) - async with self.connection() as conn: - return await r.table(self._table).get(chat)[user]['bucket'].default(default or {}).run(conn) - - async def set_bucket(self, *, chat: typing.Union[str, int, None] = None, user: typing.Union[str, int, None] = None, - bucket: typing.Dict = None): - chat, user = map(str, self.check_address(chat=chat, user=user)) - async with self.connection() as conn: - if await r.table(self._table).get(chat).run(conn): - await r.table(self._table).get(chat).update({user: {'bucket': r.literal(bucket)}}).run(conn) - else: - await r.table(self._table).insert({'id': chat, user: {'bucket': bucket}}).run(conn) - - async def update_bucket(self, *, chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None, bucket: typing.Dict = None, - **kwargs): - chat, user = map(str, self.check_address(chat=chat, user=user)) - async with self.connection() as conn: - await r.table(self._table).insert({'id': chat, user: {'bucket': bucket}}, conflict="update").run(conn) - - async def get_states_list(self) -> typing.List[typing.Tuple[int, int]]: - """ - Get list of all stored chat's and user's - - :return: list of tuples where first element is chat id and second is user id - """ - async with self.connection() as conn: - result = [] - - items = (await r.table(self._table).run(conn)).items - - for item in items: - chat = int(item.pop('id')) - for key in item.keys(): - user = int(key) - result.append((chat, user)) - - return result - - async def reset_all(self): - """ - Reset states in DB - """ - async with self.connection() as conn: - await r.table(self._table).delete().run(conn) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/__init__.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/__pycache__/__init__.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index dc47578230344145fe3edef139d6b0fd35f92ee9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 188 zcmYj~Jqp4=6ofZuAwmvfVNxq19zbktA1p7skN8OThus*-k-ULDa-AV`M8)llp zvRsO!=WK&HUm5=@QaL2Yd4d*au_{h?5%T=Q2lW>G1Ocsf2BNw+*8_KiGOB>yQ-EqD zJHnA0h&<5Rqw27w2*|DtXlmu`5V)xgYu(cg1I1cOwme8#`RTFP8K397u0SR0tsu;sUvp(<+kXuHAIg{lj)rT5V6Q z)D!Q}9Qz!+g^zG5kAQ?=X49X5I?~LJ?VZ2RpT){bn}B@xUWlKJkRP~M6dx9^LCsSz zl1Q477{4r|Ig1%3?}_xJe?p|M*s<l5UY+Z~=dlL65rb8)4MPRLV^43#}5|Ulh!b zV)|ediK!$plhG;Jp^{1OWC=3*GB_czFIzH%Z*WR{61Skrl6&y3n5Mcca#h%yB7+1b zxfb-jOEv4@SYl~Sj@cQT5lU*PI3ap9B}cS|eeOvDx#^(iyTD8;r8P#oi1V~aE$1#w z%EGEIw#S@rRJNmAaDGnR66Z-KjN$y8{E~8WSRD+tC}f!rO|n~-*)ZKxf}2E(3epby zQ&midAJXliNv(QTiDXZVlo^V&9BGknU>TimZ{*kLnGJ}znzvsa=m08*pe6!CXqQFQ zr-y5|qSC(_;2(5wHq7!C)NF#O$(W4k5v%E#)okq5X#Hx<24}4q-2Yb(FeBqoKdSN|AxHp0Dvh+An`Jy$p6BCuj_J%DFoYr=K4rA?yA`zP z;gj2uS%^&#kSjqS3Hl9m{s4d?Q>xctba({PRR)^OJ^6O*eWKa=VpFJ|`;6IA3T6$)*wY z=4D_bO*awkhEcoO>-qXFY{zStT<+iSp}#<9jc>CFSjgU7Y;&j4%Xy=(D3-vBh*-z_ E3!*eDaR2}S diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/__pycache__/fsm.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/__pycache__/fsm.cpython-39.pyc deleted file mode 100644 index 8c6fef6f6163ebd6ea366d0216d9c18f6a1813d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3254 zcmZ`*+io015bd7(u6G^hN)iGx;gSplhnqk|NyJSih+rWZfizlam`t~wSiReIN&Zr#^q<+s zo(%K{=txF7MV8>g+O#73G27t67S3J}K_B7mvB(v^2=MkEGlxY!^k`IV>_0uQa-~uO zRe9S(krXoJGsjV%PNb%~$4lun8Jxs4G#WUWO_UBJsRT%Ck&wS=SA*NcIIw%@`FqsmK_ z#DdE2C4Ee)swpx(Op5fOR8c$KR!a7Z*lcp>szsb!*@Fk&%Ap-ACsCWaa>=11bs8UQ zafX&H43#8Tr&8-vn3x!Rk&iFU8$7e_|82gG9ZG8-5hB=uwc`L6PGRj@>b26@w+~ot zKgG#9Q)jU_bSisO7F9FTSs(iMQ>o68UXD&4Np%t3;~KYy16>@cOnYb#g7Fq_^6}+k zO3y3}1A<;Z=}ADZ8OObW*v_fnisPTQlf3>Cwe?mujN#its=hWrP%n`huRv7o2?SG_ z=W#rv8u?C<~jiL;_D7Wa76GW(tqOJIYx>7N#7&|fr6 za0*Ot&iEgMvw%>DDMW~ItQozj|1AFB!C*fAOCUbBGhzV8Nbmsqo}hVug80=iP~;zT zSncFDFsxjhI2_?+fa}$eM&M^U7MUtWp=HpmXt6RrH+VLVrQ`Hn@9HsIy=Kyal6H(BEko6D2u)-VB`EYJAs*7Tc_#kT5C zCy48ve2|FHuIx0|wJAiSGiWmQoX6Z%QpMog3y6hYI8F^KH8Y$bXo8lpV-=l}k^az} zbvcoA9fovG_~MvZ_h|NjgTlRizhnn=VMtSu4HK}}uvOTs+%%VoGI~c11aEyw>P>uA zq-qt=WX(M0HUlB$ka~*vLA^zyO=6yl)D6s0(eGMy|a1rqqh6JawsWzPD!YVHiSDA|vw=L*~+DmvusqbPD}<)*B? zg2grBjwwSQ)<_wX-?&p3PxC=#I3(n&;gYdby-J%=$)xBSOh%{{OtsgO#lwM6#D<0; zssQB*%DZA@6skNx2D!TOh0G;7YMEA&LzL0*b?Qy=GELM}XIw%vR1dNVEWXqTe2X`2 zhc_K+&7kGh`LIz#k(eoZc~U^GOpCCUnHo}2v__Yovq;x9U2P&c2L&2R-Z}|RRWv=i XiYmBWS1EVtmJBVLf`Yf~rPKcb>jk-- diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/__pycache__/i18n.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/__pycache__/i18n.cpython-39.pyc deleted file mode 100644 index 307dce3c061bea5803041a3210c9f65e337f9fd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4621 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 Sk)zCNLvpLqMJ!0M>Hh%?+I1=b diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/__pycache__/logging.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/__pycache__/logging.cpython-39.pyc deleted file mode 100644 index 74c0092eb75a52d9ce9f2801d50c4f6cc9245e9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18965 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 LAyfWvYX1KLoI$iY diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/environment.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/environment.py deleted file mode 100644 index f6ad56dd..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/environment.py +++ /dev/null @@ -1,27 +0,0 @@ -import asyncio - -from aiogram.dispatcher.middlewares import BaseMiddleware - - -class EnvironmentMiddleware(BaseMiddleware): - def __init__(self, context=None): - super(EnvironmentMiddleware, self).__init__() - - if context is None: - context = {} - self.context = context - - def update_data(self, data): - dp = self.manager.dispatcher - data.update( - bot=dp.bot, - dispatcher=dp, - loop=dp.loop or asyncio.get_event_loop() - ) - if self.context: - data.update(self.context) - - async def trigger(self, action, args): - if 'error' not in action and action.startswith('pre_process_'): - self.update_data(args[-1]) - return True diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/fsm.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/fsm.py deleted file mode 100644 index e3550a34..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/fsm.py +++ /dev/null @@ -1,80 +0,0 @@ -import copy -import weakref - -from aiogram.dispatcher.middlewares import LifetimeControllerMiddleware -from aiogram.dispatcher.storage import FSMContext - - -class FSMMiddleware(LifetimeControllerMiddleware): - skip_patterns = ['error', 'update'] - - def __init__(self): - super(FSMMiddleware, self).__init__() - self._proxies = weakref.WeakKeyDictionary() - - async def pre_process(self, obj, data, *args): - proxy = await FSMSStorageProxy.create(self.manager.dispatcher.current_state()) - data['state_data'] = proxy - - async def post_process(self, obj, data, *args): - proxy = data.get('state_data', None) - if isinstance(proxy, FSMSStorageProxy): - await proxy.save() - - -class FSMSStorageProxy(dict): - def __init__(self, fsm_context: FSMContext): - super(FSMSStorageProxy, self).__init__() - self.fsm_context = fsm_context - self._copy = {} - self._data = {} - self._state = None - self._is_dirty = False - - @classmethod - async def create(cls, fsm_context: FSMContext): - """ - :param fsm_context: - :return: - """ - proxy = cls(fsm_context) - await proxy.load() - return proxy - - async def load(self): - self.clear() - self._state = await self.fsm_context.get_state() - self.update(await self.fsm_context.get_data()) - self._copy = copy.deepcopy(self) - self._is_dirty = False - - @property - def state(self): - return self._state - - @state.setter - def state(self, value): - self._state = value - self._is_dirty = True - - @state.deleter - def state(self): - self._state = None - self._is_dirty = True - - async def save(self, force=False): - if self._copy != self or force: - await self.fsm_context.set_data(data=self) - if self._is_dirty or force: - await self.fsm_context.set_state(self.state) - self._is_dirty = False - self._copy = copy.deepcopy(self) - - def __str__(self): - s = super(FSMSStorageProxy, self).__str__() - readable_state = f"'{self.state}'" if self.state else "''" - return f"<{self.__class__.__name__}(state={readable_state}, data={s})>" - - def clear(self): - del self.state - return super(FSMSStorageProxy, self).clear() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/i18n.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/i18n.py deleted file mode 100644 index 1c50a603..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/i18n.py +++ /dev/null @@ -1,154 +0,0 @@ -import gettext -import os -from contextvars import ContextVar -from typing import Any, Dict, Tuple, Optional - -from babel import Locale -from babel.support import LazyProxy - -from ... import types -from ...dispatcher.middlewares import BaseMiddleware - - -class I18nMiddleware(BaseMiddleware): - """ - I18n middleware based on gettext util - - >>> dp = Dispatcher(bot) - >>> i18n = I18nMiddleware(DOMAIN, LOCALES_DIR) - >>> dp.middleware.setup(i18n) - and then - >>> _ = i18n.gettext - or - >>> _ = i18n = I18nMiddleware(DOMAIN_NAME, LOCALES_DIR) - """ - - ctx_locale = ContextVar('ctx_user_locale', default=None) - - def __init__(self, domain, path=None, default='en'): - """ - :param domain: domain - :param path: path where located all *.mo files - :param default: default locale name - """ - super(I18nMiddleware, self).__init__() - - if path is None: - path = os.path.join(os.getcwd(), 'locales') - - self.domain = domain - self.path = path - self.default = default - - self.locales = self.find_locales() - - def find_locales(self) -> Dict[str, gettext.GNUTranslations]: - """ - Load all compiled locales from path - - :return: dict with locales - """ - translations = {} - - for name in os.listdir(self.path): - if not os.path.isdir(os.path.join(self.path, name)): - continue - mo_path = os.path.join(self.path, name, 'LC_MESSAGES', self.domain + '.mo') - - if os.path.exists(mo_path): - with open(mo_path, 'rb') as fp: - translations[name] = gettext.GNUTranslations(fp) - elif os.path.exists(mo_path[:-2] + 'po'): - raise RuntimeError(f"Found locale '{name}' but this language is not compiled!") - - return translations - - def reload(self): - """ - Hot reload locales - """ - self.locales = self.find_locales() - - @property - def available_locales(self) -> Tuple[str]: - """ - list of loaded locales - - :return: - """ - return tuple(self.locales.keys()) - - def __call__(self, singular, plural=None, n=1, locale=None) -> str: - return self.gettext(singular, plural, n, locale) - - def gettext(self, singular, plural=None, n=1, locale=None) -> str: - """ - Get text - - :param singular: - :param plural: - :param n: - :param locale: - :return: - """ - if locale is None: - locale = self.ctx_locale.get() - - if locale not in self.locales: - if n == 1: - return singular - return plural - - translator = self.locales[locale] - - if plural is None: - return translator.gettext(singular) - return translator.ngettext(singular, plural, n) - - def lazy_gettext(self, singular, plural=None, n=1, locale=None, enable_cache=False) -> LazyProxy: - """ - Lazy get text - - :param singular: - :param plural: - :param n: - :param locale: - :param enable_cache: - :return: - """ - return LazyProxy(self.gettext, singular, plural, n, locale, enable_cache=enable_cache) - - # noinspection PyMethodMayBeStatic,PyUnusedLocal - async def get_user_locale(self, action: str, args: Tuple[Any]) -> Optional[str]: - """ - User locale getter - You can override the method if you want to use different way of - getting user language. - - :param action: event name - :param args: event arguments - :return: locale name or None - """ - user: Optional[types.User] = types.User.get_current() - locale: Optional[Locale] = user.locale if user else None - - if locale and locale.language in self.locales: - *_, data = args - language = data['locale'] = locale.language - return language - return self.default - - async def trigger(self, action, args): - """ - Event trigger - - :param action: event name - :param args: event arguments - :return: - """ - if 'update' not in action \ - and 'error' not in action \ - and action.startswith('pre_process'): - locale = await self.get_user_locale(action, args) - self.ctx_locale.set(locale) - return True diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/logging.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/logging.py deleted file mode 100644 index 82c2b50a..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/contrib/middlewares/logging.py +++ /dev/null @@ -1,461 +0,0 @@ -import time - -import logging - -from aiogram import types -from aiogram.dispatcher.middlewares import BaseMiddleware - -HANDLED_STR = ['Unhandled', 'Handled'] - - -class LoggingMiddleware(BaseMiddleware): - def __init__(self, logger=__name__): - if not isinstance(logger, logging.Logger): - logger = logging.getLogger(logger) - - self.logger = logger - - super(LoggingMiddleware, self).__init__() - - def check_timeout(self, obj): - start = obj.conf.get('_start', None) - if start: - del obj.conf['_start'] - return round((time.time() - start) * 1000) - return -1 - - async def on_pre_process_update(self, update: types.Update, data: dict): - update.conf['_start'] = time.time() - self.logger.debug(f"Received update [ID:{update.update_id}]") - - async def on_post_process_update(self, update: types.Update, result, data: dict): - timeout = self.check_timeout(update) - if timeout > 0: - self.logger.info(f"Process update [ID:{update.update_id}]: [success] (in {timeout} ms)") - - async def on_pre_process_message(self, message: types.Message, data: dict): - self.logger.info(f"Received message [ID:{message.message_id}] in chat [{message.chat.type}:{message.chat.id}]") - - async def on_post_process_message(self, message: types.Message, results, data: dict): - self.logger.debug(f"{HANDLED_STR[bool(len(results))]} " - f"message [ID:{message.message_id}] in chat [{message.chat.type}:{message.chat.id}]") - - async def on_pre_process_edited_message(self, edited_message, data: dict): - self.logger.info(f"Received edited message [ID:{edited_message.message_id}] " - f"in chat [{edited_message.chat.type}:{edited_message.chat.id}]") - - async def on_post_process_edited_message(self, edited_message, results, data: dict): - self.logger.debug(f"{HANDLED_STR[bool(len(results))]} " - f"edited message [ID:{edited_message.message_id}] " - f"in chat [{edited_message.chat.type}:{edited_message.chat.id}]") - - async def on_pre_process_channel_post(self, channel_post: types.Message, data: dict): - self.logger.info(f"Received channel post [ID:{channel_post.message_id}] " - f"in channel [ID:{channel_post.chat.id}]") - - async def on_post_process_channel_post(self, channel_post: types.Message, results, data: dict): - self.logger.debug(f"{HANDLED_STR[bool(len(results))]} " - f"channel post [ID:{channel_post.message_id}] " - f"in chat [{channel_post.chat.type}:{channel_post.chat.id}]") - - async def on_pre_process_edited_channel_post(self, edited_channel_post: types.Message, data: dict): - self.logger.info(f"Received edited channel post [ID:{edited_channel_post.message_id}] " - f"in channel [ID:{edited_channel_post.chat.id}]") - - async def on_post_process_edited_channel_post(self, edited_channel_post: types.Message, results, data: dict): - self.logger.debug(f"{HANDLED_STR[bool(len(results))]} " - f"edited channel post [ID:{edited_channel_post.message_id}] " - f"in channel [ID:{edited_channel_post.chat.id}]") - - async def on_pre_process_inline_query(self, inline_query: types.InlineQuery, data: dict): - self.logger.info(f"Received inline query [ID:{inline_query.id}] " - f"from user [ID:{inline_query.from_user.id}]") - - async def on_post_process_inline_query(self, inline_query: types.InlineQuery, results, data: dict): - self.logger.debug(f"{HANDLED_STR[bool(len(results))]} " - f"inline query [ID:{inline_query.id}] " - f"from user [ID:{inline_query.from_user.id}]") - - async def on_pre_process_chosen_inline_result(self, chosen_inline_result: types.ChosenInlineResult, data: dict): - self.logger.info(f"Received chosen inline result [Inline msg ID:{chosen_inline_result.inline_message_id}] " - f"from user [ID:{chosen_inline_result.from_user.id}] " - f"result [ID:{chosen_inline_result.result_id}]") - - async def on_post_process_chosen_inline_result(self, chosen_inline_result, results, data: dict): - self.logger.debug(f"{HANDLED_STR[bool(len(results))]} " - f"chosen inline result [Inline msg ID:{chosen_inline_result.inline_message_id}] " - f"from user [ID:{chosen_inline_result.from_user.id}] " - f"result [ID:{chosen_inline_result.result_id}]") - - async def on_pre_process_callback_query(self, callback_query: types.CallbackQuery, data: dict): - if callback_query.message: - text = (f"Received callback query [ID:{callback_query.id}] " - f"from user [ID:{callback_query.from_user.id}] " - f"for message [ID:{callback_query.message.message_id}] " - f"in chat [{callback_query.message.chat.type}:{callback_query.message.chat.id}]") - - if callback_query.message.from_user: - text += f" originally posted by user [ID:{callback_query.message.from_user.id}]" - - self.logger.info(text) - - else: - self.logger.info(f"Received callback query [ID:{callback_query.id}] " - f"from user [ID:{callback_query.from_user.id}] " - f"for inline message [ID:{callback_query.inline_message_id}] ") - - async def on_post_process_callback_query(self, callback_query, results, data: dict): - if callback_query.message: - text = (f"{HANDLED_STR[bool(len(results))]} " - f"callback query [ID:{callback_query.id}] " - f"from user [ID:{callback_query.from_user.id}] " - f"for message [ID:{callback_query.message.message_id}] " - f"in chat [{callback_query.message.chat.type}:{callback_query.message.chat.id}]") - - if callback_query.message.from_user: - text += f" originally posted by user [ID:{callback_query.message.from_user.id}]" - - self.logger.info(text) - - else: - self.logger.debug(f"{HANDLED_STR[bool(len(results))]} " - f"callback query [ID:{callback_query.id}] " - f"from user [ID:{callback_query.from_user.id}]" - f"from inline message [ID:{callback_query.inline_message_id}]") - - async def on_pre_process_shipping_query(self, shipping_query: types.ShippingQuery, data: dict): - self.logger.info(f"Received shipping query [ID:{shipping_query.id}] " - f"from user [ID:{shipping_query.from_user.id}]") - - async def on_post_process_shipping_query(self, shipping_query, results, data: dict): - self.logger.debug(f"{HANDLED_STR[bool(len(results))]} " - f"shipping query [ID:{shipping_query.id}] " - f"from user [ID:{shipping_query.from_user.id}]") - - async def on_pre_process_pre_checkout_query(self, pre_checkout_query: types.PreCheckoutQuery, data: dict): - self.logger.info(f"Received pre-checkout query [ID:{pre_checkout_query.id}] " - f"from user [ID:{pre_checkout_query.from_user.id}]") - - async def on_post_process_pre_checkout_query(self, pre_checkout_query, results, data: dict): - self.logger.debug(f"{HANDLED_STR[bool(len(results))]} " - f"pre-checkout query [ID:{pre_checkout_query.id}] " - f"from user [ID:{pre_checkout_query.from_user.id}]") - - async def on_pre_process_error(self, update, error, data: dict): - timeout = self.check_timeout(update) - if timeout > 0: - self.logger.info(f"Process update [ID:{update.update_id}]: [failed] (in {timeout} ms)") - - async def on_pre_process_poll(self, poll, data): - self.logger.info(f"Received poll [ID:{poll.id}]") - - async def on_post_process_poll(self, poll, results, data): - self.logger.debug(f"{HANDLED_STR[bool(len(results))]} poll [ID:{poll.id}]") - - async def on_pre_process_poll_answer(self, poll_answer, data): - self.logger.info(f"Received poll answer [ID:{poll_answer.poll_id}] " - f"from user [ID:{poll_answer.user.id}]") - - async def on_post_process_poll_answer(self, poll_answer, results, data): - self.logger.debug(f"{HANDLED_STR[bool(len(results))]} poll answer [ID:{poll_answer.poll_id}] " - f"from user [ID:{poll_answer.user.id}]") - - async def on_pre_process_my_chat_member(self, my_chat_member_update, data): - self.logger.info(f"Received chat member update " - f"for user [ID:{my_chat_member_update.from_user.id}]. " - f"Old state: {my_chat_member_update.old_chat_member.to_python()} " - f"New state: {my_chat_member_update.new_chat_member.to_python()} ") - - async def on_post_process_my_chat_member(self, my_chat_member_update, results, data): - self.logger.debug(f"{HANDLED_STR[bool(len(results))]} my_chat_member " - f"for user [ID:{my_chat_member_update.from_user.id}]") - - async def on_pre_process_chat_member(self, chat_member_update, data): - self.logger.info(f"Received chat member update " - f"for user [ID:{chat_member_update.from_user.id}]. " - f"Old state: {chat_member_update.old_chat_member.to_python()} " - f"New state: {chat_member_update.new_chat_member.to_python()} ") - - async def on_post_process_chat_member(self, chat_member_update, results, data): - self.logger.debug(f"{HANDLED_STR[bool(len(results))]} chat_member " - f"for user [ID:{chat_member_update.from_user.id}]") - - -class LoggingFilter(logging.Filter): - """ - Extend LogRecord by data from Telegram Update object. - - Can be used in logging config: - .. code-block: python3 - - 'filters': { - 'telegram': { - '()': LoggingFilter, - 'include_content': True, - } - }, - ... - 'handlers': { - 'graypy': { - '()': GELFRabbitHandler, - 'url': 'amqp://localhost:5672/', - 'routing_key': '#', - 'localname': 'testapp', - 'filters': ['telegram'] - }, - }, - - """ - - def __init__(self, name='', prefix='tg', include_content=False): - """ - :param name: - :param prefix: prefix for all records - :param include_content: pass into record all data from Update object - """ - super(LoggingFilter, self).__init__(name=name) - - self.prefix = prefix - self.include_content = include_content - - def filter(self, record: logging.LogRecord): - """ - Extend LogRecord by data from Telegram Update object. - - :param record: - :return: - """ - update = types.Update.get_current(True) - if update: - for key, value in self.make_prefix(self.prefix, self.process_update(update)): - setattr(record, key, value) - - return True - - def process_update(self, update: types.Update): - """ - Parse Update object - - :param update: - :return: - """ - yield 'update_id', update.update_id - - if update.message: - yield 'update_type', 'message' - yield from self.process_message(update.message) - if update.edited_message: - yield 'update_type', 'edited_message' - yield from self.process_message(update.edited_message) - if update.channel_post: - yield 'update_type', 'channel_post' - yield from self.process_message(update.channel_post) - if update.edited_channel_post: - yield 'update_type', 'edited_channel_post' - yield from self.process_message(update.edited_channel_post) - if update.inline_query: - yield 'update_type', 'inline_query' - yield from self.process_inline_query(update.inline_query) - if update.chosen_inline_result: - yield 'update_type', 'chosen_inline_result' - yield from self.process_chosen_inline_result(update.chosen_inline_result) - if update.callback_query: - yield 'update_type', 'callback_query' - yield from self.process_callback_query(update.callback_query) - if update.shipping_query: - yield 'update_type', 'shipping_query' - yield from self.process_shipping_query(update.shipping_query) - if update.pre_checkout_query: - yield 'update_type', 'pre_checkout_query' - yield from self.process_pre_checkout_query(update.pre_checkout_query) - - def make_prefix(self, prefix, iterable): - """ - Add prefix to the label - - :param prefix: - :param iterable: - :return: - """ - if not prefix: - yield from iterable - - for key, value in iterable: - yield f"{prefix}_{key}", value - - def process_user(self, user: types.User): - """ - Generate user data - - :param user: - :return: - """ - if not user: - return - - yield 'user_id', user.id - if self.include_content: - yield 'user_full_name', user.full_name - if user.username: - yield 'user_name', f"@{user.username}" - - def process_chat(self, chat: types.Chat): - """ - Generate chat data - - :param chat: - :return: - """ - if not chat: - return - - yield 'chat_id', chat.id - yield 'chat_type', chat.type - if self.include_content: - yield 'chat_title', chat.full_name - if chat.username: - yield 'chat_name', f"@{chat.username}" - - def process_message(self, message: types.Message): - yield 'message_content_type', message.content_type - yield from self.process_user(message.from_user) - yield from self.process_chat(message.chat) - - if not self.include_content: - return - - if message.reply_to_message: - yield from self.make_prefix('reply_to', self.process_message(message.reply_to_message)) - if message.forward_from: - yield from self.make_prefix('forward_from', self.process_user(message.forward_from)) - if message.forward_from_chat: - yield from self.make_prefix('forward_from_chat', self.process_chat(message.forward_from_chat)) - if message.forward_from_message_id: - yield 'message_forward_from_message_id', message.forward_from_message_id - if message.forward_date: - yield 'message_forward_date', message.forward_date - if message.edit_date: - yield 'message_edit_date', message.edit_date - if message.media_group_id: - yield 'message_media_group_id', message.media_group_id - if message.author_signature: - yield 'message_author_signature', message.author_signature - - if message.text: - yield 'text', message.text or message.caption - yield 'html_text', message.html_text - elif message.audio: - yield 'audio', message.audio.file_id - elif message.animation: - yield 'animation', message.animation.file_id - elif message.document: - yield 'document', message.document.file_id - elif message.game: - yield 'game', message.game.title - elif message.photo: - yield 'photo', message.photo[-1].file_id - elif message.sticker: - yield 'sticker', message.sticker.file_id - elif message.video: - yield 'video', message.video.file_id - elif message.video_note: - yield 'video_note', message.video_note.file_id - elif message.voice: - yield 'voice', message.voice.file_id - elif message.contact: - yield 'contact_full_name', message.contact.full_name - yield 'contact_phone_number', message.contact.phone_number - elif message.venue: - yield 'venue_address', message.venue.address - yield 'location_latitude', message.venue.location.latitude - yield 'location_longitude', message.venue.location.longitude - elif message.location: - yield 'location_latitude', message.location.latitude - yield 'location_longitude', message.location.longitude - elif message.new_chat_members: - yield 'new_chat_members', [user.id for user in message.new_chat_members] - elif message.left_chat_member: - yield 'left_chat_member', [user.id for user in message.new_chat_members] - elif message.invoice: - yield 'invoice_title', message.invoice.title - yield 'invoice_description', message.invoice.description - yield 'invoice_start_parameter', message.invoice.start_parameter - yield 'invoice_currency', message.invoice.currency - yield 'invoice_total_amount', message.invoice.total_amount - elif message.successful_payment: - yield 'successful_payment_currency', message.successful_payment.currency - yield 'successful_payment_total_amount', message.successful_payment.total_amount - yield 'successful_payment_invoice_payload', message.successful_payment.invoice_payload - yield 'successful_payment_shipping_option_id', message.successful_payment.shipping_option_id - yield 'successful_payment_telegram_payment_charge_id', message.successful_payment.telegram_payment_charge_id - yield 'successful_payment_provider_payment_charge_id', message.successful_payment.provider_payment_charge_id - elif message.connected_website: - yield 'connected_website', message.connected_website - elif message.migrate_from_chat_id: - yield 'migrate_from_chat_id', message.migrate_from_chat_id - elif message.migrate_to_chat_id: - yield 'migrate_to_chat_id', message.migrate_to_chat_id - elif message.pinned_message: - yield from self.make_prefix('pinned_message', message.pinned_message) - elif message.new_chat_title: - yield 'new_chat_title', message.new_chat_title - elif message.new_chat_photo: - yield 'new_chat_photo', message.new_chat_photo[-1].file_id - # elif message.delete_chat_photo: - # yield 'delete_chat_photo', message.delete_chat_photo - # elif message.group_chat_created: - # yield 'group_chat_created', message.group_chat_created - # elif message.passport_data: - # yield 'passport_data', message.passport_data - - def process_inline_query(self, inline_query: types.InlineQuery): - yield 'inline_query_id', inline_query.id - yield from self.process_user(inline_query.from_user) - - if self.include_content: - yield 'inline_query_text', inline_query.query - if inline_query.location: - yield 'location_latitude', inline_query.location.latitude - yield 'location_longitude', inline_query.location.longitude - if inline_query.offset: - yield 'inline_query_offset', inline_query.offset - - def process_chosen_inline_result(self, chosen_inline_result: types.ChosenInlineResult): - yield 'chosen_inline_result_id', chosen_inline_result.result_id - yield from self.process_user(chosen_inline_result.from_user) - - if self.include_content: - yield 'inline_query_text', chosen_inline_result.query - if chosen_inline_result.location: - yield 'location_latitude', chosen_inline_result.location.latitude - yield 'location_longitude', chosen_inline_result.location.longitude - - def process_callback_query(self, callback_query: types.CallbackQuery): - yield from self.process_user(callback_query.from_user) - yield 'callback_query_data', callback_query.data - - if callback_query.message: - yield from self.make_prefix('callback_query_message', self.process_message(callback_query.message)) - if callback_query.inline_message_id: - yield 'callback_query_inline_message_id', callback_query.inline_message_id - if callback_query.chat_instance: - yield 'callback_query_chat_instance', callback_query.chat_instance - if callback_query.game_short_name: - yield 'callback_query_game_short_name', callback_query.game_short_name - - def process_shipping_query(self, shipping_query: types.ShippingQuery): - yield 'shipping_query_id', shipping_query.id - yield from self.process_user(shipping_query.from_user) - - if self.include_content: - yield 'shipping_query_invoice_payload', shipping_query.invoice_payload - - def process_pre_checkout_query(self, pre_checkout_query: types.PreCheckoutQuery): - yield 'pre_checkout_query_id', pre_checkout_query.id - yield from self.process_user(pre_checkout_query.from_user) - - if self.include_content: - yield 'pre_checkout_query_currency', pre_checkout_query.currency - yield 'pre_checkout_query_total_amount', pre_checkout_query.total_amount - yield 'pre_checkout_query_invoice_payload', pre_checkout_query.invoice_payload - yield 'pre_checkout_query_shipping_option_id', pre_checkout_query.shipping_option_id diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/__init__.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/__init__.py deleted file mode 100644 index e412dd36..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/__init__.py +++ /dev/null @@ -1,17 +0,0 @@ -from . import filters -from . import handler -from . import middlewares -from . import storage -from . import webhook -from .dispatcher import Dispatcher, FSMContext, DEFAULT_RATE_LIMIT - -__all__ = ( - 'DEFAULT_RATE_LIMIT', - 'Dispatcher', - 'FSMContext', - 'filters', - 'handler', - 'middlewares', - 'storage', - 'webhook' -) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/__pycache__/__init__.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index c73a3389f25023bc373c6c2ee0d4cc997c2a1609..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 487 zcmZ{g%}N6?5PG6_H0dtM+S*6*mG-D7U%``; z1+^Cw^6@1TW-_7OZtB2z_b=&#>o^~Fb2>cO+`=+T0CSit9pxg|weEp?$ZOmO_mSUt z03M*A@en*jVdE{?QW1(&jAE6b1kNIqvUu)f$tToyGPjPNg{-(XRyTCVB-fyAB^c;| zYTiUlRcN~A_R@i`Hbt?`{5l;9Q_?Ema9yY4`RuOPRs6N8&xWJ%;Ay%bkAuaCOeeF+ zB8znb^>kzrTi7lr-N$s|Hh1tTk2rzlwcA#7NPc5K(sTeF_h+7a-|U2TXaE2J diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/__pycache__/dispatcher.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/__pycache__/dispatcher.cpython-39.pyc deleted file mode 100644 index decfdd07e02d86c80b1c4d3c8743f152bf4515b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40883 zcmeHw3wT_|b>7~6W3gB)Ko9`IhptG804Nfo9+o9oltqE0M41F7611e1#E7ljXT0;GR=8hu7akCK(es)ndc}rw@xu6{5z!|$ zo{NZ$#ygCAUyc{vCA1Tf(f-$|w@t6VcGc+N|sR;n7JSdw!~RfNBe-j9s- z*r|znwOXnPyJwj76(lubECrPJNq)N;6hnF59WcO6L4j zY0gd_H|C5pi*}#-b_#W~b)K+FmRo9k$~a@$>B9${GCTK+YPsfkx(=Jijm65cNZiY15KOtNiE_ zRK6xEhQwpf(XzlJUS%9D)$krUnzlP1DVfFzv=e?iap2&Qsr`2MfwEbet{B1%&mDYv z;^4sp2M-h{j-8yGvNMNH9Oa%w8#|8dKQUFD*ni}RojJaL>R|E6;iHGA&{qdfoIEmx z*JkMr#|?84J#4%lr4iBWgoP0>@eq5YZjDCm{FG5K=47e5|B1r~rL0T4V`^U3Eeo|k zbf5FK!!^??)n<&NAn#L^a`FGtOtk7L%-^Jk(WYQ>t7m$lDCKO28p`w-?Y zC@?nJ*g>W0)g{x?rw!ejH}rCKv0@P6m5847`mEka?$&E{OCOEfnX*}Ss&A*9TG~CU zs%gimYvd@Zb15S4#Md_qV*I(q<>w?uvR-}8oSCoJE6bqFMB5g*|)(kP)1={Jggl-z4X#KVy75J8C%7O7{&KCu}j>6?_0R# z)cUB{{aQlo5o70~1-&KoPO%rEx3+}dCGJM(_Lk6l#JvdJ(GvO&aUVi&YYBa)xF4an zw}d_*#u2)+CG=h5L4*!-=st|fL*m`=k9huv#eVolJ^v$O0{&f||A06M{~ezHka!gS z-Jbt3aTxwRp8s+29{9&R{}FK%{yRPYq&NouUeEu8coP1*;6IL$J0YgvyW8=d6z_%a z9>@2TcpAQY9p5ve0N*>54-@j(+7eooEA8=An ziy5RIhc7Aw`pgis@W0FR&xv{XA7p>|wJ6@a&loZWF$ZFx{;=;Mv4Gl~5*3vHZsTE5 z6`0y$QM~v{96l*b_$=~qY4paW*WwNxza&ndOTMgOuIyho=f}huv3w5ckn)jrQ@$!1 z;{8s_3DFd1LCXik$BlzLZ$2Qt4>W&Be1iKDeTo_KL5#}xiw`0EQSnJ`8};>Lvr%p- z&3UA9(r+>j)2woQk1L;e`L(z>Cw>4WyeFJrd>Cb)7Z)&hkBA=>KZLp*6;UAWr|b;) zl7nK6uV-}ponXY(Pc90uUQ_o`F2m7>E&X)4QqdP>eFm&mFV|-3V8e6zlFBfyR~5%K zck5uKmLUQGGxMbyyjp?taLN_vZh6vQG|9h!5xd4W*ly3GXXc-M6P02GX*zi zbvGfqiufy(HqX9<!|`ooU&itEv#-ci7@YuJ+>N<=S8wjr?rLXnaihQFx| z+et;Pkd|^)PlPL;G9a2d^lRr7`4(M&)}hlPQLnwhi46s26@eCs_?GQHMYTmIP*JU& zbBWeTm2*kf@%MsYi!Q-BVe!R!rDAuITP)Sg(~z-q)n%kAS*Tuh8vf3J=a8K+NZ z+Ri&&?FN|kKzI!Nh>gL1_k*{z85KWvV{mx<;H~Y($&Vfg4_F`~JaT@-=G8;!M|SZj zI!!k1zQCaRi3Y->>qmg5yfODfySbZ9FF+1Z|7Lv3w$sv>E1R@9%Q?thRK1Upry5`k z?No850+CJZH+~LMo0lu=hPt`%-GvX8pPNesQi5ByE8i(S-x>>l`*M2R zl%aZnKP|-Ow7~l|xasiC?ZG#dn8T+pR5Nh3aLs}#@!UU`4wO64np*Xf(~iM)V>dam z8GHx&*vUK8niqbmaX&uc8gF(|t}4e_!DE{B8)s%JO9I%>MCT$MvD%i9Ees5He7al{ zGD~#%963*u^9(sOA>}c0o*?H*a*mTjVwmhA=Oj5N$mt-5s84p1Lu+Z-P0q9A&=Oo0 z$jOt_OHL0t8_4N{Ga6Mhy$x8&8N@H*V}1!vgwZIj;oqC-M3TPg-y4}EKfjfZdtoZ( z8|e-&u1jZmi08IUV!TuFmb|`ipeNOBF0}t>@Jxz0uedoYEm!56x*pM-QxM zkRX3WT=`2u5EN37q8D98BHKYsstB37QY`)!N>HGwHF|?JP|>Si4Mj-gmnjd)B_KY+ zM@%*mdnI}pYTL(15R5|*Of-Iqg?b%-&(xQ&G^pw3sq&&;uL#J2;YEr*E9+HS3@jOH zDL}cV=F2A5D%N}*8BA6&0k@&$B!!{St-8KsLLW7&FQa&RTr4eGLI1 zpD)kN@2S*FVoWWWsPJ*cd&c$2dd=`E`ub)3NopcQwPbyE7QJE2!C+{Qfpa2#g41t7`b03jO2N4vY$h;d z(Z;;j6HhqH$qIxNlGdH(20C!D1f`oBKJH~4SK-u{K%mpxUaHB_gqrqe%t;JLUHEX-b*kHK8OnZKs@-XDk2g4$D;LSCQBxh>4^L8q!*y zmXFf+kk%Lqj7dv2h#d5q86G{#jXxp|0yQ3#*Dzd`8UXJ8S7VL)z#?O^fY3OG1<%yM z@FkRQA?f&2jz3L)3}VMhMx|E6@)U*+{!aN5UP+yyk~&*T>RfP3%5q6a9V)3y{+?G- zSEvqMUd|lnL~JN$_p6#5^73|v@^*W9^PCs4p}alF`(EVj<<|CuTF|3ffVOYoyoe3u z?L*#AAn!)b+ZW2)=jH9^yoe3u9YEf%A@3mP9iY7E&4Gm&!oP@c)%)#n&WqSk-r-kcGKst+oOd{sci5}r zDCb3NDDN)heZyI3=`)m+wU2^(Cs-e+BC!tz zO_`jcoDWfK*My^%Q`uNTdpAd%aI|wO;=PpPVT#BiFQza8V zLjDZ-_bVkxoLZ+u#R-b*p>`f+g^21Up+vp|R2qqac89k$$+G5XT*-Wl?wVo8P+SYR zOIqgrDL!TsP9&8DkkeW;kAMBEp85gu6xaScqxG&C*FHxcEF%y0k%SwP*utzM#4^An zSYl(ALE4?BCbxmWBP-fPhfkl4Hlqtsa~o-aIVR@DfQVy_=RG3E;2O~Q8q?SyJGF{x zSxq$#?JU%**sz>0{yME=4rB1(}-^+E#Q08<32&@fE10`6)?H3n_YTVuKP2@5kVWnpq@X zA=HhLjNXjP_i<=47%E7qjTC3ouWF3~m9o%rwxii$WuO6ht*N0jd|TMkY<6HlstrUI zKP6Hk{fc%rQ^UK?(lRsx9{c&mb!ivPI;m zZZ%R3vs?g93 zTov0Q%d6r8B)lp^3q=RwTh{@N0pcD&C%sgGs!S~F*dUPDq-x|;)16k20i!heLzoRy zYI#P-E9zFMfZ&{0A%#|{vg(cCH|0ku$@|GUPfiQk zcJa`=N{c56X^$gWqz{_sXeO4?vd~5MV)@n!y|P-y<+Z_R9HCM0_#|BZ_r_Q<4|GnT-1?fV~wVV46Zcma19-*5k{ysx2^`p3cCr^TrutW(g{DP$8eDQZtC? zUpC0Ojhs)D^BFjfia-$+(PAN6Gr&u&dXaXC><+gWlXhI362o*SKZk5TO4QbmhX_QJ zZIBr=prw9L8BrD}W=D|AuQ7#IsmeUbh3ZV_uE4aTQU~~J5lU=%syRxtcY6c; z2=MS!2>RVU{@{SN0xF|ZqZ_B%7Ihap$Hop#0w+_@g_SHzauU^re;pNTr@@k>Tm3xs z3F)6AJfFhKtAKj3ZM%8WP={KOa?xVN7_p3ldQdIQ4tXto3VT^Ppp(y+1u2(we7pq~ zV0x_$o`g`v=$ORrpHUGEWbN8ycha7jv!(V0Y8!zuwu<@#V;e}as#(a=x-B)THT(hN z1rzBboqi{!B@S!SA;Wd*54QFK3T|6t9H(>P@D~CV-WaH`pW;%&PLp;Nd$%TSt?@C= zt{HV0w8&=>!6E4UCZ>XOw89g%NjfDtla%zw@G&2TgJA=y(%{WOX8UpNI30$F;SfYZ zXs^Ya>7UR(szEwLJkT(*5(gqCFGiak7qNop<1De#pJ5Jox;|K0N3vE6X^Kcp|rzpL8t5T6x6=8$};soHQrYefe8gQt^>C}DC4s*!xZhg2k4TbRV^P^td zu2dc=1(q?Gs1WTmtTPi42(z?xaxU1jH?XzVGfdRY8i`zrRtk*zF?Y6df*KSqX zzF<+S>U3DC+E15i7R^l6`4HSHDzmAhr>V!CQQ6H(`4@OJ_HEy_{e^4jeHL`w>V-NC z`v{PMhM)IpyleZ_kAlkVms=@Sr$tGxnsYcNWzLORIMIylVw~p~8P)gg(}$h6gxQ%zp=Rs2e*EC02cLeTH8wPd$MqwQO5O?9d20K8>(&Zq zcA;)^4h96Oz~QG|N-rHs-uq}?8FSEBqW%A1=B zHP=q6hS;6%K^F+Nt@7sJT9f}vgtaUTY|d)Y%kiiqSpH=^8U1E56%q#4D#PO*gsij^ zN|IzZKIS$!=OgE}^U?FM^YQbE^U3q6*);8;ol9eFnI?r#X&TABt~{W684Qw`qyw1l zEc1cm;F%Jg&Bo|?Ii0hEF4?(x0x7NvZ65}Zv>XK*amx&%;%TFTU}H^y6+N9(M@&s8X7a1}b@oPb;}CXPiO5FI7qs>pPt7F-=fjApLbWO3lN4!|!{xw5Rd> z9ebYLyXS%D?-&jPjNb}C#<$iArxPK(-;CBcv_E#7Wq}EYjj7HYQB5rdh7odkwK&2} z-ZcuAv{tKe@KZn)$U}Ygg9qLa1gsk|S|MEAH{t*6W$cN^j!hlYn|d(pz_E#wM-NU; zt<|j3k|@`&eK@II4x~B|cq5wTGA1<_yfeJapma!2`tUpy0rg?*q`T81#JtvOBr&*a zXe0J5aD203m4PcR%eWEE3s9Z&NDO`L@tivN^qS*#jZMO2P(o;HyL3{l6Tk*Un48ts z@bI*Q*H!`$Mzy|BZW!)_l%BD&tP~`Hk~ua z&wz*>gXKfgrXK{k{D@^^6Nk~Qd42d!cUbjf$4L@5!4`CGg3p{D@#ON*$W!w1nM%nt z$6pA}U!s8*{M@dXwz}XQei-W6kEDugA2fEew66R@Z6G z3J$_Y@O{E^cX`&6(L5mqA_*4eN=TveS0-&)Tu3fp2{@-+h|<#ULgYgHf_5Qwffj#> z3o%;!ky;;TGozF8?;$-_vOkZnOPc%{`bsNljYYqIf&lrmRoNbQ5GJh zU%OxQs`Cr<#C7U!dCk{II;2w|kw=G;q0=KR32*x1`je=MN97)_xwDm^Or5@Vr|9a* zgNaN(*9b`VZ-bRf>te&HQb@oLO!sxyGp?fJ+NY0t>#Ft8RjhpEKLTyI3my57iIAQk zhZZ^Vr^)#OId^&vli4l6CuU5=_DAd=pb5c?lJ2&Pl3js`afPD1X@7ldlLBhukzIIg z5~eqIx#82Ddk~OzX22nE&eZ!AsVL9R8gzET&1L%8u3Mh>;gIw*#An-g?npS{^-B0} z2cGoZK6^ak#Pqm+o+SS%a)TlL5>2vyMh*iy&pDcIl8}C$rc@RW5o{~rN5EL?lWnA)azp-%Rzz*vymXB zx$Iyy#eF9w|L>tJN&YU%evxQ$EtLIqTa>*!KxOTy^qMf1euPKR6r%I<9>R75VQ;y@ z`)&}v;#XnV3B!T=RXbrn5+wKIt`ee+upT7-)kOb2n7w&0n^eDx^d)vWesTq@z0HG2 zhtIbo#m`;=a_`V%S~I~X7U<`#{)vScPAuTmf^#e-R{C6U zalnc*q+bhhHbc z?L&r0PZ|fpNcob)6pF^8Zzki7?EykwqX2KJ6X6oklDyoFk2wg(-wK|EW|cRA6Z~tu zSm~#Oq!`BOAPuet=Mx6EP+wpKA=IGTUtXGd;h(ec5JVP+)u+Uo2W*N(AV4Ed@HOHU69k zmQ@Ql$=KK(AkgsOt_AIv)Xy&4P8?rB{_9jR)?DVo#r~o9`rf{H=qEDabl)aCzZ$(p z@Gc{U)Ef%x;oD3?=-xKU1Nm_5^u!}@_ombOst)fxZ4i8l=*ib>{44Ud zAoMm5V8cD*bm^N!cxwXnXkZ?!U(U_IYgJ+F*7JQ?Jd`&Sw%c}yi{9bL5FNPyPTwsc z9?s>GZ8+2^OF{a?s^1`9C$f8F^6er=Z^S`#ER0_xUdvxYK7jRCh-g_4!sy84>uH-u za1_>u<$D6;817T2r`JMf`LF3ET(l3txP6H*tVLSv_ufcItY7JkYXdU<9JP&5jUPZ< zQK+U{?P4Vvlw^*#Q+~Kd{BD9+?G~->?sCsoL={_*HN^nOxG-8zb#;wIe2&@ zl7IWVKFazVkzVKUGbxr6z z=>Zu@w80HJcg(|c`tSfm)nI7*LcFPWtr+@=AU%aK z)P2)Uz)-j77D93~4B=RpR@TALa0a(yN5aAGner3CdoKQpBk6CfhomoisMd<4;f{0r z^V*QKeHqewXDgDnPk$4U^jwhg+af7`O%T4F_{OSu*S?5UA?n)kf7Ma-sVk%E4sYGQ zb~pW?hpesA=~!U>a}@<$H@g0fAdQ95bv1F_P$_loUU4PW@PxYxlwGID*0Pim;Kct& zNc)@XA?;5RA<~b&BKRFSA1u2+K!9ua>op$ z-cH+n2nZuU5audu1Bd4;XxA-tI+@MDd# z*1DBM#DS^(pYWx&lHzT*lEUiB-|_LQPvKWky%X%RwGazCR)SvHLYw{;l1;I^g_I4J z_iG+<<$DvMTPK34ZW2fx2vX>pAmv>8?+v~8aHFtF85L*)S>cE_#OdgaR;{MLqsa9P zjkLdH{*UBka`R};-V(-{a67-+7Nv#*Ol`f~-VC}nup+y5-oUN~D~ASdJZ6QPeihKw zl7VN53JU_+e!ily4aIyn!I}JRkPfiycZq^{r-ebpBO~4bPXZww(aV9Zy8@IF=pJ`| zt%YFncRWJ%v1&t`0_d6(wYNi%wQc>k;ldi9XV2jctDuY+>M?xG`{7(k-l9wV`R)~# zx70QM&h0A)gB08r%)(|ZZs@jmxM;VlmGsp=HS;dOPL(tUfH86);j) zKsbM6rG4|eh-~>_{s#Qu@p6W>a9kQ|9WuOzNqU&y!Qs_C5(9C_uNp> z3m5GX%343kVv)_=I0@%<;clY!*4Z|c_1%biUnL@23-!i{eE9eSPN_vb^1=OhZzPkU zO_Ok^xgCB@AlTo&j9pX*e6Tmz+Y#C{X`lY4As<~i>+$Zk$cH1&uC1mU3VVTa-JVsL z*CwJ3S-wpGPyQE-VHn|_CE~kU8LmxZ4_*P@+Ddb6%DGN#I~t^jFt!C=azlYFP_9P` zSA}YUjDOW3?GK2m)`B#;>UC{M3kr3C9&@|;n(%Bxn*zw@s}E*Dp{`A0+#^l*QHJ$r zv@u6F>UsLJad<-VoI0I;)dy)BUs)g2_)^}$52vqm65P8xcAO2S;I=cpS~}(3;KtXX zn2W|tdA2;GtHSw~Ca)IXs@{t`EsQhIQ8#)xGa5X~?e%a#fAMpayk#xvALUkcc1hwa zjVK>oNw;jfwmrrj&g|jNHEy>ye%0%(Fzh(}>4-8u6LR|WJ3cn<4I*Cky&gc9htGQO zbs_NuToFQ-eO|zCDsXKGA8&?6N`po!>K|?%#dRSxkeD%lL}SM{A`k+&C!Bed`LYn! z90^JkUf_Mo8%Nyo3*9=2J4#0tJnbAFzO~@My+O7eZTYIIKc-5sswx*Q_9Grhbo3=c zr=7#;@Jp6+RK^d$!2-~Gmb?H2Z{j~9En581X96Gd2{^cRoqpP)tE-1EvLOt)r5Rg@ z)o^kg*4*GC{$a$!ta)+ zcAD;)BBP{*F1q`?QpD|zbnzZ;4YzQKOa;c|DqL$j#T71#*HMqirMMlZJ0j)R;gSCb z4oa#kL!_SkPYJ2Q#3_FnA5(xriBpn^46~Qa`LY4ugox5qKuio~tw7N5jlma(0S#C} zfUkyMg7LQnqwFgwOowDMDUUak3u#Q3=-D{JJ2*VmOv#02$_bBInUxGulhMP-LMLvy zjX5^WqOd&!8wgw~Y#@{)WxDlNYj(T@I|tbN!t;adZi>MEL1raubv4r$qh~u|>!5QG zmI<2KX7p5I@wb{V*?USm+tuu9W~?0YMDg8??=-%<@SVkX9^YNBYGxkKJqa?^o_Hs0 zU_2P9rA30m5RW%*imddKZ3VWh5Lwtj^+g?%uf$+~05wK9mGVL}L9W#|3mD-xrCy6Q zGla%4huj4)NS8hp1cQU>`fc3oCF_>OH}m60;nEytqc=5T=gPLaFJe>sqV}tBW-HpnED~y+GMPndNBSwuEQY|!d<2kmGG+I z${nC9`t2vo+y?LYr7Og6^?a#9*VH<9|DqC>p_2M&;1uJ~{kQ{qqV+WnIg?=(fMI!6 zyi3lwWr({*pT@1{285}XN|hy;sDssG*ft(Yf2k}C{Rr*{U)CR4nmJ`ylk#=U8aiejVfzS|0xZT(PIH<|F*}Ct^nqn` zBLj||!O#^|8u{0#gd^mzwO9|e;$B>yys8C z;s99@8jNP6{aVPHty}&K0hs$oyZ#=Kk@M1HCnMXf$(eqYvg6ao2}j%$ft=GUlDIVnR)( zQSZW#u`Sa`n^8|{gHWc1ECd9ydeRGO&t|F!1W0T$cfmOyorT~|#~*%BBO?eGV4X=F zjF^RFA>!xKFT;XelYStRDE$hW;thz)gPoNjiNJi>Bi;MzFc`Yo-e<@sF?tqROBJD; zqD|an?kcoQeS~Fk$Eu7OkaVv~kZ*TKX}eooecnm}IpyM?mGOPvUIQu0|Fs$21+ZebI#33u*G}N(Vy86sCI0eb_&xg{ zId<&m@FKB%j$qhk$KA5)K)Uc z4ZEL|!#97Hl}UoV598%*14!9)UM4St>-W(UbN4&wNhjxTkwd17Mq}XgWGn6OP{?_5 z%H;5b;`MOewT1!?%m!P=X+p7*MT-JBbC^KAmxp37l@`3_#HR{>VcuHO4Bq7ZQBM+6 z{Tx0fRs2G91(%XG>GT=@bowICCd{*z_QP-{QrkTxA&LUih7H5et(Vj`y6s+FOqxL_ zK|+et=*mv&F@bD>hNkFt`b9$?p!PAlkM?Pyi!9o;$;pHb#16h9Uzx+9P!nnZenmIE zEKd&iDvX>ts)meT;3&P6PZRcJGq8dbZv>5i_~}9hjHt`#Gl7q(!-2FB!4iq=o`Z;B zv}_BA5!T?zie3{RWiJm#hLKkGp&o7({r&1NlCtvVJybU$@(84+B-9KWYxui^LP)B58r$5yufd~3o|WXw_D$}OWi$+ zd+-Utf`1D3T>XhU=`pf>%B}CMFo+S#Ln!REW@J?r!f@%=HN4U4-bAjB`CbW=TPt^< zENa8B8q&6o4z30V1l@tFrAfvo`#Fx0R)k^sWzN@^U_u=CP#d^v8cM2?XMDn6QzDQI zIxfN1+p0w)nEu;-UFk3tpP_pL8e%UXe>N<^>}4lBo}fXZhG$@6Hl^kb1P;u0nmLm* zNbLO)n$g5#Z2bZrE+nAKC9u$B{z9~di=P)XT>qTB0OL(iA|{|?h(Ies5c2Q^Xnb7^ zR^bFD;AFVif^)=PixWq>5R*S;fww_BtjRMMu!ITcf?dRM$|vGTg{4rLaokESq%Oo@ ze~7ioZVuRC<1{O25oto(toYq%Vsc9UDXI^1ro5VDq44VnV6~GpD5^uI2w)$hP+F8K z<53&RrbjQXDHEHmq2m4!vVzB^J!LPl+9|AVta7OWQ+>E6p@*LG3aq`NNU zVVMc5b$_N8vQEAty#R76OREh2T+fY^m8;EMfve4E%WT%+KB7usdpBMX0r!c5w?^O0 z#$nnH+x)KiyZGgJ2Z3-u!qS&vza%jTU-WV#cmUm-i9Y-Fpwkah+)KzF)D8N2uIvz= zarT&NzgER@LW|Q<)%i$Pg{sXs4<0eJtr6VpU9T$45?vXedx&4j-Q*AKFVbtcuQpRB za))(z#h##dGsE80zdf{$^OC?=4Y4@80}7im^b0VqSfetlaAuI*`=e)S#sofmeGf0h zF{zYgES$cIgBI0~-b06-y)y{v^pFqG?i$+N_z!@d)Xk-7z6qaHN8?cYj=!*f+O%Y8 z#!^;1UhrVSDaNZmbX9!9g;Y?gMLq{~(n4Qb^KJz-{VUW+T}4Kgz#`qZKBf$It$H1F zeU&9)6xS-si5EI22&_d^W87kW4kWi?04G6eN72Eu4#!o8vk0<{hSwVzHRS#r>BN1~ z!m)Vtsz-2H+Ug4};R4Bc>p8TJBS?+m!z0{_2X}-qwm>m8wvAI>$DgdZXR#au8CNy5 zFj98aL(6q^`=pRus!{#XMGO<%E!+iuKR`VnXyWInC#Y30bvGCg%R-6P?gEnJl_G=W zM05c0k7(nV*8wNUf|*_|3sEs(J!-Wc*N^f=nN@p>)V}BODwwFF^4#W8Q0p+~IYrSg z_HTPFOoar`)^wxV6#Y-hk5Q>3a3;YpUZrmek4~Zz_-NRVo}@ppNjQ_tE9^`WHa5gk z#V8i-Y!N?VEmdeQ1in-e>xvmX^d2~PX#dG0Q^n)^rw$g696ow@%1%OF0{gJj#}>&v z7OdP3;(d0UG{kb29@AL%U|C@;GbfUJ5XPKJ88Re3Eng((C2~GM&USKm*;b^dkC4M_ zoEWUj*>SQDX2$>%^2aHLm^#~Ylz*3=K2Ofilk+dg`6Y6GnVc_@^DoKy5;?y@&X>vg zH{^VUoPSFW|5E?o)6;K|^B>6JUqbyBJ@JnW{xd!OE;+vk$4*Z;a-94sh5bG`e?ZP3 zlJiI8{C7BZ;$#h7q;|soghFHFFuP9E#P1-7mL=E`b4%pi<1G}ikrMY)IqAc$h0$9m zLMLZCIsQEHCJWo^y&bvC{|yHhyrszIC$Uvxnc2Ie+F&ZG<&p$`GZcLjwrcAAt8P9=g!ASkVHk=E2)iCcshAD5OIHHf7zXTUb)P6{7}V|QRT z7e>8tgVb9jvYOsfRWRK85~m2(MeN21A(y4d(TdV8 zxf*h1?}7^ymC^R4g@Hac1*D)4b^l2I10P$UK%V;+6ivS~dy{N8Kncv@T+W<1bME6W zE;0bdt7V-{r=`T9GD_p^;Z*+{V>6*H4c1m5#wYp`u z+_hbsGbzH-A$KeITlhQDe2<0Y(0hNa#;UFglEEK%$x=O*>DB;D~G~e3Hg22Joh=cWvwPJoSR9U$tT%I zzQU*y`k5be{4{MEg?+D=MM>;;3j6&`Du1gZ3-g00&D?sBJ@Iz@IP6H}(UxK<=qn}T zY&shd{ga=8!40(ZO#sPU9x_+_oJm8PA>UxKgulSw!r$0np$RTaMdeP^!O{1&b_;7; zcMEIpv9H=`VMnRwr-L|XHOqzVd9mM>o>w@Y*GN-gRLo7-H^ zy(Bh{^&5m(1(=FWt56gR_xGaS-LV#0&kaQ=YLP&V!0a01-U`i~12}`03ILo*dC~_LGIDlIhAUddg6BQf!Vf*KX%^)jKlQUrsjp#gQI6uYC!x$*TV~sRC>*we3H2IQ zPcTZ-C@LP1JX*epq1FZC4(a0S7(W+XSoT~;%&$VAT8)WA}((PUU23G!s#)g+Y z7-z7j#jv{3N#G^v_0>6MQxv5GU+q0EN-*$lsxHrnev^7yk_#t@(E3D{7B_`@3*!Lo z)He&8Kf(0Ot`|ciG@o+UKrkzX7JBA56uPBx2y`u3o`*jj9_>&-z)MAWVv`SA0TG{m z)F*x2MAPO4Q8JI^0+6>Mc2DFmF3$)V$nX{{%9;CYVJ0y5!k)NpTGYBxh^U7UB)vU3 z0JfRR&bC?wd3BAzw+YOBPm2fPDT<@a^GISTIX~kTw}i!q^$FXnQUf@t>Es!4vpU% zBP)lf`%L{37|zi`ZXI*Z;+h^+Arb4Ca+i+6!_SGFaR+O@S4~g(~LeX~cw#J(%7P(8U(S$__BMu7-+oj5yW%Um2 z_&xzT1O7$#7$4Q32}?=HCVa`7)I>WE)8F}JHJ@~H?$UO`RU z)w}3G?}$~8-hj;r1YHA`V!%2qnm@uESqJO^v25SUj1YCnuX$*|W6a_GnS4K#-Q++{ z<^B~4pBm59tk#vx`YK+ZQF<`E{9q?ar=%L_!iE~tyU6f$II0$_mLExqjxL;!{7zrq zRw_|gpUJmam}u8awsu`-PUc0?I{kRMcn4C^S(lX^2-fCRwBhnZtE+RwQ<0r=1?Az- zXt#~PGjmwc6(fVQHXE4{8G(KkgirN~>s^H1mT|DNa@~{~GN^|zl8DFLU%~w{#zNNf`Kw}eyoFk*z zf8l@NW6npFyn=AUpK*05H;?LhWpeW~n0fahc*5Dsd3kJR&-nhQ;PR)q>Dgy|@QW#* zC$Wg<_$tW)7*Ah?!6AwLPk|-YPSM|2^Rw1)?}u6g&jhmUR0Cx8Qw=~%+v21S;x$?Y zK2pd;V_%8C1}(u+%EP-e^KKEnK$OiQ&Llz|^QM~Bdv+0bT^a?G`&o2X` z-^o%G=EMX=DYrsAWyzk5aW7wGk>43VJ!~NNP{+#`o!LUjfS4a(cj^MLa$T6h`K z8lc(IDr_#i_y}0Sn!>x4DJrdtg*zyTf2`W~sU+5kjk18E5<|Z~PKZ#KFjT#$9|8OZ zZT47kxSnf@2Q3ujt!CxLQ@=yoZVx*gcg79pTSt7Yky(x7aR+Ni*g)^&VNCQdx| z^c>G_V@aN*Fdku9rPU0IJJ6B&fYUROaH=p#&&)+h|<0c2HpD+=dpMgND=byg~V<>-{Q~N6Jf+_}F_GWd|OQ)G)}x10lP5QfNY_%Zu)* z-9u9z#F&i@AM%j?8U9WDn|%Y)(rz&GO}z~5znMgtJLzo<1GuHO--Z_@DhrZOctI%Z)j5${WK?IS}r@%Pnl`Nr<> zcvl7qPY1gyJV?`cH#!o5uR@90Lhg1Sh~&ZURJECHfisWWbR zNt$`Nw{s9=H3hs#c|j~iz>mF=68u{JwXHPZg4f5~_=?@=tQ2mfE|axbon5_H+BqJI zpGld@!p?A8tVGHW(_}yDkEGy*`+g9Q$^nwtr)W~{CA?@Ta!FyuX}@T2u{Y`$OTHh* zfl|It36=x{;rmDhidfH`8a|&1&*J?z(bO{#M$2VaDHF{$bJ-fppPRbkG9UHM08KLp z2|tA$$i4~*JeL<~O51*krmjO!a=vAJuy$gNt#hQt*t{?|!JqFShd(Yk(9H8mxbFpV z?3Jr~Sz2?cDtU)C^x`Pax(kU=&YH%&Vh);7dpMsN1R3q#Rwko9Sg>Q4sCgdB%NHPe z792nCI&#}hG(~d_$7T8Ri|(pc-0rmHH!!MjeSeVhQH zE$51)HzC^0MP}SZQ|~}LzP5-aw?AjPqS>f0t+JZ+P+#=(vbwl@nYU4QmiY>Ryee0* zT>cjwUdn$@r>VD}%35fvQ2rE=ABgNA_Ajw0Jn$1F^W-z+Ax*rD2oySAST=+ z7ka1&GOKdrdYbsxkt9dLqgyyL6u`y+0xW&KDp>QBN^a5gMquE&U~wu?sIsuc+G(XXa(ua`5*~pMrGd3Ys z(#^_mP4Kf>tBnf@IT^K`zc_tKghos^<(_N6#LL*RXums3vS?7T&|}OjT9ps9=P3J( zhD*h4ZO+(g*g{d6SV&$kj|tlMuuxm}n~Bc%19?&-98K82LsJsf7KQV5nWYdbv|6gp~vjFIAAg0w9S&(J2)0k)L_5nx%%&5y? z(W-j$F(uyokPOwwe(-mj+4wEw?Hq;6bJnU*Q%&V*Z(Z$WE*i^Ths?z7p*VCV!1lI1P>MzBxAk%HB0J zj0}QN@*O>@flnX>^! zQ8T-*7dAd)2KZjkhn@-Z6-&4KA`zbq<(*@!^=~vI|It$&SmC96J5IwOR(HCS72fW( zYXSCqEA{8j`153$%(pC?27yBIe>(_eayWt)!W zSdyN0T15*d_&$zv@*4WZ5*Td@4}_FoN53Q#Vg^0DmfzFxIJe8=ayyVmOW HR)6px(_`rl diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/__pycache__/storage.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/__pycache__/storage.cpython-39.pyc deleted file mode 100644 index 757b6b6046d02aa23169deb8bab4b306cd30dfb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17226 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 L?VXy#Z}C3?oXqG8 diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/__pycache__/webhook.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/__pycache__/webhook.cpython-39.pyc deleted file mode 100644 index ad9ca25adf6d332e0ac8a458bcbf84904fe78b13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78827 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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/dispatcher.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/dispatcher.py deleted file mode 100644 index 8231c4f7..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/dispatcher.py +++ /dev/null @@ -1,1454 +0,0 @@ -import asyncio -import functools -import itertools -import logging -import time -import typing - -import aiohttp -from aiohttp.helpers import sentinel - -from aiogram.utils.deprecated import renamed_argument -from .filters import Command, ContentTypeFilter, ExceptionsFilter, FiltersFactory, HashTag, Regexp, \ - RegexpCommandsFilter, StateFilter, Text, IDFilter, AdminFilter, IsReplyFilter, ForwardedMessageFilter, \ - IsSenderContact, ChatTypeFilter, MediaGroupFilter, AbstractFilter -from .handler import Handler -from .middlewares import MiddlewareManager -from .storage import BaseStorage, DELTA, DisabledStorage, EXCEEDED_COUNT, FSMContext, \ - LAST_CALL, RATE_LIMIT, RESULT -from .webhook import BaseResponse -from .. import types -from ..bot import Bot -from ..utils.exceptions import TelegramAPIError, Throttled -from ..utils.mixins import ContextInstanceMixin, DataMixin - -log = logging.getLogger(__name__) - -DEFAULT_RATE_LIMIT = .1 - - -def _ensure_loop(x: "asyncio.AbstractEventLoop"): - assert isinstance( - x, asyncio.AbstractEventLoop - ), f"Loop must be the implementation of {asyncio.AbstractEventLoop!r}, " \ - f"not {type(x)!r}" - - -class Dispatcher(DataMixin, ContextInstanceMixin): - """ - Simple Updates dispatcher - - It will process incoming updates: messages, edited messages, channel posts, edited channel posts, - inline queries, chosen inline results, callback queries, shipping queries, pre-checkout queries. - """ - - def __init__(self, bot, loop=None, storage: typing.Optional[BaseStorage] = None, - run_tasks_by_default: bool = False, - throttling_rate_limit=DEFAULT_RATE_LIMIT, no_throttle_error=False, - filters_factory=None): - - if not isinstance(bot, Bot): - raise TypeError(f"Argument 'bot' must be an instance of Bot, not '{type(bot).__name__}'") - - if storage is None: - storage = DisabledStorage() - if filters_factory is None: - filters_factory = FiltersFactory(self) - - self.bot: Bot = bot - if loop is not None: - _ensure_loop(loop) - self._main_loop = loop - self.storage = storage - self.run_tasks_by_default = run_tasks_by_default - - self.throttling_rate_limit = throttling_rate_limit - self.no_throttle_error = no_throttle_error - - self.filters_factory: FiltersFactory = filters_factory - self.updates_handler = Handler(self, middleware_key='update') - self.message_handlers = Handler(self, middleware_key='message') - self.edited_message_handlers = Handler(self, middleware_key='edited_message') - self.channel_post_handlers = Handler(self, middleware_key='channel_post') - self.edited_channel_post_handlers = Handler(self, middleware_key='edited_channel_post') - self.inline_query_handlers = Handler(self, middleware_key='inline_query') - self.chosen_inline_result_handlers = Handler(self, middleware_key='chosen_inline_result') - self.callback_query_handlers = Handler(self, middleware_key='callback_query') - self.shipping_query_handlers = Handler(self, middleware_key='shipping_query') - self.pre_checkout_query_handlers = Handler(self, middleware_key='pre_checkout_query') - self.poll_handlers = Handler(self, middleware_key='poll') - self.poll_answer_handlers = Handler(self, middleware_key='poll_answer') - self.my_chat_member_handlers = Handler(self, middleware_key='my_chat_member') - self.chat_member_handlers = Handler(self, middleware_key='chat_member') - self.errors_handlers = Handler(self, once=False, middleware_key='error') - - self.middleware = MiddlewareManager(self) - - self.updates_handler.register(self.process_update) - - self._polling = False - self._closed = True - self._dispatcher_close_waiter = None - - self._setup_filters() - - @property - def loop(self) -> typing.Optional[asyncio.AbstractEventLoop]: - # for the sake of backward compatibility - # lib internally must delegate tasks with respect to _main_loop attribute - # however should never be used by the library itself - # use more generic approaches from asyncio's namespace - return self._main_loop - - @property - def _close_waiter(self) -> "asyncio.Future": - if self._dispatcher_close_waiter is None: - if self._main_loop is not None: - self._dispatcher_close_waiter = self._main_loop.create_future() - else: - self._dispatcher_close_waiter = asyncio.get_event_loop().create_future() - return self._dispatcher_close_waiter - - def _setup_filters(self): - filters_factory = self.filters_factory - - filters_factory.bind(StateFilter, exclude_event_handlers=[ - self.errors_handlers, - self.poll_handlers, - self.poll_answer_handlers, - ]) - filters_factory.bind(ContentTypeFilter, event_handlers=[ - self.message_handlers, - self.edited_message_handlers, - self.channel_post_handlers, - self.edited_channel_post_handlers, - ]), - filters_factory.bind(Command, event_handlers=[ - self.message_handlers, - self.edited_message_handlers - ]) - filters_factory.bind(Text, event_handlers=[ - self.message_handlers, - self.edited_message_handlers, - self.channel_post_handlers, - self.edited_channel_post_handlers, - self.callback_query_handlers, - self.poll_handlers, - self.inline_query_handlers, - ]) - filters_factory.bind(HashTag, event_handlers=[ - self.message_handlers, - self.edited_message_handlers, - self.channel_post_handlers, - self.edited_channel_post_handlers, - ]) - filters_factory.bind(Regexp, event_handlers=[ - self.message_handlers, - self.edited_message_handlers, - self.channel_post_handlers, - self.edited_channel_post_handlers, - self.callback_query_handlers, - self.poll_handlers, - self.inline_query_handlers, - ]) - filters_factory.bind(RegexpCommandsFilter, event_handlers=[ - self.message_handlers, - self.edited_message_handlers, - ]) - filters_factory.bind(ExceptionsFilter, event_handlers=[ - self.errors_handlers, - ]) - filters_factory.bind(AdminFilter, event_handlers=[ - self.message_handlers, - self.edited_message_handlers, - self.channel_post_handlers, - self.edited_channel_post_handlers, - self.callback_query_handlers, - self.inline_query_handlers, - self.chat_member_handlers, - ]) - filters_factory.bind(IDFilter, event_handlers=[ - self.message_handlers, - self.edited_message_handlers, - self.channel_post_handlers, - self.edited_channel_post_handlers, - self.callback_query_handlers, - self.inline_query_handlers, - self.chat_member_handlers, - self.my_chat_member_handlers, - ]) - filters_factory.bind(IsReplyFilter, event_handlers=[ - self.message_handlers, - self.edited_message_handlers, - self.channel_post_handlers, - self.edited_channel_post_handlers, - ]) - filters_factory.bind(IsSenderContact, event_handlers=[ - self.message_handlers, - self.edited_message_handlers, - self.channel_post_handlers, - self.edited_channel_post_handlers, - ]) - filters_factory.bind(ForwardedMessageFilter, event_handlers=[ - self.message_handlers, - self.edited_channel_post_handlers, - self.channel_post_handlers, - self.edited_channel_post_handlers - ]) - filters_factory.bind(ChatTypeFilter, event_handlers=[ - self.message_handlers, - self.edited_message_handlers, - self.channel_post_handlers, - self.edited_channel_post_handlers, - self.callback_query_handlers, - self.my_chat_member_handlers, - self.chat_member_handlers - ]) - filters_factory.bind(MediaGroupFilter, event_handlers=[ - self.message_handlers, - self.edited_channel_post_handlers, - self.channel_post_handlers, - self.edited_channel_post_handlers - ]) - - def __del__(self): - self.stop_polling() - - async def skip_updates(self): - """ - You can skip old incoming updates from queue. - This method is not recommended to use if you use payments or you bot has high-load. - - :return: None - """ - await self.bot.get_updates(offset=-1, timeout=1) - - async def process_updates(self, updates, fast: typing.Optional[bool] = True): - """ - Process list of updates - - :param updates: - :param fast: - :return: - """ - if fast: - tasks = [] - for update in updates: - tasks.append(self.updates_handler.notify(update)) - return await asyncio.gather(*tasks) - - results = [] - for update in updates: - results.append(await self.updates_handler.notify(update)) - return results - - async def process_update(self, update: types.Update): - """ - Process single update object - - :param update: - :return: - """ - types.Update.set_current(update) - - try: - if update.message: - types.Message.set_current(update.message) - types.User.set_current(update.message.from_user) - types.Chat.set_current(update.message.chat) - return await self.message_handlers.notify(update.message) - if update.edited_message: - types.Message.set_current(update.edited_message) - types.User.set_current(update.edited_message.from_user) - types.Chat.set_current(update.edited_message.chat) - return await self.edited_message_handlers.notify(update.edited_message) - if update.channel_post: - types.Message.set_current(update.channel_post) - types.Chat.set_current(update.channel_post.chat) - return await self.channel_post_handlers.notify(update.channel_post) - if update.edited_channel_post: - types.Message.set_current(update.edited_channel_post) - types.Chat.set_current(update.edited_channel_post.chat) - return await self.edited_channel_post_handlers.notify(update.edited_channel_post) - if update.inline_query: - types.InlineQuery.set_current(update.inline_query) - types.User.set_current(update.inline_query.from_user) - return await self.inline_query_handlers.notify(update.inline_query) - if update.chosen_inline_result: - types.ChosenInlineResult.set_current(update.chosen_inline_result) - types.User.set_current(update.chosen_inline_result.from_user) - return await self.chosen_inline_result_handlers.notify(update.chosen_inline_result) - if update.callback_query: - types.CallbackQuery.set_current(update.callback_query) - if update.callback_query.message: - types.Chat.set_current(update.callback_query.message.chat) - types.User.set_current(update.callback_query.from_user) - return await self.callback_query_handlers.notify(update.callback_query) - if update.shipping_query: - types.ShippingQuery.set_current(update.shipping_query) - types.User.set_current(update.shipping_query.from_user) - return await self.shipping_query_handlers.notify(update.shipping_query) - if update.pre_checkout_query: - types.PreCheckoutQuery.set_current(update.pre_checkout_query) - types.User.set_current(update.pre_checkout_query.from_user) - return await self.pre_checkout_query_handlers.notify(update.pre_checkout_query) - if update.poll: - types.Poll.set_current(update.poll) - return await self.poll_handlers.notify(update.poll) - if update.poll_answer: - types.PollAnswer.set_current(update.poll_answer) - types.User.set_current(update.poll_answer.user) - return await self.poll_answer_handlers.notify(update.poll_answer) - if update.my_chat_member: - types.ChatMemberUpdated.set_current(update.my_chat_member) - types.User.set_current(update.my_chat_member.from_user) - return await self.my_chat_member_handlers.notify(update.my_chat_member) - if update.chat_member: - types.ChatMemberUpdated.set_current(update.chat_member) - types.User.set_current(update.chat_member.from_user) - return await self.chat_member_handlers.notify(update.chat_member) - except Exception as e: - err = await self.errors_handlers.notify(update, e) - if err: - return err - raise - - async def reset_webhook(self, check=True) -> bool: - """ - Reset webhook - - :param check: check before deleting - :return: - """ - if check: - wh = await self.bot.get_webhook_info() - if not wh.url: - return False - - return await self.bot.delete_webhook() - - def _loop_create_task(self, coro): - if self._main_loop is None: - return asyncio.create_task(coro) - else: - _ensure_loop(self._main_loop) - return self._main_loop.create_task(coro) - - async def start_polling(self, - timeout=20, - relax=0.1, - limit=None, - reset_webhook=None, - fast: typing.Optional[bool] = True, - error_sleep: int = 5, - allowed_updates: typing.Optional[typing.List[str]] = None): - """ - Start long-polling - - :param timeout: - :param relax: - :param limit: - :param reset_webhook: - :param fast: - :param error_sleep: - :param allowed_updates: - :return: - """ - if self._polling: - raise RuntimeError('Polling already started') - - log.info('Start polling.') - - # context.set_value(MODE, LONG_POLLING) - Dispatcher.set_current(self) - Bot.set_current(self.bot) - - if reset_webhook is None: - await self.reset_webhook(check=False) - if reset_webhook: - await self.reset_webhook(check=True) - - self._polling = True - offset = None - try: - current_request_timeout = self.bot.timeout - if current_request_timeout is not sentinel and timeout is not None: - request_timeout = aiohttp.ClientTimeout(total=current_request_timeout.total + timeout or 1) - else: - request_timeout = None - - while self._polling: - try: - with self.bot.request_timeout(request_timeout): - updates = await self.bot.get_updates( - limit=limit, - offset=offset, - timeout=timeout, - allowed_updates=allowed_updates - ) - except asyncio.CancelledError: - break - except Exception as e: - log.exception('Cause exception while getting updates.') - await asyncio.sleep(error_sleep) - continue - - if updates: - log.debug(f"Received {len(updates)} updates.") - offset = updates[-1].update_id + 1 - - self._loop_create_task(self._process_polling_updates(updates, fast)) - - if relax: - await asyncio.sleep(relax) - - finally: - self._close_waiter.set_result(None) - log.warning('Polling is stopped.') - - async def _process_polling_updates(self, updates, fast: typing.Optional[bool] = True): - """ - Process updates received from long-polling. - - :param updates: list of updates. - :param fast: - """ - need_to_call = [] - for responses in itertools.chain.from_iterable(await self.process_updates(updates, fast)): - for response in responses: - if not isinstance(response, BaseResponse): - continue - need_to_call.append(response.execute_response(self.bot)) - if need_to_call: - try: - asyncio.gather(*need_to_call) - except TelegramAPIError: - log.exception('Cause exception while processing updates.') - - def stop_polling(self): - """ - Break long-polling process. - - :return: - """ - if hasattr(self, '_polling') and self._polling: - log.info('Stop polling...') - self._polling = False - - async def wait_closed(self): - """ - Wait for the long-polling to close - - :return: - """ - await asyncio.shield(self._close_waiter) - - def is_polling(self): - """ - Check if polling is enabled - - :return: - """ - return self._polling - - def register_message_handler(self, callback, *custom_filters, commands=None, regexp=None, content_types=None, - state=None, run_task=None, **kwargs): - """ - Register handler for message - - .. code-block:: python3 - - # This handler works only if state is None (by default). - dp.register_message_handler(cmd_start, commands=['start', 'about']) - dp.register_message_handler(entry_point, commands=['setup']) - - # This handler works only if current state is "first_step" - dp.register_message_handler(step_handler_1, state="first_step") - - # If you want to handle all states by one handler, use `state="*"`. - dp.register_message_handler(cancel_handler, commands=['cancel'], state="*") - dp.register_message_handler(cancel_handler, lambda msg: msg.text.lower() == 'cancel', state="*") - - :param callback: - :param commands: list of commands - :param regexp: REGEXP - :param content_types: List of content types. - :param custom_filters: list of custom filters - :param kwargs: - :param state: - :return: decorated function - """ - filters_set = self.filters_factory.resolve(self.message_handlers, - *custom_filters, - commands=commands, - regexp=regexp, - content_types=content_types, - state=state, - **kwargs) - self.message_handlers.register(self._wrap_async_task(callback, run_task), filters_set) - - def message_handler(self, *custom_filters, commands=None, regexp=None, content_types=None, state=None, - run_task=None, **kwargs): - """ - Decorator for message handler - - Examples: - - Simple commands handler: - - .. code-block:: python3 - - @dp.message_handler(commands=['start', 'welcome', 'about']) - async def cmd_handler(message: types.Message): - - Filter messages by regular expression: - - .. code-block:: python3 - - @dp.message_handler(regexp='^[a-z]+-[0-9]+') - async def msg_handler(message: types.Message): - - Filter messages by command regular expression: - - .. code-block:: python3 - - @dp.message_handler(filters.RegexpCommandsFilter(regexp_commands=['item_([0-9]*)'])) - async def send_welcome(message: types.Message): - - Filter by content type: - - .. code-block:: python3 - - @dp.message_handler(content_types=ContentType.PHOTO | ContentType.DOCUMENT) - async def audio_handler(message: types.Message): - - Filter by custom function: - - .. code-block:: python3 - - @dp.message_handler(lambda message: message.text and 'hello' in message.text.lower()) - async def text_handler(message: types.Message): - - Use multiple filters: - - .. code-block:: python3 - - @dp.message_handler(commands=['command'], content_types=ContentType.TEXT) - async def text_handler(message: types.Message): - - Register multiple filters set for one handler: - - .. code-block:: python3 - - @dp.message_handler(commands=['command']) - @dp.message_handler(lambda message: demojize(message.text) == ':new_moon_with_face:') - async def text_handler(message: types.Message): - - This handler will be called if the message starts with '/command' OR is some emoji - - By default content_type is :class:`ContentType.TEXT` - - :param commands: list of commands - :param regexp: REGEXP - :param content_types: List of content types. - :param custom_filters: list of custom filters - :param kwargs: - :param state: - :param run_task: run callback in task (no wait results) - :return: decorated function - """ - - def decorator(callback): - self.register_message_handler(callback, *custom_filters, - commands=commands, regexp=regexp, content_types=content_types, - state=state, run_task=run_task, **kwargs) - return callback - - return decorator - - def register_edited_message_handler(self, callback, *custom_filters, commands=None, regexp=None, content_types=None, - state=None, run_task=None, **kwargs): - """ - Register handler for edited message - - :param callback: - :param commands: list of commands - :param regexp: REGEXP - :param content_types: List of content types. - :param state: - :param custom_filters: list of custom filters - :param run_task: run callback in task (no wait results) - :param kwargs: - :return: decorated function - """ - filters_set = self.filters_factory.resolve(self.edited_message_handlers, - *custom_filters, - commands=commands, - regexp=regexp, - content_types=content_types, - state=state, - **kwargs) - self.edited_message_handlers.register(self._wrap_async_task(callback, run_task), filters_set) - - def edited_message_handler(self, *custom_filters, commands=None, regexp=None, content_types=None, - state=None, run_task=None, **kwargs): - """ - Decorator for edited message handler - - You can use combination of different handlers - - .. code-block:: python3 - - @dp.message_handler() - @dp.edited_message_handler() - async def msg_handler(message: types.Message): - - :param commands: list of commands - :param regexp: REGEXP - :param content_types: List of content types. - :param state: - :param custom_filters: list of custom filters - :param run_task: run callback in task (no wait results) - :param kwargs: - :return: decorated function - """ - - def decorator(callback): - self.register_edited_message_handler(callback, *custom_filters, commands=commands, regexp=regexp, - content_types=content_types, state=state, run_task=run_task, **kwargs) - return callback - - return decorator - - def register_channel_post_handler(self, callback, *custom_filters, commands=None, regexp=None, content_types=None, - state=None, run_task=None, **kwargs): - """ - Register handler for channel post - - :param callback: - :param commands: list of commands - :param regexp: REGEXP - :param content_types: List of content types. - :param state: - :param custom_filters: list of custom filters - :param run_task: run callback in task (no wait results) - :param kwargs: - :return: decorated function - """ - filters_set = self.filters_factory.resolve(self.channel_post_handlers, - *custom_filters, - commands=commands, - regexp=regexp, - content_types=content_types, - state=state, - **kwargs) - self.channel_post_handlers.register(self._wrap_async_task(callback, run_task), filters_set) - - def channel_post_handler(self, *custom_filters, commands=None, regexp=None, content_types=None, - state=None, run_task=None, **kwargs): - """ - Decorator for channel post handler - - :param commands: list of commands - :param regexp: REGEXP - :param content_types: List of content types. - :param state: - :param custom_filters: list of custom filters - :param run_task: run callback in task (no wait results) - :param kwargs: - :return: decorated function - """ - - def decorator(callback): - self.register_channel_post_handler(callback, *custom_filters, commands=commands, regexp=regexp, - content_types=content_types, state=state, run_task=run_task, **kwargs) - return callback - - return decorator - - def register_edited_channel_post_handler(self, callback, *custom_filters, commands=None, regexp=None, - content_types=None, state=None, run_task=None, **kwargs): - """ - Register handler for edited channel post - - :param callback: - :param commands: list of commands - :param regexp: REGEXP - :param content_types: List of content types. - :param state: - :param custom_filters: list of custom filters - :param run_task: run callback in task (no wait results) - :param kwargs: - :return: decorated function - """ - filters_set = self.filters_factory.resolve(self.edited_message_handlers, - *custom_filters, - commands=commands, - regexp=regexp, - content_types=content_types, - state=state, - **kwargs) - self.edited_channel_post_handlers.register(self._wrap_async_task(callback, run_task), filters_set) - - def edited_channel_post_handler(self, *custom_filters, commands=None, regexp=None, content_types=None, - state=None, run_task=None, **kwargs): - """ - Decorator for edited channel post handler - - :param commands: list of commands - :param regexp: REGEXP - :param content_types: List of content types. - :param custom_filters: list of custom filters - :param state: - :param run_task: run callback in task (no wait results) - :param kwargs: - :return: decorated function - """ - - def decorator(callback): - self.register_edited_channel_post_handler(callback, *custom_filters, commands=commands, regexp=regexp, - content_types=content_types, state=state, run_task=run_task, - **kwargs) - return callback - - return decorator - - def register_inline_handler(self, callback, *custom_filters, state=None, run_task=None, **kwargs): - """ - Register handler for inline query - - Example: - - .. code-block:: python3 - - dp.register_inline_handler(some_inline_handler, lambda inline_query: True) - - :param callback: - :param custom_filters: list of custom filters - :param state: - :param run_task: run callback in task (no wait results) - :param kwargs: - :return: decorated function - """ - if custom_filters is None: - custom_filters = [] - filters_set = self.filters_factory.resolve(self.inline_query_handlers, - *custom_filters, - state=state, - **kwargs) - self.inline_query_handlers.register(self._wrap_async_task(callback, run_task), filters_set) - - def inline_handler(self, *custom_filters, state=None, run_task=None, **kwargs): - """ - Decorator for inline query handler - - Example: - - .. code-block:: python3 - - @dp.inline_handler(lambda inline_query: True) - async def some_inline_handler(inline_query: types.InlineQuery) - - :param state: - :param custom_filters: list of custom filters - :param run_task: run callback in task (no wait results) - :param kwargs: - :return: decorated function - """ - - def decorator(callback): - self.register_inline_handler(callback, *custom_filters, state=state, run_task=run_task, **kwargs) - return callback - - return decorator - - def register_chosen_inline_handler(self, callback, *custom_filters, state=None, run_task=None, **kwargs): - """ - Register handler for chosen inline query - - Example: - - .. code-block:: python3 - - dp.register_chosen_inline_handler(some_chosen_inline_handler, lambda chosen_inline_query: True) - - :param callback: - :param state: - :param custom_filters: - :param run_task: run callback in task (no wait results) - :param kwargs: - :return: - """ - if custom_filters is None: - custom_filters = [] - filters_set = self.filters_factory.resolve(self.chosen_inline_result_handlers, - *custom_filters, - state=state, - **kwargs) - self.chosen_inline_result_handlers.register(self._wrap_async_task(callback, run_task), filters_set) - - def chosen_inline_handler(self, *custom_filters, state=None, run_task=None, **kwargs): - """ - Decorator for chosen inline query handler - - Example: - - .. code-block:: python3 - - @dp.chosen_inline_handler(lambda chosen_inline_query: True) - async def some_chosen_inline_handler(chosen_inline_query: types.ChosenInlineResult) - - :param state: - :param custom_filters: - :param run_task: run callback in task (no wait results) - :param kwargs: - :return: - """ - - def decorator(callback): - self.register_chosen_inline_handler(callback, *custom_filters, state=state, run_task=run_task, **kwargs) - return callback - - return decorator - - def register_callback_query_handler(self, callback, *custom_filters, state=None, run_task=None, **kwargs): - """ - Register handler for callback query - - Example: - - .. code-block:: python3 - - dp.register_callback_query_handler(some_callback_handler, lambda callback_query: True) - - :param callback: - :param state: - :param custom_filters: - :param run_task: run callback in task (no wait results) - :param kwargs: - """ - filters_set = self.filters_factory.resolve(self.callback_query_handlers, - *custom_filters, - state=state, - **kwargs) - self.callback_query_handlers.register(self._wrap_async_task(callback, run_task), filters_set) - - def callback_query_handler(self, *custom_filters, state=None, run_task=None, **kwargs): - """ - Decorator for callback query handler - - Example: - - .. code-block:: python3 - - @dp.callback_query_handler(lambda callback_query: True) - async def some_callback_handler(callback_query: types.CallbackQuery) - - :param state: - :param custom_filters: - :param run_task: run callback in task (no wait results) - :param kwargs: - """ - - def decorator(callback): - self.register_callback_query_handler(callback, *custom_filters, state=state, run_task=run_task, **kwargs) - return callback - - return decorator - - def register_shipping_query_handler(self, callback, *custom_filters, state=None, run_task=None, - **kwargs): - """ - Register handler for shipping query - - Example: - - .. code-block:: python3 - - dp.register_shipping_query_handler(some_shipping_query_handler, lambda shipping_query: True) - - :param callback: - :param state: - :param custom_filters: - :param run_task: run callback in task (no wait results) - :param kwargs: - """ - filters_set = self.filters_factory.resolve(self.shipping_query_handlers, - *custom_filters, - state=state, - **kwargs) - self.shipping_query_handlers.register(self._wrap_async_task(callback, run_task), filters_set) - - def shipping_query_handler(self, *custom_filters, state=None, run_task=None, **kwargs): - """ - Decorator for shipping query handler - - Example: - - .. code-block:: python3 - - @dp.shipping_query_handler(lambda shipping_query: True) - async def some_shipping_query_handler(shipping_query: types.ShippingQuery) - - :param state: - :param custom_filters: - :param run_task: run callback in task (no wait results) - :param kwargs: - """ - - def decorator(callback): - self.register_shipping_query_handler(callback, *custom_filters, state=state, run_task=run_task, **kwargs) - return callback - - return decorator - - def register_pre_checkout_query_handler(self, callback, *custom_filters, state=None, run_task=None, **kwargs): - """ - Register handler for pre-checkout query - - Example: - - .. code-block:: python3 - - dp.register_pre_checkout_query_handler(some_pre_checkout_query_handler, lambda shipping_query: True) - - :param callback: - :param state: - :param custom_filters: - :param run_task: run callback in task (no wait results) - :param kwargs: - """ - filters_set = self.filters_factory.resolve(self.pre_checkout_query_handlers, - *custom_filters, - state=state, - **kwargs) - self.pre_checkout_query_handlers.register(self._wrap_async_task(callback, run_task), filters_set) - - def pre_checkout_query_handler(self, *custom_filters, state=None, run_task=None, **kwargs): - """ - Decorator for pre-checkout query handler - - Example: - - .. code-block:: python3 - - @dp.pre_checkout_query_handler(lambda shipping_query: True) - async def some_pre_checkout_query_handler(shipping_query: types.ShippingQuery) - - :param state: - :param custom_filters: - :param run_task: run callback in task (no wait results) - :param kwargs: - """ - - def decorator(callback): - self.register_pre_checkout_query_handler(callback, *custom_filters, state=state, run_task=run_task, - **kwargs) - return callback - - return decorator - - def register_poll_handler(self, callback, *custom_filters, run_task=None, **kwargs): - """ - Register handler for poll - - Example: - - .. code-block:: python3 - - dp.register_poll_handler(some_poll_handler) - - :param callback: - :param custom_filters: - :param run_task: run callback in task (no wait results) - :param kwargs: - """ - filters_set = self.filters_factory.resolve(self.poll_handlers, - *custom_filters, - **kwargs) - self.poll_handlers.register(self._wrap_async_task(callback, run_task), filters_set) - - def poll_handler(self, *custom_filters, run_task=None, **kwargs): - """ - Decorator for poll handler - - Example: - - .. code-block:: python3 - - @dp.poll_handler() - async def some_poll_handler(poll: types.Poll) - - :param custom_filters: - :param run_task: run callback in task (no wait results) - :param kwargs: - """ - - def decorator(callback): - self.register_poll_handler(callback, *custom_filters, run_task=run_task, - **kwargs) - return callback - - return decorator - - def register_poll_answer_handler(self, callback, *custom_filters, run_task=None, **kwargs): - """ - Register handler for poll_answer - - Example: - - .. code-block:: python3 - - dp.register_poll_answer_handler(some_poll_answer_handler) - - :param callback: - :param custom_filters: - :param run_task: run callback in task (no wait results) - :param kwargs: - """ - filters_set = self.filters_factory.resolve(self.poll_answer_handlers, - *custom_filters, - **kwargs) - self.poll_answer_handlers.register(self._wrap_async_task(callback, run_task), filters_set) - - def poll_answer_handler(self, *custom_filters, run_task=None, **kwargs): - """ - Decorator for poll_answer handler - - Example: - - .. code-block:: python3 - - @dp.poll_answer_handler() - async def some_poll_answer_handler(poll_answer: types.PollAnswer) - - :param custom_filters: - :param run_task: run callback in task (no wait results) - :param kwargs: - """ - - def decorator(callback): - self.register_poll_answer_handler(callback, *custom_filters, run_task=run_task, - **kwargs) - return callback - - return decorator - - def register_my_chat_member_handler(self, - callback: typing.Callable, - *custom_filters, - run_task: typing.Optional[bool] = None, - **kwargs) -> None: - """ - Register handler for my_chat_member - - Example: - - .. code-block:: python3 - - dp.register_my_chat_member_handler(some_my_chat_member_handler) - - :param callback: - :param custom_filters: - :param run_task: run callback in task (no wait results) - :param kwargs: - """ - filters_set = self.filters_factory.resolve( - self.my_chat_member_handlers, - *custom_filters, - **kwargs, - ) - self.my_chat_member_handlers.register( - handler=self._wrap_async_task(callback, run_task), - filters=filters_set, - ) - - def my_chat_member_handler(self, *custom_filters, run_task=None, **kwargs): - """ - Decorator for my_chat_member handler - - Example: - - .. code-block:: python3 - - @dp.my_chat_member_handler() - async def some_handler(my_chat_member: types.ChatMemberUpdated) - - :param custom_filters: - :param run_task: run callback in task (no wait results) - :param kwargs: - """ - - def decorator(callback): - self.register_my_chat_member_handler( - callback, - *custom_filters, - run_task=run_task, - **kwargs, - ) - return callback - - return decorator - - def register_chat_member_handler(self, - callback: typing.Callable, - *custom_filters, - run_task: typing.Optional[bool] = None, - **kwargs) -> None: - """ - Register handler for chat_member - - Example: - - .. code-block:: python3 - - dp.register_chat_member_handler(some_chat_member_handler) - - :param callback: - :param custom_filters: - :param run_task: run callback in task (no wait results) - :param kwargs: - """ - filters_set = self.filters_factory.resolve( - self.chat_member_handlers, - *custom_filters, - **kwargs, - ) - self.chat_member_handlers.register( - handler=self._wrap_async_task(callback, run_task), - filters=filters_set, - ) - - def chat_member_handler(self, *custom_filters, run_task=None, **kwargs): - """ - Decorator for chat_member handler - - Example: - - .. code-block:: python3 - - @dp.chat_member_handler() - async def some_handler(chat_member: types.ChatMemberUpdated) - - :param custom_filters: - :param run_task: run callback in task (no wait results) - :param kwargs: - """ - - def decorator(callback): - self.register_chat_member_handler( - callback, - *custom_filters, - run_task=run_task, - **kwargs, - ) - return callback - - return decorator - - def register_errors_handler(self, callback, *custom_filters, exception=None, run_task=None, **kwargs): - """ - Register handler for errors - - :param callback: - :param exception: you can make handler for specific errors type - :param run_task: run callback in task (no wait results) - """ - filters_set = self.filters_factory.resolve(self.errors_handlers, - *custom_filters, - exception=exception, - **kwargs) - self.errors_handlers.register(self._wrap_async_task(callback, run_task), filters_set) - - def errors_handler(self, *custom_filters, exception=None, run_task=None, **kwargs): - """ - Decorator for errors handler - - :param exception: you can make handler for specific errors type - :param run_task: run callback in task (no wait results) - :return: - """ - - def decorator(callback): - self.register_errors_handler(self._wrap_async_task(callback, run_task), - *custom_filters, exception=exception, **kwargs) - return callback - - return decorator - - def current_state(self, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None) -> FSMContext: - """ - Get current state for user in chat as context - - .. code-block:: python3 - - with dp.current_state(chat=message.chat.id, user=message.user.id) as state: - pass - - state = dp.current_state() - state.set_state('my_state') - - :param chat: - :param user: - :return: - """ - if chat is None: - chat_obj = types.Chat.get_current() - chat = chat_obj.id if chat_obj else None - if user is None: - user_obj = types.User.get_current() - user = user_obj.id if user_obj else None - - return FSMContext(storage=self.storage, chat=chat, user=user) - - @renamed_argument(old_name='user', new_name='user_id', until_version='3.0', stacklevel=3) - @renamed_argument(old_name='chat', new_name='chat_id', until_version='3.0', stacklevel=4) - async def throttle(self, key, *, rate=None, user_id=None, chat_id=None, no_error=None) -> bool: - """ - Execute throttling manager. - Returns True if limit has not exceeded otherwise raises ThrottleError or returns False - - :param key: key in storage - :param rate: limit (by default is equal to default rate limit) - :param user_id: user id - :param chat_id: chat id - :param no_error: return boolean value instead of raising error - :return: bool - """ - if not self.storage.has_bucket(): - raise RuntimeError('This storage does not provide Leaky Bucket') - - if no_error is None: - no_error = self.no_throttle_error - if rate is None: - rate = self.throttling_rate_limit - if user_id is None and chat_id is None: - chat_obj = types.Chat.get_current() - chat_id = chat_obj.id if chat_obj else None - - user_obj = types.User.get_current() - user_id = user_obj.id if user_obj else None - - # Detect current time - now = time.time() - - bucket = await self.storage.get_bucket(chat=chat_id, user=user_id) - - # Fix bucket - if bucket is None: - bucket = {key: {}} - if key not in bucket: - bucket[key] = {} - data = bucket[key] - - # Calculate - called = data.get(LAST_CALL, now) - delta = now - called - result = delta >= rate or delta <= 0 - - # Save results - data[RESULT] = result - data[RATE_LIMIT] = rate - data[LAST_CALL] = now - data[DELTA] = delta - if not result: - data[EXCEEDED_COUNT] += 1 - else: - data[EXCEEDED_COUNT] = 1 - bucket[key].update(data) - await self.storage.set_bucket(chat=chat_id, user=user_id, bucket=bucket) - - if not result and not no_error: - # Raise if it is allowed - raise Throttled(key=key, chat=chat_id, user=user_id, **data) - return result - - @renamed_argument(old_name='user', new_name='user_id', until_version='3.0', stacklevel=3) - @renamed_argument(old_name='chat', new_name='chat_id', until_version='3.0', stacklevel=4) - async def check_key(self, key, chat_id=None, user_id=None): - """ - Get information about key in bucket - - :param key: - :param chat_id: - :param user_id: - :return: - """ - if not self.storage.has_bucket(): - raise RuntimeError('This storage does not provide Leaky Bucket') - - if user_id is None and chat_id is None: - chat_obj = types.Chat.get_current() - chat_id = chat_obj.id if chat_obj else None - - user_obj = types.User.get_current() - user_id = user_obj.id if user_obj else None - - bucket = await self.storage.get_bucket(chat=chat_id, user=user_id) - data = bucket.get(key, {}) - return Throttled(key=key, chat=chat_id, user=user_id, **data) - - @renamed_argument(old_name='user', new_name='user_id', until_version='3.0', stacklevel=3) - @renamed_argument(old_name='chat', new_name='chat_id', until_version='3.0', stacklevel=4) - async def release_key(self, key, chat_id=None, user_id=None): - """ - Release blocked key - - :param key: - :param chat_id: - :param user_id: - :return: - """ - if not self.storage.has_bucket(): - raise RuntimeError('This storage does not provide Leaky Bucket') - - if user_id is None and chat_id is None: - chat_obj = types.Chat.get_current() - chat_id = chat_obj.id if chat_obj else None - - user_obj = types.User.get_current() - user_id = user_obj.id if user_obj else None - - bucket = await self.storage.get_bucket(chat=chat_id, user=user_id) - if bucket and key in bucket: - del bucket['key'] - await self.storage.set_bucket(chat=chat_id, user=user_id, bucket=bucket) - return True - return False - - def async_task(self, func): - """ - Execute handler as task and return None. - Use this decorator for slow handlers (with timeouts) - - .. code-block:: python3 - - @dp.message_handler(commands=['command']) - @dp.async_task - async def cmd_with_timeout(message: types.Message): - await asyncio.sleep(120) - return SendMessage(message.chat.id, 'KABOOM').reply(message) - - :param func: - :return: - """ - - def process_response(task): - try: - response = task.result() - except Exception as e: - self._loop_create_task( - self.errors_handlers.notify(types.Update.get_current(), e)) - else: - if isinstance(response, BaseResponse): - self._loop_create_task(response.execute_response(self.bot)) - - @functools.wraps(func) - async def wrapper(*args, **kwargs): - task = self._loop_create_task(func(*args, **kwargs)) - task.add_done_callback(process_response) - - return wrapper - - def _wrap_async_task(self, callback, run_task=None) -> callable: - if run_task is None: - run_task = self.run_tasks_by_default - - if run_task: - return self.async_task(callback) - return callback - - def throttled(self, on_throttled: typing.Optional[typing.Callable] = None, - key=None, rate=None, - user_id=None, chat_id=None): - """ - Meta-decorator for throttling. - Invokes on_throttled if the handler was throttled. - - Example: - - .. code-block:: python3 - - async def handler_throttled(message: types.Message, **kwargs): - await message.answer("Throttled!") - - @dp.throttled(handler_throttled) - async def some_handler(message: types.Message): - await message.answer("Didn't throttled!") - - :param on_throttled: the callable object that should be either a function or return a coroutine - :param key: key in storage - :param rate: limit (by default is equal to default rate limit) - :param user_id: user id - :param chat_id: chat id - :return: decorator - """ - def decorator(func): - @functools.wraps(func) - async def wrapped(*args, **kwargs): - is_not_throttled = await self.throttle(key if key is not None else func.__name__, - rate=rate, - user_id=user_id, chat_id=chat_id, - no_error=True) - if is_not_throttled: - return await func(*args, **kwargs) - else: - kwargs.update( - { - 'rate': rate, - 'key': key, - 'user_id': user_id, - 'chat_id': chat_id - } - ) # update kwargs with parameters which were given to throttled - - if on_throttled: - if asyncio.iscoroutinefunction(on_throttled): - await on_throttled(*args, **kwargs) - else: - kwargs.update( - { - 'loop': asyncio.get_running_loop() - } - ) - partial_func = functools.partial(on_throttled, *args, **kwargs) - asyncio.get_running_loop().run_in_executor(None, - partial_func - ) - return wrapped - - return decorator - - def bind_filter(self, callback: typing.Union[typing.Callable, AbstractFilter], - validator: typing.Optional[typing.Callable] = None, - event_handlers: typing.Optional[typing.List[Handler]] = None, - exclude_event_handlers: typing.Optional[typing.Iterable[Handler]] = None): - """ - Register filter - - :param callback: callable or subclass of :obj:`AbstractFilter` - :param validator: custom validator. - :param event_handlers: list of instances of :obj:`Handler` - :param exclude_event_handlers: list of excluded event handlers (:obj:`Handler`) - """ - self.filters_factory.bind(callback=callback, validator=validator, event_handlers=event_handlers, - exclude_event_handlers=exclude_event_handlers) - - def unbind_filter(self, callback: typing.Union[typing.Callable, AbstractFilter]): - """ - Unregister filter - - :param callback: callable of subclass of :obj:`AbstractFilter` - """ - self.filters_factory.unbind(callback=callback) - - def setup_middleware(self, middleware): - """ - Setup middleware - - :param middleware: - :return: - """ - self.middleware.setup(middleware) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/__init__.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/__init__.py deleted file mode 100644 index d07d953b..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/__init__.py +++ /dev/null @@ -1,39 +0,0 @@ -from .builtin import Command, CommandHelp, CommandPrivacy, CommandSettings, CommandStart, ContentTypeFilter, \ - ExceptionsFilter, HashTag, Regexp, RegexpCommandsFilter, StateFilter, \ - Text, IDFilter, AdminFilter, IsReplyFilter, IsSenderContact, ForwardedMessageFilter, \ - ChatTypeFilter, MediaGroupFilter -from .factory import FiltersFactory -from .filters import AbstractFilter, BoundFilter, Filter, FilterNotPassed, FilterRecord, execute_filter, \ - check_filters, get_filter_spec, get_filters_spec - -__all__ = ( - 'Command', - 'CommandHelp', - 'CommandPrivacy', - 'CommandSettings', - 'CommandStart', - 'ContentTypeFilter', - 'ExceptionsFilter', - 'HashTag', - 'Regexp', - 'RegexpCommandsFilter', - 'StateFilter', - 'Text', - 'IDFilter', - 'AdminFilter', - 'IsReplyFilter', - 'IsSenderContact', - 'ForwardedMessageFilter', - 'ChatTypeFilter', - 'MediaGroupFilter', - 'FiltersFactory', - 'AbstractFilter', - 'BoundFilter', - 'Filter', - 'FilterNotPassed', - 'FilterRecord', - 'execute_filter', - 'check_filters', - 'get_filter_spec', - 'get_filters_spec', -) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/__pycache__/__init__.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index 204c46155b5e6954f329f14983878b83b0fd9835..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1100 zcmcJO&2AGh5XU#4n>5KLY5Lu!1#yZ5?HPm+rBGUlR;bBow9?|P-DK6B-IeW>)E5ix@Ivfh z0SZ`zB9@?pWhi3>Dp-Xoy5M3BYFLLluE82Mpn*+jVhdX6fro8qV+T6eg)XkcI`*Jf zAkSjFft#?oh)eMnZo@Y2zz*)hF7Ck|?!!JFzybE5kB4xGM{s1!Hv(O2*1GR|(CeHr=x{(IU~Kc_z-ISPN-7 z?`EOMbd)A4&$t&%O-5{NsyAXRW|`So&biZSS!1Y~Ub&P)@@?+XIOP~6xoBOg z8o?Iv0V;L})s{6Kate^dzyIkG~i5?n%!P$y7_$_AlHXc0U@o6sS2 z3G0L&VS}(q*dlBbb_lzKJ;FZWfY2u#T3inv8~1iB diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/__pycache__/builtin.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/__pycache__/builtin.cpython-39.pyc deleted file mode 100644 index de913c262f2cd04c1456bbca7f6b24a93422f1c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23916 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

sB_JJx56Rnvv_>-sb( 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 UO8ZM6LHdc(M@ywrzI5RK0W2$8m;e9( diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/__pycache__/factory.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/__pycache__/factory.cpython-39.pyc deleted file mode 100644 index 22afceb845af01e429a9cb5ea33cce16676e28e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2784 zcmb7G&2JM&6rb4-dt*CJfD#&1(G{%Pmzow3{g)VW|2qU6~3$NbiMF%7vL!`aYT1n0uPuFXyS=*j zJ#$`Dw!$h$R=Wa_sfFB*=q-+?aIK}_g`c%)B2g4;Xf4Q&CQRgZ;o=%>MR0JG`|-VY_<${FY^ z$)ldC%naTTu?joA^H{SpJm?5OIT>_h@H|PPPPoT?PX@vt4!P)T?eloQ^C;|gWSH`6 zLqFK_`&@SXFzE|_aDBGv^`4HTyq>$VH9Sy`=Y?^YdR`50Z-F4RM8_8vq1Y;{S`AA% zfgeR(I7Y4P`%%bz087<5TqE_KXLOKigTD--5#!$CdSK%Tc`Ly$&NXnCV2~no#>AXh zudG9RLU!q~F|ki5P!|bm_&0!?Ish1$?HoZjbE`5{G>1Mo?iSZ<>XF}#xSI%9j=DkQ zOX(&(x0!Tzo6i<`{%m=hsgJPFNT$iaovv&x+b%lWbR!5c9u&qh_2Yogoth`kN5`Fx z+ia^`&s=?$TLA7}&73K=ZA`D$YM27!DzJj65|SonjgqM18q!sqL2(wvIS{HObc$;N zW}=SERyT|p+Gi}O)#>=$5=+pcLG`8!8G_Xbub>0{4GbW(0 z2)BXZevwrqW4t$Y<4Ig(%%{Y=_X+Vvpb#T{e?(!B>~mO~0d*d=n3r>~ltwYS{UxkQ zBs3{iXoZf?FF})8LB)i9(~*c5@WCW-pg)GLD|nwAS`+ISa5@Hb7-hy0nV84M3840h zo@k6FhWK9FWHT&b=J?MkUfWzI(LT??l5Uz5!)ubKA0^8IbDPs$id53X_p(HjAE|qz zDDr|N?uGq1UFPU)A;5>FXayy9U_oN;hv4kfjgE0hkra%KsIaga{9(KR*95|&QE!;a z*t((Uo}&B9v8dc+VUPyNV0h~Xu>TJ_8GpMJ36TM_bu&t!LdaWNvyWi!5`UROeyDR$ zpf!MVg<9EAUE;64bD-e^k5jqePut1!z5PD9e8Q+;Sv~Y`-~}b`*MWd_T7O?# zyIB3~L+z}#Y?Q?{uv0l`Qr}9yEvlTqL;6nI__Xtsb2EeC7M22CE*)c?*3AC_wQ9(T diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/__pycache__/filters.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/__pycache__/filters.cpython-39.pyc deleted file mode 100644 index a7193815f226b52eef49214ee7bd3b236ebb7bb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9272 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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/__pycache__/state.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/__pycache__/state.cpython-39.pyc deleted file mode 100644 index e370157ee539cee163baea3416fd74aec4d0b4f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6459 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 Ryt*nlrB}-ztbEUx{|02MKdb-% diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/builtin.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/builtin.py deleted file mode 100644 index 457de182..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/builtin.py +++ /dev/null @@ -1,758 +0,0 @@ -import inspect -import re -import typing -import warnings -from contextvars import ContextVar -from dataclasses import dataclass, field -from typing import Any, Dict, Iterable, List, Optional, Union - -from babel.support import LazyProxy - -from aiogram import types -from aiogram.dispatcher.filters.filters import BoundFilter, Filter -from aiogram.types import CallbackQuery, ChatType, InlineQuery, Message, Poll, ChatMemberUpdated - -ChatIDArgumentType = typing.Union[typing.Iterable[typing.Union[int, str]], str, int] - - -def extract_chat_ids(chat_id: ChatIDArgumentType) -> typing.Set[int]: - # since "str" is also an "Iterable", we have to check for it first - if isinstance(chat_id, str): - return {int(chat_id), } - if isinstance(chat_id, Iterable): - return {int(item) for (item) in chat_id} - # the last possible type is a single "int" - return {chat_id, } - - -class Command(Filter): - """ - You can handle commands by using this filter. - - If filter is successful processed the :obj:`Command.CommandObj` will be passed to the handler arguments. - - By default this filter is registered for messages and edited messages handlers. - """ - - def __init__(self, commands: Union[Iterable, str], - prefixes: Union[Iterable, str] = '/', - ignore_case: bool = True, - ignore_mention: bool = False, - ignore_caption: bool = True): - """ - Filter can be initialized from filters factory or by simply creating instance of this class. - - Examples: - - .. code-block:: python - - @dp.message_handler(commands=['myCommand']) - @dp.message_handler(Command(['myCommand'])) - @dp.message_handler(commands=['myCommand'], commands_prefix='!/') - - :param commands: Command or list of commands always without leading slashes (prefix) - :param prefixes: Allowed commands prefix. By default is slash. - If you change the default behavior pass the list of prefixes to this argument. - :param ignore_case: Ignore case of the command - :param ignore_mention: Ignore mention in command - (By default this filter pass only the commands addressed to current bot) - :param ignore_caption: Ignore caption from message (in message types like photo, video, audio, etc) - By default is True. If you want check commands in captions, you also should set required content_types. - - Examples: - - .. code-block:: python - - @dp.message_handler(commands=['myCommand'], commands_ignore_caption=False, content_types=ContentType.ANY) - @dp.message_handler(Command(['myCommand'], ignore_caption=False), content_types=[ContentType.TEXT, ContentType.DOCUMENT]) - """ - if isinstance(commands, str): - commands = (commands,) - - self.commands = list(map(str.lower, commands)) if ignore_case else commands - self.prefixes = prefixes - self.ignore_case = ignore_case - self.ignore_mention = ignore_mention - self.ignore_caption = ignore_caption - - @classmethod - def validate(cls, full_config: Dict[str, Any]) -> Optional[Dict[str, Any]]: - """ - Validator for filters factory - - From filters factory this filter can be registered with arguments: - - - ``command`` - - ``commands_prefix`` (will be passed as ``prefixes``) - - ``commands_ignore_mention`` (will be passed as ``ignore_mention``) - - ``commands_ignore_caption`` (will be passed as ``ignore_caption``) - - :param full_config: - :return: config or empty dict - """ - config = {} - if 'commands' in full_config: - config['commands'] = full_config.pop('commands') - if config and 'commands_prefix' in full_config: - config['prefixes'] = full_config.pop('commands_prefix') - if config and 'commands_ignore_mention' in full_config: - config['ignore_mention'] = full_config.pop('commands_ignore_mention') - if config and 'commands_ignore_caption' in full_config: - config['ignore_caption'] = full_config.pop('commands_ignore_caption') - return config - - async def check(self, message: types.Message): - return await self.check_command(message, self.commands, self.prefixes, self.ignore_case, self.ignore_mention, self.ignore_caption) - - @classmethod - async def check_command(cls, message: types.Message, commands, prefixes, ignore_case=True, ignore_mention=False, ignore_caption=True): - text = message.text or (message.caption if not ignore_caption else None) - if not text: - return False - - full_command, *args_list = text.split(maxsplit=1) - args = args_list[0] if args_list else None - prefix, (command, _, mention) = full_command[0], full_command[1:].partition('@') - - if not ignore_mention and mention and (await message.bot.me).username.lower() != mention.lower(): - return False - if prefix not in prefixes: - return False - if (command.lower() if ignore_case else command) not in commands: - return False - - return {'command': cls.CommandObj(command=command, prefix=prefix, mention=mention, args=args)} - - @dataclass - class CommandObj: - """ - Instance of this object is always has command and it prefix. - - Can be passed as keyword argument ``command`` to the handler - """ - - """Command prefix""" - prefix: str = '/' - """Command without prefix and mention""" - command: str = '' - """Mention (if available)""" - mention: str = None - """Command argument""" - args: str = field(repr=False, default=None) - - @property - def mentioned(self) -> bool: - """ - This command has mention? - - :return: - """ - return bool(self.mention) - - @property - def text(self) -> str: - """ - Generate original text from object - - :return: - """ - line = self.prefix + self.command - if self.mentioned: - line += '@' + self.mention - if self.args: - line += ' ' + self.args - return line - - -class CommandStart(Command): - """ - This filter based on :obj:`Command` filter but can handle only ``/start`` command. - """ - - def __init__(self, - deep_link: typing.Optional[typing.Union[str, typing.Pattern[str]]] = None, - encoded: bool = False): - """ - Also this filter can handle `deep-linking `_ arguments. - - Example: - - .. code-block:: python - - @dp.message_handler(CommandStart(re.compile(r'ref-([\\d]+)'))) - - :param deep_link: string or compiled regular expression (by ``re.compile(...)``). - :param encoded: set True if you're waiting for encoded payload (default - False). - """ - super().__init__(['start']) - self.deep_link = deep_link - self.encoded = encoded - - async def check(self, message: types.Message): - """ - If deep-linking is passed to the filter result of the matching will be passed as ``deep_link`` to the handler - - :param message: - :return: - """ - from ...utils.deep_linking import decode_payload - check = await super().check(message) - - if check and self.deep_link is not None: - payload = decode_payload(message.get_args()) if self.encoded else message.get_args() - - if not isinstance(self.deep_link, typing.Pattern): - return False if payload != self.deep_link else {'deep_link': payload} - - match = self.deep_link.match(payload) - if match: - return {'deep_link': match} - return False - - return check - - -class CommandHelp(Command): - """ - This filter based on :obj:`Command` filter but can handle only ``/help`` command. - """ - - def __init__(self): - super().__init__(['help']) - - -class CommandSettings(Command): - """ - This filter based on :obj:`Command` filter but can handle only ``/settings`` command. - """ - - def __init__(self): - super().__init__(['settings']) - - -class CommandPrivacy(Command): - """ - This filter based on :obj:`Command` filter but can handle only ``/privacy`` command. - """ - - def __init__(self): - super().__init__(['privacy']) - - -class Text(Filter): - """ - Simple text filter - """ - - _default_params = ( - ('text', 'equals'), - ('text_contains', 'contains'), - ('text_startswith', 'startswith'), - ('text_endswith', 'endswith'), - ) - - def __init__(self, - equals: Optional[Union[str, LazyProxy, Iterable[Union[str, LazyProxy]]]] = None, - contains: Optional[Union[str, LazyProxy, Iterable[Union[str, LazyProxy]]]] = None, - startswith: Optional[Union[str, LazyProxy, Iterable[Union[str, LazyProxy]]]] = None, - endswith: Optional[Union[str, LazyProxy, Iterable[Union[str, LazyProxy]]]] = None, - ignore_case=False): - """ - Check text for one of pattern. Only one mode can be used in one filter. - In every pattern, a single string is treated as a list with 1 element. - - :param equals: True if object's text in the list - :param contains: True if object's text contains all strings from the list - :param startswith: True if object's text starts with any of strings from the list - :param endswith: True if object's text ends with any of strings from the list - :param ignore_case: case insensitive - """ - # Only one mode can be used. check it. - check = sum(map(lambda s: s is not None, (equals, contains, startswith, endswith))) - if check > 1: - args = "' and '".join([arg[0] for arg in [('equals', equals), - ('contains', contains), - ('startswith', startswith), - ('endswith', endswith) - ] if arg[1] is not None]) - raise ValueError(f"Arguments '{args}' cannot be used together.") - elif check == 0: - raise ValueError(f"No one mode is specified!") - - equals, contains, endswith, startswith = map(lambda e: [e] if isinstance(e, str) or isinstance(e, LazyProxy) - else e, - (equals, contains, endswith, startswith)) - self.equals = equals - self.contains = contains - self.endswith = endswith - self.startswith = startswith - self.ignore_case = ignore_case - - @classmethod - def validate(cls, full_config: Dict[str, Any]): - for param, key in cls._default_params: - if param in full_config: - return {key: full_config.pop(param)} - - async def check(self, obj: Union[Message, CallbackQuery, InlineQuery, Poll]): - if isinstance(obj, Message): - text = obj.text or obj.caption or '' - if not text and obj.poll: - text = obj.poll.question - elif isinstance(obj, CallbackQuery): - text = obj.data - elif isinstance(obj, InlineQuery): - text = obj.query - elif isinstance(obj, Poll): - text = obj.question - else: - return False - - if self.ignore_case: - text = text.lower() - _pre_process_func = lambda s: str(s).lower() - else: - _pre_process_func = str - - # now check - if self.equals is not None: - equals = list(map(_pre_process_func, self.equals)) - return text in equals - - if self.contains is not None: - contains = list(map(_pre_process_func, self.contains)) - return all(map(text.__contains__, contains)) - - if self.startswith is not None: - startswith = list(map(_pre_process_func, self.startswith)) - return any(map(text.startswith, startswith)) - - if self.endswith is not None: - endswith = list(map(_pre_process_func, self.endswith)) - return any(map(text.endswith, endswith)) - - return False - - -class HashTag(Filter): - """ - Filter for hashtag's and cashtag's - """ - - # TODO: allow to use regexp - - def __init__(self, hashtags=None, cashtags=None): - if not hashtags and not cashtags: - raise ValueError('No one hashtag or cashtag is specified!') - - if hashtags is None: - hashtags = [] - elif isinstance(hashtags, str): - hashtags = [hashtags] - - if cashtags is None: - cashtags = [] - elif isinstance(cashtags, str): - cashtags = [cashtags.upper()] - else: - cashtags = list(map(str.upper, cashtags)) - - self.hashtags = hashtags - self.cashtags = cashtags - - @classmethod - def validate(cls, full_config: Dict[str, Any]): - config = {} - if 'hashtags' in full_config: - config['hashtags'] = full_config.pop('hashtags') - if 'cashtags' in full_config: - config['cashtags'] = full_config.pop('cashtags') - return config - - async def check(self, message: types.Message): - if message.caption: - text = message.caption - entities = message.caption_entities - elif message.text: - text = message.text - entities = message.entities - else: - return False - - hashtags, cashtags = self._get_tags(text, entities) - if self.hashtags and set(hashtags) & set(self.hashtags) \ - or self.cashtags and set(cashtags) & set(self.cashtags): - return {'hashtags': hashtags, 'cashtags': cashtags} - - def _get_tags(self, text, entities): - hashtags = [] - cashtags = [] - - for entity in entities: - if entity.type == types.MessageEntityType.HASHTAG: - value = entity.get_text(text).lstrip('#') - hashtags.append(value) - - elif entity.type == types.MessageEntityType.CASHTAG: - value = entity.get_text(text).lstrip('$') - cashtags.append(value) - - return hashtags, cashtags - - -class Regexp(Filter): - """ - Regexp filter for messages and callback query - """ - - def __init__(self, regexp): - if not isinstance(regexp, typing.Pattern): - regexp = re.compile(regexp, flags=re.IGNORECASE | re.MULTILINE) - self.regexp = regexp - - @classmethod - def validate(cls, full_config: Dict[str, Any]): - if 'regexp' in full_config: - return {'regexp': full_config.pop('regexp')} - - async def check(self, obj: Union[Message, CallbackQuery, InlineQuery, Poll]): - if isinstance(obj, Message): - content = obj.text or obj.caption or '' - if not content and obj.poll: - content = obj.poll.question - elif isinstance(obj, CallbackQuery) and obj.data: - content = obj.data - elif isinstance(obj, InlineQuery): - content = obj.query - elif isinstance(obj, Poll): - content = obj.question - else: - return False - - match = self.regexp.search(content) - - if match: - return {'regexp': match} - return False - - -class RegexpCommandsFilter(BoundFilter): - """ - Check commands by regexp in message - """ - - key = 'regexp_commands' - - def __init__(self, regexp_commands): - self.regexp_commands = [re.compile(command, flags=re.IGNORECASE | re.MULTILINE) for command in regexp_commands] - - async def check(self, message): - if not message.is_command(): - return False - - command = message.text.split()[0][1:] - command, _, mention = command.partition('@') - - if mention and mention != (await message.bot.me).username: - return False - - for command in self.regexp_commands: - search = command.search(message.text) - if search: - return {'regexp_command': search} - return False - - -class ContentTypeFilter(BoundFilter): - """ - Check message content type - """ - - key = 'content_types' - required = True - default = types.ContentTypes.TEXT - - def __init__(self, content_types): - if isinstance(content_types, str): - content_types = (content_types,) - self.content_types = content_types - - async def check(self, message): - return types.ContentType.ANY in self.content_types or \ - message.content_type in self.content_types - - -class IsSenderContact(BoundFilter): - """ - Filter check that the contact matches the sender - - `is_sender_contact=True` - contact matches the sender - `is_sender_contact=False` - result will be inverted - """ - key = 'is_sender_contact' - - def __init__(self, is_sender_contact: bool): - self.is_sender_contact = is_sender_contact - - async def check(self, message: types.Message) -> bool: - if not message.contact: - return False - is_sender_contact = message.contact.user_id == message.from_user.id - if self.is_sender_contact: - return is_sender_contact - else: - return not is_sender_contact - - -class StateFilter(BoundFilter): - """ - Check user state - """ - key = 'state' - required = True - - ctx_state = ContextVar('user_state') - - def __init__(self, dispatcher, state): - from aiogram.dispatcher.filters.state import State, StatesGroup - - self.dispatcher = dispatcher - states = [] - if not isinstance(state, (list, set, tuple, frozenset)) or state is None: - state = [state, ] - for item in state: - if isinstance(item, State): - states.append(item.state) - elif inspect.isclass(item) and issubclass(item, StatesGroup): - states.extend(item.all_states_names) - else: - states.append(item) - self.states = states - - def get_target(self, obj): - if isinstance(obj, CallbackQuery): - return getattr(getattr(getattr(obj, 'message', None),'chat', None), 'id', None), getattr(getattr(obj, 'from_user', None), 'id', None) - return getattr(getattr(obj, 'chat', None), 'id', None), getattr(getattr(obj, 'from_user', None), 'id', None) - - async def check(self, obj): - if '*' in self.states: - return {'state': self.dispatcher.current_state()} - - try: - state = self.ctx_state.get() - except LookupError: - chat, user = self.get_target(obj) - - if chat or user: - state = await self.dispatcher.storage.get_state(chat=chat, user=user) - self.ctx_state.set(state) - if state in self.states: - return {'state': self.dispatcher.current_state(), 'raw_state': state} - - else: - if state in self.states: - return {'state': self.dispatcher.current_state(), 'raw_state': state} - - return False - - -class ExceptionsFilter(BoundFilter): - """ - Filter for exceptions - """ - - key = 'exception' - - def __init__(self, exception): - self.exception = exception - - async def check(self, update, exception): - try: - raise exception - except self.exception: - return True - except: - return False - - -class IDFilter(Filter): - def __init__(self, - user_id: Optional[ChatIDArgumentType] = None, - chat_id: Optional[ChatIDArgumentType] = None, - ): - """ - :param user_id: - :param chat_id: - """ - if user_id is None and chat_id is None: - raise ValueError("Both user_id and chat_id can't be None") - - self.user_id: Optional[typing.Set[int]] = None - self.chat_id: Optional[typing.Set[int]] = None - - if user_id: - self.user_id = extract_chat_ids(user_id) - - if chat_id: - self.chat_id = extract_chat_ids(chat_id) - - @classmethod - def validate(cls, full_config: typing.Dict[str, typing.Any]) -> typing.Optional[typing.Dict[str, typing.Any]]: - result = {} - if 'user_id' in full_config: - result['user_id'] = full_config.pop('user_id') - - if 'chat_id' in full_config: - result['chat_id'] = full_config.pop('chat_id') - - return result - - async def check(self, obj: Union[Message, CallbackQuery, InlineQuery, ChatMemberUpdated]): - if isinstance(obj, Message): - user_id = None - if obj.from_user is not None: - user_id = obj.from_user.id - chat_id = obj.chat.id - elif isinstance(obj, CallbackQuery): - user_id = obj.from_user.id - chat_id = None - if obj.message is not None: - # if the button was sent with message - chat_id = obj.message.chat.id - elif isinstance(obj, InlineQuery): - user_id = obj.from_user.id - chat_id = None - elif isinstance(obj, ChatMemberUpdated): - user_id = obj.from_user.id - chat_id = obj.chat.id - else: - return False - - if self.user_id and self.chat_id: - return user_id in self.user_id and chat_id in self.chat_id - if self.user_id: - return user_id in self.user_id - if self.chat_id: - return chat_id in self.chat_id - - return False - - -class AdminFilter(Filter): - """ - Checks if user is admin in a chat. - If is_chat_admin is not set, the filter will check in the current chat (correct only for messages). - is_chat_admin is required for InlineQuery. - """ - - def __init__(self, is_chat_admin: Optional[Union[ChatIDArgumentType, bool]] = None): - self._check_current = False - self._chat_ids = None - - if is_chat_admin is False: - raise ValueError("is_chat_admin cannot be False") - - if not is_chat_admin: - self._check_current = True - return - - if isinstance(is_chat_admin, bool): - self._check_current = is_chat_admin - self._chat_ids = extract_chat_ids(is_chat_admin) - - @classmethod - def validate(cls, full_config: typing.Dict[str, typing.Any]) -> typing.Optional[typing.Dict[str, typing.Any]]: - result = {} - - if "is_chat_admin" in full_config: - result["is_chat_admin"] = full_config.pop("is_chat_admin") - - return result - - async def check(self, obj: Union[Message, CallbackQuery, InlineQuery, ChatMemberUpdated]) -> bool: - user_id = obj.from_user.id - - if self._check_current: - if isinstance(obj, Message): - chat = obj.chat - elif isinstance(obj, CallbackQuery) and obj.message: - chat = obj.message.chat - elif isinstance(obj, ChatMemberUpdated): - chat = obj.chat - else: - return False - if chat.type == ChatType.PRIVATE: # there is no admin in private chats - return False - chat_ids = [chat.id] - else: - chat_ids = self._chat_ids - - admins = [member.user.id for chat_id in chat_ids for member in await obj.bot.get_chat_administrators(chat_id)] - - return user_id in admins - - -class IsReplyFilter(BoundFilter): - """ - Check if message is replied and send reply message to handler - """ - key = 'is_reply' - - def __init__(self, is_reply): - self.is_reply = is_reply - - async def check(self, msg: Message): - if msg.reply_to_message and self.is_reply: - return {'reply': msg.reply_to_message} - elif not msg.reply_to_message and not self.is_reply: - return True - - -class ForwardedMessageFilter(BoundFilter): - key = 'is_forwarded' - - def __init__(self, is_forwarded: bool): - self.is_forwarded = is_forwarded - - async def check(self, message: Message): - return bool(getattr(message, "forward_date")) is self.is_forwarded - - -class ChatTypeFilter(BoundFilter): - key = 'chat_type' - - def __init__(self, chat_type: typing.Container[ChatType]): - if isinstance(chat_type, str): - chat_type = {chat_type} - - self.chat_type: typing.Set[str] = set(chat_type) - - async def check(self, obj: Union[Message, CallbackQuery, ChatMemberUpdated]): - if isinstance(obj, Message): - obj = obj.chat - elif isinstance(obj, CallbackQuery): - obj = obj.message.chat - elif isinstance(obj, ChatMemberUpdated): - obj = obj.chat - else: - warnings.warn("ChatTypeFilter doesn't support %s as input", type(obj)) - return False - - return obj.type in self.chat_type - - -class MediaGroupFilter(BoundFilter): - """ - Check if message is part of a media group. - - `is_media_group=True` - the message is part of a media group - `is_media_group=False` - the message is NOT part of a media group - """ - - key = "is_media_group" - - def __init__(self, is_media_group: bool): - self.is_media_group = is_media_group - - async def check(self, message: types.Message) -> bool: - return bool(getattr(message, "media_group_id")) is self.is_media_group diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/factory.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/factory.py deleted file mode 100644 index 564e7f89..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/factory.py +++ /dev/null @@ -1,73 +0,0 @@ -import typing - -from .filters import AbstractFilter, FilterRecord -from ..handler import Handler - - -class FiltersFactory: - """ - Filters factory - """ - - def __init__(self, dispatcher): - self._dispatcher = dispatcher - self._registered: typing.List[FilterRecord] = [] - - def bind(self, callback: typing.Union[typing.Callable, AbstractFilter], - validator: typing.Optional[typing.Callable] = None, - event_handlers: typing.Optional[typing.List[Handler]] = None, - exclude_event_handlers: typing.Optional[typing.Iterable[Handler]] = None): - """ - Register filter - - :param callback: callable or subclass of :obj:`AbstractFilter` - :param validator: custom validator. - :param event_handlers: list of instances of :obj:`Handler` - :param exclude_event_handlers: list of excluded event handlers (:obj:`Handler`) - """ - record = FilterRecord(callback, validator, event_handlers, exclude_event_handlers) - self._registered.append(record) - - def unbind(self, callback: typing.Union[typing.Callable, AbstractFilter]): - """ - Unregister filter - - :param callback: callable of subclass of :obj:`AbstractFilter` - """ - for record in self._registered: - if record.callback == callback: - self._registered.remove(record) - - def resolve(self, event_handler, *custom_filters, **full_config - ) -> typing.List[typing.Union[typing.Callable, AbstractFilter]]: - """ - Resolve filters to filters-set - - :param event_handler: - :param custom_filters: - :param full_config: - :return: - """ - filters_set = [] - filters_set.extend(self._resolve_registered(event_handler, - {k: v for k, v in full_config.items() if v is not None})) - if custom_filters: - filters_set.extend(custom_filters) - - return filters_set - - def _resolve_registered(self, event_handler, full_config) -> typing.Generator: - """ - Resolve registered filters - - :param event_handler: - :param full_config: - :return: - """ - for record in self._registered: - filter_ = record.resolve(self._dispatcher, event_handler, full_config) - if filter_: - yield filter_ - - if full_config: - raise NameError("Invalid filter name(s): '" + "', ".join(full_config.keys()) + "'") diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/filters.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/filters.py deleted file mode 100644 index 220ef96c..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/filters.py +++ /dev/null @@ -1,289 +0,0 @@ -import abc -import inspect -import typing - -from ..handler import Handler, FilterObj - - -class FilterNotPassed(Exception): - pass - - -def wrap_async(func): - async def async_wrapper(*args, **kwargs): - return func(*args, **kwargs) - - if inspect.isawaitable(func) \ - or inspect.iscoroutinefunction(func) \ - or isinstance(func, AbstractFilter): - return func - return async_wrapper - - -def get_filter_spec(dispatcher, filter_: callable): - kwargs = {} - if not callable(filter_): - raise TypeError('Filter must be callable and/or awaitable!') - - spec = inspect.getfullargspec(filter_) - if 'dispatcher' in spec: - kwargs['dispatcher'] = dispatcher - if inspect.isawaitable(filter_) \ - or inspect.iscoroutinefunction(filter_) \ - or isinstance(filter_, AbstractFilter): - return FilterObj(filter=filter_, kwargs=kwargs, is_async=True) - else: - return FilterObj(filter=filter_, kwargs=kwargs, is_async=False) - - -def get_filters_spec(dispatcher, filters: typing.Iterable[callable]): - data = [] - if filters is not None: - for i in filters: - data.append(get_filter_spec(dispatcher, i)) - return data - - -async def execute_filter(filter_: FilterObj, args): - """ - Helper for executing filter - - :param filter_: - :param args: - :return: - """ - if filter_.is_async: - return await filter_.filter(*args, **filter_.kwargs) - else: - return filter_.filter(*args, **filter_.kwargs) - - -async def check_filters(filters: typing.Iterable[FilterObj], args): - """ - Check list of filters - - :param filters: - :param args: - :return: - """ - data = {} - if filters is not None: - for filter_ in filters: - f = await execute_filter(filter_, args) - if not f: - raise FilterNotPassed() - elif isinstance(f, dict): - data.update(f) - return data - - -class FilterRecord: - """ - Filters record for factory - """ - - def __init__(self, callback: typing.Union[typing.Callable, 'AbstractFilter'], - validator: typing.Optional[typing.Callable] = None, - event_handlers: typing.Optional[typing.Iterable[Handler]] = None, - exclude_event_handlers: typing.Optional[typing.Iterable[Handler]] = None): - if event_handlers and exclude_event_handlers: - raise ValueError("'event_handlers' and 'exclude_event_handlers' arguments cannot be used together.") - - self.callback = callback - self.event_handlers = event_handlers - self.exclude_event_handlers = exclude_event_handlers - - if validator is not None: - if not callable(validator): - raise TypeError(f"validator must be callable, not {type(validator)}") - self.resolver = validator - elif issubclass(callback, AbstractFilter): - self.resolver = callback.validate - else: - raise RuntimeError('validator is required!') - - def resolve(self, dispatcher, event_handler, full_config): - if not self._check_event_handler(event_handler): - return - config = self.resolver(full_config) - if config: - if 'dispatcher' not in config: - spec = inspect.getfullargspec(self.callback) - if 'dispatcher' in spec.args: - config['dispatcher'] = dispatcher - - for key in config: - if key in full_config: - full_config.pop(key) - - return self.callback(**config) - - def _check_event_handler(self, event_handler) -> bool: - if self.event_handlers: - return event_handler in self.event_handlers - elif self.exclude_event_handlers: - return event_handler not in self.exclude_event_handlers - return True - - -class AbstractFilter(abc.ABC): - """ - Abstract class for custom filters. - """ - - @classmethod - @abc.abstractmethod - def validate(cls, full_config: typing.Dict[str, typing.Any]) -> typing.Optional[typing.Dict[str, typing.Any]]: - """ - Validate and parse config. - - This method will be called by the filters factory when you bind this filter. - Must be overridden. - - :param full_config: dict with arguments passed to handler registrar - :return: Current filter config - """ - pass - - @abc.abstractmethod - async def check(self, *args) -> bool: - """ - Will be called when filters checks. - - This method must be overridden. - - :param args: - :return: - """ - pass - - async def __call__(self, *args) -> bool: - return await self.check(*args) - - def __invert__(self): - return NotFilter(self) - - def __and__(self, other): - if isinstance(self, AndFilter): - self.append(other) - return self - return AndFilter(self, other) - - def __or__(self, other): - if isinstance(self, OrFilter): - self.append(other) - return self - return OrFilter(self, other) - - -class Filter(AbstractFilter): - """ - You can make subclasses of that class for custom filters. - - Method ``check`` must be overridden - """ - - @classmethod - def validate(cls, full_config: typing.Dict[str, typing.Any]) -> typing.Optional[typing.Dict[str, typing.Any]]: - """ - Here method ``validate`` is optional. - If you need to use filter from filters factory you need to override this method. - - :param full_config: dict with arguments passed to handler registrar - :return: Current filter config - """ - pass - - -class BoundFilter(Filter): - """ - To easily create your own filters with one parameter, you can inherit from this filter. - - You need to implement ``__init__`` method with single argument related with key attribute - and ``check`` method where you need to implement filter logic. - """ - - key = None - """Unique name of the filter argument. You need to override this attribute.""" - required = False - """If :obj:`True` this filter will be added to the all of the registered handlers""" - default = None - """Default value for configure required filters""" - - @classmethod - def validate(cls, full_config: typing.Dict[str, typing.Any]) -> typing.Dict[str, typing.Any]: - """ - If ``cls.key`` is not :obj:`None` and that is in config returns config with that argument. - - :param full_config: - :return: - """ - if cls.key is not None: - if cls.key in full_config: - return {cls.key: full_config[cls.key]} - elif cls.required: - return {cls.key: cls.default} - - -class _LogicFilter(Filter): - @classmethod - def validate(cls, full_config: typing.Dict[str, typing.Any]): - raise ValueError('That filter can\'t be used in filters factory!') - - -class NotFilter(_LogicFilter): - def __init__(self, target): - self.target = wrap_async(target) - - async def check(self, *args): - return not bool(await self.target(*args)) - - -class AndFilter(_LogicFilter): - - def __init__(self, *targets): - self.targets = list(wrap_async(target) for target in targets) - - async def check(self, *args): - """ - All filters must return a positive result - - :param args: - :return: - """ - data = {} - for target in self.targets: - result = await target(*args) - if not result: - return False - if isinstance(result, dict): - data.update(result) - if not data: - return True - return data - - def append(self, target): - self.targets.append(wrap_async(target)) - - -class OrFilter(_LogicFilter): - def __init__(self, *targets): - self.targets = list(wrap_async(target) for target in targets) - - async def check(self, *args): - """ - One of filters must return a positive result - - :param args: - :return: - """ - for target in self.targets: - result = await target(*args) - if result: - if isinstance(result, dict): - return result - return True - return False - - def append(self, target): - self.targets.append(wrap_async(target)) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/state.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/state.py deleted file mode 100644 index 16937e1c..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/filters/state.py +++ /dev/null @@ -1,197 +0,0 @@ -import inspect -from typing import Optional - -from ..dispatcher import Dispatcher - - -class State: - """ - State object - """ - - def __init__(self, state: Optional[str] = None, group_name: Optional[str] = None): - self._state = state - self._group_name = group_name - self._group = None - - @property - def group(self): - if not self._group: - raise RuntimeError('This state is not in any group.') - return self._group - - def get_root(self): - return self.group.get_root() - - @property - def state(self): - if self._state is None or self._state == '*': - return self._state - - if self._group_name is None and self._group: - group = self._group.__full_group_name__ - elif self._group_name: - group = self._group_name - else: - group = '@' - - return f'{group}:{self._state}' - - def set_parent(self, group): - if not issubclass(group, StatesGroup): - raise ValueError('Group must be subclass of StatesGroup') - self._group = group - - def __set_name__(self, owner, name): - if self._state is None: - self._state = name - self.set_parent(owner) - - def __str__(self): - return f"" - - __repr__ = __str__ - - async def set(self): - state = Dispatcher.get_current().current_state() - await state.set_state(self.state) - - -class StatesGroupMeta(type): - def __new__(mcs, name, bases, namespace, **kwargs): - cls = super(StatesGroupMeta, mcs).__new__(mcs, name, bases, namespace) - - states = [] - childs = [] - - cls._group_name = name - - for name, prop in namespace.items(): - - if isinstance(prop, State): - states.append(prop) - elif inspect.isclass(prop) and issubclass(prop, StatesGroup): - childs.append(prop) - prop._parent = cls - - cls._parent = None - cls._childs = tuple(childs) - cls._states = tuple(states) - cls._state_names = tuple(state.state for state in states) - - return cls - - @property - def __group_name__(cls) -> str: - return cls._group_name - - @property - def __full_group_name__(cls) -> str: - if cls._parent: - return '.'.join((cls._parent.__full_group_name__, cls._group_name)) - return cls._group_name - - @property - def states(cls) -> tuple: - return cls._states - - @property - def childs(cls) -> tuple: - return cls._childs - - @property - def all_childs(cls): - result = cls.childs - for child in cls.childs: - result += child.childs - return result - - @property - def all_states(cls): - result = cls.states - for group in cls.childs: - result += group.all_states - return result - - @property - def all_states_names(cls): - return tuple(state.state for state in cls.all_states) - - @property - def states_names(cls) -> tuple: - return tuple(state.state for state in cls.states) - - def get_root(cls): - if cls._parent is None: - return cls - return cls._parent.get_root() - - def __contains__(cls, item): - if isinstance(item, str): - return item in cls.all_states_names - if isinstance(item, State): - return item in cls.all_states - if isinstance(item, StatesGroup): - return item in cls.all_childs - return False - - def __str__(self): - return f"" - - -class StatesGroup(metaclass=StatesGroupMeta): - @classmethod - async def next(cls) -> str: - state = Dispatcher.get_current().current_state() - state_name = await state.get_state() - - try: - next_step = cls.states_names.index(state_name) + 1 - except ValueError: - next_step = 0 - - try: - next_state_name = cls.states[next_step].state - except IndexError: - next_state_name = None - - await state.set_state(next_state_name) - return next_state_name - - @classmethod - async def previous(cls) -> str: - state = Dispatcher.get_current().current_state() - state_name = await state.get_state() - - try: - previous_step = cls.states_names.index(state_name) - 1 - except ValueError: - previous_step = 0 - - if previous_step < 0: - previous_state_name = None - else: - previous_state_name = cls.states[previous_step].state - - await state.set_state(previous_state_name) - return previous_state_name - - @classmethod - async def first(cls) -> str: - state = Dispatcher.get_current().current_state() - first_step_name = cls.states_names[0] - - await state.set_state(first_step_name) - return first_step_name - - @classmethod - async def last(cls) -> str: - state = Dispatcher.get_current().current_state() - last_step_name = cls.states_names[-1] - - await state.set_state(last_step_name) - return last_step_name - - -default_state = State() -any_state = State(state='*') diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/handler.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/handler.py deleted file mode 100644 index 10a94924..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/handler.py +++ /dev/null @@ -1,138 +0,0 @@ -import inspect -from contextvars import ContextVar -from dataclasses import dataclass -from typing import Optional, Iterable, List - -ctx_data = ContextVar('ctx_handler_data') -current_handler = ContextVar('current_handler') - - -@dataclass -class FilterObj: - filter: callable - kwargs: dict - is_async: bool - - -class SkipHandler(Exception): - pass - - -class CancelHandler(Exception): - pass - - -def _get_spec(func: callable): - while hasattr(func, '__wrapped__'): # Try to resolve decorated callbacks - func = func.__wrapped__ - return inspect.getfullargspec(func) - - -def _check_spec(spec: inspect.FullArgSpec, kwargs: dict): - if spec.varkw: - return kwargs - - return {k: v for k, v in kwargs.items() if k in set(spec.args + spec.kwonlyargs)} - - -class Handler: - def __init__(self, dispatcher, once=True, middleware_key=None): - self.dispatcher = dispatcher - self.once = once - - self.handlers: List[Handler.HandlerObj] = [] - self.middleware_key = middleware_key - - def register(self, handler, filters=None, index=None): - """ - Register callback - - Filters can be awaitable or not. - - :param handler: coroutine - :param filters: list of filters - :param index: you can reorder handlers - """ - from .filters import get_filters_spec - - spec = _get_spec(handler) - - if filters and not isinstance(filters, (list, tuple, set)): - filters = [filters] - filters = get_filters_spec(self.dispatcher, filters) - - record = Handler.HandlerObj(handler=handler, spec=spec, filters=filters) - if index is None: - self.handlers.append(record) - else: - self.handlers.insert(index, record) - - def unregister(self, handler): - """ - Remove handler - - :param handler: callback - :return: - """ - for handler_obj in self.handlers: - registered = handler_obj.handler - if handler is registered: - self.handlers.remove(handler_obj) - return True - raise ValueError('This handler is not registered!') - - async def notify(self, *args): - """ - Notify handlers - - :param args: - :return: - """ - from .filters import check_filters, FilterNotPassed - - results = [] - - data = {} - ctx_data.set(data) - - if self.middleware_key: - try: - await self.dispatcher.middleware.trigger(f"pre_process_{self.middleware_key}", args + (data,)) - except CancelHandler: # Allow to cancel current event - return results - - try: - for handler_obj in self.handlers: - try: - data.update(await check_filters(handler_obj.filters, args)) - except FilterNotPassed: - continue - else: - ctx_token = current_handler.set(handler_obj.handler) - try: - if self.middleware_key: - await self.dispatcher.middleware.trigger(f"process_{self.middleware_key}", args + (data,)) - partial_data = _check_spec(handler_obj.spec, data) - response = await handler_obj.handler(*args, **partial_data) - if response is not None: - results.append(response) - if self.once: - break - except SkipHandler: - continue - except CancelHandler: - break - finally: - current_handler.reset(ctx_token) - finally: - if self.middleware_key: - await self.dispatcher.middleware.trigger(f"post_process_{self.middleware_key}", - args + (results, data,)) - - return results - - @dataclass - class HandlerObj: - handler: callable - spec: inspect.FullArgSpec - filters: Optional[Iterable[FilterObj]] = None diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/middlewares.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/middlewares.py deleted file mode 100644 index 5fa09830..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/middlewares.py +++ /dev/null @@ -1,131 +0,0 @@ -import logging -import typing - -log = logging.getLogger('aiogram.Middleware') - - -class MiddlewareManager: - """ - Middlewares manager. Works only with dispatcher. - """ - - def __init__(self, dispatcher): - """ - Init - - :param dispatcher: instance of Dispatcher - """ - self.dispatcher = dispatcher - self.bot = dispatcher.bot - self.storage = dispatcher.storage - self.applications = [] - - @property - def loop(self): - return self.dispatcher.loop - - def setup(self, middleware): - """ - Setup middleware - - :param middleware: - :return: - """ - if not isinstance(middleware, BaseMiddleware): - raise TypeError(f"`middleware` must be an instance of BaseMiddleware, not {type(middleware)}") - if middleware.is_configured(): - raise ValueError('That middleware is already used!') - - self.applications.append(middleware) - middleware.setup(self) - log.debug(f"Loaded middleware '{middleware.__class__.__name__}'") - return middleware - - async def trigger(self, action: str, args: typing.Iterable): - """ - Call action to middlewares with args lilt. - - :param action: - :param args: - :return: - """ - for app in self.applications: - await app.trigger(action, args) - - -class BaseMiddleware: - """ - Base class for middleware. - - All methods on the middle always must be coroutines and name starts with "on_" like "on_process_message". - """ - - def __init__(self): - self._configured = False - self._manager = None - - @property - def manager(self) -> MiddlewareManager: - """ - Instance of MiddlewareManager - """ - if self._manager is None: - raise RuntimeError('Middleware is not configured!') - return self._manager - - def setup(self, manager): - """ - Mark middleware as configured - - :param manager: - :return: - """ - self._manager = manager - self._configured = True - - def is_configured(self) -> bool: - """ - Check middleware is configured - - :return: - """ - return self._configured - - async def trigger(self, action, args): - """ - Trigger action. - - :param action: - :param args: - :return: - """ - handler_name = f"on_{action}" - handler = getattr(self, handler_name, None) - if not handler: - return None - await handler(*args) - - -class LifetimeControllerMiddleware(BaseMiddleware): - # TODO: Rename class - - skip_patterns = None - - async def pre_process(self, obj, data, *args): - pass - - async def post_process(self, obj, data, *args): - pass - - async def trigger(self, action, args): - if self.skip_patterns is not None and any(item in action for item in self.skip_patterns): - return False - - obj, *args, data = args - if action.startswith('pre_process_'): - await self.pre_process(obj, data, *args) - elif action.startswith('post_process_'): - await self.post_process(obj, data, *args) - else: - return False - return True diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/storage.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/storage.py deleted file mode 100644 index eb248e34..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/storage.py +++ /dev/null @@ -1,506 +0,0 @@ -import copy -import typing - -from ..utils.deprecated import warn_deprecated as warn -from ..utils.exceptions import FSMStorageWarning - -# Leak bucket -KEY = 'key' -LAST_CALL = 'called_at' -RATE_LIMIT = 'rate_limit' -RESULT = 'result' -EXCEEDED_COUNT = 'exceeded' -DELTA = 'delta' -THROTTLE_MANAGER = '$throttle_manager' - - -class BaseStorage: - """ - You are able to save current user's state - and data for all steps in states-storage - """ - - async def close(self): - """ - You have to override this method and use when application shutdowns. - Perhaps you would like to save data and etc. - - :return: - """ - raise NotImplementedError - - async def wait_closed(self): - """ - You have to override this method for all asynchronous storages (e.g., Redis). - - :return: - """ - raise NotImplementedError - - @classmethod - def check_address(cls, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None, - ) -> (typing.Union[str, int], typing.Union[str, int]): - """ - In all storage's methods chat or user is always required. - If one of them is not provided, you have to set missing value based on the provided one. - - This method performs the check described above. - - :param chat: chat_id - :param user: user_id - :return: - """ - if chat is None and user is None: - raise ValueError('`user` or `chat` parameter is required but no one is provided!') - - if user is None: - user = chat - - elif chat is None: - chat = user - - return chat, user - - async def get_state(self, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None, - default: typing.Optional[str] = None) -> typing.Optional[str]: - """ - Get current state of user in chat. Return `default` if no record is found. - - Chat or user is always required. If one of them is not provided, - you have to set missing value based on the provided one. - - :param chat: - :param user: - :param default: - :return: - """ - raise NotImplementedError - - async def get_data(self, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None, - default: typing.Optional[typing.Dict] = None) -> typing.Dict: - """ - Get state-data for user in chat. Return `default` if no data is provided in storage. - - Chat or user is always required. If one of them is not provided, - you have to set missing value based on the provided one. - - :param chat: - :param user: - :param default: - :return: - """ - raise NotImplementedError - - async def set_state(self, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None, - state: typing.Optional[typing.AnyStr] = None): - """ - Set new state for user in chat - - Chat or user is always required. If one of them is not provided, - you have to set missing value based on the provided one. - - :param chat: - :param user: - :param state: - """ - raise NotImplementedError - - async def set_data(self, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None, - data: typing.Dict = None): - """ - Set data for user in chat - - Chat or user is always required. If one of them is not provided, - you have to set missing value based on the provided one. - - :param chat: - :param user: - :param data: - """ - raise NotImplementedError - - async def update_data(self, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None, - data: typing.Dict = None, - **kwargs): - """ - Update data for user in chat - - You can use data parameter or|and kwargs. - - Chat or user is always required. If one of them is not provided, - you have to set missing value based on the provided one. - - :param data: - :param chat: - :param user: - :param kwargs: - :return: - """ - raise NotImplementedError - - async def reset_data(self, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None): - """ - Reset data for user in chat. - - Chat or user is always required. If one of them is not provided, - you have to set missing value based on the provided one. - - :param chat: - :param user: - :return: - """ - await self.set_data(chat=chat, user=user, data={}) - - async def reset_state(self, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None, - with_data: typing.Optional[bool] = True): - """ - Reset state for user in chat. - You may desire to use this method when finishing conversations. - - Chat or user is always required. If one of this is not presented, - you have to set missing value based on the provided one. - - :param chat: - :param user: - :param with_data: - :return: - """ - chat, user = self.check_address(chat=chat, user=user) - await self.set_state(chat=chat, user=user, state=None) - if with_data: - await self.set_data(chat=chat, user=user, data={}) - - async def finish(self, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None): - """ - Finish conversation for user in chat. - - Chat or user is always required. If one of them is not provided, - you have to set missing value based on the provided one. - - :param chat: - :param user: - :return: - """ - await self.reset_state(chat=chat, user=user, with_data=True) - - def has_bucket(self): - return False - - async def get_bucket(self, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None, - default: typing.Optional[dict] = None) -> typing.Dict: - """ - Get bucket for user in chat. Return `default` if no data is provided in storage. - - Chat or user is always required. If one of them is not provided, - you have to set missing value based on the provided one. - - :param chat: - :param user: - :param default: - :return: - """ - raise NotImplementedError - - async def set_bucket(self, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None, - bucket: typing.Dict = None): - """ - Set bucket for user in chat - - Chat or user is always required. If one of them is not provided, - you have to set missing value based on the provided one. - - :param chat: - :param user: - :param bucket: - """ - raise NotImplementedError - - async def update_bucket(self, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None, - bucket: typing.Dict = None, - **kwargs): - """ - Update bucket for user in chat - - You can use bucket parameter or|and kwargs. - - Chat or user is always required. If one of them is not provided, - you have to set missing value based on the provided one. - - :param bucket: - :param chat: - :param user: - :param kwargs: - :return: - """ - raise NotImplementedError - - async def reset_bucket(self, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None): - """ - Reset bucket dor user in chat. - - Chat or user is always required. If one of them is not provided, - you have to set missing value based on the provided one. - - :param chat: - :param user: - :return: - """ - await self.set_data(chat=chat, user=user, data={}) - - @staticmethod - def resolve_state(value): - from .filters.state import State - - if value is None: - return - - if isinstance(value, str): - return value - - if isinstance(value, State): - return value.state - - return str(value) - - -class FSMContext: - def __init__(self, storage, chat, user): - self.storage: BaseStorage = storage - self.chat, self.user = self.storage.check_address(chat=chat, user=user) - - def proxy(self): - return FSMContextProxy(self) - - async def get_state(self, default: typing.Optional[str] = None) -> typing.Optional[str]: - return await self.storage.get_state(chat=self.chat, user=self.user, default=default) - - async def get_data(self, default: typing.Optional[str] = None) -> typing.Dict: - return await self.storage.get_data(chat=self.chat, user=self.user, default=default) - - async def update_data(self, data: typing.Dict = None, **kwargs): - await self.storage.update_data(chat=self.chat, user=self.user, data=data, **kwargs) - - async def set_state(self, state: typing.Optional[typing.AnyStr] = None): - await self.storage.set_state(chat=self.chat, user=self.user, state=state) - - async def set_data(self, data: typing.Dict = None): - await self.storage.set_data(chat=self.chat, user=self.user, data=data) - - async def reset_state(self, with_data: typing.Optional[bool] = True): - await self.storage.reset_state(chat=self.chat, user=self.user, with_data=with_data) - - async def reset_data(self): - await self.storage.reset_data(chat=self.chat, user=self.user) - - async def finish(self): - await self.storage.finish(chat=self.chat, user=self.user) - - -class FSMContextProxy: - def __init__(self, fsm_context: FSMContext): - super(FSMContextProxy, self).__init__() - self.fsm_context = fsm_context - self._copy = {} - self._data = {} - self._state = None - self._is_dirty = False - - self._closed = True - - async def __aenter__(self): - await self.load() - return self - - async def __aexit__(self, exc_type, exc_val, exc_tb): - if exc_type is None: - await self.save() - self._closed = True - - def _check_closed(self): - if self._closed: - raise LookupError('Proxy is closed!') - - @classmethod - async def create(cls, fsm_context: FSMContext): - """ - :param fsm_context: - :return: - """ - proxy = cls(fsm_context) - await proxy.load() - return proxy - - async def load(self): - self._closed = False - - self.clear() - self._state = await self.fsm_context.get_state() - self.update(await self.fsm_context.get_data()) - self._copy = copy.deepcopy(self._data) - self._is_dirty = False - - @property - def state(self): - return self._state - - @state.setter - def state(self, value): - self._check_closed() - - self._state = value - self._is_dirty = True - - @state.deleter - def state(self): - self._check_closed() - - self._state = None - self._is_dirty = True - - async def save(self, force=False): - self._check_closed() - - if self._copy != self._data or force: - await self.fsm_context.set_data(data=self._data) - if self._is_dirty or force: - await self.fsm_context.set_state(self.state) - self._is_dirty = False - self._copy = copy.deepcopy(self._data) - - def clear(self): - del self.state - return self._data.clear() - - def get(self, value, default=None): - return self._data.get(value, default) - - def setdefault(self, key, default): - self._check_closed() - - return self._data.setdefault(key, default) - - def update(self, data=None, **kwargs): - self._check_closed() - - self._data.update(data, **kwargs) - - def pop(self, key, default=None): - self._check_closed() - - return self._data.pop(key, default) - - def keys(self): - return self._data.keys() - - def values(self): - return self._data.values() - - def items(self): - return self._data.items() - - def as_dict(self): - return copy.deepcopy(self._data) - - def __len__(self): - return len(self._data) - - def __iter__(self): - return self._data.__iter__() - - def __getitem__(self, item): - return self._data[item] - - def __setitem__(self, key, value): - self._check_closed() - - self._data[key] = value - - def __delitem__(self, key): - self._check_closed() - - del self._data[key] - - def __contains__(self, item): - return item in self._data - - def __str__(self): - readable_state = f"'{self.state}'" if self.state else "" - result = f"{self.__class__.__name__} state = {readable_state}, data = {self._data}" - if self._closed: - result += ', closed = True' - return result - - -class DisabledStorage(BaseStorage): - """ - Empty storage. Use it if you don't want to use Finite-State Machine - """ - - async def close(self): - pass - - async def wait_closed(self): - pass - - async def get_state(self, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None, - default: typing.Optional[str] = None) -> typing.Optional[str]: - return None - - async def get_data(self, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None, - default: typing.Optional[str] = None) -> typing.Dict: - self._warn() - return {} - - async def update_data(self, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None, - data: typing.Dict = None, **kwargs): - self._warn() - - async def set_state(self, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None, - state: typing.Optional[typing.AnyStr] = None): - self._warn() - - async def set_data(self, *, - chat: typing.Union[str, int, None] = None, - user: typing.Union[str, int, None] = None, - data: typing.Dict = None): - self._warn() - - @staticmethod - def _warn(): - warn(f"You haven’t set any storage yet so no states and no data will be saved. \n" - f"You can connect MemoryStorage for debug purposes or non-essential data.", - FSMStorageWarning, 5) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/webhook.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/webhook.py deleted file mode 100644 index bc21e22c..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/dispatcher/webhook.py +++ /dev/null @@ -1,2191 +0,0 @@ -import asyncio -import asyncio.tasks -import datetime -import functools -import ipaddress -import itertools -import typing -import logging -from typing import Dict, List, Optional, Union - -from aiohttp import web -from aiohttp.web_exceptions import HTTPGone - -from .. import types -from ..bot import api -from ..types import ParseMode -from ..types.base import Boolean, Float, Integer, String -from ..utils import helper, markdown -from ..utils import json -from ..utils.deprecated import warn_deprecated as warn -from ..utils.exceptions import TimeoutWarning -from ..utils.payload import prepare_arg - -DEFAULT_WEB_PATH = '/webhook' -DEFAULT_ROUTE_NAME = 'webhook_handler' -BOT_DISPATCHER_KEY = 'BOT_DISPATCHER' - -RESPONSE_TIMEOUT = 55 - -WEBHOOK = 'webhook' -WEBHOOK_CONNECTION = 'WEBHOOK_CONNECTION' -WEBHOOK_REQUEST = 'WEBHOOK_REQUEST' - -TELEGRAM_SUBNET_1 = ipaddress.IPv4Network('149.154.160.0/20') -TELEGRAM_SUBNET_2 = ipaddress.IPv4Network('91.108.4.0/22') - -allowed_ips = set() - -log = logging.getLogger(__name__) - - -def _check_ip(ip: str) -> bool: - """ - Check IP in range - - :param ip: - :return: - """ - address = ipaddress.IPv4Address(ip) - return address in allowed_ips - - -def allow_ip(*ips: typing.Union[str, ipaddress.IPv4Network, ipaddress.IPv4Address]): - """ - Allow ip address. - - :param ips: - :return: - """ - for ip in ips: - if isinstance(ip, ipaddress.IPv4Address): - allowed_ips.add(ip) - elif isinstance(ip, str): - allowed_ips.add(ipaddress.IPv4Address(ip)) - elif isinstance(ip, ipaddress.IPv4Network): - allowed_ips.update(ip.hosts()) - else: - raise ValueError(f"Bad type of ipaddress: {type(ip)} ('{ip}')") - - -# Allow access from Telegram servers -allow_ip(TELEGRAM_SUBNET_1, TELEGRAM_SUBNET_2) - - -class WebhookRequestHandler(web.View): - """ - Simple Wehhook request handler for aiohttp web server. - - You need to register that in app: - - .. code-block:: python3 - - app.router.add_route('*', '/your/webhook/path', WebhookRequestHandler, name='webhook_handler') - - But first you need to configure application for getting Dispatcher instance from request handler! - It must always be with key 'BOT_DISPATCHER' - - .. code-block:: python3 - - bot = Bot(TOKEN, loop) - dp = Dispatcher(bot) - app['BOT_DISPATCHER'] = dp - - """ - - def get_dispatcher(self): - """ - Get Dispatcher instance from environment - - :return: :class:`aiogram.Dispatcher` - """ - dp = self.request.app[BOT_DISPATCHER_KEY] - try: - from aiogram import Bot, Dispatcher - Dispatcher.set_current(dp) - Bot.set_current(dp.bot) - except RuntimeError: - pass - return dp - - async def parse_update(self, bot): - """ - Read update from stream and deserialize it. - - :param bot: bot instance. You an get it from Dispatcher - :return: :class:`aiogram.types.Update` - """ - data = await self.request.json() - return types.Update(**data) - - async def post(self): - """ - Process POST request - - if one of handler returns instance of :class:`aiogram.dispatcher.webhook.BaseResponse` return it to webhook. - Otherwise do nothing (return 'ok') - - :return: :class:`aiohttp.web.Response` - """ - self.validate_ip() - - # context.update_state({'CALLER': WEBHOOK, - # WEBHOOK_CONNECTION: True, - # WEBHOOK_REQUEST: self.request}) - - dispatcher = self.get_dispatcher() - update = await self.parse_update(dispatcher.bot) - - results = await self.process_update(update) - response = self.get_response(results) - - if response: - web_response = response.get_web_response() - else: - web_response = web.Response(text='ok') - - if self.request.app.get('RETRY_AFTER', None): - web_response.headers['Retry-After'] = self.request.app['RETRY_AFTER'] - - return web_response - - async def get(self): - self.validate_ip() - return web.Response(text='') - - async def head(self): - self.validate_ip() - return web.Response(text='') - - async def process_update(self, update): - """ - Need respond in less than 60 seconds in to webhook. - - So... If you respond greater than 55 seconds webhook automatically respond 'ok' - and execute callback response via simple HTTP request. - - :param update: - :return: - """ - dispatcher = self.get_dispatcher() - loop = dispatcher.loop or asyncio.get_event_loop() - - # Analog of `asyncio.wait_for` but without cancelling task - waiter = loop.create_future() - timeout_handle = loop.call_later(RESPONSE_TIMEOUT, asyncio.tasks._release_waiter, waiter) - cb = functools.partial(asyncio.tasks._release_waiter, waiter) - - fut = asyncio.ensure_future(dispatcher.updates_handler.notify(update), loop=loop) - fut.add_done_callback(cb) - - try: - try: - await waiter - except asyncio.CancelledError: - fut.remove_done_callback(cb) - fut.cancel() - raise - - if fut.done(): - return fut.result() - else: - # context.set_value(WEBHOOK_CONNECTION, False) - fut.remove_done_callback(cb) - fut.add_done_callback(self.respond_via_request) - finally: - timeout_handle.cancel() - - def respond_via_request(self, task): - """ - Handle response after 55 second. - - :param task: - :return: - """ - warn(f"Detected slow response into webhook. " - f"(Greater than {RESPONSE_TIMEOUT} seconds)\n" - f"Recommended to use 'async_task' decorator from Dispatcher for handler with long timeouts.", - TimeoutWarning) - - dispatcher = self.get_dispatcher() - loop = dispatcher.loop or asyncio.get_event_loop() - - try: - results = task.result() - except Exception as e: - loop.create_task( - dispatcher.errors_handlers.notify(dispatcher, types.Update.get_current(), e)) - else: - response = self.get_response(results) - if response is not None: - asyncio.ensure_future(response.execute_response(dispatcher.bot), loop=loop) - - def get_response(self, results): - """ - Get response object from results. - - :param results: list - :return: - """ - if results is None: - return None - for result in itertools.chain.from_iterable(results): - if isinstance(result, BaseResponse): - return result - - def check_ip(self): - """ - Check client IP. Accept requests only from telegram servers. - - :return: - """ - # For reverse proxy (nginx) - forwarded_for = self.request.headers.get('X-Forwarded-For', None) - if forwarded_for: - return forwarded_for, _check_ip(forwarded_for) - - # For default method - peer_name = self.request.transport.get_extra_info('peername') - if peer_name is not None: - host, _ = peer_name - return host, _check_ip(host) - - # Not allowed and can't get client IP - return None, False - - def validate_ip(self): - """ - Check ip if that is needed. Raise web.HTTPUnauthorized for not allowed hosts. - """ - if self.request.app.get('_check_ip', False): - ip_address, accept = self.check_ip() - if not accept: - log.warning(f"Blocking request from an unauthorized IP: {ip_address}") - raise web.HTTPUnauthorized() - - # context.set_value('TELEGRAM_IP', ip_address) - - -class GoneRequestHandler(web.View): - """ - If a webhook returns the HTTP error 410 Gone for all requests for more than 23 hours successively, - it can be automatically removed. - """ - - async def get(self): - raise HTTPGone() - - async def post(self): - raise HTTPGone() - - -def configure_app(dispatcher, app: web.Application, path=DEFAULT_WEB_PATH, route_name=DEFAULT_ROUTE_NAME): - """ - You can prepare web.Application for working with webhook handler. - - :param dispatcher: Dispatcher instance - :param app: :class:`aiohttp.web.Application` - :param path: Path to your webhook. - :param route_name: Name of webhook handler route - :return: - """ - app.router.add_route('*', path, WebhookRequestHandler, name=route_name) - app[BOT_DISPATCHER_KEY] = dispatcher - - -def get_new_configured_app(dispatcher, path=DEFAULT_WEB_PATH): - """ - Create new :class:`aiohttp.web.Application` and configure it. - - :param dispatcher: Dispatcher instance - :param path: Path to your webhook. - :return: - """ - app = web.Application() - configure_app(dispatcher, app, path) - return app - - -class BaseResponse: - """ - Base class for webhook responses. - """ - - @property - def method(self) -> str: - """ - In all subclasses of that class you need to override this property - - :return: str - """ - raise NotImplementedError - - def prepare(self) -> typing.Dict: - """ - You need to override this method. - - :return: response parameters dict - """ - raise NotImplementedError - - def cleanup(self) -> typing.Dict: - """ - Cleanup response after preparing. Remove empty fields. - - :return: response parameters dict - """ - return {k: v for k, v in self.prepare().items() if v is not None} - - def get_response(self): - """ - Get response object - - :return: - """ - return {'method': self.method, **self.cleanup()} - - def get_web_response(self): - """ - Get prepared web response with JSON data. - - :return: :class:`aiohttp.web.Response` - """ - return web.json_response(self.get_response(), dumps=json.dumps) - - async def execute_response(self, bot): - """ - Use this method if you want to execute response as simple HTTP request. - - :param bot: Bot instance. - :return: - """ - method_name = helper.HelperMode.apply(self.method, helper.HelperMode.snake_case) - method = getattr(bot, method_name, None) - if method: - return await method(**self.cleanup()) - return await bot.request(self.method, self.cleanup()) - - async def __call__(self, bot=None): - if bot is None: - from aiogram import Bot - bot = Bot.get_current() - return await self.execute_response(bot) - - async def __aenter__(self): - return self - - async def __aexit__(self, exc_type, exc_val, exc_tb): - return await self() - - -class ReplyToMixin: - """ - Mixin for responses where from which can reply to messages. - """ - - def reply(self, message: typing.Union[int, types.Message]): - """ - Reply to message - - :param message: :obj:`int` or :obj:`types.Message` - :return: self - """ - setattr(self, 'reply_to_message_id', message.message_id if isinstance(message, types.Message) else message) - return self - - def to(self, target: typing.Union[types.Message, types.Chat, types.base.Integer, types.base.String]): - """ - Send to chat - - :param target: message or chat or id - :return: - """ - if isinstance(target, types.Message): - chat_id = target.chat.id - elif isinstance(target, types.Chat): - chat_id = target.id - elif isinstance(target, (int, str)): - chat_id = target - else: - raise TypeError(f"Bad type of target. ({type(target)})") - - setattr(self, 'chat_id', chat_id) - return self - - -class DisableNotificationMixin: - def without_notification(self): - """ - Disable notification - - :return: - """ - setattr(self, 'disable_notification', True) - return self - - -class DisableWebPagePreviewMixin: - def no_web_page_preview(self): - """ - Disable web page preview - - :return: - """ - setattr(self, 'disable_web_page_preview', True) - return self - - -class ParseModeMixin: - def as_html(self): - """ - Set parse_mode to HTML - - :return: - """ - setattr(self, 'parse_mode', ParseMode.HTML) - return self - - def as_markdown(self): - """ - Set parse_mode to Markdown - - :return: - """ - setattr(self, 'parse_mode', ParseMode.MARKDOWN) - return self - - @staticmethod - def _global_parse_mode(): - """ - Detect global parse mode - - :return: - """ - from aiogram import Bot - bot = Bot.get_current() - if bot is not None: - return bot.parse_mode - - -class SendMessage(BaseResponse, ReplyToMixin, ParseModeMixin, DisableNotificationMixin, DisableWebPagePreviewMixin): - """ - You can send message with webhook by using this instance of this object. - All arguments is equal with Bot.send_message method. - """ - - __slots__ = ('chat_id', 'text', 'parse_mode', - 'disable_web_page_preview', 'disable_notification', - 'reply_to_message_id', 'reply_markup') - - method = api.Methods.SEND_MESSAGE - - def __init__(self, chat_id: Union[Integer, String] = None, - text: String = None, - parse_mode: Optional[String] = None, - disable_web_page_preview: Optional[Boolean] = None, - disable_notification: Optional[Boolean] = None, - reply_to_message_id: Optional[Integer] = None, - reply_markup: Optional[Union[ - types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup, Dict, String]] = None): - """ - :param chat_id: Union[Integer, String] - Unique identifier for the target chat or username - of the target channel (in the format @channelusername) - :param text: String - Text of the message to be sent - :param parse_mode: String (Optional) - Send Markdown or HTML, if you want Telegram apps to show bold, - italic, fixed-width text or inline URLs in your bot's message. - :param disable_web_page_preview: Boolean (Optional) - Disables link previews for links in this message - :param disable_notification: Boolean (Optional) - Sends the message silently. Users will receive - a notification with no sound. - :param reply_to_message_id: Integer (Optional) - If the message is a reply, ID of the original message - :param reply_markup: Union[types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup, Dict, String] (Optional) - - Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user. - """ - if text is None: - text = '' - if parse_mode is None: - parse_mode = self._global_parse_mode() - - self.chat_id = chat_id - self.text = text - self.parse_mode = parse_mode - self.disable_web_page_preview = disable_web_page_preview - self.disable_notification = disable_notification - self.reply_to_message_id = reply_to_message_id - self.reply_markup = reply_markup - - def prepare(self) -> dict: - return { - 'chat_id': self.chat_id, - 'text': self.text, - 'parse_mode': self.parse_mode, - 'disable_web_page_preview': self.disable_web_page_preview, - 'disable_notification': self.disable_notification, - 'reply_to_message_id': self.reply_to_message_id, - 'reply_markup': prepare_arg(self.reply_markup), - } - - def write(self, *text, sep=' '): - """ - Write text to response - - :param text: - :param sep: - :return: - """ - self.text += markdown.text(*text, sep) - return self - - def write_ln(self, *text, sep=' '): - """ - Write line - - :param text: - :param sep: - :return: - """ - if self.text and self.text[-1] != '\n': - self.text += '\n' - self.text += markdown.text(*text, sep) + '\n' - return self - - -class ForwardMessage(BaseResponse, ReplyToMixin, DisableNotificationMixin): - """ - Use that response type for forward messages of any kind on to webhook. - """ - __slots__ = ('chat_id', 'from_chat_id', 'message_id', 'disable_notification') - - method = api.Methods.FORWARD_MESSAGE - - def __init__(self, chat_id: Union[Integer, String] = None, - from_chat_id: Union[Integer, String] = None, - message_id: Integer = None, - disable_notification: Optional[Boolean] = None): - """ - :param chat_id: Union[Integer, String] - Unique identifier for the target chat or username of the - target channel (in the format @channelusername) - :param from_chat_id: Union[Integer, String] - Unique identifier for the chat where the original - message was sent (or channel username in the format @channelusername) - :param disable_notification: Boolean (Optional) - Sends the message silently. Users will receive a - notification with no sound. - :param message_id: Integer - Message identifier in the chat specified in from_chat_id - """ - self.chat_id = chat_id - self.from_chat_id = from_chat_id - self.message_id = message_id - self.disable_notification = disable_notification - - def message(self, message: types.Message): - """ - Select target message - - :param message: - :return: - """ - setattr(self, 'from_chat_id', message.chat.id) - setattr(self, 'message_id', message.message_id) - return self - - def prepare(self) -> dict: - return { - 'chat_id': self.chat_id, - 'from_chat_id': self.from_chat_id, - 'message_id': self.message_id, - 'disable_notification': self.disable_notification - } - - -class SendPhoto(BaseResponse, ReplyToMixin, DisableNotificationMixin): - """ - Use that response type for send photo on to webhook. - """ - - __slots__ = ('chat_id', 'photo', 'caption', 'disable_notification', 'reply_to_message_id', 'reply_markup') - - method = api.Methods.SEND_PHOTO - - def __init__(self, chat_id: Union[Integer, String], - photo: String, - caption: Optional[String] = None, - disable_notification: Optional[Boolean] = None, - reply_to_message_id: Optional[Integer] = None, - reply_markup: Optional[Union[ - types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup, Dict, String]] = None): - """ - :param chat_id: Union[Integer, String] - Unique identifier for the target chat or username of - the target channel (in the format @channelusername) - :param photo: String - Photo to send. Pass a file_id as String to send - a photo that exists on the Telegram servers (recommended), pass an HTTP URL as a String for - Telegram to get a photo from the Internet, or upload a new photo using multipart/form-data. - :param caption: String (Optional) - Photo caption (may also be used when resending photos by file_id), - 0-1024 characters after entities parsing - :param disable_notification: Boolean (Optional) - Sends the message silently. Users will receive - a notification with no sound. - :param reply_to_message_id: Integer (Optional) - If the message is a reply, ID of the original message - :param reply_markup: Union[types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup, Dict, String] (Optional) - - Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user. - """ - self.chat_id = chat_id - self.photo = photo - self.caption = caption - self.disable_notification = disable_notification - self.reply_to_message_id = reply_to_message_id - self.reply_markup = reply_markup - - def prepare(self): - return { - 'chat_id': self.chat_id, - 'photo': self.photo, - 'caption': self.caption, - 'disable_notification': self.disable_notification, - 'reply_to_message_id': self.reply_to_message_id, - 'reply_markup': prepare_arg(self.reply_markup), - } - - -class SendAudio(BaseResponse, ReplyToMixin, DisableNotificationMixin): - """ - Use that response type for send audio on to webhook. - """ - - __slots__ = ('chat_id', 'audio', 'caption', 'duration', 'performer', 'title', - 'disable_notification', 'reply_to_message_id', 'reply_markup') - - method = api.Methods.SEND_AUDIO - - def __init__(self, chat_id: Union[Integer, String], - audio: String, - caption: Optional[String] = None, - duration: Optional[Integer] = None, - performer: Optional[String] = None, - title: Optional[String] = None, - disable_notification: Optional[Boolean] = None, - reply_to_message_id: Optional[Integer] = None, - reply_markup: Optional[Union[ - types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup, Dict, String]] = None): - """ - :param chat_id: Union[Integer, String] - Unique identifier for the target chat or username - of the target channel (in the format @channelusername) - :param audio: String - Audio file to send. Pass a file_id as String - to send an audio file that exists on the Telegram servers (recommended), pass an HTTP URL - as a String for Telegram to get an audio file from the Internet, or upload a new one - using multipart/form-data. - :param caption: String (Optional) - Audio caption, 0-1024 characters after entities parsing - :param duration: Integer (Optional) - Duration of the audio in seconds - :param performer: String (Optional) - Performer - :param title: String (Optional) - Track name - :param disable_notification: Boolean (Optional) - Sends the message silently. - Users will receive a notification with no sound. - :param reply_to_message_id: Integer (Optional) - If the message is a reply, ID of the original message - :param reply_markup: Union[types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup, Dict, String] (Optional) - - Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user. - """ - self.chat_id = chat_id - self.audio = audio - self.caption = caption - self.duration = duration - self.performer = performer - self.title = title - self.disable_notification = disable_notification - self.reply_to_message_id = reply_to_message_id - self.reply_markup = reply_markup - - def prepare(self): - return { - 'chat_id': self.chat_id, - 'audio': self.audio, - 'caption': self.caption, - 'duration': self.duration, - 'performer': self.performer, - 'title': self.title, - 'disable_notification': self.disable_notification, - 'reply_to_message_id': self.reply_to_message_id, - 'reply_markup': prepare_arg(self.reply_markup), - } - - -class SendDocument(BaseResponse, ReplyToMixin, DisableNotificationMixin): - """ - Use that response type for send document on to webhook. - """ - - __slots__ = ('chat_id', 'document', 'caption', 'disable_notification', 'reply_to_message_id', 'reply_markup') - - method = api.Methods.SEND_DOCUMENT - - def __init__(self, chat_id: Union[Integer, String], - document: String, - caption: Optional[String] = None, - disable_notification: Optional[Boolean] = None, - reply_to_message_id: Optional[Integer] = None, - reply_markup: Optional[Union[ - types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup, Dict, String]] = None): - """ - :param chat_id: Union[Integer, String] - Unique identifier for the target chat or username - of the target channel (in the format @channelusername) - :param document: String - File to send. Pass a file_id as String - to send a file that exists on the Telegram servers (recommended), pass an HTTP URL - as a String for Telegram to get a file from the Internet, or upload a new one - using multipart/form-data. - :param caption: String (Optional) - Document caption - (may also be used when resending documents by file_id), 0-1024 characters after entities parsing - :param disable_notification: Boolean (Optional) - Sends the message silently. - Users will receive a notification with no sound. - :param reply_to_message_id: Integer (Optional) - If the message is a reply, ID of the original message - :param reply_markup: Union[types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup, Dict, String] (Optional) - - Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user. - """ - self.chat_id = chat_id - self.document = document - self.caption = caption - self.disable_notification = disable_notification - self.reply_to_message_id = reply_to_message_id - self.reply_markup = reply_markup - - def prepare(self): - return { - 'chat_id': self.chat_id, - 'document': self.document, - 'caption': self.caption, - 'disable_notification': self.disable_notification, - 'reply_to_message_id': self.reply_to_message_id, - 'reply_markup': prepare_arg(self.reply_markup), - } - - -class SendVideo(BaseResponse, ReplyToMixin, DisableNotificationMixin): - """ - Use that response type for send video on to webhook. - """ - - __slots__ = ('chat_id', 'video', 'duration', 'width', 'height', 'caption', 'disable_notification', - 'reply_to_message_id', 'reply_markup') - - method = api.Methods.SEND_VIDEO - - def __init__(self, chat_id: Union[Integer, String], - video: String, - duration: Optional[Integer] = None, - width: Optional[Integer] = None, - height: Optional[Integer] = None, - caption: Optional[String] = None, - disable_notification: Optional[Boolean] = None, - reply_to_message_id: Optional[Integer] = None, - reply_markup: Optional[Union[ - types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup, Dict, String]] = None): - """ - :param chat_id: Union[Integer, String] - Unique identifier for the target chat or username - of the target channel (in the format @channelusername) - :param video: String - Video to send. Pass a file_id as String - to send a video that exists on the Telegram servers (recommended), pass an HTTP URL - as a String for Telegram to get a video from the Internet, or upload a new video - using multipart/form-data. - :param duration: Integer (Optional) - Duration of sent video in seconds - :param width: Integer (Optional) - Video width - :param height: Integer (Optional) - Video height - :param caption: String (Optional) - Video caption (may also be used when resending videos by file_id), - 0-1024 characters after entities parsing - :param disable_notification: Boolean (Optional) - Sends the message silently. - Users will receive a notification with no sound. - :param reply_to_message_id: Integer (Optional) - If the message is a reply, ID of the original message - :param reply_markup: Union[types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup, Dict, String] (Optional) - - Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user. - """ - self.chat_id = chat_id - self.video = video - self.duration = duration - self.width = width - self.height = height - self.caption = caption - self.disable_notification = disable_notification - self.reply_to_message_id = reply_to_message_id - self.reply_markup = reply_markup - - def prepare(self): - return { - 'chat_id': self.chat_id, - 'video': self.video, - 'duration': self.duration, - 'width': self.width, - 'height': self.height, - 'caption': self.caption, - 'disable_notification': self.disable_notification, - 'reply_to_message_id': self.reply_to_message_id, - 'reply_markup': prepare_arg(self.reply_markup), - } - - -class SendVoice(BaseResponse, ReplyToMixin, DisableNotificationMixin): - """ - Use that response type for send voice on to webhook. - """ - - __slots__ = ('chat_id', 'voice', 'caption', 'duration', 'disable_notification', - 'reply_to_message_id', 'reply_markup') - - method = api.Methods.SEND_VOICE - - def __init__(self, chat_id: Union[Integer, String], - voice: String, - caption: Optional[String] = None, - duration: Optional[Integer] = None, - disable_notification: Optional[Boolean] = None, - reply_to_message_id: Optional[Integer] = None, - reply_markup: Optional[Union[ - types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup, Dict, String]] = None): - """ - :param chat_id: Union[Integer, String] - Unique identifier for the target chat or username - of the target channel (in the format @channelusername) - :param voice: String - Audio file to send. Pass a file_id as String - to send a file that exists on the Telegram servers (recommended), pass an HTTP URL - as a String for Telegram to get a file from the Internet, or upload a new one - using multipart/form-data. - :param caption: String (Optional) - Voice message caption, 0-1024 characters after entities parsing - :param duration: Integer (Optional) - Duration of the voice message in seconds - :param disable_notification: Boolean (Optional) - Sends the message silently. - Users will receive a notification with no sound. - :param reply_to_message_id: Integer (Optional) - If the message is a reply, ID of the original message - :param reply_markup: Union[types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup, Dict, String] (Optional) - - Additional interface options. A JSON-serialized object for an inline keyboard, custom reply keyboard, - instructions to remove reply keyboard or to force a reply from the user. - """ - self.chat_id = chat_id - self.voice = voice - self.caption = caption - self.duration = duration - self.disable_notification = disable_notification - self.reply_to_message_id = reply_to_message_id - self.reply_markup = reply_markup - - def prepare(self): - return { - 'chat_id': self.chat_id, - 'voice': self.voice, - 'caption': self.caption, - 'duration': self.duration, - 'disable_notification': self.disable_notification, - 'reply_to_message_id': self.reply_to_message_id, - 'reply_markup': prepare_arg(self.reply_markup), - } - - -class SendVideoNote(BaseResponse, ReplyToMixin, DisableNotificationMixin): - """ - Use that response type for send video note on to webhook. - """ - - __slots__ = ('chat_id', 'video_note', 'duration', 'length', 'disable_notification', - 'reply_to_message_id', 'reply_markup') - - method = api.Methods.SEND_VIDEO_NOTE - - def __init__(self, chat_id: Union[Integer, String], - video_note: String, - duration: Optional[Integer] = None, - length: Optional[Integer] = None, - disable_notification: Optional[Boolean] = None, - reply_to_message_id: Optional[Integer] = None, - reply_markup: Optional[Union[ - types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup, Dict, String]] = None): - """ - :param chat_id: Union[Integer, String] - Unique identifier for the target chat or username - of the target channel (in the format @channelusername) - :param video_note: String - Video note to send. Pass a file_id - as String to send a video note that exists on the Telegram servers (recommended) - or upload a new video using multipart/form-data. Sending video notes by a URL is currently unsupported - :param duration: Integer (Optional) - Duration of sent video in seconds - :param length: Integer (Optional) - Video width and height - :param disable_notification: Boolean (Optional) - Sends the message silently. - Users will receive a notification with no sound. - :param reply_to_message_id: Integer (Optional) - If the message is a reply, ID of the original message - :param reply_markup: Union[types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup, Dict, String] (Optional) - - Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user. - """ - self.chat_id = chat_id - self.video_note = video_note - self.duration = duration - self.length = length - self.disable_notification = disable_notification - self.reply_to_message_id = reply_to_message_id - self.reply_markup = reply_markup - - def prepare(self): - return { - 'chat_id': self.chat_id, - 'video_note': self.video_note, - 'duration': self.duration, - 'length': self.length, - 'disable_notification': self.disable_notification, - 'reply_to_message_id': self.reply_to_message_id, - 'reply_markup': prepare_arg(self.reply_markup), - } - - -class SendMediaGroup(BaseResponse, ReplyToMixin, DisableNotificationMixin): - """ - Use this method to send a group of photos or videos as an album. - """ - - __slots__ = ('chat_id', 'media', 'disable_notification', 'reply_to_message_id') - - method = api.Methods.SEND_MEDIA_GROUP - - def __init__(self, chat_id: Union[Integer, String], - media: Union[types.MediaGroup, List] = None, - disable_notification: typing.Optional[Boolean] = None, - reply_to_message_id: typing.Optional[Integer] = None): - """ - Use this method to send a group of photos or videos as an album. - - Source: https://core.telegram.org/bots/api#sendmediagroup - - :param chat_id: Unique identifier for the target chat or username of the target channel - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - :param media: A JSON-serialized array describing photos and videos to be sent - :type media: :obj:`typing.Union[types.MediaGroup, typing.List]` - :param disable_notification: Sends the message silently. Users will receive a notification with no sound. - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - :param reply_to_message_id: If the message is a reply, ID of the original message - :type reply_to_message_id: :obj:`typing.Optional[base.Integer]` - :return: On success, an array of the sent Messages is returned. - :rtype: typing.List[types.Message] - """ - if media is None: - media = types.MediaGroup() - elif isinstance(media, list): - # Convert list to MediaGroup - media = types.MediaGroup(media) - - self.chat_id = chat_id - self.media = media - self.disable_notifications = disable_notification - self.reply_to_message_id = reply_to_message_id - - def prepare(self): - files = dict(self.media.get_files()) - if files: - raise TypeError('Allowed only file ID or URL\'s') - - media = prepare_arg(self.media) - - return { - 'chat_id': self.chat_id, - 'media': media, - 'disable_notifications': self.disable_notifications, - 'reply_to_message_id': self.reply_to_message_id - } - - def attach_photo(self, photo: String, caption: String = None): - """ - Attach photo - - :param photo: - :param caption: - :return: self - """ - self.media.attach_photo(photo, caption) - return self - - def attach_video(self, video: String, caption: String = None, width: Integer = None, - height: Integer = None, duration: Integer = None): - """ - Attach video - - :param video: - :param caption: - :param width: - :param height: - :param duration: - :return: self - """ - self.media.attach_video(video, caption, width=width, height=height, duration=duration) - return self - - -class SendLocation(BaseResponse, ReplyToMixin, DisableNotificationMixin): - """ - Use that response type for send location on to webhook. - """ - - __slots__ = ('chat_id', 'latitude', 'longitude', 'disable_notification', 'reply_to_message_id', 'reply_markup') - - method = api.Methods.SEND_LOCATION - - def __init__(self, chat_id: Union[Integer, String], - latitude: Float, longitude: Float, - disable_notification: Optional[Boolean] = None, - reply_to_message_id: Optional[Integer] = None, - reply_markup: Optional[Union[ - types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup, Dict, String]] = None): - """ - :param chat_id: Union[Integer, String] - Unique identifier for the target chat or username - of the target channel (in the format @channelusername) - :param latitude: Float - Latitude of location - :param longitude: Float - Longitude of location - :param disable_notification: Boolean (Optional) - Sends the message silently. - Users will receive a notification with no sound. - :param reply_to_message_id: Integer (Optional) - If the message is a reply, ID of the original message - :param reply_markup: Union[types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup, Dict, String] (Optional) - - Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user. - """ - self.chat_id = chat_id - self.latitude = latitude - self.longitude = longitude - self.disable_notification = disable_notification - self.reply_to_message_id = reply_to_message_id - self.reply_markup = reply_markup - - def prepare(self): - return { - 'chat_id': self.chat_id, - 'latitude': self.latitude, - 'longitude': self.longitude, - 'disable_notification': self.disable_notification, - 'reply_to_message_id': self.reply_to_message_id, - 'reply_markup': prepare_arg(self.reply_markup), - } - - -class SendVenue(BaseResponse, ReplyToMixin, DisableNotificationMixin): - """ - Use that response type for send venue on to webhook. - """ - - __slots__ = ('chat_id', 'latitude', 'longitude', 'title', 'address', 'foursquare_id', - 'disable_notification', 'reply_to_message_id', 'reply_markup') - - method = api.Methods.SEND_VENUE - - def __init__(self, chat_id: Union[Integer, String], - latitude: Float, - longitude: Float, - title: String, - address: String, - foursquare_id: Optional[String] = None, - disable_notification: Optional[Boolean] = None, - reply_to_message_id: Optional[Integer] = None, - reply_markup: Optional[Union[ - types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup, Dict, String]] = None): - """ - :param chat_id: Union[Integer, String] - Unique identifier for the target chat or username - of the target channel (in the format @channelusername) - :param latitude: Float - Latitude of the venue - :param longitude: Float - Longitude of the venue - :param title: String - Name of the venue - :param address: String - Address of the venue - :param foursquare_id: String (Optional) - Foursquare identifier of the venue - :param disable_notification: Boolean (Optional) - Sends the message silently. - Users will receive a notification with no sound. - :param reply_to_message_id: Integer (Optional) - If the message is a reply, ID of the original message - :param reply_markup: Union[types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup, Dict, String] (Optional) - - Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user. - """ - self.chat_id = chat_id - self.latitude = latitude - self.longitude = longitude - self.title = title - self.address = address - self.foursquare_id = foursquare_id - self.disable_notification = disable_notification - self.reply_to_message_id = reply_to_message_id - self.reply_markup = reply_markup - - def prepare(self): - return { - 'chat_id': self.chat_id, - 'latitude': self.latitude, - 'longitude': self.longitude, - 'title': self.title, - 'address': self.address, - 'foursquare_id': self.foursquare_id, - 'disable_notification': self.disable_notification, - 'reply_to_message_id': self.reply_to_message_id, - 'reply_markup': prepare_arg(self.reply_markup), - } - - -class SendContact(BaseResponse, ReplyToMixin, DisableNotificationMixin): - """ - Use that response type for send contact on to webhook. - """ - - __slots__ = ('chat_id', 'phone_number', 'first_name', 'last_name', 'disable_notification', - 'reply_to_message_id', 'reply_markup') - - method = api.Methods.SEND_CONTACT - - def __init__(self, chat_id: Union[Integer, String], - phone_number: String, - first_name: String, - last_name: Optional[String] = None, - disable_notification: Optional[Boolean] = None, - reply_to_message_id: Optional[Integer] = None, - reply_markup: Optional[Union[ - types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup, Dict, String]] = None): - """ - :param chat_id: Union[Integer, String] - Unique identifier for the target chat or - username of the target channel (in the format @channelusername) - :param phone_number: String - Contact's phone number - :param first_name: String - Contact's first name - :param last_name: String (Optional) - Contact's last name - :param disable_notification: Boolean (Optional) - Sends the message silently. - Users will receive a notification with no sound. - :param reply_to_message_id: Integer (Optional) - If the message is a reply, ID of the original message - :param reply_markup: Union[types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup, Dict, String] (Optional) - - Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove keyboard or to force a reply from the user. - """ - self.chat_id = chat_id - self.phone_number = phone_number - self.first_name = first_name - self.last_name = last_name - self.disable_notification = disable_notification - self.reply_to_message_id = reply_to_message_id - self.reply_markup = reply_markup - - def prepare(self): - return { - 'chat_id': self.chat_id, - 'phone_number': self.phone_number, - 'first_name': self.first_name, - 'last_name': self.last_name, - 'disable_notification': self.disable_notification, - 'reply_to_message_id': self.reply_to_message_id, - 'reply_markup': prepare_arg(self.reply_markup), - } - - -class SendChatAction(BaseResponse): - """ - Use that response type for send chat action on to webhook. - """ - - __slots__ = ('chat_id', 'action') - - method = api.Methods.SEND_CHAT_ACTION - - def __init__(self, chat_id: Union[Integer, String], action: String): - """ - :param chat_id: Union[Integer, String] - Unique identifier for the target chat or username - of the target channel (in the format @channelusername) - :param action: String - Type of action to broadcast. Choose one, depending on what the user is about to receive: - typing for text messages, upload_photo for photos, record_video or upload_video for videos, - record_audio or upload_audio for audio files, upload_document for general files, - find_location for location data, record_video_note or upload_video_note for video notes. - """ - self.chat_id = chat_id - self.action = action - - def prepare(self): - return { - 'chat_id': self.chat_id, - 'action': self.action - } - - -class KickChatMember(BaseResponse): - """ - Use that response type for kick chat member on to webhook. - """ - - __slots__ = ('chat_id', 'user_id', 'until_date') - - method = api.Methods.KICK_CHAT_MEMBER - - def __init__(self, chat_id: Union[Integer, String], - user_id: Integer, - until_date: Optional[ - Union[Integer, datetime.datetime, datetime.timedelta]] = None): - """ - :param chat_id: Union[Integer, String] - Unique identifier for the target group or username - of the target supergroup or channel (in the format @channelusername) - :param user_id: Integer - Unique identifier of the target user - :param until_date: Integer - Date when the user will be unbanned, unix time. If user is banned for - more than 366 days or less than 30 seconds from the current time they are considered to be banned forever - """ - self.chat_id = chat_id - self.user_id = user_id - self.until_date = until_date - - def prepare(self): - return { - 'chat_id': self.chat_id, - 'user_id': self.user_id, - 'until_date': prepare_arg(self.until_date), - } - - -class UnbanChatMember(BaseResponse): - """ - Use that response type for unban chat member on to webhook. - """ - - __slots__ = ('chat_id', 'user_id') - - method = api.Methods.UNBAN_CHAT_MEMBER - - def __init__(self, chat_id: Union[Integer, String], user_id: Integer): - """ - :param chat_id: Union[Integer, String] - Unique identifier for the target group or - username of the target supergroup or channel (in the format @username) - :param user_id: Integer - Unique identifier of the target user - """ - self.chat_id = chat_id - self.user_id = user_id - - def prepare(self): - return { - 'chat_id': self.chat_id, - 'user_id': self.user_id - } - - -class RestrictChatMember(BaseResponse): - """ - Use that response type for restrict chat member on to webhook. - """ - - __slots__ = ('chat_id', 'user_id', 'until_date', 'can_send_messages', 'can_send_media_messages', - 'can_send_other_messages', 'can_add_web_page_previews') - - method = api.Methods.RESTRICT_CHAT_MEMBER - - def __init__(self, chat_id: Union[Integer, String], - user_id: Integer, - until_date: Optional[Union[Integer, datetime.datetime, datetime.timedelta]] = None, - can_send_messages: Optional[Boolean] = None, - can_send_media_messages: Optional[Boolean] = None, - can_send_other_messages: Optional[Boolean] = None, - can_add_web_page_previews: Optional[Boolean] = None): - """ - :param chat_id: Union[Integer, String] - Unique identifier for the target chat - or username of the target supergroup (in the format @supergroupusername) - :param user_id: Integer - Unique identifier of the target user - :param until_date: Integer - Date when restrictions will be lifted for the user, unix time. - If user is restricted for more than 366 days or less than 30 seconds from the current time, - they are considered to be restricted forever - :param can_send_messages: Boolean - Pass True, if the user can send text messages, contacts, - locations and venues - :param can_send_media_messages: Boolean - Pass True, if the user can send audios, documents, - photos, videos, video notes and voice notes, implies can_send_messages - :param can_send_other_messages: Boolean - Pass True, if the user can send animations, games, - stickers and use inline bots, implies can_send_media_messages - :param can_add_web_page_previews: Boolean - Pass True, if the user may add web page previews - to their messages, implies can_send_media_messages - """ - self.chat_id = chat_id - self.user_id = user_id - self.until_date = until_date - self.can_send_messages = can_send_messages - self.can_send_media_messages = can_send_media_messages - self.can_send_other_messages = can_send_other_messages - self.can_add_web_page_previews = can_add_web_page_previews - - def prepare(self): - return { - 'chat_id': self.chat_id, - 'user_id': self.user_id, - 'until_date': prepare_arg(self.until_date), - 'can_send_messages': self.can_send_messages, - 'can_send_media_messages': self.can_send_media_messages, - 'can_send_other_messages': self.can_send_other_messages, - 'can_add_web_page_previews': self.can_add_web_page_previews - } - - -class PromoteChatMember(BaseResponse): - """ - Use that response type for promote chat member on to webhook. - """ - - __slots__ = ('chat_id', 'user_id', 'can_change_info', 'can_post_messages', 'can_edit_messages', - 'can_delete_messages', 'can_invite_users', 'can_restrict_members', 'can_pin_messages', - 'can_promote_members') - - method = api.Methods.PROMOTE_CHAT_MEMBER - - def __init__(self, chat_id: Union[Integer, String], - user_id: Integer, - can_change_info: Optional[Boolean] = None, - can_post_messages: Optional[Boolean] = None, - can_edit_messages: Optional[Boolean] = None, - can_delete_messages: Optional[Boolean] = None, - can_invite_users: Optional[Boolean] = None, - can_restrict_members: Optional[Boolean] = None, - can_pin_messages: Optional[Boolean] = None, - can_promote_members: Optional[Boolean] = None): - """ - :param chat_id: Union[Integer, String] - Unique identifier for the target chat - or username of the target channel (in the format @channelusername) - :param user_id: Integer - Unique identifier of the target user - :param can_change_info: Boolean - Pass True, if the administrator can change chat title, - photo and other settings - :param can_post_messages: Boolean - Pass True, if the administrator can create channel posts, channels only - :param can_edit_messages: Boolean - Pass True, if the administrator can edit messages of other users, - channels only - :param can_delete_messages: Boolean - Pass True, if the administrator can delete messages of other users - :param can_invite_users: Boolean - Pass True, if the administrator can invite new users to the chat - :param can_restrict_members: Boolean - Pass True, if the administrator can restrict, ban or unban chat members - :param can_pin_messages: Boolean - Pass True, if the administrator can pin messages, supergroups only - :param can_promote_members: Boolean - Pass True, if the administrator can add new administrators - with a subset of his own privileges or demote administrators that he has promoted, - directly or indirectly (promoted by administrators that were appointed by him) - """ - self.chat_id = chat_id - self.user_id = user_id - self.can_change_info = can_change_info - self.can_post_messages = can_post_messages - self.can_edit_messages = can_edit_messages - self.can_delete_messages = can_delete_messages - self.can_invite_users = can_invite_users - self.can_restrict_members = can_restrict_members - self.can_pin_messages = can_pin_messages - self.can_promote_members = can_promote_members - - def prepare(self): - return { - 'chat_id': self.chat_id, - 'user_id': self.user_id, - 'can_change_info': self.can_change_info, - 'can_post_messages': self.can_post_messages, - 'can_edit_messages': self.can_edit_messages, - 'can_delete_messages': self.can_delete_messages, - 'can_invite_users': self.can_invite_users, - 'can_restrict_members': self.can_restrict_members, - 'can_pin_messages': self.can_pin_messages, - 'can_promote_members': self.can_promote_members - } - - -class DeleteChatPhoto(BaseResponse): - """ - Use that response type for delete chat photo on to webhook. - """ - - __slots__ = ('chat_id',) - - method = api.Methods.DELETE_CHAT_PHOTO - - def __init__(self, chat_id: Union[Integer, String]): - """ - :param chat_id: Union[Integer, String] - Unique identifier for the target chat - or username of the target channel (in the format @channelusername) - """ - self.chat_id = chat_id - - def prepare(self): - return { - 'chat_id': self.chat_id - } - - -class SetChatTitle(BaseResponse): - """ - Use that response type for set chat title on to webhook. - """ - - __slots__ = ('chat_id', 'title') - - method = api.Methods.SET_CHAT_TITLE - - def __init__(self, chat_id: Union[Integer, String], title: String): - """ - :param chat_id: Union[Integer, String] - Unique identifier for the target chat or username - of the target channel (in the format @channelusername) - :param title: String - New chat title, 1-255 characters - """ - self.chat_id = chat_id - self.title = title - - def prepare(self): - return { - 'chat_id': self.chat_id, - 'title': self.title - } - - -class SetChatDescription(BaseResponse): - """ - Use that response type for set chat description on to webhook. - """ - - __slots__ = ('chat_id', 'description') - - method = api.Methods.SET_CHAT_DESCRIPTION - - def __init__(self, chat_id: Union[Integer, String], description: String): - """ - :param chat_id: Union[Integer, String] - Unique identifier for the target chat - or username of the target channel (in the format @channelusername) - :param description: String - New chat description, 0-255 characters - """ - self.chat_id = chat_id - self.description = description - - def prepare(self): - return { - 'chat_id': self.chat_id, - 'description': self.description - } - - -class PinChatMessage(BaseResponse, DisableNotificationMixin): - """ - Use that response type for pin chat message on to webhook. - """ - - __slots__ = ('chat_id', 'message_id', 'disable_notification') - - method = api.Methods.PIN_CHAT_MESSAGE - - def __init__(self, chat_id: Union[Integer, String], message_id: Integer, - disable_notification: Optional[Boolean] = None): - """ - :param chat_id: Union[Integer, String] - Unique identifier for the target chat - or username of the target supergroup (in the format @supergroupusername) - :param message_id: Integer - Identifier of a message to pin - :param disable_notification: Boolean - Pass True, if it is not necessary to send a notification - to all group members about the new pinned message - """ - self.chat_id = chat_id - self.message_id = message_id - self.disable_notification = disable_notification - - def prepare(self): - return { - 'chat_id': self.chat_id, - 'message_id': self.message_id, - 'disable_notification': self.disable_notification, - } - - -class UnpinChatMessage(BaseResponse): - """ - Use that response type for unpin chat message on to webhook. - """ - - __slots__ = ('chat_id',) - - method = api.Methods.UNPIN_CHAT_MESSAGE - - def __init__(self, chat_id: Union[Integer, String]): - """ - :param chat_id: Union[Integer, String] - Unique identifier for the target chat or - username of the target supergroup (in the format @supergroupusername) - """ - self.chat_id = chat_id - - def prepare(self): - return { - 'chat_id': self.chat_id - } - - -class LeaveChat(BaseResponse): - """ - Use that response type for leave chat on to webhook. - """ - - __slots__ = ('chat_id',) - - method = api.Methods.LEAVE_CHAT - - def __init__(self, chat_id: Union[Integer, String]): - """ - :param chat_id: Union[Integer, String] - Unique identifier for the target chat - or username of the target supergroup or channel (in the format @channelusername) - """ - self.chat_id = chat_id - - def prepare(self): - return { - 'chat_id': self.chat_id - } - - -class AnswerCallbackQuery(BaseResponse): - """ - Use that response type for answer callback query on to webhook. - """ - - __slots__ = ('callback_query_id', 'text', 'show_alert', 'url', 'cache_time') - - method = api.Methods.ANSWER_CALLBACK_QUERY - - def __init__(self, callback_query_id: String, - text: Optional[String] = None, - show_alert: Optional[Boolean] = None, - url: Optional[String] = None, - cache_time: Optional[Integer] = None): - """ - :param callback_query_id: String - Unique identifier for the query to be answered - :param text: String (Optional) - Text of the notification. If not specified, nothing will be shown to the user, - 0-200 characters - :param show_alert: Boolean (Optional) - If true, an alert will be shown by the client instead - of a notification at the top of the chat screen. Defaults to false. - :param url: String (Optional) - URL that will be opened by the user's client. - If you have created a Game and accepted the conditions via @Botfather, - specify the URL that opens your game – note that this will only work - if the query comes from a callback_game button. - Otherwise, you may use links like t.me/your_bot?start=XXXX that open your bot with a parameter. - :param cache_time: Integer (Optional) - The maximum amount of time in seconds that the result - of the callback query may be cached client-side. Telegram apps will support - caching starting in version 3.14. Defaults to 0. - """ - self.callback_query_id = callback_query_id - self.text = text - self.show_alert = show_alert - self.url = url - self.cache_time = cache_time - - def prepare(self): - return { - 'callback_query_id': self.callback_query_id, - 'text': self.text, - 'show_alert': self.show_alert, - 'url': self.url, - 'cache_time': self.cache_time - } - - -class EditMessageText(BaseResponse, ParseModeMixin, DisableWebPagePreviewMixin): - """ - Use that response type for edit message text on to webhook. - """ - - __slots__ = ('chat_id', 'message_id', 'inline_message_id', 'text', 'parse_mode', - 'disable_web_page_preview', 'reply_markup') - - method = api.Methods.EDIT_MESSAGE_TEXT - - def __init__(self, text: String, - chat_id: Optional[Union[Integer, String]] = None, - message_id: Optional[Integer] = None, - inline_message_id: Optional[String] = None, - parse_mode: Optional[String] = None, - disable_web_page_preview: Optional[Boolean] = None, - reply_markup: Optional[types.InlineKeyboardMarkup] = None): - """ - :param chat_id: Union[Integer, String] (Optional) - Required if inline_message_id - is not specified. Unique identifier for the target chat or username of the target channel - (in the format @channelusername) - :param message_id: Integer (Optional) - Required if inline_message_id is not specified. - Identifier of the sent message - :param inline_message_id: String (Optional) - Required if chat_id and message_id are not specified. - Identifier of the inline message - :param text: String - New text of the message - :param parse_mode: String (Optional) - Send Markdown or HTML, if you want Telegram apps to show bold, - italic, fixed-width text or inline URLs in your bot's message. - :param disable_web_page_preview: Boolean (Optional) - Disables link previews for links in this message - :param reply_markup: types.InlineKeyboardMarkup (Optional) - A JSON-serialized object for - an inline keyboard. - """ - if parse_mode is None: - parse_mode = self._global_parse_mode() - - self.chat_id = chat_id - self.message_id = message_id - self.inline_message_id = inline_message_id - self.text = text - self.parse_mode = parse_mode - self.disable_web_page_preview = disable_web_page_preview - self.reply_markup = reply_markup - - def prepare(self): - return { - 'chat_id': self.chat_id, - 'message_id': self.message_id, - 'inline_message_id': self.inline_message_id, - 'text': self.text, - 'parse_mode': self.parse_mode, - 'disable_web_page_preview': self.disable_web_page_preview, - 'reply_markup': prepare_arg(self.reply_markup), - } - - -class EditMessageCaption(BaseResponse): - """ - Use that response type for edit message caption on to webhook. - """ - - __slots__ = ('chat_id', 'message_id', 'inline_message_id', 'caption', 'reply_markup') - - method = api.Methods.EDIT_MESSAGE_CAPTION - - def __init__(self, chat_id: Optional[Union[Integer, String]] = None, - message_id: Optional[Integer] = None, - inline_message_id: Optional[String] = None, - caption: Optional[String] = None, - reply_markup: Optional[types.InlineKeyboardMarkup] = None): - """ - :param chat_id: Union[Integer, String] (Optional) - Required if inline_message_id - is not specified. Unique identifier for the target chat or username of the target channel - (in the format @channelusername) - :param message_id: Integer (Optional) - Required if inline_message_id is not specified. - Identifier of the sent message - :param inline_message_id: String (Optional) - Required if chat_id and message_id are not specified. - Identifier of the inline message - :param caption: String (Optional) - New caption of the message - :param reply_markup: types.InlineKeyboardMarkup (Optional) - A JSON-serialized object for an inline keyboard. - """ - self.chat_id = chat_id - self.message_id = message_id - self.inline_message_id = inline_message_id - self.caption = caption - self.reply_markup = reply_markup - - def prepare(self): - return { - 'chat_id': self.chat_id, - 'message_id': self.message_id, - 'inline_message_id': self.inline_message_id, - 'caption': self.caption, - 'reply_markup': prepare_arg(self.reply_markup), - } - - -class EditMessageReplyMarkup(BaseResponse): - """ - Use that response type for edit message reply markup on to webhook. - """ - - __slots__ = ('chat_id', 'message_id', 'inline_message_id', 'reply_markup') - - method = api.Methods.EDIT_MESSAGE_REPLY_MARKUP - - def __init__(self, chat_id: Optional[Union[Integer, String]] = None, - message_id: Optional[Integer] = None, - inline_message_id: Optional[String] = None, - reply_markup: Optional[types.InlineKeyboardMarkup] = None): - """ - :param chat_id: Union[Integer, String] (Optional) - Required if inline_message_id is not specified. - Unique identifier for the target chat or username of the target channel (in the format @channelusername) - :param message_id: Integer (Optional) - Required if inline_message_id is not specified. - Identifier of the sent message - :param inline_message_id: String (Optional) - Required if chat_id and message_id are not specified. - Identifier of the inline message - :param reply_markup: types.InlineKeyboardMarkup (Optional) - A JSON-serialized object for an inline keyboard. - """ - self.chat_id = chat_id - self.message_id = message_id - self.inline_message_id = inline_message_id - self.reply_markup = reply_markup - - def prepare(self): - return { - 'chat_id': self.chat_id, - 'message_id': self.message_id, - 'inline_message_id': self.inline_message_id, - 'reply_markup': prepare_arg(self.reply_markup), - } - - -class DeleteMessage(BaseResponse): - """ - Use that response type for delete message on to webhook. - """ - - __slots__ = ('chat_id', 'message_id') - - method = api.Methods.DELETE_MESSAGE - - def __init__(self, chat_id: Union[Integer, String], message_id: Integer): - """ - :param chat_id: Union[Integer, String] - Unique identifier for the target chat or username - of the target channel (in the format @channelusername) - :param message_id: Integer - Identifier of the message to delete - """ - self.chat_id = chat_id - self.message_id = message_id - - def prepare(self): - return { - 'chat_id': self.chat_id, - 'message_id': self.message_id - } - - -class SendSticker(BaseResponse, ReplyToMixin, DisableNotificationMixin): - """ - Use that response type for send sticker on to webhook. - """ - - __slots__ = ('chat_id', 'sticker', 'disable_notification', 'reply_to_message_id', 'reply_markup') - - method = api.Methods.SEND_STICKER - - def __init__(self, chat_id: Union[Integer, String], - sticker: String, - disable_notification: Optional[Boolean] = None, - reply_to_message_id: Optional[Integer] = None, - reply_markup: Optional[ - Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, Dict, String]] = None): - """ - :param chat_id: Union[Integer, String] - Unique identifier for the target chat or username - of the target channel (in the format @channelusername) - :param sticker: String - Sticker to send. Pass a file_id - as String to send a file that exists on the Telegram servers (recommended), - pass an HTTP URL as a String for Telegram to get a .webp file from the Internet, - or upload a new one using multipart/form-data. More info on Sending Files » - :param disable_notification: Boolean (Optional) - Sends the message silently. - Users will receive a notification with no sound. - :param reply_to_message_id: Integer (Optional) - If the message is a reply, ID of the original message - :param reply_markup: Union[types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup, Dict, String] (Optional) - - Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user. - """ - self.chat_id = chat_id - self.sticker = sticker - self.disable_notification = disable_notification - self.reply_to_message_id = reply_to_message_id - self.reply_markup = reply_markup - - def prepare(self): - return { - 'chat_id': self.chat_id, - 'sticker': self.sticker, - 'disable_notification': self.disable_notification, - 'reply_to_message_id': self.reply_to_message_id, - 'reply_markup': prepare_arg(self.reply_markup), - } - - -class CreateNewStickerSet(BaseResponse): - """ - Use that response type for create new sticker set on to webhook. - """ - - __slots__ = ('user_id', 'name', 'title', 'png_sticker', 'emojis', 'contains_masks', 'mask_position') - - method = api.Methods.CREATE_NEW_STICKER_SET - - def __init__(self, user_id: Integer, - name: String, title: String, - png_sticker: String, - emojis: String, - contains_masks: Optional[Boolean] = None, - mask_position: Optional[types.MaskPosition] = None): - """ - :param user_id: Integer - User identifier of created sticker set owner - :param name: String - Short name of sticker set, to be used in t.me/addstickers/ URLs (e.g., animals). - Can contain only english letters, digits and underscores. Must begin with a letter, - can't contain consecutive underscores and must end in “_by_”. - is case insensitive. 1-64 characters. - :param title: String - Sticker set title, 1-64 characters - :param png_sticker: String - Png image with the sticker, - must be up to 512 kilobytes in size, dimensions must not exceed 512px, and either width - or height must be exactly 512px. Pass a file_id as a String to send a file that - already exists on the Telegram servers, pass an HTTP URL - as a String for Telegram to get a file from the Internet, or upload a new one using multipart/form-data. - :param emojis: String - One or more emoji corresponding to the sticker - :param contains_masks: Boolean (Optional) - Pass True, if a set of mask stickers should be created - :param mask_position: types.MaskPosition (Optional) - Position where the mask should be placed on faces - """ - self.user_id = user_id - self.name = name - self.title = title - self.png_sticker = png_sticker - self.emojis = emojis - self.contains_masks = contains_masks - self.mask_position = mask_position - - def prepare(self): - return { - 'user_id': self.user_id, - 'name': self.name, - 'title': self.title, - 'png_sticker': self.png_sticker, - 'emojis': self.emojis, - 'contains_masks': self.contains_masks, - 'mask_position': self.mask_position - } - - -class AddStickerToSet(BaseResponse): - """ - Use that response type for add sticker to set on to webhook. - """ - - __slots__ = ('user_id', 'name', 'png_sticker', 'emojis', 'mask_position') - - method = api.Methods.ADD_STICKER_TO_SET - - def __init__(self, user_id: Integer, - name: String, - png_sticker: String, - emojis: String, - mask_position: Optional[types.MaskPosition] = None): - """ - :param user_id: Integer - User identifier of sticker set owner - :param name: String - Sticker set name - :param png_sticker: String - Png image with the sticker, - must be up to 512 kilobytes in size, dimensions must not exceed 512px, - and either width or height must be exactly 512px. Pass a file_id as a String - to send a file that already exists on the Telegram servers, pass an HTTP URL - as a String for Telegram to get a file from the Internet, or upload a new one using multipart/form-data. - :param emojis: String - One or more emoji corresponding to the sticker - :param mask_position: types.MaskPosition (Optional) - Position where the mask should be placed on faces - """ - self.user_id = user_id - self.name = name - self.png_sticker = png_sticker - self.emojis = emojis - self.mask_position = mask_position - - def prepare(self): - return { - 'user_id': self.user_id, - 'name': self.name, - 'png_sticker': self.png_sticker, - 'emojis': self.emojis, - 'mask_position': prepare_arg(self.mask_position), - } - - -class SetStickerPositionInSet(BaseResponse): - """ - Use that response type for set sticker position in set on to webhook. - """ - - __slots__ = ('sticker', 'position') - - method = api.Methods.SET_STICKER_POSITION_IN_SET - - def __init__(self, sticker: String, position: Integer): - """ - :param sticker: String - File identifier of the sticker - :param position: Integer - New sticker position in the set, zero-based - """ - self.sticker = sticker - self.position = position - - def prepare(self): - return { - 'sticker': self.sticker, - 'position': self.position - } - - -class DeleteStickerFromSet(BaseResponse): - """ - Use that response type for delete sticker from set on to webhook. - """ - - __slots__ = ('sticker',) - - method = api.Methods.DELETE_STICKER_FROM_SET - - def __init__(self, sticker: String): - """ - :param sticker: String - File identifier of the sticker - """ - self.sticker = sticker - - def prepare(self): - return { - 'sticker': self.sticker - } - - -class AnswerInlineQuery(BaseResponse): - """ - Use that response type for answer inline query on to webhook. - """ - - __slots__ = ('inline_query_id', 'results', 'cache_time', 'is_personal', 'next_offset', - 'switch_pm_text', 'switch_pm_parameter') - - method = api.Methods.ANSWER_INLINE_QUERY - - def __init__(self, inline_query_id: String, - results: [types.InlineQueryResult], - cache_time: Optional[Integer] = None, - is_personal: Optional[Boolean] = None, - next_offset: Optional[String] = None, - switch_pm_text: Optional[String] = None, - switch_pm_parameter: Optional[String] = None): - """ - :param inline_query_id: String - Unique identifier for the answered query - :param results: [types.InlineQueryResult] - A JSON-serialized array of results for the inline query - :param cache_time: Integer (Optional) - The maximum amount of time in seconds that the result - of the inline query may be cached on the server. Defaults to 300. - :param is_personal: Boolean (Optional) - Pass True, if results may be cached on the server side - only for the user that sent the query. By default, results may be returned - to any user who sends the same query - :param next_offset: String (Optional) - Pass the offset that a client should send in the - next query with the same text to receive more results. - Pass an empty string if there are no more results or if you don‘t support pagination. - Offset length can’t exceed 64 bytes. - :param switch_pm_text: String (Optional) - If passed, clients will display a button with specified text - that switches the user to a private chat with the bot and sends the bot a start - message with the parameter switch_pm_parameter - :param switch_pm_parameter: String (Optional) - Deep-linking parameter for the /start message - sent to the bot when user presses the switch button. 1-64 characters, - only A-Z, a-z, 0-9, _ and - are allowed. - Example: An inline bot that sends YouTube videos can ask the user to connect the bot to their - YouTube account to adapt search results accordingly. To do this, - it displays a ‘Connect your YouTube account’ button above the results, or even before showing any. - The user presses the button, switches to a private chat with the bot and, - in doing so, passes a start parameter that instructs the bot to return an oauth link. - Once done, the bot can offer a switch_inline button so that the user can easily return - to the chat where they wanted to use the bot's inline capabilities. - """ - self.inline_query_id = inline_query_id - self.results = results - self.cache_time = cache_time - self.is_personal = is_personal - self.next_offset = next_offset - self.switch_pm_text = switch_pm_text - self.switch_pm_parameter = switch_pm_parameter - - def prepare(self): - return { - 'inline_query_id': self.inline_query_id, - 'results': prepare_arg(self.results), - 'cache_time': self.cache_time, - 'is_personal': self.is_personal, - 'next_offset': self.next_offset, - 'switch_pm_text': self.switch_pm_text, - 'switch_pm_parameter': self.switch_pm_parameter, - } - - -class SendInvoice(BaseResponse, ReplyToMixin, DisableNotificationMixin): - """ - Use that response type for send invoice on to webhook. - """ - - __slots__ = ('chat_id', 'title', 'description', 'payload', 'provider_token', 'start_parameter', - 'currency', 'prices', 'photo_url', 'photo_size', 'photo_width', 'photo_height', - 'need_name', 'need_phone_number', 'need_email', 'need_shipping_address', - 'send_phone_number_to_provider', 'send_email_to_provider', 'is_flexible', - 'disable_notification', 'reply_to_message_id', 'reply_markup') - - method = api.Methods.SEND_INVOICE - - def __init__(self, chat_id: Integer, - title: String, - description: String, - payload: String, - provider_token: String, - start_parameter: String, - currency: String, - prices: [types.LabeledPrice], - photo_url: Optional[String] = None, - photo_size: Optional[Integer] = None, - photo_width: Optional[Integer] = None, - photo_height: Optional[Integer] = None, - need_name: Optional[Boolean] = None, - need_phone_number: Optional[Boolean] = None, - need_email: Optional[Boolean] = None, - need_shipping_address: Optional[Boolean] = None, - send_phone_number_to_provider: Optional[Boolean] = None, - send_email_to_provider: Optional[Boolean] = None, - is_flexible: Optional[Boolean] = None, - disable_notification: Optional[Boolean] = None, - reply_to_message_id: Optional[Integer] = None, - reply_markup: Optional[types.InlineKeyboardMarkup] = None): - """ - :param chat_id: Integer - Unique identifier for the target private chat - :param title: String - Product name, 1-32 characters - :param description: String - Product description, 1-255 characters - :param payload: String - Bot-defined invoice payload, 1-128 bytes. - This will not be displayed to the user, use for your internal processes. - :param provider_token: String - Payments provider token, obtained via Botfather - :param start_parameter: String - Unique deep-linking parameter that can be used to - generate this invoice when used as a start parameter - :param currency: String - Three-letter ISO 4217 currency code, see more on currencies - :param prices: [types.LabeledPrice] - Price breakdown, a list of components - (e.g. product price, tax, discount, delivery cost, delivery tax, bonus, etc.) - :param photo_url: String (Optional) - URL of the product photo for the invoice. - Can be a photo of the goods or a marketing image for a service. - People like it better when they see what they are paying for. - :param photo_size: Integer (Optional) - Photo size - :param photo_width: Integer (Optional) - Photo width - :param photo_height: Integer (Optional) - Photo height - :param need_name: Boolean (Optional) - Pass True, if you require the user's full name to complete the order - :param need_phone_number: Boolean (Optional) - Pass True, if you require - the user's phone number to complete the order - :param need_email: Boolean (Optional) - Pass True, if you require the user's email to complete the order - :param need_shipping_address: Boolean (Optional) - Pass True, if you require the user's - shipping address to complete the order - :param send_phone_number_to_provider: Boolean (Optional) - Pass True, if user's phone number should be sent - to provider - :param send_email_to_provider: Boolean (Optional) - Pass True, if user's email address should be sent - to provider - :param is_flexible: Boolean (Optional) - Pass True, if the final price depends on the shipping method - :param disable_notification: Boolean (Optional) - Sends the message silently. - Users will receive a notification with no sound. - :param reply_to_message_id: Integer (Optional) - If the message is a reply, ID of the original message - :param reply_markup: types.InlineKeyboardMarkup (Optional) - A JSON-serialized object for an inline keyboard. - If empty, one 'Pay total price' button will be shown. If not empty, the first button must be a Pay button. - """ - self.chat_id = chat_id - self.title = title - self.description = description - self.payload = payload - self.provider_token = provider_token - self.start_parameter = start_parameter - self.currency = currency - self.prices = prices - self.photo_url = photo_url - self.photo_size = photo_size - self.photo_width = photo_width - self.photo_height = photo_height - self.need_name = need_name - self.need_phone_number = need_phone_number - self.need_email = need_email - self.need_shipping_address = need_shipping_address - self.send_phone_number_to_provider = send_phone_number_to_provider - self.send_email_to_provider = send_email_to_provider - self.is_flexible = is_flexible - self.disable_notification = disable_notification - self.reply_to_message_id = reply_to_message_id - self.reply_markup = reply_markup - - def prepare(self): - return { - 'chat_id': self.chat_id, - 'title': self.title, - 'description': self.description, - 'payload': self.payload, - 'provider_token': self.provider_token, - 'start_parameter': self.start_parameter, - 'currency': self.currency, - 'prices': prepare_arg(self.prices), - 'photo_url': self.photo_url, - 'photo_size': self.photo_size, - 'photo_width': self.photo_width, - 'photo_height': self.photo_height, - 'need_name': self.need_name, - 'need_phone_number': self.need_phone_number, - 'need_email': self.need_email, - 'need_shipping_address': self.need_shipping_address, - 'send_phone_number_to_provider': self.send_phone_number_to_provider, - 'send_email_to_provider': self.send_email_to_provider, - 'is_flexible': self.is_flexible, - 'disable_notification': self.disable_notification, - 'reply_to_message_id': self.reply_to_message_id, - 'reply_markup': prepare_arg(self.reply_markup), - } - - -class AnswerShippingQuery(BaseResponse): - """ - Use that response type for answer shipping query on to webhook. - """ - - __slots__ = ('shipping_query_id', 'ok', 'shipping_options', 'error_message') - - method = api.Methods.ANSWER_SHIPPING_QUERY - - def __init__(self, shipping_query_id: String, - ok: Boolean, - shipping_options: Optional[typing.List[types.ShippingOption]] = None, - error_message: Optional[String] = None): - """ - :param shipping_query_id: String - Unique identifier for the query to be answered - :param ok: Boolean - Specify True if delivery to the specified address is possible and - False if there are any problems (for example, if delivery to the specified address is not possible) - :param shipping_options: [types.ShippingOption] (Optional) - Required if ok is True. - A JSON-serialized array of available shipping options. - :param error_message: String (Optional) - Required if ok is False. - Error message in human readable form that explains why it is impossible to complete the order - (e.g. "Sorry, delivery to your desired address is unavailable'). - Telegram will display this message to the user. - """ - self.shipping_query_id = shipping_query_id - self.ok = ok - self.shipping_options = shipping_options - self.error_message = error_message - - def prepare(self): - return { - 'shipping_query_id': self.shipping_query_id, - 'ok': self.ok, - 'shipping_options': prepare_arg(self.shipping_options), - 'error_message': self.error_message - } - - -class AnswerPreCheckoutQuery(BaseResponse): - """ - Use that response type for answer pre checkout query on to webhook. - """ - - __slots__ = ('pre_checkout_query_id', 'ok', 'error_message') - - method = api.Methods.ANSWER_PRE_CHECKOUT_QUERY - - def __init__(self, pre_checkout_query_id: String, - ok: Boolean, - error_message: Optional[String] = None): - """ - :param pre_checkout_query_id: String - Unique identifier for the query to be answered - :param ok: Boolean - Specify True if everything is alright (goods are available, etc.) - and the bot is ready to proceed with the order. Use False if there are any problems. - :param error_message: String (Optional) - Required if ok is False. - Error message in human readable form that explains the reason for failure to proceed with the checkout - (e.g. "Sorry, somebody just bought the last of our amazing black T-shirts while you were busy - filling out your payment details. Please choose a different color or garment!"). - Telegram will display this message to the user. - """ - self.pre_checkout_query_id = pre_checkout_query_id - self.ok = ok - self.error_message = error_message - - def prepare(self): - return { - 'pre_checkout_query_id': self.pre_checkout_query_id, - 'ok': self.ok, - 'error_message': self.error_message - } - - -class SendGame(BaseResponse, ReplyToMixin, DisableNotificationMixin): - """ - Use that response type for send game on to webhook. - """ - - __slots__ = ('chat_id', 'game_short_name', 'disable_notification', 'reply_to_message_id', 'reply_markup') - - method = api.Methods.SEND_GAME - - def __init__(self, chat_id: Integer, - game_short_name: String, - disable_notification: Optional[Boolean] = None, - reply_to_message_id: Optional[Integer] = None, - reply_markup: Optional[types.InlineKeyboardMarkup] = None): - """ - :param chat_id: Integer - Unique identifier for the target chat - :param game_short_name: String - Short name of the game, serves as the unique identifier for the game. - Set up your games via Botfather. - :param disable_notification: Boolean (Optional) - Sends the message silently. - Users will receive a notification with no sound. - :param reply_to_message_id: Integer (Optional) - If the message is a reply, ID of the original message - :param reply_markup: types.InlineKeyboardMarkup (Optional) - A JSON-serialized object for an inline keyboard. - If empty, one ‘Play game_title’ button will be shown. If not empty, the first button must launch the game. - """ - self.chat_id = chat_id - self.game_short_name = game_short_name - self.disable_notification = disable_notification - self.reply_to_message_id = reply_to_message_id - self.reply_markup = reply_markup - - def prepare(self): - return { - 'chat_id': self.chat_id, - 'game_short_name': self.game_short_name, - 'disable_notification': self.disable_notification, - 'reply_to_message_id': self.reply_to_message_id, - 'reply_markup': prepare_arg(self.reply_markup), - } diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__init__.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__init__.py deleted file mode 100644 index a9e6af8c..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__init__.py +++ /dev/null @@ -1,214 +0,0 @@ -from . import base -from . import fields -from .animation import Animation -from .audio import Audio -from .auth_widget_data import AuthWidgetData -from .bot_command import BotCommand -from .bot_command_scope import BotCommandScope, BotCommandScopeAllChatAdministrators, \ - BotCommandScopeAllGroupChats, BotCommandScopeAllPrivateChats, BotCommandScopeChat, \ - BotCommandScopeChatAdministrators, BotCommandScopeChatMember, \ - BotCommandScopeDefault, BotCommandScopeType -from .callback_game import CallbackGame -from .callback_query import CallbackQuery -from .chat import Chat, ChatActions, ChatType -from .chat_invite_link import ChatInviteLink -from .chat_location import ChatLocation -from .chat_member import ChatMember, ChatMemberStatus -from .chat_member_updated import ChatMemberUpdated -from .chat_permissions import ChatPermissions -from .chat_photo import ChatPhoto -from .chosen_inline_result import ChosenInlineResult -from .contact import Contact -from .dice import Dice, DiceEmoji -from .document import Document -from .encrypted_credentials import EncryptedCredentials -from .encrypted_passport_element import EncryptedPassportElement -from .file import File -from .force_reply import ForceReply -from .game import Game -from .game_high_score import GameHighScore -from .inline_keyboard import InlineKeyboardButton, InlineKeyboardMarkup -from .inline_query import InlineQuery -from .inline_query_result import InlineQueryResult, InlineQueryResultArticle, InlineQueryResultAudio, \ - InlineQueryResultCachedAudio, InlineQueryResultCachedDocument, InlineQueryResultCachedGif, \ - InlineQueryResultCachedMpeg4Gif, InlineQueryResultCachedPhoto, InlineQueryResultCachedSticker, \ - InlineQueryResultCachedVideo, InlineQueryResultCachedVoice, InlineQueryResultContact, InlineQueryResultDocument, \ - InlineQueryResultGame, InlineQueryResultGif, InlineQueryResultLocation, InlineQueryResultMpeg4Gif, \ - InlineQueryResultPhoto, InlineQueryResultVenue, InlineQueryResultVideo, InlineQueryResultVoice -from .input_file import InputFile -from .input_media import InputMedia, InputMediaAnimation, InputMediaAudio, InputMediaDocument, InputMediaPhoto, \ - InputMediaVideo, MediaGroup -from .input_message_content import InputContactMessageContent, InputLocationMessageContent, InputMessageContent, \ - InputTextMessageContent, InputVenueMessageContent, InputInvoiceMessageContent -from .invoice import Invoice -from .labeled_price import LabeledPrice -from .location import Location -from .login_url import LoginUrl -from .mask_position import MaskPosition -from .message import ContentType, ContentTypes, Message, ParseMode -from .message_auto_delete_timer_changed import MessageAutoDeleteTimerChanged -from .message_entity import MessageEntity, MessageEntityType -from .message_id import MessageId -from .order_info import OrderInfo -from .passport_data import PassportData -from .passport_element_error import PassportElementError, PassportElementErrorDataField, PassportElementErrorFile, \ - PassportElementErrorFiles, PassportElementErrorFrontSide, PassportElementErrorReverseSide, \ - PassportElementErrorSelfie -from .passport_file import PassportFile -from .photo_size import PhotoSize -from .poll import PollOption, Poll, PollAnswer, PollType -from .pre_checkout_query import PreCheckoutQuery -from .proximity_alert_triggered import ProximityAlertTriggered -from .reply_keyboard import KeyboardButton, ReplyKeyboardMarkup, ReplyKeyboardRemove, KeyboardButtonPollType -from .response_parameters import ResponseParameters -from .shipping_address import ShippingAddress -from .shipping_option import ShippingOption -from .shipping_query import ShippingQuery -from .sticker import Sticker -from .sticker_set import StickerSet -from .successful_payment import SuccessfulPayment -from .update import AllowedUpdates, Update -from .user import User -from .user_profile_photos import UserProfilePhotos -from .venue import Venue -from .video import Video -from .video_note import VideoNote -from .voice import Voice -from .voice_chat_ended import VoiceChatEnded -from .voice_chat_participants_invited import VoiceChatParticipantsInvited -from .voice_chat_scheduled import VoiceChatScheduled -from .voice_chat_started import VoiceChatStarted -from .webhook_info import WebhookInfo - -__all__ = ( - 'AllowedUpdates', - 'Animation', - 'Audio', - 'AuthWidgetData', - 'BotCommand', - 'BotCommandScope', - 'BotCommandScopeAllChatAdministrators', - 'BotCommandScopeAllGroupChats', - 'BotCommandScopeAllPrivateChats', - 'BotCommandScopeChat', - 'BotCommandScopeChatAdministrators', - 'BotCommandScopeChatMember', - 'BotCommandScopeDefault', - 'BotCommandScopeType', - 'CallbackGame', - 'CallbackQuery', - 'Chat', - 'ChatActions', - 'ChatInviteLink', - 'ChatLocation', - 'ChatMember', - 'ChatMemberStatus', - 'ChatMemberUpdated', - 'ChatPermissions', - 'ChatPhoto', - 'ChatType', - 'ChosenInlineResult', - 'Contact', - 'ContentType', - 'ContentTypes', - 'Dice', - 'DiceEmoji', - 'Document', - 'EncryptedCredentials', - 'EncryptedPassportElement', - 'File', - 'ForceReply', - 'Game', - 'GameHighScore', - 'InlineKeyboardButton', - 'InlineKeyboardMarkup', - 'InlineQuery', - 'InlineQueryResult', - 'InlineQueryResultArticle', - 'InlineQueryResultAudio', - 'InlineQueryResultCachedAudio', - 'InlineQueryResultCachedDocument', - 'InlineQueryResultCachedGif', - 'InlineQueryResultCachedMpeg4Gif', - 'InlineQueryResultCachedPhoto', - 'InlineQueryResultCachedSticker', - 'InlineQueryResultCachedVideo', - 'InlineQueryResultCachedVoice', - 'InlineQueryResultContact', - 'InlineQueryResultDocument', - 'InlineQueryResultGame', - 'InlineQueryResultGif', - 'InlineQueryResultLocation', - 'InlineQueryResultMpeg4Gif', - 'InlineQueryResultPhoto', - 'InlineQueryResultVenue', - 'InlineQueryResultVideo', - 'InlineQueryResultVoice', - 'InputContactMessageContent', - 'InputInvoiceMessageContent', - 'InputFile', - 'InputLocationMessageContent', - 'InputMedia', - 'InputMediaAnimation', - 'InputMediaAudio', - 'InputMediaDocument', - 'InputMediaPhoto', - 'InputMediaVideo', - 'InputMessageContent', - 'InputTextMessageContent', - 'InputVenueMessageContent', - 'Invoice', - 'KeyboardButton', - 'KeyboardButtonPollType', - 'LabeledPrice', - 'Location', - 'LoginUrl', - 'MaskPosition', - 'MediaGroup', - 'Message', - 'MessageAutoDeleteTimerChanged', - 'MessageEntity', - 'MessageEntityType', - 'MessageId', - 'OrderInfo', - 'ParseMode', - 'PassportData', - 'PassportElementError', - 'PassportElementErrorDataField', - 'PassportElementErrorFile', - 'PassportElementErrorFiles', - 'PassportElementErrorFrontSide', - 'PassportElementErrorReverseSide', - 'PassportElementErrorSelfie', - 'PassportFile', - 'PhotoSize', - 'Poll', - 'PollAnswer', - 'PollOption', - 'PollType', - 'PreCheckoutQuery', - 'ProximityAlertTriggered', - 'ReplyKeyboardMarkup', - 'ReplyKeyboardRemove', - 'ResponseParameters', - 'ShippingAddress', - 'ShippingOption', - 'ShippingQuery', - 'Sticker', - 'StickerSet', - 'SuccessfulPayment', - 'Update', - 'User', - 'UserProfilePhotos', - 'Venue', - 'Video', - 'VideoNote', - 'Voice', - 'VoiceChatEnded', - 'VoiceChatParticipantsInvited', - 'VoiceChatScheduled', - 'VoiceChatStarted', - 'WebhookInfo', - 'base', - 'fields', -) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/__init__.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index 27d4a9d0ab002e4d29c5f02fab6eacde0da60606..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6247 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 B&<6kj diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/base.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/base.cpython-39.pyc deleted file mode 100644 index 3cc2a2ea58afd2bb0379a9f432f6195436e16df7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8414 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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/bot_command_scope.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/bot_command_scope.cpython-39.pyc deleted file mode 100644 index 0e28aa9eb748ca8daf9507641d8af6c4dc8e86a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4900 zcmcH-+iu&)l|xeZtL06yX|n-$vjwUmYq#iS+hDPcHgU4X+D>50c_35}G-qT{rbu;W z6xV{EngILK_5<1!*aCfMexc~&enTJl*goYK3KZx$L&~x)ZoLjlVTL^C%p9IMcgn3) ziW*%1Fn;D5E1LFC1kPV30QX^tzrjQ`N&?N+s7{T540Kx`7`8z)YSK(#4l;IzXpc3T zrMZ_H&9O{B`@*nufXUMWUlN;O8{4C4d9xB%K+Eu z3cxE0t^nMis{pSmxC-z)^cuj|SQYry0KQId0DMEibxQWM=DTm;1lrCU0&`Q3%>!4k zINSAEK*bv!ktELcSTJPV!H$$A#0xu*-o<-=N%_>2h4HeqT>uAItuW)>^Q$1 zxj{nVSrErAey)VxjwrK>B6N?Kz z^WgJVdoQjb>hbQA{iiA71|pE=v>tA6?riS0cU$czyL+*T$ar-bsictG8{404?7r6c zDhQ^ge|6}+&hVte;ds%YBfMS|1s(s0xsLF-I|OZa)}FKQd1uQ%=m=l3kA|*y}!Ip_F_rbGm zgPC7tz>-;(>*ra4>Yr$=$V#l-uTbNaj$Z!Kd_n9g&4NGW;@X_$+`ocv6)m{hJzrSS zL7#cj;%vy7V4)P2>@iD;Zpp|x?)hHNf>T-Psf6WnW`RlqpV2kN=fQ|`*cqJMReQTp z5Jbm*cxZi`@JY6a(Qp`X$>=?`2?dyw>>=yAqd;CnZUwV%C##DDJJVdl6@Ak_8OCXf5K0=tE-N z9r}0RVWM?(CABR!(b1YZzYdNOXOE6uekeQ){mEs(1G>)_FvQ6RR1&i9V8q@Gl2F}X)dK@fYz4TrL-K-hBCjDRsh;>WN|621hl`%@={s_XkW|f zJWbZ9eoFqJ|51NIehrBYT-(@DIvBsVA0CC#aX9Zz7AneW)>VMI2XKpZJ z8=ObHX~c#X2&FH61NKc*AAbkg6uLYbIH<5Y0E*i%X?l?~$VFp3|KhbX4p0_&9`^GB zPFT3(oa4~Qa~zI-8D}10IZK2=XN|Lal0&|TYmVcFVI*DYN1=c^Qt|>v!oD-B&I3cHYKQGoln6wf?Kv`L!nXIQqM zqxx@&ou>wPoXOvXMdRPAK-`_pm^4XVY37W&GdVNKlWBgN&7>p2sO5L9Fq-0zec7{I zD|Eqj$Bd^uA@8aeiy`xT=m@CQjkwCVz=J2RcunG5D#=c>FlPq-0Z6Y*!0+G_mLwGy zi7A#T63_b+7y=EKCuT-z;4PJS6L^ikSf<3J?93_eE-24X`{c0?DcQ z_kiOi&x@gc@p)0SpTn4(*WieG%kzEe!%bt9JF98mmzQ`?y&wHD8f0wJxCt8}$w^y*M70- zm>N&VzY9~G*$<)Ca03w^A|kgLN_NON{|=&1inx->=dmD|$fyMU0WML}qB)+ym=qkN zN^V2H1(*e2!B^eKrJurdbzh+-C_2O61196+EBOKB(%IlqTp;?+2CE7@mig@O8Pu%fQw<64)s zN}R*a00R28o&+40au0Pqxlm0R7%HmKT_;g}3SS76ywXn%{7#t0^~bP=e*_aWL*K_| z6-vlA=_^%8%to;QViLvK@dp>StJ7Fsy^JSe^LuGeQsQAK^B?0hb*yOsqn-LN1eV9d zv2K%wStsVdl?|IKNxn#374;TpM$(6-TK&C|P5$0cJ(XQ;r=N3A)W@}IJXPbQx(QWL xIo1)CAe8^AcbpUKOoMU$ljL8OPw^iiaUG_-UMFRvQEuF+7wWls9)6{I;XfX9aHs$P diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/callback_game.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/callback_game.cpython-39.pyc deleted file mode 100644 index 3ff717b4c7fb48339874aa82adc7a12f7aa91a32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 548 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 Aw*UYD diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/chat_invite_link.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/chat_invite_link.cpython-39.pyc deleted file mode 100644 index 00024367b7f47da286cffe0d15d540308286e0fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 922 zcmYjQOK%e~5VrT7&7-AM<+>8597xVo5vl+cRjP_a+sm?&<*cXaCi}v6Bf^0TT=@@h z>|gQ`PW=m<7;mc5S=kzY^UcHKSw0-b1m(B;k{>vP{IQ3};^E;4mpaBx5J5{)k(5v( z9O0IkUli3Hc6iwf>2 z0=Lw7bFKgl!BqjJP^fvA3S@5ikHy8q5ia!=Hy|k$By}#ay3_^lr~iwj0ffs4dcv6z z@RmNr!u>(hKE#N57VB68WDODVACS>K5_HH8M%slZ$Os=8d&qc-NHim&hqsB%=*>0P zC-u6}a9Y%>FIRDb@&Q^23TmwqUMEFoPD->VSB*?~lB3fk?x@#Vx9V^@%^L|54J9lj zuO^LLOy`YOQ{EQOEqfcohUmOZe+w{+Nc&JG%q4K$ND~)|wX&$V+;qBxb+ZCt`tZ3e zBrw}}GpL}NgGB$T&}ZX)6ERlv3K%mnV^t$=N~;eT`*g$0drQceXmZA6fC*Fo*gll( zp)P$}L2#~RQ7_C6W4x{#ja4_bLV9Q^cGhIy^1|0mQv$E$08i=gE!J~^gRl)Zv^1PX zB1hI5p41u^Aa990u%O-keiVmUyU8T4MN?%ezs7i3u>#IiE_vI6%qDB7*V$P-u3YCFpwb#l^fWP};)QZ|1~y?rlX=ghdM_qkpd+V+j t#=F5$?e3Y5F76-k{d@_z?tK2&zSW*#XcNu0ZGL5c0A*7SoB_qp{Rioa@*@BM diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/chat_location.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/chat_location.cpython-39.pyc deleted file mode 100644 index 5ad7ef8fb8dbe8cb11c0af57bb8bcea505ced91a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 913 zcmY*Y&2AGh5VrR(X-Hax;Jy;497xVo6+%LSOI0Ka5?ZZfIrcQ!bhBP;x2RQbt<)25 zzyXeZ3|_-WIPnUcnAs+@%xY)Hv)wE31@GZPIP+3bP9Z#UdBbHvqLuS{l@HU%tJDh4)B{DRZwe( zR)60p=_}JHjQCHeIEgzz1+3tj710L-QN)mZOTV)sgC6vCw8z%#Ef_2xpeII8k8GWM zjjq`d*Qw5~hQ;ujC9D_`pfG&3kbYD9+zxV-chFjJ(0G^2yk6tVy~#f>Dz!kL!ZUg0 za%GwZlm|T-bO#sSw{CYjRmQ@^Lk)8)R}*9B)0y#ZD%GE8G2G{EbML~ zn;}=*L#1L=8zGz8L0|V6m1mc1$uIatr1_Wb4v&+q2TjMw?aX)WVp$td2nnr>tx-TRAy}=Cs_eW~Hk< zJZq&omUD2WtPIhe`m+|?lz55_vq^hqX~K30cZ7=Z^C$NkKlz7no6t6L1ww>@5G$ik zYO;qyd^(Z!dZ#CZHcALfohZ`RG)1?hs6Amv2-!5ocLRmQx=vau9I``it7hK838OW2 z1$B*4+Zb@GhGY?1o1&u2aMaQPPtu3{QPg=4aC%smv_o-MzSw@hzWTSbC5}fIeJ^=e VhLVT=-Yvfu^jkP8GvxThe*s+N;^Y7T diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/chat_member.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/chat_member.cpython-39.pyc deleted file mode 100644 index e0e1af1535d414da440822810753bca4792a41ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7293 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 Ra^u_ea(%8oQJ<+#{1>$|kPQF; diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/chat_member_updated.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/chat_member_updated.cpython-39.pyc deleted file mode 100644 index 263e51b23b95b831aa2ce2324566eb95cfc5eedb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1091 zcmY*YOK%e~5ca;3-OZ~h6#`Bxams<@OjRKy5D2N11MS6%u$*|(Y`ZV)O;I@lC#3!d zIQI8&+asL%7dSEFL~ZbDXTSYs?3wv&%U&;LIDUIi4 zOAX^1GC0*TAD8-cGAnB{kyZMbCaveJ*6Hm;?V(PMPtL|)=rSLTUFqyv})c&-(oN8I9GM}3HvMjS{dJa;Uxt3K0dOE&<;$nK3&ZY*> zHZUCbyMXRS2r{7Rf6j5=qbFmvNbh^gA*g{7GTcl!j!|^mGhQ+V~a~CZK1%iuFbU+ zg*S!g7qUJ#*C?zybDg@+Z_ z%t*Jvlr>gfDS7R}1Wmw1 z1E};duVT(i6qGLM--)S6DcM18j_##5afTZ$_P4kdA zS)cr0MqzMq&F!hXrD2b;s^-oyc1!;HQ9M~RHw(+PFsp^D&Wx!S>Oyh`y}=u}crm+@ z`fBlwS}q)9=TXC}3oOurD}&XY`rPhs2h z`)-)^@ny%IOy9$(HD5`_LeALAh|3z+BgTHZa31eJqybYn+sF3t=i@WxwOW}#`osU8|6C#D zPpqt_04ld3n_B>a2%3;+R?>(HPxy&9@*|%TkOPo|D4^s=B0^DkMMOdR!|>3L3W7c& z&EgxFgKWQ{fKBRxJ#HkFg`Sd$FkS3iO(9fnLpHwxNCL}|$a@SXM7|7;!ebH@WN}!M zYr?xp<}KxUi@$8C%v*wGOLg87-X!9pD2vJ~8r8%lQ57|i>Y^^zUy*2CoD=7vJSQ6B z0+i=P0k*K=*6t3teK^Q$_TovILE0TC!?L}h>{_PfSW6>QYZzx;P-J7&Y?X7(fwg1P z-rVeFTDGiAWMA`9E7SeWz08_TK33OpOgXlO*n`M8-a8Jo@w*cZIl|U#${vERU4PZ)+$T8Uhitm$`1>wCcPN|?1qCcA! zhV&&(zq8(yTHgl4u;(3m`k^fhi$|p?J*IPcZAwx1*rOy3gby>lXI7VEcGd+!`rX|{G| zXS}kCRU?^AY@2PRR`#V{8aKD1JD8;Vu~9GNdsU2-`)zh7%M!^`c7ydZW-|shYKtb~ z=GgOrOqrPPSEYRhPS#VYG6N}E@2)xG`!W_vn>PCiM1~?$J(gyc$zPPQrvtRK6Ak>V zkhSdG-n|Fcv6PR9v;Ai1)^g7qb31UAl@YEuXTgX_~T4yL2_C67&4 z^YK{fPV1RWpLHIny^c{<-Wc=lKJQD@;VQ#BylD@{(rn`8jb|5reBkO!6LT&uz*6Q4 z0IAfyfR^C9MjKw>mFR|7r@`MZt}G)<>+PZcuS=_|ut#u%D!RcU8s$!)FG7#Lgs_2d z838HLA0T{)a24Si!bb=gx%4Lp3<1w;2A_lEs!N_=offqGJHZ=g5DWvm_&-`Clzqr~ zOhkJjLXjg1=p9ptOXNO*xJ0*`er}s9;V#jwG)C4Fsy~I|9XmCi{T5{70T8-+(r@3D z|89!@8fKguqnjXWjOzLugtyt!Uqagh$O|i0=vY0fGi|twf*I@Fps))qoGm`wd|QGrProGJ$~uHmgxDxdJo8=8CVf1R*YUEuwo4H@5vvm zNMUlF!BmYd8N}C#8bhw)H>2VNaCV5~83)bNrqT^O2e+@hT#OjYIj-l>TEJ89xa6qeAvYT?8?J*tf4v8L>>|!u8fBZ{?v2rcmpLkCn>Gr(8zTK@2YJ8 z)LNFW_(4nl_*>&Q5>r|{=Ef>iFv4QEJ^$% zf5ZLl_X835?56!jXw}8U-+a_1veMF7e21)?l1&hDi?hYLtQuZMcel?aYP$3-P=X{( z)z$o?E)$}WH3-q=Le$80MfyyL*LztFCleu*DTT1~mWt#FJwBVE-d9dvc&nRjcSi`> zAc^5UI&@FT<%C2+Vn*VW#2JdW%zi>TiGPKt ARR910 diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/contact.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/contact.cpython-39.pyc deleted file mode 100644 index 4732d12a74171f548c0b6837af07adcbaab2c96f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1069 zcmZuwO>5gQ7?%8*xJmkP*-j&DryQ0X$4VK6!p2}^uyz+?5Q?QFP958mltM}eh4zPR z$NeQ8x6}SYPkUd-2`x-Uuk}89q*u>lnRmMpf%e;d%WoY*{$TRBd61k!*Fy+`2%3{6 zjVZ;k17jz4DEUByE4+ImJV_Vsof~_?KPQ9WFNH+|YP|{965hcyley3-pii0$*(r2= z3qg{Y3KBbCp;+un?}z`B#DNSKE!h^%32Bh1LEIg(*C5^w=>XD&RsIg?HJkvDeG!V* zJ-MUtfoO~9p2UY@502fj;aOQ2o|9$jE!iv>$B9)D%nbL+8d?{@^ z=i6bp(o(TZSpO>JN~GxPw!v2;Xy6%i{Sv|rS&;7(BG|a1>ctHeb@q(BL7aj_XZ%3> z14jiwS0RLfV?8bNsr9h*FQU2tK70|!NwrQCFGRUabUH7~JjpI4XF659s-#MWSF*TD zK4p_cXGXrRczVfaQYSnsQTWKLE2+VZ+RtINw(aRE&uf8)P(rsL5GSA!?a}MQ#`ocl z^F%4CMzyt4ytW3l(mPZ{$0%XW^<4QdGoWe@UbT!(=s{{*j3I@w=a6aKi_q(XZPo4M zcyNSFbb>J(F}5tlD#vk$v2QD$H!~q)qD&c6Xn*X#$ID$;SGcnc&W*~7ncZiM7e#5f z$;v_ledoGD^>O&IFmfi9YU8R_rAjc?tkpiG3Qc;X0zZpFDGGl~RH~04MAY+-X!AG@ pje>f9Jn${453@O9@1nVnpX-s`w!Q+{>lIV diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/dice.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/dice.cpython-39.pyc deleted file mode 100644 index 192065ebc2ef6d1fb734e278fab8bb48670f4aae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 927 zcmZuvJ8u&~5Z-&AjYCj=!Aa1#z-|x{QH0_oPOvbxgpH6^C#}}Ei+#?$*j-056)4ou z(*Pw6AgK8xSB8p?nu^)8%|o#Ee)@K1ZbmcT(5wdTKS9iEU=Va@g2q z4)&Ofedd9Bep%D%b+sl7UE}-f7oRrd!^4Kj@6^cE<;uejoeC!{LfGM*ZQK-0K|P=?%KrI~YFf_Xa1wN4R2_b;fM~ yO=JVWH|$@($}?!X5`wY`vPn%XTOeE1(y|@du|pk@9af1dag|ny@zh{d=DsnQ%gNH^ z*3x@z(;A>2s{vZ$)n)y)MH{R>GFpxI1k7EK!k&hTw@6Vr5=@0 zobmT2Xye&}M;Vthc)PJ|c-w)keh0!0N|-^-LkNai+bEK3z< zexCXnW=MVOzf8r9`!QE4oOAdnVScz`BGn(MR=cK6Eb=^44?CS%DtSBS5ueL2Zl`kI znWnkwgqiq?l}>5>qKY;H!HNwntP=5Jh3^vUQ8@Wx6;BIKpCw_;3ojNi5AxFtM2#va z9@b6rd?k|^7X5NrAmDxsTipY4ZY+(rgpqe-V!a}-%va_)85tMm@B`^wm~sPD3NH&~ zE^?73Evv8&G_0QtwE?VApjI>Xj>;RXQ~ zDhP^N5X324L3x9s5d<$*VN{+}g8-rq0*L`q=Lud+i9z3eI4Ex3@>V!QtMxf6)DDOzm;+8R-4o-|g*RE2^%suI$&~ zjSpMln@jA9Yr5p$k3_9ut68jjPj{rme=J(llP|#eqI<4zR=J4OI>?Q2IotO2IHir< o^f-yqkcHET>wck?bsn^V|MIVJAFZ#)_c*f@c65W3k9F_<-;&za`2YX_ diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/encrypted_credentials.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/encrypted_credentials.cpython-39.pyc deleted file mode 100644 index c0a6efd22b4bc2f4a38b7bddb0b352ff651b6e34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 870 zcmZ8fO^?$s5Ve~$Eup(Bt+;TD#Hk08Gph=%w7b9oEl7n+6v?>uv`sgOy|%kj&+tRw z$Y074PW%ESPK?u!T^K2o@%Z`8%(MB?QB2T&1TXk+O2|*YcxWLm&hfJ;I!Pq0NKJD} zecZ#im-i@nO=KX$FGPkwSHb5X4`qK!#?dciBxBl!Gj0L@(Y%C8T7lVrEWp({e)bJI zAUTyJ?|sB#c>v+p{x_0GFjx)Yk?c*#E)(xE!6EZ_mkB3iTfTjA)d;iE4&;Ra35_dx zW%*O=Do)TYRO5Kr*hF&269c#F5@E?)nM6W&uxu6yZ)C#PZt0H;?tJP%`<`2?m2p=U z)VQB^v{Qft;mHT6U}1Qj>`}?35^Ik`7S(ihcp_A-D{z1%tuUqTw$!|1==$2XqMDBV z|8|f_8zsP6uxZ>umdxR91Dv5wTx&2zdI!y2@wS{5 zwsi1Zb8*8LU<+ONYw-l6E-RYV*>+eCrF0=qUIL9f$Wj diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/encrypted_passport_element.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/encrypted_passport_element.cpython-39.pyc deleted file mode 100644 index 8a387a4e62e9df3a860287f249a74208877d4845..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1073 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 H`QrZosYG!( diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/file.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/file.cpython-39.pyc deleted file mode 100644 index ce37e2297e38e3a3a09adc070310112e10aebcb4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1060 zcmY*Y&2AGh5cXy_*)*i(=LsxviUbL8ql%&mp`uE(J+ugEwUXtmr-_qYduuys!xfG^ z1RQw_o@0-2;uSbC-fUZH%ifvsjOY7i$9#9UM{xWKU-O?WLVkPY|ItR}0GFNMCWr`f zQUpm5c)5jgD{0koh;o>O0eMG6B-&qyXhX1wAY8ORM@dI?&d4DC6W}F-po*s40)9Ie z5^`a^RLEK?{hcHoh!b?VAOHSP!XfD-~&Ydgm{%FKYIdqW2%E(N{NhTIv5ntGMPaMYUH8D#eX2(E^*I^rRb9pu zFMzSC$5^4o3TwxzK4X_Fo;N2kV?t+)8Q)(?`_Q+c>7Z=z4UnpH<_vPI9x}$2(vCZ+ zl|}d1yL5d_e1wIcfiXL%{UGL%Kk?h&Q?Z|xn-u?y&_!yqxz>3qm%y3L3@=MC>2M8d zoxYdT)Jg}>OP($H3~b7!_DwKyn-Xl@2E%e={1f!ptbeJ!AnHE}{H*OKgSgs)uBn&^ sU6Q@?rkhUd{!RLCn-=BM9O|$;xLfHlhE?71wptVaO0Cb>4{(P60Mv{qhX4Qo diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/force_reply.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/force_reply.cpython-39.pyc deleted file mode 100644 index 5c01b41a2eb7921f20a415c755eda10fd6308cf9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1398 zcmZ`(&5qkP5GEyCwq@_83DBmw5$Itnplja(bP*ImQ*1BA252@t2nGn69Ixrfl1ftE zI#~3QT=ND!w8y@Zj_oP0P@qMJl;hn)OF^U2{C+bWQXCzn1lJ$&m*SfqA%FUxy9;IH zDZchG5=9g(NKRCw;(~6XJffcOAs^>4CEpU&SIJwV5{TBlH*wxq^aaTV@6nfByr)Pr z+V&R00)CUFhC*5Cm3LQyKTq+s4hfK)Dw0PpF?Ak8Z{7FF-_bmQ!FmWI)q6sq_iO(* zlBXycqojY3O!hVjN{-YRj@S3R%_FkshL3zn!(U=GQt8|N8=8Nl1_*f4rstKB@IBPU zPW+6xQ-&ROR0^hP@LV}p+q2nBRtBbS->7M2 zu4Y(_orzk1w)EW({RtkII4uJOOVJdr9S0>3+V-I?>&EdgNgVqsVO13hOgrkjq_=R9 z#b$_;WJXBZ#DHr|DP#QkusrYQ{29J>g5-wWL^o8?cM%Rl^!g@%@DuQ?YfTB)ETHK2 zuq(^!&uZZ}{gC_Y;JMfQ58OL;9ll#Z76ss;gx^UPx3MhjZ9!&?cmw(C2X!{DcXNY7 zP;KT`uBxh->sKJSmBtT+nNPP+Zs*_W#oTHKr?rr;aDMGv=*my)%aI3CkZn?)BF+5L9Nc_}u)d7E;Md)^eDpK$(TBZ|Fdz`3d<=f?Lu z@1OfyzzmQ#ek0n!*N7WL+1}$^lx5|F(^YBF-tS_Yyl@6jU$>iMSqN)4fb*x?1kt0W z9X_wUhbYXk4|-@&#~pcDABoRsKSh$#-slthfIf(#h*0uRL{ogCzk^kln1^W7cHlb5 g#~)7j^KjaO-G8NNhflf|eC2OG>+iK;G@+CDU%1tL;s5{u diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/game.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/game.cpython-39.pyc deleted file mode 100644 index e8b09f4f0dbace572e1d035cb28033aa4fc42daa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1063 zcmYjQOOMkq5O$iRZL;kyEDr%EOPp4M?HRN}3lebQB`sX6N|v`CT6dE;*j}J}g)0(2 z0gl}HD_nAf6MumdGj4e}%4qEQW<2xFSdGUe!}UGArM~qT`$3!kSB9HI{JlV-nNBJu znC|JcO6s2IC8TGlry`AdUS)MI@~HQ#emxL_s1K@PU5FxK51Ah7;yu#^^p@qjRBY+w zi0zd>F+O|pGeP+!>9S+xVK3?WFAY@MqgLE)Os#^k4Q|Gd!Fx4_`%N%mMb>8v8|;xe zgBiv7f2FuN#NU5J0Zb&CiQWsWM5K^?%0DyFhrx0Ph3*}&%}KdAN$F&{1tXn(NW>Vn zmpd@J$`G6X#h%+>`y1@}h~16Y^AS6UmK-ib%SE_={=)-gfa>nDhpL9NuO-Lzd|^Dd z$4i(6?x1zxp$VQVK1a-c88I(B@Ow5qP+93&M(%@&#wA39(e0Opl%14aDP?W- zX+`=-%2%hV+E@lsYCDtC1kn4j3jj?xoY^SX-Zi!#zKJ-!1+#ft6cn+`sWLlxuxt7)xWrAvkf SYwqvR1N6kvus2FJU-}!8Hx`uu diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/game_high_score.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/game_high_score.cpython-39.pyc deleted file mode 100644 index 45840d5ee14ff8563050fe0b8deca29a08712225..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 865 zcmY*XL2uJA6t3yQ{1BlS) zJ70$yZc)KL*$`<*Ct?Y&i!47+m4@aQ=8qW4MP3-DW(!Cy(@<+LP+9a;z_eO1HD@*l zmSZ3@F48b7W+kw>(oC=nlTNxkhm}O6u=ls04HGlfSSHGnt>FIl%MGwh*)F6~s}25i z&ep1Vw!IS7nq454qv_S_r8;{xn=M@HV-bS1+m2669 z4>`YXM7g~QIhQKsT)RIK2gmL`b%?fhZx@HBm4ytm?s6`wN?Fmhg!sT=22Smux+8km z*-rhAMqHMO}kVCO1&sByWpZf(^inTBKJZ1CxkCxz49{ zU4xmrmbvR01KnWiweDj9w~Z?uQ9pc4pU}>GHV)ej>#mm#H^(x5c(EPmyY63f=)ZI~ W)*}SAgZ<5vUb$~>T$v%o<^2JAs_7^I diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/inline_keyboard.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/inline_keyboard.cpython-39.pyc deleted file mode 100644 index 5e9afed6d3864be5220e9fd51e1f5ce0b239a3d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3797 zcmcgv&5zs06`vs~iTYTrEN_e^X;KDBKZH73CoKwCFp9=0>IQYzha?5cu1k+NBQ3QQ zNzaVDmMWiYAcrFT3w&4ux%k#Ur{J+Y`A^s!+P*iWwAzJI6h+Yy=4trmgKvKG-kTrU z&Q60s`I~){o$V6xcYN3^4m|t68@hGS6^5Q6xW6W{s*HsIUBnN)BKUs1ox z9Z}NiAV(&Vkx6W`(OXT)#uUEYEJ9e#y(;lKSQ zafrVQTiDC@K1t#z5x)`hVag=`l*!{+#;(Jj8XlC-k0Rxz!-)vBCq*WO5{XtGOT5U; z^N!1jo<3sQV_7DcRGy5+N7_roW9{h_x`a0sO0luhTGaV`UbA5UB@27&E1U;3fIS=Yzv+ekfVO)9IlKkJ2lE3)cVKbt&7MPKHpz$BgA-K6>MX0ehgK$K`hCHoKjA?^}+(Y?1N&rcoHR0 zxjh!TN97ez$=BB68nzIb??F`-2x2YX-fGDj`p^u+p-`}mPH=7tMPoRHe1J!16{f(O z@wmVkG$5}$V)0CDv*TUpF73FmWppmw@*V8|0|;~~O_pZUUs=B-_ir3pPi$~3>l9q* z1-Q=A21~4KgxklK>_FRw9t(SL?!%6Tu}>-VI?~_lT^g5L{L#b^WE<}z&b^_D9aW?T zR1PwR@sEx)SdSb?p=UA~c<6B(T6BqlH-MBicwpS4zYXFC>lqSZh1^_Gnn^A3yupv_ zBAHEvWLo4^bj5^kIJF&%q*p26bJME&nZlDf1A{VMoUHeZ zD1*iSCxpQh-vmp`{85C(TcGgkL!AUnN;a1s4!9I6Z-ee8RAugbK+OGjNWp%-Jz55^ z3?M?}bzR2H>u_6w#ySQa_Hg<-IklG*(MuXjatdkFc(#eG#h=#LeUd04;SMuSikBPY zGq@VJpjiz0-+Sz5AyUO7-=qE{wX0Y!5Pi zF#|1Xnz`7*+QBir_1rZK5&7Sazi0T~Yj8(&BtojSwlKZE_q%lF zO=sZtGbKFnn1ven8cu`p$o0|;kCw$=!G!-?epLjJF*SEIaLL@B$=HypydEQ!4&XW8 z2}_n8aHd&)Rh>jSJOWOFycQf&$a(HT1Q!hkXC3>VPAy$tiRMsSTTfuRBOsw}I^+S29pxx1`y zFfh2re+qMYwuCPnV$RD%NUu?(&i~LNiT8{&VPT@g#0Ey1fU59`xNW3E=f5+jW}RIo zN4HI)Ta%++?Vu>VYw|rXYeSNH`~V28I=Uj0lipzw*@`I|68aEPXvO#(xqLvVNsfYo6wElS(Q4lZO8oJ|IDD= zYv$F0p65iO*=93^EygNiE*kE)S05$!%$JeLD8)&g8@EP1cW)J$^5;k{6p}O7!aE;+ IcK6eN0WYSDKmY&$ diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/inline_query.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/inline_query.cpython-39.pyc deleted file mode 100644 index 8bafbffe723b12cdab7b41c460d8395ba4717336..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3391 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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/input_file.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/input_file.cpython-39.pyc deleted file mode 100644 index e63bf9367edbf72bd391b76951e924d84d5e924a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6460 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 IJ~Qh717-QLmjD0& diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/input_media.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/input_media.cpython-39.pyc deleted file mode 100644 index fe91b3ff1e7fc5973d5511e1154cf494c668a468..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11591 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 Nb+&b}^+@a7{{VH2kDLGi diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/invoice.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/invoice.cpython-39.pyc deleted file mode 100644 index 37375490beeffa7e5766954cf2a3602a6ae63bfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 773 zcmY*X&5qMB5O#js?WSAc2_kXof#%GrLVIF`gcgZiE>R@Qjb~eT6Fb;$rE-M_fg=|l z$VWKw3Y-|Hp}<7`GX6X>9)C8QPA3HId-R-r3kdn)C;wWElPer%fxrn58qx-35O_aC zKP&Q@w?b0(4Ovlo*-dt+^9E{md8 z8Wt8BSZmfUlwKDrWlh04@pMS&!(C#9ZNQy#Ftrw)FYRW=GHq$cFcmClH?DVDgRBoO zv&yoDvR3V+y_wJ4m{N&Rl)4F}t>U}J`x&M0cdQv!MwD_@Q>wknW%ANrflkoZA%aV9 ztrl|aW|T51vA%D@V0h|7Mjpl<&Jaoz%fcG;SE3(z(!;N}{Ico}m1dHwwleibsiqPS zz$hMybsgwxu?M-YUW-*_goS4vs~^}JOvQxq3KjOyfhqoI*&VchcD_fGAxwfec@iAI re&uGKxMTarLtWerQordhu8;ZK;L&@Gh1_^~6zPS3n8t6C1zGePz=zC= diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/labeled_price.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/labeled_price.cpython-39.pyc deleted file mode 100644 index 57481e1d1ccefbed56fa48b323b36ad63a9b4b26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 907 zcmY*Y&2AGh5VpNPNzcnd=f9_ z9V#Fhl_X>DFO3Z)^nm}jcRB2{`i8Y^o?qA8zNyZmje*2hIHhHTlKZRmzc`UwXh39@7tx`XG#z(r=+fY#p4 zbvZBV(sGV?XrP+>%X3fN0p~>}jN$yA{Q4kI@@AcDQA@SRO)*od%FAmI+!R_g7&1>+ zP_Odya-5se!m~yc*J27L7p3x?M|RzS8STmPmTlUs^#N9Lgr8xk2)%jya2)C13XgoX zwO9b>uE+U8$z|p3KIb2oqS~KyIG3v6T>F+}(JTL^cBFiC7hhUk)>HS0b5YmI3O`FE z*tRz7ysj-wu{pjZH`voJpsMi30I{7q^p>x7wefjN5Ouz@A8qLtA-F~2vk5(oU3@=QrbwXU1%AuTRi^1+UplpOD{fao<8*oZ@R}aUN8S-0@%Ss@G5E{yOOQw0yCmb}4)>DtI}dT}wc(5zz;FCffaIoh z&ifYN;uK%=4FO2*agzHVFm)b4_&xeT@)(k33O(+hkgd|+D#1<}z;L(DXVK`yUrMl zPFzHa(8hM%xO1czjcXf|y5}|~?`sQl(AwQYJwW(L^pWEZ{#^3oqFEQ3)m&ADDHlq~ zLR!#ajXx~({5_pRJ?z+ozX=%<1X(1IXCRF+mxPcI{3z2cjG#g`a^FR`~_v@ B<)i=r diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/login_url.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/login_url.cpython-39.pyc deleted file mode 100644 index e78c9cedc17bc9e522d3bf81b776d99e711306c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1298 zcmZuxJ&zkV5GD6R(&?o02U4aWkTfbH)iDl1;=*YRrMNQ!ECdkLajocG@Bti*UcBshLczZ4f4A-~6mj|ck5 z*SOpijUUYgL5ErkR8?X47O z=}PqeYxIs!?nm4JDX1hx@(RI<6tbW5Ur5n|{?!0ZWO7c9p5f7xK6p-#p6tOhLeCg) z<>y3p@i9xc#_#9Z zyrxZs(x<~#z}ox9J)6x+V`1u#Jg3H1v!(HFCK~k_#;bZ~bsHa2+=US;yTOui4?p-Y z!cZPX)L7r}iG|lYaGu{-<$;T`1n1_rna#0fY-}Lgk7j_TjK2F3kK)NGF84VaPdq)4 zx5-tqA_sa%4(TD2^h0*Yf2BXQjg38!%;|wrKVXi)A$1g)7&_=!M#V;I6cyL6F7t8tUuCOSN1$ z6!}FX%8jVNErc@hMbG@c0XJ(a$FX43W^bdcr?}i>G^978NjLAZJo)R*leRUmk*5#L z)A@Wpc^sw0x^f9`+p{(2|$@ubhWG$rRY#neUqB7VG`;shO`ci}B|R(Qm@ zsB7b~sZEVq|MNCN|2ZlJQMX*f_*jz?w8q#-yEA8T_avHF>-Y-Yr)Y*W>p!LK%m~GK wm(Z-6cWvZ+k_TcVqmJjn+a diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/mask_position.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/mask_position.cpython-39.pyc deleted file mode 100644 index e2393d8723bc0cdeb86e2aa8f0ddaf74be5ad93d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 762 zcmY*X&5qMB5VrHz653tF6GY@Bnb+ zm2!j=ufU0Mn_XZcPdQ|hpX z*vmaio)h7V;1dx6(2f7m&jS%&kwx?iGm-@zf|47+ceIkw2vZ^ZpZT~u$7OPKKyoTb z?!CrhxevkD@Ege^m~5tSPk2i*GBGmuk@4@C*~kQU%zR|RB@q!eG#O?uxY@o^Mp~)5 z4`1R0?YfpGQRN0In+PzKmL-_P){yjLV4}KY#Vcgr)u18aNsDO`Q>$Ggk`e|Ep(@6-Q#TKvIq7wXSbOM(=*nu@ zt%p;_c-JY*ogxOqqholZxYZLEK1KJP=u?NC`~60o75%=@yc4P|OjRq@6mkokp?JLS zK^N%_bT`F?EDMwx9{0T3@->)(OXVcU?7jz+xx2I5%cuQbyJ>SR8aI?N4Z?@iJqP}B o5e~=Rk2gBG9`$^A_;rVvzfB&|157hamq&%3x@k17#Ej1TKh1B;a{vGU diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/message.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/message.cpython-39.pyc deleted file mode 100644 index 5b1e73c481d85a709c937acce30c5da517f6fdc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75921 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 G`~Lw_TU-qQ diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/message_id.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/message_id.cpython-39.pyc deleted file mode 100644 index 3c4410b97ad7bdeafa011f2c2f9d5849174009af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 605 zcmY*W&2H2%5O)5y+o%hDgh(KyJ&>HKD%2AQ3Cf}EC5mKu<6+m^Bz8UCO3Rf#2poAO zAK?U#z=?6PQemX|GBcU6zxgZ{i=2`DNM4EG^!*u^-&%5aUDnO zEt9cK9+*rZ+9qF;I+f`aTV}r^YF@@ZT?qs~`=p?g*i!93ODMY_$L9pV>PWIWzM(7X z1k$hBH&)N!Xgh~v8K2V?ba3jAKLDaw!#nv|=LOmIMq!~>TWDQj!B{{T92TP34eD+O zML+cyN>W`B6IibTw(Dx89ah4qXNOrO#{r)oa<1g%GWT=N z2hjuPKIgpGa@U3Ug!8+d=nj95IG4KR+=gB2>`f5DW)$0)z|XFnRm0jp9AGh_6D$eq+go74G$X}1LRSfjg`w~<|lF!A)k3Emvrf5M2`1$!H!Rzq! J7`8i2{sP){p(6kQ diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/mixins.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/mixins.cpython-39.pyc deleted file mode 100644 index b2d98c83c507f45856a583b656ab42a9307f542e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2108 zcmZ`)QEwYX5Z=8z`z}sm5Q0K!LEB1zT&XVV8y27vP}@i}ZE1M1EL}FY8++~Zt=V0t zP2@bKua)=-&0~KD|6-pIJoPW|0y7t%ofuf_=H_;1cITU!Z_PJ18wAE5;aB`=Ovs=3 zadCw3aStAQ6NDgw=A?W6rd|4gh(Lrdi3m@FZXoD0(u&@K9oflHUK};}xCf8D3qq1E z6$CxHp=gS_h+oofBoeXql5}gLA=cqt7aL*|-mwT^-*^1R5BhnLYcBYHE|0G^7>q~i zg(}#AHtay<(w1{OZ$E`2APh=&vpT5NNI(II4)k z#N3?KhxCLNcU>@}E_Bhbb`YEf=83Bhzx>EE}cu zI$A@TqE`Wh6NekaP4oc2U>43IQF~Q8j{rc{`G68qqCj*N;1XP8G2NMP!^ccW>r}y= z(nY7VDEL@1NQEk_<3$Gg0qbNrx3;sVbbI^p7PoS*&F+JZY_op*;_B9slXm;@-s&k% zjisKt4%;rA>`Sw{o(-nOD7ETX{;!FZa@1j4TIZ4%>^AFb<}`yCjl&SJa_sp)7EH_w ztcpHU78VL+2U4_G&m8lSOocMG!ybXkP-W_X71}ZRLRq(TFw#v865;6DLNW#Hs4UTDu55IGd{-sa<%WH zC%AE-t&hqhYRW?7J{oFO_yj>A5FdlYQu=UTyY6O{l=6sHg2(0u2K(4xLz^`e$l>nV zA}>C|c)GE&C73tFTm^%_o{COya?~@t5PICR*#Jt?QzOY!n;AZtNYiT{%Hpv1quTFT z<>c)N&qlm2ZI3J6ho-yZjwaIH86)j%dvfHHDm;w9eguN7H-m^K@Vidm3!)&QSAr&u z{yzSoYG>qcyYkDR;THpSyl_f}eh!KQ#s~_`YtG0sWDk8EfDF$la3**NbLHg_9{;qc z>I3P{TS^shFN{lmT;NXC5FNcg?Ci~9wM$s-`;fFH0m^djv?3o5xaH0na|I$Y>mYnw zHi{B&sQC~lF}>&FScclE3Ihlhu|oFCe3zN`8&%R$uqmt43eMAyeYa8rAEPxGeu;I6K#)e09>0I7 z3Fju4ihwyGi(QR9IHaeTa=OzBd<0n=m``BE;2+KExk;L$L7IMp8{kfat`xtr zXw`NM*4tosySqSca7OBVv xmRi}37z6(OmS_?hMU898da`M7z7?8x(XWXDC;n>(pL~5D%eR=EGMT{d@E@i^9cTam diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/order_info.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/order_info.cpython-39.pyc deleted file mode 100644 index 6b1be03414dd92ce42cfe0bf6a8c90ba611471fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 779 zcmY*Xy>8nu5GM6&t4`A92?TWVP;0JX6zP(pK#>ei7C`_(i5HuWM5?45z+Kz5@6e8U zi#`X(cIqp1DoG3dIf93e$GhXlkEACj8M5|0d`Z7ygnqcizZTiWg`Ik79YYMasKX`3 z4hI$oW#DnxhFw%f7`;I(V(}-$V!*rjV^}6ES)+OS({@LX*hDqeFvljjaDnwA4Ha0yV-J`%X$aRkSpjdK@fw^xy?`= z9k>)Zt>u2msmP_PU1Yv)I}E*E7DXc!ECy&{qiDB~YE#s5&;{-JbD!=S`2rIO+JTw% zTPc8ueOH4rF?5u-DzFzfPxYu1p+}*v=BH*th$|z+WQ25*?OTUuguLI=cHBt`VX`4a zxyLNyODDWaEmlrhldK12)i-B^P$A^tFQskz#HCD~i=A^Hy z>?+-CrEDvH50vOe(Y^;&EgnETRPT6QX+FS$}<&TT_8Ssi71p=KekABA5~oFC_e@oxN~LhA3KAe8E0X1nr@P)Jaj?Bb%N4F1 zc#OVMj&SNLaKe-Aww)-WZ)Q9*{>CGAcQfMUPxwl_2nhL$#(jyrapZq{=9MIpR)i55 z$grYyzygXm@;GE+kK-z;V;1)~sgioY29&%bav;;6M5Yid(;p!lO8SwEhu6L)IlHD_ zU(qg_2@7M|CFcq%X+3&;(v)W1I*`W(Bs5Nm3jI%S{U3z2tv2qYg4)MREO=i+ZyfpG zq5{IGBrN#sX|NEYWekZ7eo;1nbUB3N8G%fOhr~yAVAMx;VdQ<$A(64aaMF#o4c`bS zzW>g0FUPuZLNzv5&AB$Ua7s71nCX?vKS2d^BkFvcmP?W; z_i$ywOtQZ2!nxKSOsAzbFmX4PCfdxW{=A)vRy}WT=wsDB#~|S@Lc7~3?}m0Ze$b_y zH=+j4yNvT%%TfaZ6P_*m9h(_wVu;oJQs!$goxGjxnTQJ4s5}M26 zRLu&j9K38rc_HRt3!yYla_YN-oo%zdJBAzd2s@^Sn;E~x^|m;QG#JtT G3;zSPmGiLx diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/passport_element_error.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/passport_element_error.cpython-39.pyc deleted file mode 100644 index da2e722238d9104263bb86714d3f5540cc3750ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4800 zcmchbzi-<{6vs)5`YqXtlD0|PG)&Sq(NJmW(jW*jByNVlEn;U8)DkD&*`h;{>K$dn zg0}?7)U{KFcJ%*Ipi|METU(%L{(vrB()S*JM7AZ{NtF=b>E7}9?%ur*zdVZ7>lF=- zKXPBNe;S(hCmPd-3C3+W)elf`jq9G))wscPo<20XhK_X;>bY)C*S^$vo)?~IydaD% z^Kq`5hn6BQK}$*G!7hMZ<`u9jWEa7%@*3DRvP)ps`4ZSmWS7BS<_)kLWLLmG!<%3? z$*yvJO>3Qf4s+91pX*Sz^vLWpCE&NP;R=r{2QN+^IWTU+sqR4`w64yzuJI5;>*j>{ zWBw~?BO){09f_zo6iTs8vD&IdCENDdP}p` z8Em`!Fgr25BIQ(B4&(;9N$8l-wlfehz~u9qvbLEAgE|A|!?OQB0CBG5HYTw`bz&|m z<28H0)L=g!^F+j)g-pnESYY~`G(%9=u#SC@JM|G1p%&_U+GAtO*wgonz1*I;m*@KT zc@Q=YR@_*X??A6sF3PJhkR_X7A@i>9hPDk)y{Uw^F?aBNJu2I_nTkIij68?!FU=mK?HRexs(BUQqN$o&bDU@Hm~G9%eoF%p}%Lo_|v7R*3Z~>FN1d z>#^c`V)Dye%y-;yU@;5SW=yiF9Ok#F_d3XHqO~V7>|>*!>VHN7)5(&6wPMAQ$;=<>b5YBe6eG2T#g*tfQw`V6)LA zA#f1V4s?ql)f>9;Vsd$2QZhdGYbWqY;~nA?(Uc!xk?DLq8v+t1|4BL#0@9#>=A*a{ zy^j;)t;z*WROtm@-l_;Z>6K6IVDW=k)(FcwVR>QR3aH6%CvoYyDnt!NEI}4uOhp-a%7UPWi_7*=H9himW_pZs+^vZ#O?*xAB&KBD_lTwj%6Wa*`@ z9`t%ZX&16>ApbaN3Q&^hpddQ04Xnf$c1r6ts1vQy!rBbwT!r>&<(&C?&k~WbDKDeH zSt^J_-btM%Du``w4W&!7o~#FATSz4croT^yNygn5iqm1Ai-##0;mzT69g|LKVqt9t zPTxTLG)~t~NX99E!a>(kw+T?#_SS%Ue^v}@u%C9tNepPhTP3rSxx%ujmgC`fjFA xhj3^;;t4EqKsm61BUOYd5UoH^Dz!*xwUXtmCyCpQ?b=Quy~2aQ zkyqLS2RL!$%8BtNDIjL$*_qGt=b7QVyFG&REq=s*MudD1%HNcra)8HW$OI8lMHW#W zML}+%+{#-KIU*t!$wwj*h|c2=ah{0wDH*0eFd`X7bu!@&@Sjd4RKk^r{zEZp2Y6hL z3`iaclDFPqvOI?5Q~NW?Q|O#`VMnyaWP|iJNPL6bLZpv2$qll*LE2*?QY@%b_fNQU zMq7U8PHZL+PmnW5I#)j&eFh8@e==<^lxunw~)gGs_or8zpN3JY8Cg zF4c5^m zdyH|VwC7%G<B<_r}lJZMN86hYwe z0P&z0^f*Ku7GXeM6CUyS6X7ugn+U>9{4pvLo?Mc7`U`g;^T0(*W&r=mNcwn9&Gr^eXz)bf{ zd|+mKCOIWM#b$?Y^uAVBU5ZC|{5;N3u4-X2wcJ2uGYy>v1JWWRAu|}2sa3|Z&L?F` zBV36FvOF_ZR5zeATW{N?WTIJ&`*O9lojJ+#N@-YFXke{byHI+aFO@Yp>%_CZn6KR@ zxYSpqg1cD{wo=?~dpo`t+}19sL9A=*M!nnTUCfW%kW$H7pwx{iZ57{Q4eBP8-fmg5 z_oS3^RZ*(_z>D~mzZab#)&o>7xwKlywL7AeNvSNeLP>++sSg?Yob-*fum-J1p7M|C z8_`ca_UiXFKPkJ1QZva_Tbim?swu?{Fls8zx(;-?xC41tz7@;T2n)|UR^6~Qn34(Q zCzIQU4ou#Ug!;2Bx(Dr_r*G3tP>q8qJ`Q%P_gu_Vw>v?9E*)V|F}vE2`dxpM#pI>B hmyKeaEgR_5{Yc5LV=INPj80r&G(k^Yc*Sg>+iz%{>>3h`v+f! zFB4vF!_ALD5RK@e=4Mab)rmn0p%E3_LS(w8uEDz*7Ne3|QsZJ+jx5)Lafy_}k;ry! zHMYV^RCTLS&8_L$J&lYI`$!`;Ep+QI3+^Z&6;cJH+D96I)JPqWdLJ1BWRx@jX;8b{ zgjwT6f1(@9 zY-e#R5q!~4gX^fB%~ms{Dd-C!E6)-^nb%2ru~=(WrR90CA5qVfw&z6&>4iA1dfwBX zANKz#dmc$Tp2skPWbrO?z^X82xKFb5M6e*?TRr4)&<;@ecD-psu~}jKh0>$?;+bvR?6#mrR3blb-Q?XqI{%f?} z9RKUW zW9LJ7&w?l8y^MS01>}{U(PiSNq@9HZ;C!t$#_F&eY!pQU#TW`?n>A6)qCl?MIEo1r zxY6ta2syGEaFGSYMSL#-H5d;j;%pN2a^|zqG-5L#5a$+%jIs$`q31};E7vWk2Ja_L zB`BsNCMcvMH6byp!~_~M+NuN6`l;Ih-7(ND<;mOxWE_xkj!g6sD@P{#Ul_@eslJY# zBh!H3%9R|M>CdVn0(Q+RyXN|6E!VrypIKMPMF_b|^m6wytThV3HcQ4x^GJ8EP={V6 zm7_oP`~iV*(0A=nYjPITCQM6DFJzS%qPq15mjj*X6Vi_3SzKqFyM16v|W<uQ1A{%--}Xql#0je~KdcHyiBwn0Wk zkHsDAp@R#@=#}yajXTtip|PD{&ovHyRm>sXE2lf?Wc^7{;`rPd^v`}LLfxh8J4+7a zd%nP3C^%oi`tbM?9_Rdth&M#cGN^F1^X0xbXa7Iv1L`Utuza8oCmML5AFSjCywijG z8xL2rHu_HE+1F_DO%!kN&`<}8A)^Y$G!mJ)_%co4qZg()BaQ`AW-WsoLJ?8^dB%f7+6w@{pJiW;ec?!X^tF-HTkg5K2U^yZo06uudD z(a;-~p);J*f&0vb)ZT_$CETFg!*S8<7UA4gI4(mmwEE8xbyzf{g*(3ibz-e$zq!*G zA+CL29SI*Mgt|75{XOb+@JMOGp@+KW13@FV{CMTw=IWituKC;M1NW^?{s3#Oqixv# zEZs6JogvnmVBf(bqh|p}ic8E;w;p9@)hv1Unc@Lkr)r|I*b_m>nX+<9jp0OhS_+_c z^3zh{);Id6y>)er%pwDOsoG1ol)0&FdYc2%TFy>+KVl)^*viq1hF(>_Mxj}0R-5zx E0f3PKmH+?% diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/pre_checkout_query.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/pre_checkout_query.cpython-39.pyc deleted file mode 100644 index e3213ad62983a7114da69d36094fc48a5680e0ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1662 zcmZux&2A$_5S|{7f8sd5n*}XGq9wTa5c|Y|C_*bD1y)+Ji;_JsGHSJ_%XT|6)06IY zBCm4GUYBQp3(~$3nj@Te1x{48ohTsM=}L9E`m3+1t1P#+x)H8F8ehqulPLO=4v!bw zqUX5XDGC)SmPZ9k86!PLJx=4GH}Xc2q)E_|yjir;7K^@(R8zIyMXCjC-o9(39o0UM z`klWRf_-3hGL{bdtZq#-w(d4Xoe_dDoW!w$SiF@ z@=NpAC~ZM|-hmAjA4ibPo2mg_mAsGBP3WSvN!H-kTl=*hEL&*VMxXYBWoPZvd9duR zEgNK+H(^h8-?MZd_VC{3ain@`>s^#SQQK+<{~xGb%y_TfeQn`n2HB-q_#YNvm-2Tk zLYL#Zm}$q&cn+E8nJK;0rQ;e)U<>KBDY+cuB`!-eW~R{PlvfrGvo#vOBDg_-`q3;b z9~;C$Z!?*I^umAOF{7OocBVgk4;Q#w7?x%SJW5PfMD{6^v9$FQmya$VD!d0)As;V?561|D*lT3HN?oer_c zZYV4LIX=bxON56AZ0cC6I+<8g^y9iIb1j{1V7t~EWE1ozbthX`3uU&fd)|1N3t5;& z>FXU`UK^c(sN^y?Qq}uzrmG4`2~$x&2(4^PU|mDQBB)g|nyC9lI_(qOu7%<@nn&k2 zaA$pHJ9wtqa*$6xMD__D|NcoGjjH9y;(M54FeH5vM41#XDN5cky(tG=w3bw`MqbTc77B|=0!VsD@QcOVA$URm%U zFI=S4#D`qIK*dM5%(L6*j@`xflUp{AF}wIOKBp|>TSl7QL&tuj?rQ8i=Vh5eoe;xS z_Oac^@9So0?off1I3R0F2)GjBGt@)vBDT$X?Cr<@Lzn!{`cEmp5?fk`x+_Fs)FLOn zC$IuCUw_jULYYhmOUb0oQ~JRRY*u~II`M3$+SbFNn)48QxeZe(9=E=l$~v(pzY|?Wl3+JeZ=FCO1<1e zxtI5X992;r=P@PEiHv3cBawZe>;8u*Ph|3jjMAT2os4J~FN6jBC)WxpX}#sjf+^Aa zA4RBL;IU7U0m-Q(dG87V4h!OD&!61aByZ74Y zcdAxy_oM>j=0+`-U_ieAHeg8em9k7P)=)ZTpfzBjahACiuu?Y;6{fG5U}Xf#HfkUk!S?3Ht^ zolYjDHZXQj!P1C&tj%(=(9TXotL`6*g<6L$AVYeWIU}~1X1erNxDu;(nN-$^ri9DU zNtbcnh#ENW2AtPgZYnPiIe)tm)xnc;E_KPd@mG@fpZR+;3ChMlj_!f2ttfAB*|rc$`z1`=t_3?ePS3;m{5b!(-I+eN@<6ReGoW#DPS0tuUXIdkk1tHs o#s12|Jo)MTu;y3cC4}(5$oJA2*6Xs_eqoRO%eKDHkm48p2FrTwCIA2c diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/reply_keyboard.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/reply_keyboard.cpython-39.pyc deleted file mode 100644 index 6cc67d4adbf371e58903220a1feb4b5c65fbe4c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5607 zcmcgwTW{RP73OWZtJP{H%Z_hN8n)>}ww2dT+NO;f6ipf=$fa_TC_uZF%TSz=M2SnT zXJ#d9v3|1A00rD%;0FgNQ21x$5A+A{v3>GiNE)=?nIWl*S8fm#HUhu zyodH@)|RbVUl?>gvpj3C00vsc#Si%5W*!Ol)>x@L`)!`4>xUyg`Jx@*S>H)ykZ}FG$Y%ZTLVB^d!h{stIP4xEM zq9Mm4E(D!G(F(&POH>&4oWhel-O?X;Y!`E37^jhxVffhk^7m|YV|2J7u=#wrA>*Aq zPdAc19)&U%(Fm(;^!ItTzwu$Rxgit9uZ^O3FWTmEBT91G>2=~?UWeS%!?4&hcfo$d>L~_w2!W zet!1?J6FB2Wp@6)HF%C)V9(+IBD=^g;s260!^_aKE5-Sb=#;B-{7oeG#-mB`EE|l1 zcq~;u3@XhC4idFPR+=6LxjqJ|=f5mD51wsGwHd**VYx7_U@I2^<0?v0vkKWTzY`5d zDVM!(Zl9W+io>DamNCw5wO8YJdXCYsCgWStI8~FEjYjo9Or-k5@%G7iw{8`!YWZRj z-Xodt+E$8ldB#JPK^)yRk3aDO zRo|uRMXCZ+#hl0w!h?jVotSjDdZUYuuJ5DzV^t*X})6wl7&POm7mg=vG+W=1aKdnj@VmF4@kQ~&%gC(qB& zzS?`l6rHMv+ToGef$5j+TQdP(NN7c4KT5~^m?x^)_zAj8 zHcsrA92D*NUF!cMs%`78qb!OOI7sJh>(-48=dOF#n>vr|srNZz2M*iXbuPjm?Kxrz zZ5KTb_0ZhgOA2G}+35Ae;CSzp`1U3fZ6N`kHyJB~qcjnbh^wOr!6Asmwp^`8t_rTk zB3nhAO}CCwDTJ&Bs|ew%pHf@)XGr+ddV(OS0)aH7ii8q$+Py|G$FuQ}3&irmr^uBt zqhn+rg`4uM*D%uch^fNGffbD;WBg9xo4|ZZ;DsA8_H)dZ%c!iDXJ4?}cGvFMK1#=) zT$;gUA9GHe44q1SGB4wWq&u~7BHg<#P6OvaGQZt|jBUK>6VNiYC;Ro5NycFK|07?h zAu+0Lx91s?_#p^`xlNUYkr2_LxJCm`*~yPUdmlxT5|g}I&yW*#GZXD-OIgKy$iosV zgm}nat{`He2N{18jTSfCNAVMBx$ASy86BA(u&G$0J zw}CjxaTl$T$N?DDq26HOORg09Xpe$aLy!*@m#I2ZoFj~N1s(KpNj?r3t9j90Hb2L* z>)%(NUH`sXT6FBT>!GxkTU|jb#3&~oLTvQNDXP~uO(CMazrB=bm6T#d9SW$Ba@ zucj>UE=B;sA%CKDhGtOdvgSiiBd!*k1L9iL_-P3~b6#8p3lVuQt(|A2EkFa6wjz0< zJVa=;RDpxOp8O7wk4y;Y1d89O^jii7`v!58QEoFvni4=Q6pt9CLh4wi1XGYB9w%Fe zW`*)&#tO_wDx4gcR1b{Y9&@Qe1bY?5YNaNmd8|?Piq4{{VU*|~0`OosRzUASeEd$F zjwR5GS${28@cY&9a@7+{R0~&F5%3Xf<{8#H$i*J^7Oa;kSFq28B&3f8p|P~{XbTD$ zydJzc5(yH(S8u%XTDdU-Q$d_2I#JYXCfgYjIFk2p7IS(p2C#k`9$x)%@P3qyBXLM< zyn5qIHUy73f3GOp>En}TyPcPz#^&1>h>A?I`|x%-F@^L-xu4d6=a z&nLJBfnkwy(q%|gDW%Ehj`@|9BZE9)UqUZv?p4OPSHVTg>C}+2Hz-nauwLlI8zCnP>}J1qZ|}>IQph%^AJ5qB>Tae8Tlrz z6H>b38Agoj>=NGi8s%p7WF((EkCcDH)GL%)|AH@}>wpRUTcZ zxiez-w@p@!R82TR_VOL52iZ8CU7bzpY;X;|0eYXpT!c+s6iI>k$a0Yc>dc`|0oQ?3 zet{u+mC9;Yi9o@>0xt$s;qiR_?iImi~=<<9c@@(cd~jzw>V diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/response_parameters.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/response_parameters.cpython-39.pyc deleted file mode 100644 index 8d65f04a5b10826313f52342488f0c9ad3418d8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 698 zcmY*X&5qMB5VrHvmTVWKK0zc-J&@dxSXF2xBz`2cAbu`UgyqK5Hr>R|dYnb&!T}xx zj=WNiaN-p>F>VVBBY8aYc|70D*z)u=VI<$f2l6Rr?1y*$m57{kT9}biO!0=byx`p1 z0og$jaQ1|$P(`1aihys!PhkrV2(*t@H8ct(=iL3}A`VxO-#R$gR3EWb_f*q0Mh=dEGC9-&!y#nlvMtCW$Y{7xW4+*TMEU|WQuaniKTmzP}Hoo)R z?K;5xPs`$_=d9aV|6_b%=$R89#WTLgF6fC4)gF4d{pL8x7t1YFZXa_~=D|9p6vJe3 Pn8`!`o6x79@@e=RVWqx1 diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/shipping_address.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/shipping_address.cpython-39.pyc deleted file mode 100644 index dce6593fc5a80ae536889006775ee9373e3bed8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 805 zcmY*X&5qMB5VrHzHl(fCCy2zU2O7bRRfU!dT+njpatV9t4g& z5Emce#4B*ZPSe6pA=dg@eyhO9)w_6d-u#Hw!gZn4%IW$byj=g80i>}2kxRJ6lO8)3n*%x+YHmk+HHR?cW!NA7aPy;rqxjEQO8wFrU!&`WAFM4W6 zQfSlFT+gO_T%p@)$N|A@XL_0ans{=8$Cl{{36woL3QU2lYFDt-%;=vq-J zK~?iRXz!}md{t>~;IX9jEnS1IC>LI;!W<;%;-nEdsVfi4KT6-Io;XNx6kp)e*Ueqe oVtYKr@obZuUj8@T^>sP_dOdmWH<}|0<28b@Bjb+ diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/shipping_option.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/shipping_option.cpython-39.pyc deleted file mode 100644 index 1a63d2839ead0fff04126bdbc5b159400b7be2dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1292 zcmZ8hOK%e~5VrS~O}a@T2=Ney2qdH&NX|qR;vvDMDoBNk70GheZo27acd;F$R^il2 zJ@F4Xz_EX6k8t8IaAL;UmV#FvjmIo|<|PP8 zB+UsU(vyBpmmc#d>H+9J^PL{%!7^kaC2xp~Wb2H`mhu+Ssn1%H?vr8s3(g^XzbMEH zS_d;>)R5NEL8fwPKudPTOyx?x(^;xgbiO{qW?{}iQG`)RnD+tFV!jH#h2IH_RBI8d zw)A#LW9c*&A1#Y5mB`==WnI-*&zz;2$CfUrIk)T?{@hgnr+#r$n$v$8nJI|CT+4>L0;XA70ufmW4PMimw;g<~ ze^9!BQO5-wT3eaPc$}76jVwSg*J3#;^?W=ltr?3ddvqDNiE~l4m&rP`na!03{zx5F z2%Oow@O2Dp-9~{Nr%2`HKpnBf5c3$s+LvTSbTTKOeM>A|lT&Zut?Al>9r^{yB~Y!m zr?HatjH|q!=Mg~$`Ag#8i;Olp60?B&M(MsCMVPCc&bGq%jMLh zhh>>hvm+(ANwuip-0A3(Dn3njv)R;SRz0aidL-t`Ohr~AE@OLKDKowVgf~c5$GQs% z^fNy7+4tdXASm!iozC%N|^&Z=tw(C9sy-7gF8@#W)UI z2|elmR}wf3>E7@ba#4t-;=Jx~zAWV`M?K;E<4WYsPK$F{rkrbR0T#Z-x3{4T&#$9> ztD&9iZO%nelvZF{19PsISbH}!b`ydSH#Gns7!u&7<3QiWqq+_4smgOW;BQ&m7>c#I z4#G|~35X62!anWO``*LI?F?i60PHoFfduy52wGj8RO zy5vmBLRdik$z0X7s?J{uVWdS<^ubD#!-aq3Z(cQ+CCR8DS?~e!%R(7_iNBI8k*!5r z?up=-$Y>FZP^KdK9Ax`41#65}@7LM-B^y846|K)S>&Y&7wU3F|6X`9<`eI*n;Qv5$ zfkDr8cZt4RO0&BDlny}N&y^kM*+S;cAlFsHRb>aNI@6})jndVC&-Ahx@CuB%E`jF2 zZut%_G0rIUapp}^+h^l(u8kZuvXJM7mm_V?$1~m7F|XC5-93NJUvhyGE;=*190o4t zh2qwPP#m|1HnxN+y1uHew8|x``Kr)d7-%_h2fJX5Z>pYSe|CZx*DF{y0ktLzGJ*D; z4ykFw9(!bEarTXv1K9rlD4tF0)zt7x=yGcFxz@#0T}aMsZg^cwGaX&Y>T3E%&8Aj0 z@=49}3w|!`lq-!?$IYsicKkQ3O>OFxYcn?IcFx!#CWFZndVMt6*3h?Nv~$V*F}i>t z#*y(P9s_8|nl^MzZs<*59rp3>-+!bicY7)d&sQfrDV*djFnm}3&b79E|2oq^42+cPGsde*H-6+SxMS1IKB^9?7*!V)R?!@x!p7ZE zNWru~;j&nUlt%F(J)(#7e$Wp6+39f45&yJLXcH2Hy9kHPKb!U5Z^!qo|1A8)I}iDH VeZktt8`jTp)-29d2MPwi@DDN&CH(*Z diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/sticker.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/sticker.cpython-39.pyc deleted file mode 100644 index ccd8e0516b27b2f01f64769daea20d2d13f535ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2224 zcmb_e&5qkP5SA><^6&mS*`&D$C{VyavOZS`il8Xc21vI-ob;d?P-Jmz(`$(eN$++S zxi#0kK@Q0=&yly#u|4(D2k4>b3@vM&{-8xs8XOEqGsEG`$D!k1uWjM@(fKs~tzlU| z(PDeJxVVQ?eT#%y%wAfl9ojbWHRNky&F~KLPUslEzO1Ki=o;Q#Hc~J2Z0k#lHJJC( zVjkFwCOC`M5B0Fknj>q_`q@V3@9d&Ji4_d&qA}&LWQw?yf6p`Gx?jiY^pQ|pbCKb? z^=K}%81YL;(D;Ml;OZVu^$QZPLYrA(?J33{I#7S(zO}*zco;*A)$UrQq+Lp!O430| z7j^2Dq*qGZO0t8JUDRoiWZ}Xd^IqBEKJ1~aS!o@VzFU>#u#~h*yS}lz27R>aR9e@| z{kkZjSa2`adtGBYZ1-h7JTmLO*EZW{2e`h$4l$Sg!W(IxoPxakuI=M^GUv({lLaK& zmyks$rHVIm|PYgoce#_6$;v*AQ&HH>rqacN-G3vbGo5OG%Q z7-p66=PR>z&pFfcqA>?Po9m*(RTO7DjWsY?!+I31p0CnL;X*1Fyl5)WQ5L6A^inKv zl$RAQTE?%!`VMMEvl2HX=#|V8a)Md7Adj&i)h>a50_U3&R#FO=qC?Bu{v}9phb|PW z&Ku~994hU=4-gl@GtxPJkZG8Ke0HU~PITZuHVIe$6S)FkWWHJ@2`IItNM1j1_PG#C zh_fqa16v+qT}}p0;b7{*TU7P(z*Wg3o<%5^E!4!C*A*EB}UzkzPON0|)rk7xW7;>yo~e;+Tr&lz?P#5+h|OxIXj=jRFz24j`g z7Q{wc@@#emis1i57(z>4!*qv7>r++eqH|rr%9htr$-rq%s9hAhrOih76BKR$aI^uy zA9PLzH;ZOuT2~Ym?I=nGTVYF#if$A=U&TvmYPj;Eh>0YMBz36Jy-zQjfw&}?6peLO zirom?WF~Y>&znMZdX{B}Y`pSr$}Wj|WaX7NOnM~RA+k$kj|e{FmfR s@*VlcJU?Og3vr$;Ma<&K5{$>KXiRXX8qK@wRDMQxNl_lUcKLID2R>S0(EtDd diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/sticker_set.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/sticker_set.cpython-39.pyc deleted file mode 100644 index bf483814ec0606ba880c8c28676a5b0de7342eb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 940 zcmYjQJ#Q2-5cPiVZSF3R00OF$sIDN_&=5r^qJSm}NEaxql`P+Sxbxlada<2INecxH z{{hPUr7fY#U!Y>Vw}jZ*(es;`XV2KnN2843_!Ye5FML9NyT#oR;^G)TbBaa~;gy6E z;ftX3DxdnE!y)2;1|5#du!?BZ;kb;egeD$&OGF~luSBHauhTC99SCnurh^;QB&RnX z+H0>37u>+qYvWH6N?{NU-mjEZb9v?HWNu}#0bRJHyCcBGF@EM78X(jYg!&)ws5F4^ zNA#1>7?O1g1K}T$p2>P9xMg;b8DdO$%Zz#^a?E-RyCVMX(R*-zy$8Eb2*xIzCxZRX z^8ogdOOJ>cU~yTS^#`7Vy;@`w9A_(OCTg*U!cH_a8VuCdO!&lXOPd(52U!=ovbHgY zvss}u99Sq}sd;sv^m4XP*35V#pY=(Y(`B?_%`0dlD{Tqwjx>zdvf>s*J1$ghxvUMV zxY-!(I@YHD@-by~UM)_i58IS6C&E~pF;*#YUOGHv?DIJou diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/successful_payment.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/successful_payment.cpython-39.pyc deleted file mode 100644 index 419e5227d44245dcb9b85aff0a19c01829f05d55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 981 zcmZWo&2AGh5cXz&l5CUysa$$miBk?FXQ~SI1geBuq?XHSk>%KK;&j*E+TKXvgaqQo zg(rYxU&%)}@d}(6C)*UnSe_k!{$@O5&ywLVMIb-I=j1~Np`U*7w?wcwgK17cF~our zRY4vE-tK_i$vbO1EW;|wqX4}^EMoB|#9|&S;*VjTu;dDjy1xPla38p6N(>(bF1ZoB zWCpDMrDj~8%Ns?3@{feDI)iDxg5oF-7|J_uA&WfZ(YN?J$`jsQ^mw0jPEm`bfb0Mg zZjnLDiMGhFMPiREV!q3gFG0S?cfqf_W$m}D-WEA%k^U)SDO9!N4z3zXxiL3Q`G%}2 zF75lzX$EpV7ba8F1*bNnN?IbM$)I*YGXbUQiddm!My9H<8Oh8xOjd8=jMH_TxwW-9 znM|nCd~A8iXPQ)FrDv0=vSvbR@$}KRbzM8U9&NPdlCIpqDoaXCD%D8q_Jmw2K{*C? zsR(n2W-jVl$Qf3(PYMgBp%;)#m46xR^L57$XL~naC#G|vXB^1xxYlYZJoUf5i_xL$ zVJu0-F?K1&m10fl?E%Jj4Jq55F2+nzjJ0pLJbvk$LwCW}z6V@#Wi=$|_An+=LNz{5 z1N5G!ch9BeGp=>tJNSmyu~$1@4ZIqHx<~rR+g|;C$4-iRRcIoastQBrN|lAUygzH@W((^WE$Al`q%bvt~bLzOkMF(e+L@m-)i~TE-tY2w;SN0E65N A-2eap diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/update.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/update.cpython-39.pyc deleted file mode 100644 index 29ef7ed3860b667571f6e7aef6816101d069596f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3300 zcma)8TW=f372f4_#hWOSx?A=(36iKuq~@UoYPdoenze{flq^aKJP@!Raz^4xdtqjl zb|vI3e$8Jf+DE_k7xZ`RWAfzZKD9uAo-;d?NhJod1karLX7!{FweT z{cq7Qe!|Y|lY!0`hGEKogTf4EdWLTj(==F$rM;A&CTXQ-K+lkj(z9OH&yk$cb6(!J zh^6$rx8N5@LFtxP^h>0q^aZc%S4c(a1#i)>lB&N%mQ=s!)%-fCE4}13{AIEXdYM(c z6@Qhi`fFs(G@cl2kyT$Atjg1u>))rz1|UnU21t#sUTy+%kJbCecH<44!q_(BA`OBt zqLCX0@{I}DYctLasN^t~J9oLqBxvOp^}GQcUOk;~aSgyyYeb_1?hm*)9Wxqn24Jl< z3MCIZf#(MNn9GS50a{G@(>L=6TuOSuw^MQEDD=FzfU+6Lmt4T?>XG2B5g%TKlW6)% zxj%BpV>h@^z?&5AJQe3g+#7Qd7Z@K4KEyo?@ldl*8aiKK(EbER;|4LAK~kp>Jd);_ ze`Nn@kQ__#JWD?^c;+(8EtdJgBnvDHSZ)q0C@epR6%}U9VI_qvXsoR4RagP+6*ab~ zuqrD7R@T^(!fLDn*rLYj3Tr?p^K40D%L-e8VCGp}W2*{VV-3KTHMXv>4YmTU`I zc8{$Awmye#DQx4B!8X~wR|dJyw%C1WAFv0IDt4SpLVWYDf(_5f$dz_Dxa7mg7U+5i zc_eKb*lsWkeF&31Q7N&brZ*$o4`pPB0k^|*I~qYV#&n~eJ*I;CJmNyyLwJ9{ZEX%r zfx&D0!hOMmTXV|ZD2m4N;qLA*6nrP*9=`w^JE6GP9fXnGrDON~WO+6Fri8h?(+MJe z0lBh}3^^_nSkD3q-H7vkl96$RGZ(VRnf6P=5mX2FoG~0AuItfRP#|Z-C0Av<^DP#K zSU{*TRHfkP5pWU|gUI7hWvFXO&tFua)G4mP3W7E8hBMT~pa)7gkQqbCh%%~0R2{0y zM_9^~e+@6u2#$f}85d_dL#*)WgF60OSRgr2zB4Y3J`h0fwJ93Ve+^V1xp)5B5FbMK ze^1%Nv+?zrpaBd0GYLlwy)*ZUQ%4R39YZmm?LfR)3Lf5tSpy!388%wqf2Zo+kM-9s4c27Vp8U;(Zh!pg?lur{jz06+b zNFG?#0#;qnZ9%t1-IjD))@?<%i@L4qc1gE2-PU#6(Cso`xm?AImu28;%l?oeYkZyM zSpJpqy-7Bh1-!KoSDKy|zT_;4v!o5kcEt+&>gKS|Lt#TL;uI%IN%@wNkb*9Fq~8TL zVz%VbH+%qDe`Nz}jY1}O3d-KIaH0roBDwwHr}if{82%1ujtd%vKyJ8@Pp`NQ{5Ws} zb=x8t>cus|O|7;6M*XqJA1c$xxO;nhHjvv6Y-hU9kMHdJFY`y;IcWF$%_nWx%AJAs z8G!g=?$FvTx`1`|S2_47GEch}D|eoleYyD*jzO6q3i&Ia_9-u9;WJ(~Cg z#iuAfL$L&c6p~y#2pJ~@89xhxcd<03UwcqUZ+Fj@9 zuzy18dUOsf&4yL{0hg_`n%(Y~&DK{*tVyN6-#I$!^q%N`?dZ7ewD#MruMSU7G?qC! z>~={JrPJ*7ziA(n%E2?3)jWZGI`|U$#hH$%;X)gaZ@htkd zSqIk@4kz^`{)m2hOXY9bY!?R5i4q-anHkGUS>`)_sf?LQ<$liPQl`N7dfQt_@8^?f z0{5#U@Yab9k%dNadP2fT$D}@Uck0q(3GFJ%R^+W{ToJlrdd2yQs1;=^wpI+TxLmQi zy79A<$c41VBuG3}Inf_8hw9r(5irRm>7n-hYmSJmN69s{hc~&zU6oQLbM{wNy=uC) F^?xc3Le~HQ diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/user.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/user.cpython-39.pyc deleted file mode 100644 index 57432e2fd017f7e8c20f2c52f3e901bd8c6f13c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3178 zcmb_eUvtw&5Z6hvEX#Ic!XHBdRHYPfr#LPBL&?yVp`B1>n7}kJovLOO#do%q$dY<@ zhQSk_l2<-K+Zpnh&(Uw8$Mz{-frn0aPmU6jv=5!iqxJ6H-tOM-cJ~z2>y8G`AI7b~ z1MW{04n8IbcQlQN9xzm+B+`b&BLsOp(uam;DBg%n&!i?TMWvzTSukc&3;42E2EI(~ z$R1X_isCDgGpu@5qTSP|L#taFtukw^wrO~EYAkE5+Ac=WB3U(v<3t8BOkx3|{V+u~ zh?aIqu3)YPg29Z{3t2?PuAUFu!+@{T`53oLz`;$6um;v(b+BHon~j~ z96e7jywd4adXc`fML@SnuThu23-f2`CHmf$=AEOL>HF|MOV7eVv@-LFV0_FR7oNw1 zP`JtJ8tY1zBdCJKQn-Qpm_@A5gP}VDWjEpOY9iZ?S~HL`6$|t8-GsBYoanU^-k%2@ zF(0Jid$>sHj%#?D?fbE0ea16Aq?3`mNfNOj&a6=QuxwmaddrfBaX)i~la))b>O zO}G?(7)N2u{GUgRhfH)a0rwuvIs@Ksuud)lv!ShNF9}e>XEz8{TvNM=V+3H;$BSyi z256h$t^>?S>h9rS!vC|ndqGI58HfY1=!K{zayEEXU>4*||q2DysJG3tgns_q~V zZk!aB@=W~~knaG<(-5%Q^bX;tkw;i_au&F(Jc*?Rg0O&SwnZE=t|>$&ljFI)4))V( zu*#ygDvJk6H;C9%Y-4$-M_?<1IR)DSFbJD)C_p74v8cYOi;tv^oHW+VwbGh}8q}cX zD}581vn=OYka(r>qXMUUkZ==7BNf0gFf4STpv1z;kziK}GfP?7&)2^p*I^5WU}?+d z4G1(V1JHq#JSz(ZT^yK_vXq&)Z_mm%o|V#o3zn6k1W<|3!rH^|TDgzUU`nV93o_0G ze9x0{RUw?uA3?52xEid?Q|%Y+Hyw*`XlE_Jc+_a5Z&PElv|Jun+O)kYe>j3)xkVDkT3--cM$b$*%ZFLh`TsB;5!3}_HK z|5n1?vw=;++J;C$D(_1zV<|HSau_{s*_i>|&~p@g{t%m6DN3F*uJV*)VS1$jbggxM z4fxDNwq>aF%}lHzuN(*;jU9%&3TFXLP*v9=tQFW^G~yCdx1rKato4S%;DF+IaRnvB z(@%NQ3nS*IgG44`#l@RrBq`p)AG#@YbHOnCT(#nm@-D)NH@A?`gCh2fMMqFBfy(dL zZn5|f-Ped0V7Z}h8~5SkJx}+hF}r1VqNoBA~Z*juZuUVwIxU zrx3hlE%$sCogSC}w(mnN4}9M{;IFRy?allTUdle)veNgT9&nQP&&dQ7?Nag1We^o+ zvF~S&kNH1>g!8kS50`WhO=iF*O}f6%aj#x!5x*1Fp=Z;+f8g^HG_XbNU#5A-$3DhS zAeljO5=dqPyl`R4{1W7IIB^9DRvB+2sUX3G;Wv?df#epF{S#FjW-rHnhIhF59Ed~A zQiB}&={j+$`P-<$zu`DKf!|-ISu-5NHk6Il6yneu!EFaPaBNkX1-CYQC2=e%ehEi3 zjyHvlZ={4QfYefBw FzX7*V|CRs% diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/user_profile_photos.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/user_profile_photos.cpython-39.pyc deleted file mode 100644 index 26bcbde181d4ce9be8f96dc6fa24a40ad460c79f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 789 zcmYjPJ8K*<5SI4sJwLEJcMB=P6}hWpOfVrN1dMI4-H0VZw;JE+yti6QI)mLNW%3`A z(tl~or1D=#mC^1&JVL`a8h!JU#LiAmP=1GR#dk``A8)*r2#pim_B|>|B&`V}GLT_S zR{;yC#}VR?g*}ezXce=Vl21e?GW|wm3c)h@8nRTZvWbXxiI=h)zD|Qk1j7zt`^D`dbWhh6$V-Z78+NG zVvYA-+oByPMXM^eM&~5&SqtY{do-O^+Q7s?4Ra$_6K&?xnRa$6TJ_2Y*sxpQs_lv0 z$Z02PUg>q?jPJBd2KU)`ugf@Z#0og?a?V#;u4|9CIlo(rdgDnsm%8HI#7JiGM?X-L zAvXRES^BwgFbC7^aW0w$lR2du%Q+jJD(lW~ytXFsge_EE;vQPn%)7`to`~7^9 zkw<0wP#V!ly((?B(7G2A54l#eBss?lhY_Zp#9l6GkbW_4IK@A<~@yD{4ag&Z1-w2_4EGidgA}u X2Xx@0WXHoG-}$d-eZDN%rntg?RJGD< diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/venue.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/venue.cpython-39.pyc deleted file mode 100644 index 961aea638911c70ad63ac4f9c367f599113014c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 864 zcmY*Xy>8nu5GJi(%XXX;>DIwOCl9sf8bOh%U4pbg(iRW|5VUx)<;bE+(gEDHUAy!N z+A*)hv7Pz~oqCi7H93NZyN{nv_s2)0grNNLUh-!>LVi2vq4?;WFXr=HDwr84VWs$XCe>=blt#~aT|95-4O!txh>gp(K{hajDZxfu z2#l`n=tl08{5V>V%IE5!~! zVRpzEMlRczh%q5^#+2KLGJ{#;Z!2W{?_bv3qg@wBeOeMYU3Whq!H1 z1E+>gjZobab?R)V{=O57tlnpeS3+(xov)=Vv*H#w)4Aex4Jw;qf9|r2Vwvf}z>Ava zw|oUU$h9f1DX1weJ-TiO^tPF5 b!~UP_!Fq~eZG3iU+bg%_+Wl@w@p%6L#J$}T diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/video.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/video.cpython-39.pyc deleted file mode 100644 index 51b1bf6d7a692eaf7e2e91f86ce53d857975e5ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 979 zcmY*Y%We}f6!m1DnI=ssm0%f(RTd;`stR?1Kp<2qwXm>8vYhxf<8)>`wVjrB3tKjP z0WA9ie2kZ{;ulz9yF&n5J~}>ge8;}mro&;5Z2KNQp`UvQ{cw|iTWlwXcBoet7-B(% z>Hr6U<2}oJxaWCjd5A;LqbjOn90%wHVlhiTB9=g~N+4XNA0nKw^aM?^pMec{8<=QL z6-)w?oN=g_a;)a>dE;3BxD;BP@EcfI^M5V0vqL-7Hw%Dpz!2`ewfn;%L|@{s2q%!P zGU&730qT^zQ^Jk1WtD;TL>pz;De*?x?v%tSs~AQs{S@FG7}<5%#&xfY-QOs?osw^q z`(3211H=Y42SXFT;|#=2k&kUVEx8(t`3e?#ETNU4pwVhf$Cu7DKI0WkbMGv*Zq@#5 zwh$7g8Y);yT2F;s&gMd^8EyF^zs8$Q>Q)lY%(f@%hF`4xJig*gmnJEJFH3DQww6?L z(MWp{kcoAUAAVTV$%w8(c~vk!CbLAXKjmI z6gbP*;|JsWqjBa`7hTut{mEn|6^y$rdo0y_GL@a4uvXl0`VDTxePH4{cC z;(X=iQ3cJsTbP8e6zha+6xN@Zuv@I^sYxAMqxDClnU7S13tMpVIRc ztF|jKrCiP^RRPKr;Zs{ql^|BORwg>`lxXH=mr~Z?_S`Qu(o;*Zm#~PRHyzADsU4e& zZ0OrCz;H#>p2ar&I_3Lidr>OZa9Njnwve(a#am!h&lFk*svNJOS(h)xwA7-5do7#2 zMZ0y$gtP`vx{DU{#Cb)nS>yIX#i(tE9%9J6AiU*m`kv?3jz+23oW`9|*|$+-t-Yhv vI_0)p4F44Il`DSHe=OfMm1Nu&+3EZ}$p+m<9g`eve0^l!g|@!+J=gu;w9NFC diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/voice.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/voice.cpython-39.pyc deleted file mode 100644 index 5a5b430c451c682c1a4d110f59795b12303a57f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 790 zcmY*X&5qMB5O$j1hIUu%6GY$jmdrl4-zqbSt3d+M-5$ z6s@i>|DX97UE-r_bU+G^lVbD^+bDbpzJy;%5kb63V9ZAgGBD}D_($duG85DUM`k)` z!XtAsXrcw-F*ci+@VyijJd|mMcC!{blgkZMeWsvOprP$`#l{- z=ap12@1cg3V$EEtRlbzH&RHj(xEd!m@vW$V3T{pu*tX(+>*9oO73+m;&A1T_(0<>6 z89R{{4{$X*H3_9H!xS|srH$lU{1P=2O7FL<9x^edTvn7SJINw^VF#`v#A<}jMAy9% z?aG`|%33^x+fk!Dwvxow#IM>OR-n|_QueldBkHlm*8P6V&&zIKD%Nt@l)73=S(oAt z7}b?xT?eY1@1Wh4uf?*|qKBs)tM1qebjgIYv&rqzbnb>S@Ak@GIoqM0pi8|VJo66A zWv*tiIW+H%qyiKbCpW{K-?%?iOrFaRZ7msR%NktS-;NLH49iTiI85!r-b-!woOrnW EKZTFXl>h($ diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/voice_chat_ended.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/voice_chat_ended.cpython-39.pyc deleted file mode 100644 index f0c4312073843e7adcd99be2f40b9c659d6cc367..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 706 zcmY*X&5qMB5O)4c)Gn_O2`)X*oLQ|_D*=m;&~jkmU?N#gJhbj6cCg(-xx$@SfFrMz zBb;~zPK@1^fQdZ$JmdN1$L5PgNl<77QZk9Sw>UZatrv+-%99(^=ObEq_Q3Q z|C0oF7r5+wR6uAX2#sH188m_PYxa%M9E$A>?uht|hy;_Q)5&WsJ9xC=?uim0K7J`H zlsC8k^HJUlES@BAgs5pIc7{8t)zz|`W{fF50Ao|h*r3I( z_ju0OyB+UuJq2SzcZ?Z74w_y1shJ$HiM^qCrW~xnOm`XMN@*9!Eo0w_nfp^-{eB}( zoAJ;Xu7n;M+ikS&8+ikq+0O8B1kcrfzr1}9=0F17Ehc83vc9a>_( zCl;DojR)hOi7&{esLCkKgXL;jOvf5S<;FYd$@T4^UWCh_^T+zV>NOX9?kZ^-&w^9aA>4~xjW@&Et; diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/voice_chat_participants_invited.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/__pycache__/voice_chat_participants_invited.cpython-39.pyc deleted file mode 100644 index 7dcba26cae2cd7097e06f1165cdad5c095e9bd9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 826 zcmYjQO>fjN5OqE_n+kg#;cWNS6~x9udeybV5XorAPhaPg>USa>3nuZk()T$Ca~h)ml0bUw>seu8W1VxvrK_ zyWBu$zyjvvJjZ6%csg&vT0V!IS9;}g1veOJD=;>fTcX@)Okev_d5yJZ*+9H-uCvEQ zQELM;2Mx>(Z)e)fi%L6N@J>D%&iEtUUVA&%fx~$9{b+@~*z@VVK4nbt78vU@##${_ zjmHO!U9Whv+Zi(^bj_IYS4$^n(z@4v*k+8rnRvp)Z91vuee5^;`;2j=wBt@{Wf{9A z=7CT3=I>G*m))i`TnXKlwq9u6l=2EVv$f$}2d12@L9NR(S(O&&`mE#i70%0+Txu`5 zz+zyFK`ZlO*}ht~lRN7+CdGojKO3XTf;br>)65*9-xK4*gDR8wK&~yZOEw pE|MO+(l@HnT=1%af#tuXEqdq~(v$5BU-+-n`X40?4}#%|{sCR8;2*K5(nG6(sG4&;0i}x zDMvW<6*w`@F3^cQnHhV&nfYunpBDt>XY@kIfRJC_c`PwHm$>W|DoJF}l8!JE5E;s- z4Z4tplO3ZSv1qcBHtrIZ1mq2osm#6*nL&7$evVis^Bb}_c|a_(2*z9r2TpbHfTevP zUJDEOPd_MVrS*|p3#RtxA4`PJB`*6E6%ZCk!opkZjztiEOTH79LI$}EFNln=Vmv;1 zuT>4N8sTp02IRH{`RQvxQC5wzRIl%#cGSRNz(VgV6%-5aFo$+vt=Iq+YrSVo=W}BoFitXUZH4>x6OK zvva*T8FS8i(E;aU!Fi{B^JvdF|F{+HaVO(k>Y8(tAR}!48dFzD?3L%yD-}LG?m*>^6uZ-xW?kem_>$Xz&Ah@lK7zQxaatHmcdaKrzRSupH zqP|CJY$cTTVOJcYAZrp2jk`%4Y`06f!q4yp z{7a5-;uknEb}IoRdGb7&dGp3LoSiKh*^l%&JmZZ044Z##Mw?4o?kPFN6z^EiOU?sM z2q$I2*=wd!m3?I@L%vNh*=Ap|a;9cCY(4))tZdDvtOkelo%i~a9$Z7w|16|k(sJkI zkd<7qGEuxtRYElBbpFoh2CrK1Hy*4<_4)f!klnW02~%&e@xtP0(c$2o0O8Q?sY3MV z9BfcPZFZjG`@ka_A`_ex^mj%lM$Lb zn%`BRO;A|)!-%ek(qzykPvY|NU^8kIuG|H%;MqJzuGjO4*(8Wa$(4_8Pt(4Q=U%Q} hnfswLprGzBR{T|bMB$N5ixgOmp;Z9Cs z!d>p=PT|I`V|5>OFZLYrmhcu2z7igQyYjzyaf>^bWZb?(F1fgKP>!A2pD_*i4dxl- zT&LE#zdSTf@zp<30Erz=V)p}X9edz^Z~Y)~0PR%=y4*b>4H6>KL&V!5eMAO`_&elY z!)oo2VG|SVko!$cdxtz|VmcdSgu6e4gVmvpdqOaO_k{2eFWIYmS1?;jd3`44^7A^3 zaJ`nouuSMELrfLSWKu+ICMy$}B}8eZ6bKV(!%U?kIgeO$yG=3)Hwl);l=^r&O{Ic~ zfgBc!6%(lz)0s4S%F66%L$Et+D79CqygphoP18ynSv$g4AciD2%d=rtxAqI zO=Tra9cCqEoGZ|}9_CCN3Q9>uZAd-Z0}6~_3#f+$`-EH}AhmZw7Rz&a3%tpzFUCi8 zhf=``ptKGtEhMjUtM@7WSh2kEv?=8>rBvBLi(7B(NT>jHWyhcnE{(#|)ACTl^PMk8GqB zf3Ns)Qmzxl1eZmkQ*3FTWY@r`P8BOlP|4&5#7%OZ%@Um%cviCX8jGS6mPy;6Ddq+} zZ5l&uXC~!ZwJ^IqwjQAf9ltel_MeS^9H>L|*4yiEi*oOM)Ax6?6_$Gw_y4?G?Xe|w TPPRpUX@4|ri`a4dPT%_nHpLN@ diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/animation.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/animation.py deleted file mode 100644 index b08089c1..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/animation.py +++ /dev/null @@ -1,24 +0,0 @@ -from . import base -from . import fields -from . import mixins -from .photo_size import PhotoSize - - -class Animation(base.TelegramObject, mixins.Downloadable): - """ - You can provide an animation for your game so that it looks stylish in chats - (check out Lumberjack for an example). - This object represents an animation file to be displayed in the message containing a game. - - https://core.telegram.org/bots/api#animation - """ - - file_id: base.String = fields.Field() - file_unique_id: base.String = fields.Field() - width: base.Integer = fields.Field() - height: base.Integer = fields.Field() - duration: base.Integer = fields.Field() - thumb: PhotoSize = fields.Field(base=PhotoSize) - file_name: base.String = fields.Field() - mime_type: base.String = fields.Field() - file_size: base.Integer = fields.Field() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/audio.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/audio.py deleted file mode 100644 index 1657c9cc..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/audio.py +++ /dev/null @@ -1,21 +0,0 @@ -from . import base -from . import fields -from . import mixins -from .photo_size import PhotoSize - - -class Audio(base.TelegramObject, mixins.Downloadable): - """ - This object represents an audio file to be treated as music by the Telegram clients. - - https://core.telegram.org/bots/api#audio - """ - file_id: base.String = fields.Field() - file_unique_id: base.String = fields.Field() - duration: base.Integer = fields.Field() - performer: base.String = fields.Field() - title: base.String = fields.Field() - file_name: base.String = fields.Field() - mime_type: base.String = fields.Field() - file_size: base.Integer = fields.Field() - thumb: PhotoSize = fields.Field(base=PhotoSize) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/auth_widget_data.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/auth_widget_data.py deleted file mode 100644 index 6353e239..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/auth_widget_data.py +++ /dev/null @@ -1,49 +0,0 @@ -from __future__ import annotations - -from aiohttp import web - -from . import base -from . import fields - - -class AuthWidgetData(base.TelegramObject): - id: base.Integer = fields.Field() - first_name: base.String = fields.Field() - last_name: base.String = fields.Field() - username: base.String = fields.Field() - photo_url: base.String = fields.Field() - auth_date: base.String = fields.DateTimeField() - hash: base.String = fields.Field() - - @classmethod - def parse(cls, request: web.Request) -> AuthWidgetData: - """ - Parse request as Telegram auth widget data. - - :param request: - :return: :obj:`AuthWidgetData` - :raise: :obj:`aiohttp.web.HTTPBadRequest` - """ - try: - query = dict(request.query) - query['id'] = int(query['id']) - query['auth_date'] = int(query['auth_date']) - widget = AuthWidgetData(**query) - except (ValueError, KeyError): - raise web.HTTPBadRequest(text='Invalid auth data') - else: - return widget - - def validate(self): - return self.bot.check_auth_widget(self.to_python()) - - @property - def full_name(self): - result = self.first_name - if self.last_name: - result += ' ' - result += self.last_name - return result - - def __hash__(self): - return self.id diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/base.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/base.py deleted file mode 100644 index 4da3e9f4..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/base.py +++ /dev/null @@ -1,300 +0,0 @@ -from __future__ import annotations - -import io -import logging -import typing -from typing import TypeVar - -from babel.support import LazyProxy - -from .fields import BaseField -from ..utils import json -from ..utils.mixins import ContextInstanceMixin -if typing.TYPE_CHECKING: - from ..bot.bot import Bot - -__all__ = ('MetaTelegramObject', 'TelegramObject', 'InputFile', 'String', 'Integer', 'Float', 'Boolean') - -PROPS_ATTR_NAME = '_props' -VALUES_ATTR_NAME = '_values' -ALIASES_ATTR_NAME = '_aliases' - -# Binding of builtin types -InputFile = TypeVar('InputFile', 'InputFile', io.BytesIO, io.FileIO, str) -String = TypeVar('String', bound=str) -Integer = TypeVar('Integer', bound=int) -Float = TypeVar('Float', bound=float) -Boolean = TypeVar('Boolean', bound=bool) -T = TypeVar('T') - -# Main aiogram logger -log = logging.getLogger('aiogram') - - -class MetaTelegramObject(type): - """ - Metaclass for telegram objects - """ - _objects = {} - - def __new__(mcs: typing.Type[T], name: str, bases: typing.Tuple[typing.Type], namespace: typing.Dict[str, typing.Any], **kwargs: typing.Any) -> T: - cls = super(MetaTelegramObject, mcs).__new__(mcs, name, bases, namespace) - - props = {} - values = {} - aliases = {} - - # Get props, values, aliases from parent objects - for base in bases: - if not isinstance(base, MetaTelegramObject): - continue - props.update(getattr(base, PROPS_ATTR_NAME)) - # values.update(getattr(base, VALUES_ATTR_NAME)) - aliases.update(getattr(base, ALIASES_ATTR_NAME)) - - # Scan current object for props - for name, prop in ((name, prop) for name, prop in namespace.items() if isinstance(prop, BaseField)): - props[prop.alias] = prop - if prop.default is not None: - values[prop.alias] = prop.default - aliases[name] = prop.alias - - # Set attributes - setattr(cls, PROPS_ATTR_NAME, props) - # setattr(cls, VALUES_ATTR_NAME, values) - setattr(cls, ALIASES_ATTR_NAME, aliases) - - mcs._objects[cls.__name__] = cls - - return cls - - @property - def telegram_types(cls): - return cls._objects - - -class TelegramObject(ContextInstanceMixin, metaclass=MetaTelegramObject): - """ - Abstract class for telegram objects - """ - - def __init__(self, conf: typing.Dict[str, typing.Any]=None, **kwargs: typing.Any) -> None: - """ - Deserialize object - - :param conf: - :param kwargs: - """ - if conf is None: - conf = {} - self._conf = conf - - # Load data - for key, value in kwargs.items(): - if key in self.props: - self.props[key].set_value(self, value, parent=self) - else: - self.values[key] = value - - # Load default values - for key, value in self.props.items(): - if value.default and key not in self.values: - self.values[key] = value.default - - @property - def conf(self) -> typing.Dict[str, typing.Any]: - return self._conf - - @property - def props(self) -> typing.Dict[str, BaseField]: - """ - Get props - - :return: dict with props - """ - return getattr(self, PROPS_ATTR_NAME, {}) - - @property - def props_aliases(self) -> typing.Dict[str, str]: - """ - Get aliases for props - - :return: - """ - return getattr(self, ALIASES_ATTR_NAME, {}) - - @property - def values(self) -> typing.Dict[str, typing.Any]: - """ - Get values - - :return: - """ - if not hasattr(self, VALUES_ATTR_NAME): - setattr(self, VALUES_ATTR_NAME, {}) - return getattr(self, VALUES_ATTR_NAME) - - @property - def telegram_types(self) -> typing.List[TelegramObject]: - return type(self).telegram_types - - @classmethod - def to_object(cls: typing.Type[T], - data: typing.Dict[str, typing.Any], - conf: typing.Dict[str, typing.Any] = None - ) -> T: - """ - Deserialize object - - :param data: - :param conf: - :return: - """ - return cls(conf=conf, **data) - - @property - def bot(self) -> Bot: - from ..bot.bot import Bot - - bot = Bot.get_current() - if bot is None: - raise RuntimeError("Can't get bot instance from context. " - "You can fix it with setting current instance: " - "'Bot.set_current(bot_instance)'") - return bot - - def to_python(self) -> typing.Dict[str, typing.Any]: - """ - Get object as JSON serializable - - :return: - """ - result = {} - for name, value in self.values.items(): - if value is None: - continue - if name in self.props: - value = self.props[name].export(self) - if isinstance(value, TelegramObject): - value = value.to_python() - if isinstance(value, LazyProxy): - value = str(value) - result[self.props_aliases.get(name, name)] = value - return result - - def clean(self) -> None: - """ - Remove empty values - """ - for key, value in self.values.copy().items(): - if value is None: - del self.values[key] - - def as_json(self) -> str: - """ - Get object as JSON string - - :return: JSON - :rtype: :obj:`str` - """ - return json.dumps(self.to_python()) - - @classmethod - def create(cls: typing.Type[T], *args: typing.Any, **kwargs: typing.Any) -> T: - raise NotImplemented - - def __str__(self) -> str: - """ - Return object as string. Alias for '.as_json()' - - :return: str - """ - return self.as_json() - - def __getitem__(self, item: typing.Union[str, int]) -> typing.Any: - """ - Item getter (by key) - - :param item: - :return: - """ - if item in self.props: - return self.props[item].get_value(self) - return self.values[item] - - def __setitem__(self, key: str, value: typing.Any) -> None: - """ - Item setter (by key) - - :param key: - :param value: - :return: - """ - if key in self.props: - return self.props[key].set_value(self, value, self.conf.get('parent', None)) - self.values[key] = value - - # Log warning when Telegram silently adds new Fields - log.warning("Field '%s' doesn't exist in %s", key, self.__class__) - - def __contains__(self, item: str) -> bool: - """ - Check key contains in that object - - :param item: - :return: - """ - # self.clean() - return bool(self.values.get(item, None)) - - def __iter__(self) -> typing.Iterator[str]: - """ - Iterate over items - - :return: - """ - for item in self.to_python().items(): - yield item - - def iter_keys(self) -> typing.Generator[typing.Any, None, None]: - """ - Iterate over keys - - :return: - """ - for key, _ in self: - yield key - - def iter_values(self) -> typing.Generator[typing.Any, None, None]: - """ - Iterate over values - - :return: - """ - for _, value in self: - yield value - - def __hash__(self) -> int: - def _hash(obj) -> int: - buf: int = 0 - if isinstance(obj, list): - for item in obj: - buf += _hash(item) - elif isinstance(obj, dict): - for dict_key, dict_value in obj.items(): - buf += hash(dict_key) + _hash(dict_value) - else: - try: - buf += hash(obj) - except TypeError: # Skip unhashable objects - pass - return buf - - result = 0 - for key, value in sorted(self.values.items()): - result += hash(key) + _hash(value) - - return result - - def __eq__(self, other: TelegramObject) -> bool: - return isinstance(other, self.__class__) and hash(other) == hash(self) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/bot_command.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/bot_command.py deleted file mode 100644 index 39e38e4f..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/bot_command.py +++ /dev/null @@ -1,15 +0,0 @@ -from . import base -from . import fields - - -class BotCommand(base.TelegramObject): - """ - This object represents a bot command. - - https://core.telegram.org/bots/api#botcommand - """ - command: base.String = fields.Field() - description: base.String = fields.Field() - - def __init__(self, command: base.String, description: base.String): - super(BotCommand, self).__init__(command=command, description=description) \ No newline at end of file diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/bot_command_scope.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/bot_command_scope.py deleted file mode 100644 index cb9bc78e..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/bot_command_scope.py +++ /dev/null @@ -1,121 +0,0 @@ -import typing - -from . import base, fields -from ..utils import helper - - -class BotCommandScopeType(helper.Helper): - mode = helper.HelperMode.snake_case - - DEFAULT = helper.Item() # default - ALL_PRIVATE_CHATS = helper.Item() # all_private_chats - ALL_GROUP_CHATS = helper.Item() # all_group_chats - ALL_CHAT_ADMINISTRATORS = helper.Item() # all_chat_administrators - CHAT = helper.Item() # chat - CHAT_ADMINISTRATORS = helper.Item() # chat_administrators - CHAT_MEMBER = helper.Item() # chat_member - - -class BotCommandScope(base.TelegramObject): - """ - This object represents the scope to which bot commands are applied. - Currently, the following 7 scopes are supported: - BotCommandScopeDefault - BotCommandScopeAllPrivateChats - BotCommandScopeAllGroupChats - BotCommandScopeAllChatAdministrators - BotCommandScopeChat - BotCommandScopeChatAdministrators - BotCommandScopeChatMember - - https://core.telegram.org/bots/api#botcommandscope - """ - type: base.String = fields.Field() - - @classmethod - def from_type(cls, type: str, **kwargs: typing.Any): - if type == BotCommandScopeType.DEFAULT: - return BotCommandScopeDefault(type=type, **kwargs) - if type == BotCommandScopeType.ALL_PRIVATE_CHATS: - return BotCommandScopeAllPrivateChats(type=type, **kwargs) - if type == BotCommandScopeType.ALL_GROUP_CHATS: - return BotCommandScopeAllGroupChats(type=type, **kwargs) - if type == BotCommandScopeType.ALL_CHAT_ADMINISTRATORS: - return BotCommandScopeAllChatAdministrators(type=type, **kwargs) - if type == BotCommandScopeType.CHAT: - return BotCommandScopeChat(type=type, **kwargs) - if type == BotCommandScopeType.CHAT_ADMINISTRATORS: - return BotCommandScopeChatAdministrators(type=type, **kwargs) - if type == BotCommandScopeType.CHAT_MEMBER: - return BotCommandScopeChatMember(type=type, **kwargs) - raise ValueError(f"Unknown BotCommandScope type {type!r}") - - -class BotCommandScopeDefault(BotCommandScope): - """ - Represents the default scope of bot commands. - Default commands are used if no commands with a narrower scope are - specified for the user. - """ - type = fields.Field(default=BotCommandScopeType.DEFAULT) - - -class BotCommandScopeAllPrivateChats(BotCommandScope): - """ - Represents the scope of bot commands, covering all private chats. - """ - type = fields.Field(default=BotCommandScopeType.ALL_PRIVATE_CHATS) - - -class BotCommandScopeAllGroupChats(BotCommandScope): - """ - Represents the scope of bot commands, covering all group and - supergroup chats. - """ - type = fields.Field(default=BotCommandScopeType.ALL_GROUP_CHATS) - - -class BotCommandScopeAllChatAdministrators(BotCommandScope): - """ - Represents the scope of bot commands, covering all group and - supergroup chat administrators. - """ - type = fields.Field(default=BotCommandScopeType.ALL_CHAT_ADMINISTRATORS) - - -class BotCommandScopeChat(BotCommandScope): - """ - Represents the scope of bot commands, covering a specific chat. - """ - type = fields.Field(default=BotCommandScopeType.CHAT) - chat_id: typing.Union[base.String, base.Integer] = fields.Field() - - def __init__(self, chat_id: typing.Union[base.String, base.Integer], **kwargs): - super().__init__(chat_id=chat_id, **kwargs) - - -class BotCommandScopeChatAdministrators(BotCommandScopeChat): - """ - Represents the scope of bot commands, covering all administrators - of a specific group or supergroup chat. - """ - type = fields.Field(default=BotCommandScopeType.CHAT_ADMINISTRATORS) - chat_id: typing.Union[base.String, base.Integer] = fields.Field() - - -class BotCommandScopeChatMember(BotCommandScopeChat): - """ - Represents the scope of bot commands, covering a specific member of - a group or supergroup chat. - """ - type = fields.Field(default=BotCommandScopeType.CHAT_MEMBER) - chat_id: typing.Union[base.String, base.Integer] = fields.Field() - user_id: base.Integer = fields.Field() - - def __init__( - self, - chat_id: typing.Union[base.String, base.Integer], - user_id: base.Integer, - **kwargs, - ): - super().__init__(chat_id=chat_id, user_id=user_id, **kwargs) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/callback_game.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/callback_game.py deleted file mode 100644 index 4cd0d5f5..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/callback_game.py +++ /dev/null @@ -1,10 +0,0 @@ -from . import base - - -class CallbackGame(base.TelegramObject): - """ - A placeholder, currently holds no information. Use BotFather to set up your game. - - https://core.telegram.org/bots/api#callbackgame - """ - pass diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/callback_query.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/callback_query.py deleted file mode 100644 index 5eeb2f0c..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/callback_query.py +++ /dev/null @@ -1,64 +0,0 @@ -import typing - -from . import base -from . import fields -from .message import Message -from .user import User - - -class CallbackQuery(base.TelegramObject): - """ - This object represents an incoming callback query from a callback button in an inline keyboard. - - If the button that originated the query was attached to a message sent by the bot, - the field message will be present. - - If the button was attached to a message sent via the bot (in inline mode), - the field inline_message_id will be present. - - Exactly one of the fields data or game_short_name will be present. - - https://core.telegram.org/bots/api#callbackquery - """ - id: base.String = fields.Field() - from_user: User = fields.Field(alias='from', base=User) - message: Message = fields.Field(base=Message) - inline_message_id: base.String = fields.Field() - chat_instance: base.String = fields.Field() - data: base.String = fields.Field() - game_short_name: base.String = fields.Field() - - async def answer(self, text: typing.Optional[base.String] = None, - show_alert: typing.Optional[base.Boolean] = None, - url: typing.Optional[base.String] = None, - cache_time: typing.Optional[base.Integer] = None): - """ - Use this method to send answers to callback queries sent from inline keyboards. - The answer will be displayed to the user as a notification at the top of the chat screen or as an alert. - - Alternatively, the user can be redirected to the specified Game URL. - For this option to work, you must first create a game for your bot via @Botfather and accept the terms. - Otherwise, you may use links like t.me/your_bot?start=XXXX that open your bot with a parameter. - - Source: https://core.telegram.org/bots/api#answercallbackquery - - :param text: Text of the notification. If not specified, nothing will be shown to the user, 0-200 characters - :type text: :obj:`typing.Optional[base.String]` - :param show_alert: If true, an alert will be shown by the client instead of a notification - at the top of the chat screen. Defaults to false. - :type show_alert: :obj:`typing.Optional[base.Boolean]` - :param url: URL that will be opened by the user's client. - :type url: :obj:`typing.Optional[base.String]` - :param cache_time: The maximum amount of time in seconds that the - result of the callback query may be cached client-side. - :type cache_time: :obj:`typing.Optional[base.Integer]` - :return: On success, True is returned. - :rtype: :obj:`base.Boolean`""" - return await self.bot.answer_callback_query(callback_query_id=self.id, - text=text, - show_alert=show_alert, - url=url, - cache_time=cache_time) - - def __hash__(self): - return hash(self.id) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chat.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chat.py deleted file mode 100644 index 2cd19a0f..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chat.py +++ /dev/null @@ -1,884 +0,0 @@ -from __future__ import annotations - -import asyncio -import datetime -import typing - -from . import base, fields -from .chat_invite_link import ChatInviteLink -from .chat_location import ChatLocation -from .chat_member import ChatMember -from .chat_permissions import ChatPermissions -from .chat_photo import ChatPhoto -from .input_file import InputFile -from ..utils import helper, markdown -from ..utils.deprecated import deprecated, DeprecatedReadOnlyClassVar - - -class Chat(base.TelegramObject): - """ - This object represents a chat. - - https://core.telegram.org/bots/api#chat - """ - id: base.Integer = fields.Field() - type: base.String = fields.Field() - title: base.String = fields.Field() - username: base.String = fields.Field() - first_name: base.String = fields.Field() - last_name: base.String = fields.Field() - all_members_are_administrators: base.Boolean = fields.Field() - photo: ChatPhoto = fields.Field(base=ChatPhoto) - bio: base.String = fields.Field() - description: base.String = fields.Field() - invite_link: base.String = fields.Field() - pinned_message: 'Message' = fields.Field(base='Message') - permissions: ChatPermissions = fields.Field(base=ChatPermissions) - slow_mode_delay: base.Integer = fields.Field() - message_auto_delete_time: base.Integer = fields.Field() - sticker_set_name: base.String = fields.Field() - can_set_sticker_set: base.Boolean = fields.Field() - linked_chat_id: base.Integer = fields.Field() - location: ChatLocation = fields.Field() - - def __hash__(self): - return self.id - - @property - def full_name(self) -> base.String: - if self.type == ChatType.PRIVATE: - full_name = self.first_name - if self.last_name: - full_name += ' ' + self.last_name - return full_name - return self.title - - @property - def mention(self) -> typing.Optional[base.String]: - """ - Get mention if a Chat has a username, or get full name if this is a Private Chat, otherwise None is returned - """ - if self.username: - return '@' + self.username - if self.type == ChatType.PRIVATE: - return self.full_name - return None - - @property - def user_url(self) -> base.String: - if self.type != ChatType.PRIVATE: - raise TypeError('`user_url` property is only available in private chats!') - - return f"tg://user?id={self.id}" - - @property - def shifted_id(self) -> int: - """ - Get shifted id of chat, e.g. for private links - - For example: -1001122334455 -> 1122334455 - """ - if self.type == ChatType.PRIVATE: - raise TypeError('`shifted_id` property is not available for private chats') - shift = -1_000_000_000_000 - return shift - self.id - - def get_mention(self, name=None, as_html=True) -> base.String: - if as_html is None and self.bot.parse_mode and self.bot.parse_mode.lower() == 'html': - as_html = True - - if name is None: - name = self.mention - if as_html: - return markdown.hlink(name, self.user_url) - return markdown.link(name, self.user_url) - - async def get_url(self) -> base.String: - """ - Use this method to get chat link. - Private chat returns user link. - Other chat types return either username link (if they are public) or invite link (if they are private). - :return: link - :rtype: :obj:`base.String` - """ - if self.type == ChatType.PRIVATE: - return f"tg://user?id={self.id}" - - if self.username: - return f'https://t.me/{self.username}' - - if self.invite_link: - return self.invite_link - - await self.update_chat() - return self.invite_link - - async def update_chat(self): - """ - Use this method to update Chat data - - :return: None - """ - other = await self.bot.get_chat(self.id) - - for key, value in other: - self[key] = value - - async def set_photo(self, photo: InputFile) -> base.Boolean: - """ - Use this method to set a new profile photo for the chat. Photos can't be changed for private chats. - The bot must be an administrator in the chat for this to work and must have the appropriate admin rights. - - Note: In regular groups (non-supergroups), this method will only work if the ‘All Members Are Admins’ - setting is off in the target group. - - Source: https://core.telegram.org/bots/api#setchatphoto - - :param photo: New chat photo, uploaded using multipart/form-data - :type photo: :obj:`base.InputFile` - :return: Returns True on success. - :rtype: :obj:`base.Boolean` - """ - return await self.bot.set_chat_photo(self.id, photo) - - async def delete_photo(self) -> base.Boolean: - """ - Use this method to delete a chat photo. Photos can't be changed for private chats. - The bot must be an administrator in the chat for this to work and must have the appropriate admin rights. - - Note: In regular groups (non-supergroups), this method will only work if the ‘All Members Are Admins’ - setting is off in the target group. - - Source: https://core.telegram.org/bots/api#deletechatphoto - - :return: Returns True on success. - :rtype: :obj:`base.Boolean` - """ - return await self.bot.delete_chat_photo(self.id) - - async def set_title(self, title: base.String) -> base.Boolean: - """ - Use this method to change the title of a chat. Titles can't be changed for private chats. - The bot must be an administrator in the chat for this to work and must have the appropriate admin rights. - - Note: In regular groups (non-supergroups), this method will only work if the ‘All Members Are Admins’ - setting is off in the target group. - - Source: https://core.telegram.org/bots/api#setchattitle - - :param title: New chat title, 1-255 characters - :type title: :obj:`base.String` - :return: Returns True on success. - :rtype: :obj:`base.Boolean` - """ - return await self.bot.set_chat_title(self.id, title) - - async def set_description(self, description: base.String) -> base.Boolean: - """ - Use this method to change the description of a supergroup or a channel. - The bot must be an administrator in the chat for this to work and must have the appropriate admin rights. - - Source: https://core.telegram.org/bots/api#setchatdescription - - :param description: New chat description, 0-255 characters - :type description: :obj:`typing.Optional[base.String]` - :return: Returns True on success. - :rtype: :obj:`base.Boolean` - """ - return await self.bot.set_chat_description(self.id, description) - - async def kick(self, - user_id: base.Integer, - until_date: typing.Union[base.Integer, datetime.datetime, - datetime.timedelta, None] = None, - revoke_messages: typing.Optional[base.Boolean] = None, - ) -> base.Boolean: - """ - Use this method to kick a user from a group, a supergroup or a channel. - In the case of supergroups and channels, the user will not be able to return - to the chat on their own using invite links, etc., unless unbanned first. - - The bot must be an administrator in the chat for this to work and must have - the appropriate admin rights. - - Source: https://core.telegram.org/bots/api#kickchatmember - - :param user_id: Unique identifier of the target user - :type user_id: :obj:`base.Integer` - - :param until_date: Date when the user will be unbanned. If user is banned - for more than 366 days or less than 30 seconds from the current time they - are considered to be banned forever. Applied for supergroups and channels - only. - :type until_date: :obj:`typing.Union[base.Integer, datetime.datetime, - datetime.timedelta, None]` - - :param revoke_messages: Pass True to delete all messages from the chat for - the user that is being removed. If False, the user will be able to see - messages in the group that were sent before the user was removed. Always - True for supergroups and channels. - :type revoke_messages: :obj:`typing.Optional[base.Boolean]` - - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - return await self.bot.kick_chat_member( - chat_id=self.id, - user_id=user_id, - until_date=until_date, - revoke_messages=revoke_messages, - ) - - async def unban(self, - user_id: base.Integer, - only_if_banned: typing.Optional[base.Boolean] = None, - ) -> base.Boolean: - """ - Use this method to unban a previously kicked user in a supergroup or channel. - The user will not return to the group or channel automatically, but will be - able to join via link, etc. The bot must be an administrator for this to - work. By default, this method guarantees that after the call the user is not - a member of the chat, but will be able to join it. So if the user is a member - of the chat they will also be removed from the chat. If you don't want this, - use the parameter only_if_banned. Returns True on success. - - Source: https://core.telegram.org/bots/api#unbanchatmember - - :param user_id: Unique identifier of the target user - :type user_id: :obj:`base.Integer` - - :param only_if_banned: Do nothing if the user is not banned - :type only_if_banned: :obj:`typing.Optional[base.Boolean]` - - :return: Returns True on success. - :rtype: :obj:`base.Boolean` - """ - return await self.bot.unban_chat_member( - chat_id=self.id, - user_id=user_id, - only_if_banned=only_if_banned, - ) - - async def restrict(self, user_id: base.Integer, - permissions: typing.Optional[ChatPermissions] = None, - until_date: typing.Union[base.Integer, datetime.datetime, datetime.timedelta, None] = None, - can_send_messages: typing.Optional[base.Boolean] = None, - can_send_media_messages: typing.Optional[base.Boolean] = None, - can_send_other_messages: typing.Optional[base.Boolean] = None, - can_add_web_page_previews: typing.Optional[base.Boolean] = None) -> base.Boolean: - """ - Use this method to restrict a user in a supergroup. - The bot must be an administrator in the supergroup for this to work and must have the appropriate admin rights. - Pass True for all boolean parameters to lift restrictions from a user. - - Source: https://core.telegram.org/bots/api#restrictchatmember - - :param user_id: Unique identifier of the target user - :type user_id: :obj:`base.Integer` - :param permissions: New user permissions - :type permissions: :obj:`ChatPermissions` - :param until_date: Date when restrictions will be lifted for the user, unix time. - :type until_date: :obj:`typing.Optional[base.Integer]` - :param can_send_messages: Pass True, if the user can send text messages, contacts, locations and venues - :type can_send_messages: :obj:`typing.Optional[base.Boolean]` - :param can_send_media_messages: Pass True, if the user can send audios, documents, photos, videos, - video notes and voice notes, implies can_send_messages - :type can_send_media_messages: :obj:`typing.Optional[base.Boolean]` - :param can_send_other_messages: Pass True, if the user can send animations, games, stickers and - use inline bots, implies can_send_media_messages - :type can_send_other_messages: :obj:`typing.Optional[base.Boolean]` - :param can_add_web_page_previews: Pass True, if the user may add web page previews to their messages, - implies can_send_media_messages - :type can_add_web_page_previews: :obj:`typing.Optional[base.Boolean]` - :return: Returns True on success. - :rtype: :obj:`base.Boolean` - """ - return await self.bot.restrict_chat_member(self.id, user_id=user_id, - permissions=permissions, - until_date=until_date, - can_send_messages=can_send_messages, - can_send_media_messages=can_send_media_messages, - can_send_other_messages=can_send_other_messages, - can_add_web_page_previews=can_add_web_page_previews) - - async def promote(self, - user_id: base.Integer, - is_anonymous: typing.Optional[base.Boolean] = None, - can_change_info: typing.Optional[base.Boolean] = None, - can_post_messages: typing.Optional[base.Boolean] = None, - can_edit_messages: typing.Optional[base.Boolean] = None, - can_delete_messages: typing.Optional[base.Boolean] = None, - can_invite_users: typing.Optional[base.Boolean] = None, - can_restrict_members: typing.Optional[base.Boolean] = None, - can_pin_messages: typing.Optional[base.Boolean] = None, - can_promote_members: typing.Optional[base.Boolean] = None) -> base.Boolean: - """ - Use this method to promote or demote a user in a supergroup or a channel. - The bot must be an administrator in the chat for this to work and must have the appropriate admin rights. - Pass False for all boolean parameters to demote a user. - - Source: https://core.telegram.org/bots/api#promotechatmember - - :param user_id: Unique identifier of the target user - :type user_id: :obj:`base.Integer` - - :param is_anonymous: Pass True, if the administrator's presence in the chat is hidden - :type is_anonymous: :obj:`typing.Optional[base.Boolean]` - - :param can_change_info: Pass True, if the administrator can change chat title, photo and other settings - :type can_change_info: :obj:`typing.Optional[base.Boolean]` - - :param can_post_messages: Pass True, if the administrator can create channel posts, channels only - :type can_post_messages: :obj:`typing.Optional[base.Boolean]` - - :param can_edit_messages: Pass True, if the administrator can edit messages of other users, channels only - :type can_edit_messages: :obj:`typing.Optional[base.Boolean]` - - :param can_delete_messages: Pass True, if the administrator can delete messages of other users - :type can_delete_messages: :obj:`typing.Optional[base.Boolean]` - - :param can_invite_users: Pass True, if the administrator can invite new users to the chat - :type can_invite_users: :obj:`typing.Optional[base.Boolean]` - - :param can_restrict_members: Pass True, if the administrator can restrict, ban or unban chat members - :type can_restrict_members: :obj:`typing.Optional[base.Boolean]` - - :param can_pin_messages: Pass True, if the administrator can pin messages, supergroups only - :type can_pin_messages: :obj:`typing.Optional[base.Boolean]` - - :param can_promote_members: Pass True, if the administrator can add new administrators - with a subset of his own privileges or demote administrators that he has promoted, - directly or indirectly (promoted by administrators that were appointed by him) - :type can_promote_members: :obj:`typing.Optional[base.Boolean]` - - :return: Returns True on success. - :rtype: :obj:`base.Boolean` - """ - return await self.bot.promote_chat_member(self.id, - user_id=user_id, - is_anonymous=is_anonymous, - can_change_info=can_change_info, - can_post_messages=can_post_messages, - can_edit_messages=can_edit_messages, - can_delete_messages=can_delete_messages, - can_invite_users=can_invite_users, - can_restrict_members=can_restrict_members, - can_pin_messages=can_pin_messages, - can_promote_members=can_promote_members) - - async def set_permissions(self, permissions: ChatPermissions) -> base.Boolean: - """ - Use this method to set default chat permissions for all members. - The bot must be an administrator in the group or a supergroup for this to work and must have the - can_restrict_members admin rights. - - Returns True on success. - - :param permissions: New default chat permissions - :return: True on success. - """ - return await self.bot.set_chat_permissions(self.id, permissions=permissions) - - async def set_administrator_custom_title(self, user_id: base.Integer, custom_title: base.String) -> base.Boolean: - """ - Use this method to set a custom title for an administrator in a supergroup promoted by the bot. - - Returns True on success. - - Source: https://core.telegram.org/bots/api#setchatadministratorcustomtitle - - :param user_id: Unique identifier of the target user - :param custom_title: New custom title for the administrator; 0-16 characters, emoji are not allowed - :return: True on success. - """ - return await self.bot.set_chat_administrator_custom_title(chat_id=self.id, user_id=user_id, - custom_title=custom_title) - - async def pin_message(self, - message_id: base.Integer, - disable_notification: typing.Optional[base.Boolean] = False, - ) -> base.Boolean: - """ - Use this method to add a message to the list of pinned messages in a chat. - If the chat is not a private chat, the bot must be an administrator in the - chat for this to work and must have the 'can_pin_messages' admin right in a - supergroup or 'can_edit_messages' admin right in a channel. Returns True on - success. - - Source: https://core.telegram.org/bots/api#pinchatmessage - - :param message_id: Identifier of a message to pin - :type message_id: :obj:`base.Integer` - - :param disable_notification: Pass True, if it is not necessary to send a - notification to all group members about the new pinned message - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - return await self.bot.pin_chat_message(self.id, message_id, disable_notification) - - async def unpin_message(self, - message_id: typing.Optional[base.Integer] = None, - ) -> base.Boolean: - """ - Use this method to remove a message from the list of pinned messages in a - chat. If the chat is not a private chat, the bot must be an administrator in - the chat for this to work and must have the 'can_pin_messages' admin right in - a supergroup or 'can_edit_messages' admin right in a channel. Returns True on - success. - - Source: https://core.telegram.org/bots/api#unpinchatmessage - - :param message_id: Identifier of a message to unpin. If not specified, the - most recent pinned message (by sending date) will be unpinned. - :type message_id: :obj:`typing.Optional[base.Integer]` - - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - return await self.bot.unpin_chat_message( - chat_id=self.id, - message_id=message_id, - ) - - async def unpin_all_messages(self): - """ - Use this method to clear the list of pinned messages in a chat. If the chat - is not a private chat, the bot must be an administrator in the chat for this - to work and must have the 'can_pin_messages' admin right in a supergroup or - 'can_edit_messages' admin right in a channel. Returns True on success. - - Source: https://core.telegram.org/bots/api#unpinallchatmessages - - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - return await self.bot.unpin_all_chat_messages( - chat_id=self.id, - ) - - async def leave(self) -> base.Boolean: - """ - Use this method for your bot to leave a group, supergroup or channel. - - Source: https://core.telegram.org/bots/api#leavechat - - :return: Returns True on success. - :rtype: :obj:`base.Boolean` - """ - return await self.bot.leave_chat(self.id) - - async def get_administrators(self) -> typing.List[ChatMember]: - """ - Use this method to get a list of administrators in a chat. - - Source: https://core.telegram.org/bots/api#getchatadministrators - - :return: On success, returns an Array of ChatMember objects that contains information about all - chat administrators except other bots. - If the chat is a group or a supergroup and no administrators were appointed, - only the creator will be returned. - :rtype: :obj:`typing.List[types.ChatMember]` - """ - return await self.bot.get_chat_administrators(self.id) - - async def get_member_count(self) -> base.Integer: - """ - Use this method to get the number of members in a chat. - - Source: https://core.telegram.org/bots/api#getchatmembercount - - :return: Returns Int on success. - :rtype: :obj:`base.Integer` - """ - return await self.bot.get_chat_member_count(self.id) - - async def get_members_count(self) -> base.Integer: - """Renamed to get_member_count.""" - return await self.get_member_count(self.id) - - async def get_member(self, user_id: base.Integer) -> ChatMember: - """ - Use this method to get information about a member of a chat. - - Source: https://core.telegram.org/bots/api#getchatmember - - :param user_id: Unique identifier of the target user - :type user_id: :obj:`base.Integer` - :return: Returns a ChatMember object on success. - :rtype: :obj:`types.ChatMember` - """ - return await self.bot.get_chat_member(self.id, user_id) - - async def set_sticker_set(self, sticker_set_name: base.String) -> base.Boolean: - """ - Use this method to set a new group sticker set for a supergroup. - The bot must be an administrator in the chat for this to work and must have the appropriate admin rights. - - Use the field can_set_sticker_set optionally returned in getChat requests to check - if the bot can use this method. - - Source: https://core.telegram.org/bots/api#setchatstickerset - - :param sticker_set_name: Name of the sticker set to be set as the group sticker set - :type sticker_set_name: :obj:`base.String` - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - return await self.bot.set_chat_sticker_set(self.id, sticker_set_name=sticker_set_name) - - async def delete_sticker_set(self) -> base.Boolean: - """ - Use this method to delete a group sticker set from a supergroup. - The bot must be an administrator in the chat for this to work and must have the appropriate admin rights. - - Use the field can_set_sticker_set optionally returned in getChat requests - to check if the bot can use this method. - - Source: https://core.telegram.org/bots/api#deletechatstickerset - - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - return await self.bot.delete_chat_sticker_set(self.id) - - async def do(self, action: base.String) -> base.Boolean: - """ - Use this method when you need to tell the user that something is happening on the bot's side. - The status is set for 5 seconds or less - (when a message arrives from your bot, Telegram clients clear its typing status). - - We only recommend using this method when a response from the bot will take - a noticeable amount of time to arrive. - - Source: https://core.telegram.org/bots/api#sendchataction - - :param action: Type of action to broadcast. - :type action: :obj:`base.String` - :return: Returns True on success. - :rtype: :obj:`base.Boolean` - """ - return await self.bot.send_chat_action(self.id, action) - - async def export_invite_link(self) -> base.String: - """ - Use this method to export an invite link to a supergroup or a channel. - The bot must be an administrator in the chat for this to work and must have the appropriate admin rights. - - Source: https://core.telegram.org/bots/api#exportchatinvitelink - - :return: Returns exported invite link as String on success. - :rtype: :obj:`base.String` - """ - if not self.invite_link: - self.invite_link = await self.bot.export_chat_invite_link(self.id) - - return self.invite_link - - async def create_invite_link(self, - expire_date: typing.Union[base.Integer, datetime.datetime, - datetime.timedelta, None] = None, - member_limit: typing.Optional[base.Integer] = None, - ) -> ChatInviteLink: - """ Shortcut for createChatInviteLink method. """ - return await self.bot.create_chat_invite_link( - chat_id=self.id, - expire_date=expire_date, - member_limit=member_limit, - ) - - async def edit_invite_link(self, - invite_link: base.String, - expire_date: typing.Union[base.Integer, datetime.datetime, - datetime.timedelta, None] = None, - member_limit: typing.Optional[base.Integer] = None, - ) -> ChatInviteLink: - """ Shortcut for editChatInviteLink method. """ - return await self.bot.edit_chat_invite_link( - chat_id=self.id, - invite_link=invite_link, - expire_date=expire_date, - member_limit=member_limit, - ) - - async def revoke_invite_link(self, - invite_link: base.String, - ) -> ChatInviteLink: - """ Shortcut for revokeChatInviteLink method. """ - return await self.bot.revoke_chat_invite_link( - chat_id=self.id, - invite_link=invite_link, - ) - - async def delete_message(self, - message_id: base.Integer, - ) -> base.Boolean: - """ Shortcut for deleteMessage method. """ - return await self.bot.delete_message( - chat_id=self.id, - message_id=message_id, - ) - - def __int__(self): - return self.id - - -class ChatType(helper.Helper): - """ - List of chat types - - :key: PRIVATE - :key: GROUP - :key: SUPER_GROUP - :key: SUPERGROUP - :key: CHANNEL - """ - - mode = helper.HelperMode.lowercase - - PRIVATE = helper.Item() # private - GROUP = helper.Item() # group - SUPERGROUP = helper.Item() # supergroup - CHANNEL = helper.Item() # channel - - SUPER_GROUP: DeprecatedReadOnlyClassVar[ChatType, helper.Item] \ - = DeprecatedReadOnlyClassVar( - "SUPER_GROUP chat type is deprecated, use SUPERGROUP instead.", - new_value_getter=lambda cls: cls.SUPERGROUP) - - @staticmethod - def _check(obj, chat_types) -> bool: - if hasattr(obj, 'chat'): - obj = obj.chat - if not hasattr(obj, 'type'): - return False - return obj.type in chat_types - - @classmethod - @deprecated("This filter was moved to ChatTypeFilter, and will be removed in aiogram v3.0") - def is_private(cls, obj) -> bool: - """ - Check chat is private - - :param obj: - :return: - """ - return cls._check(obj, [cls.PRIVATE]) - - @classmethod - @deprecated("This filter was moved to ChatTypeFilter, and will be removed in aiogram v3.0") - def is_group(cls, obj) -> bool: - """ - Check chat is group - - :param obj: - :return: - """ - return cls._check(obj, [cls.GROUP]) - - @classmethod - @deprecated("This filter was moved to ChatTypeFilter, and will be removed in aiogram v3.0") - def is_super_group(cls, obj) -> bool: - """ - Check chat is super-group - - :param obj: - :return: - """ - return cls._check(obj, [cls.SUPER_GROUP, cls.SUPERGROUP]) - - @classmethod - @deprecated("This filter was moved to ChatTypeFilter, and will be removed in aiogram v3.0") - def is_group_or_super_group(cls, obj) -> bool: - """ - Check chat is group or super-group - - :param obj: - :return: - """ - return cls._check(obj, [cls.GROUP, cls.SUPER_GROUP, cls.SUPERGROUP]) - - @classmethod - @deprecated("This filter was moved to ChatTypeFilter, and will be removed in aiogram v3.0") - def is_channel(cls, obj) -> bool: - """ - Check chat is channel - - :param obj: - :return: - """ - return cls._check(obj, [cls.CHANNEL]) - - -class ChatActions(helper.Helper): - """ - List of chat actions - - :key: TYPING - :key: UPLOAD_PHOTO - :key: RECORD_VIDEO - :key: UPLOAD_VIDEO - :key: RECORD_AUDIO - :key: UPLOAD_AUDIO - :key: UPLOAD_DOCUMENT - :key: FIND_LOCATION - :key: RECORD_VIDEO_NOTE - :key: UPLOAD_VIDEO_NOTE - """ - - mode = helper.HelperMode.snake_case - - TYPING: str = helper.Item() # typing - UPLOAD_PHOTO: str = helper.Item() # upload_photo - RECORD_VIDEO: str = helper.Item() # record_video - UPLOAD_VIDEO: str = helper.Item() # upload_video - RECORD_AUDIO: str = helper.Item() # record_audio - UPLOAD_AUDIO: str = helper.Item() # upload_audio - RECORD_VOICE: str = helper.Item() # record_voice - UPLOAD_VOICE: str = helper.Item() # upload_voice - UPLOAD_DOCUMENT: str = helper.Item() # upload_document - FIND_LOCATION: str = helper.Item() # find_location - RECORD_VIDEO_NOTE: str = helper.Item() # record_video_note - UPLOAD_VIDEO_NOTE: str = helper.Item() # upload_video_note - - @classmethod - async def _do(cls, action: str, sleep=None): - from aiogram import Bot - await Bot.get_current().send_chat_action(Chat.get_current().id, action) - if sleep: - await asyncio.sleep(sleep) - - @classmethod - def calc_timeout(cls, text, timeout=.8): - """ - Calculate timeout for text - - :param text: - :param timeout: - :return: - """ - return min((len(str(text)) * timeout, 5.0)) - - @classmethod - async def typing(cls, sleep=None): - """ - Do typing - - :param sleep: sleep timeout - :return: - """ - if isinstance(sleep, str): - sleep = cls.calc_timeout(sleep) - await cls._do(cls.TYPING, sleep) - - @classmethod - async def upload_photo(cls, sleep=None): - """ - Do upload_photo - - :param sleep: sleep timeout - :return: - """ - await cls._do(cls.UPLOAD_PHOTO, sleep) - - @classmethod - async def record_video(cls, sleep=None): - """ - Do record video - - :param sleep: sleep timeout - :return: - """ - await cls._do(cls.RECORD_VIDEO, sleep) - - @classmethod - async def upload_video(cls, sleep=None): - """ - Do upload video - - :param sleep: sleep timeout - :return: - """ - await cls._do(cls.UPLOAD_VIDEO, sleep) - - @classmethod - async def record_audio(cls, sleep=None): - """ - Do record audio - - :param sleep: sleep timeout - :return: - """ - await cls._do(cls.RECORD_AUDIO, sleep) - - @classmethod - async def upload_audio(cls, sleep=None): - """ - Do upload audio - - :param sleep: sleep timeout - :return: - """ - await cls._do(cls.UPLOAD_AUDIO, sleep) - - @classmethod - async def record_voice(cls, sleep=None): - """ - Do record voice - - :param sleep: sleep timeout - :return: - """ - await cls._do(cls.RECORD_VOICE, sleep) - - @classmethod - async def upload_voice(cls, sleep=None): - """ - Do upload voice - - :param sleep: sleep timeout - :return: - """ - await cls._do(cls.UPLOAD_VOICE, sleep) - - @classmethod - async def upload_document(cls, sleep=None): - """ - Do upload document - - :param sleep: sleep timeout - :return: - """ - await cls._do(cls.UPLOAD_DOCUMENT, sleep) - - @classmethod - async def find_location(cls, sleep=None): - """ - Do find location - - :param sleep: sleep timeout - :return: - """ - await cls._do(cls.FIND_LOCATION, sleep) - - @classmethod - async def record_video_note(cls, sleep=None): - """ - Do record video note - - :param sleep: sleep timeout - :return: - """ - await cls._do(cls.RECORD_VIDEO_NOTE, sleep) - - @classmethod - async def upload_video_note(cls, sleep=None): - """ - Do upload video note - - :param sleep: sleep timeout - :return: - """ - await cls._do(cls.UPLOAD_VIDEO_NOTE, sleep) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chat_invite_link.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chat_invite_link.py deleted file mode 100644 index 55794780..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chat_invite_link.py +++ /dev/null @@ -1,20 +0,0 @@ -from datetime import datetime - -from . import base -from . import fields -from .user import User - - -class ChatInviteLink(base.TelegramObject): - """ - Represents an invite link for a chat. - - https://core.telegram.org/bots/api#chatinvitelink - """ - - invite_link: base.String = fields.Field() - creator: User = fields.Field(base=User) - is_primary: base.Boolean = fields.Field() - is_revoked: base.Boolean = fields.Field() - expire_date: datetime = fields.DateTimeField() - member_limit: base.Integer = fields.Field() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chat_location.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chat_location.py deleted file mode 100644 index 0438c544..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chat_location.py +++ /dev/null @@ -1,16 +0,0 @@ -from . import base -from . import fields -from .location import Location - - -class ChatLocation(base.TelegramObject): - """ - Represents a location to which a chat is connected. - - https://core.telegram.org/bots/api#chatlocation - """ - location: Location = fields.Field() - address: base.String = fields.Field() - - def __init__(self, location: Location, address: base.String): - super().__init__(location=location, address=address) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chat_member.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chat_member.py deleted file mode 100644 index 372b3468..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chat_member.py +++ /dev/null @@ -1,192 +0,0 @@ -import datetime -import typing -from typing import Optional - -from . import base, fields -from .user import User -from ..utils import helper - - -T = typing.TypeVar('T') - - -class ChatMemberStatus(helper.Helper): - """ - Chat member status - """ - mode = helper.HelperMode.lowercase - - CREATOR = helper.Item() # creator - OWNER = CREATOR # creator - ADMINISTRATOR = helper.Item() # administrator - MEMBER = helper.Item() # member - RESTRICTED = helper.Item() # restricted - LEFT = helper.Item() # left - KICKED = helper.Item() # kicked - BANNED = KICKED # kicked - - @classmethod - def is_chat_creator(cls, role: str) -> bool: - return role == cls.CREATOR - - @classmethod - def is_chat_admin(cls, role: str) -> bool: - return role in (cls.ADMINISTRATOR, cls.CREATOR) - - @classmethod - def is_chat_member(cls, role: str) -> bool: - return role in (cls.MEMBER, cls.ADMINISTRATOR, cls.CREATOR, cls.RESTRICTED) - - @classmethod - def get_class_by_status(cls, status: str) -> Optional["ChatMember"]: - return { - cls.OWNER: ChatMemberOwner, - cls.ADMINISTRATOR: ChatMemberAdministrator, - cls.MEMBER: ChatMemberMember, - cls.RESTRICTED: ChatMemberRestricted, - cls.LEFT: ChatMemberLeft, - cls.BANNED: ChatMemberBanned, - }.get(status) - - -class ChatMember(base.TelegramObject): - """ - This object contains information about one member of a chat. - Currently, the following 6 types of chat members are supported: - ChatMemberOwner - ChatMemberAdministrator - ChatMemberMember - ChatMemberRestricted - ChatMemberLeft - ChatMemberBanned - - https://core.telegram.org/bots/api#chatmember - """ - status: base.String = fields.Field() - user: User = fields.Field(base=User) - - def __int__(self) -> int: - return self.user.id - - @classmethod - def resolve(cls, **kwargs) -> "ChatMember": - status = kwargs.get("status") - mapping = { - ChatMemberStatus.OWNER: ChatMemberOwner, - ChatMemberStatus.ADMINISTRATOR: ChatMemberAdministrator, - ChatMemberStatus.MEMBER: ChatMemberMember, - ChatMemberStatus.RESTRICTED: ChatMemberRestricted, - ChatMemberStatus.LEFT: ChatMemberLeft, - ChatMemberStatus.BANNED: ChatMemberBanned, - } - class_ = mapping.get(status) - if class_ is None: - raise ValueError(f"Can't find `ChatMember` class for status `{status}`") - - return class_(**kwargs) - - @classmethod - def to_object(cls, - data: typing.Dict[str, typing.Any], - conf: typing.Dict[str, typing.Any] = None - ) -> "ChatMember": - return cls.resolve(**data) - - def is_chat_creator(self) -> bool: - return ChatMemberStatus.is_chat_creator(self.status) - - def is_chat_admin(self) -> bool: - return ChatMemberStatus.is_chat_admin(self.status) - - def is_chat_member(self) -> bool: - return ChatMemberStatus.is_chat_member(self.status) - - -class ChatMemberOwner(ChatMember): - """ - Represents a chat member that owns the chat and has all - administrator privileges. - https://core.telegram.org/bots/api#chatmemberowner - """ - status: base.String = fields.Field(default=ChatMemberStatus.OWNER) - user: User = fields.Field(base=User) - custom_title: base.String = fields.Field() - is_anonymous: base.Boolean = fields.Field() - - -class ChatMemberAdministrator(ChatMember): - """ - Represents a chat member that has some additional privileges. - - https://core.telegram.org/bots/api#chatmemberadministrator - """ - status: base.String = fields.Field(default=ChatMemberStatus.ADMINISTRATOR) - user: User = fields.Field(base=User) - can_be_edited: base.Boolean = fields.Field() - custom_title: base.String = fields.Field() - is_anonymous: base.Boolean = fields.Field() - can_manage_chat: base.Boolean = fields.Field() - can_post_messages: base.Boolean = fields.Field() - can_edit_messages: base.Boolean = fields.Field() - can_delete_messages: base.Boolean = fields.Field() - can_manage_voice_chats: base.Boolean = fields.Field() - can_restrict_members: base.Boolean = fields.Field() - can_promote_members: base.Boolean = fields.Field() - can_change_info: base.Boolean = fields.Field() - can_invite_users: base.Boolean = fields.Field() - can_pin_messages: base.Boolean = fields.Field() - - -class ChatMemberMember(ChatMember): - """ - Represents a chat member that has no additional privileges or - restrictions. - - https://core.telegram.org/bots/api#chatmembermember - """ - status: base.String = fields.Field(default=ChatMemberStatus.MEMBER) - user: User = fields.Field(base=User) - - -class ChatMemberRestricted(ChatMember): - """ - Represents a chat member that is under certain restrictions in the - chat. Supergroups only. - - https://core.telegram.org/bots/api#chatmemberrestricted - """ - status: base.String = fields.Field(default=ChatMemberStatus.RESTRICTED) - user: User = fields.Field(base=User) - is_member: base.Boolean = fields.Field() - can_change_info: base.Boolean = fields.Field() - can_invite_users: base.Boolean = fields.Field() - can_pin_messages: base.Boolean = fields.Field() - can_send_messages: base.Boolean = fields.Field() - can_send_media_messages: base.Boolean = fields.Field() - can_send_polls: base.Boolean = fields.Field() - can_send_other_messages: base.Boolean = fields.Field() - can_add_web_page_previews: base.Boolean = fields.Field() - until_date: datetime.datetime = fields.DateTimeField() - - -class ChatMemberLeft(ChatMember): - """ - Represents a chat member that isn't currently a member of the chat, - but may join it themselves. - - https://core.telegram.org/bots/api#chatmemberleft - """ - status: base.String = fields.Field(default=ChatMemberStatus.LEFT) - user: User = fields.Field(base=User) - - -class ChatMemberBanned(ChatMember): - """ - Represents a chat member that was banned in the chat and can't - return to the chat or view chat messages. - - https://core.telegram.org/bots/api#chatmemberbanned - """ - status: base.String = fields.Field(default=ChatMemberStatus.BANNED) - user: User = fields.Field(base=User) - until_date: datetime.datetime = fields.DateTimeField() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chat_member_updated.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chat_member_updated.py deleted file mode 100644 index 67c75616..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chat_member_updated.py +++ /dev/null @@ -1,22 +0,0 @@ -import datetime - -from . import base -from . import fields -from .chat import Chat -from .chat_invite_link import ChatInviteLink -from .chat_member import ChatMember -from .user import User - - -class ChatMemberUpdated(base.TelegramObject): - """ - This object represents changes in the status of a chat member. - - https://core.telegram.org/bots/api#chatmemberupdated - """ - chat: Chat = fields.Field(base=Chat) - from_user: User = fields.Field(alias="from", base=User) - date: datetime.datetime = fields.DateTimeField() - old_chat_member: ChatMember = fields.Field(base=ChatMember) - new_chat_member: ChatMember = fields.Field(base=ChatMember) - invite_link: ChatInviteLink = fields.Field(base=ChatInviteLink) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chat_permissions.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chat_permissions.py deleted file mode 100644 index 9d44653e..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chat_permissions.py +++ /dev/null @@ -1,39 +0,0 @@ -from . import base -from . import fields - - -class ChatPermissions(base.TelegramObject): - """ - Describes actions that a non-administrator user is allowed to take in a chat. - - https://core.telegram.org/bots/api#chatpermissions - """ - can_send_messages: base.Boolean = fields.Field() - can_send_media_messages: base.Boolean = fields.Field() - can_send_polls: base.Boolean = fields.Field() - can_send_other_messages: base.Boolean = fields.Field() - can_add_web_page_previews: base.Boolean = fields.Field() - can_change_info: base.Boolean = fields.Field() - can_invite_users: base.Boolean = fields.Field() - can_pin_messages: base.Boolean = fields.Field() - - def __init__(self, - can_send_messages: base.Boolean = None, - can_send_media_messages: base.Boolean = None, - can_send_polls: base.Boolean = None, - can_send_other_messages: base.Boolean = None, - can_add_web_page_previews: base.Boolean = None, - can_change_info: base.Boolean = None, - can_invite_users: base.Boolean = None, - can_pin_messages: base.Boolean = None, - **kwargs): - super(ChatPermissions, self).__init__( - can_send_messages=can_send_messages, - can_send_media_messages=can_send_media_messages, - can_send_polls=can_send_polls, - can_send_other_messages=can_send_other_messages, - can_add_web_page_previews=can_add_web_page_previews, - can_change_info=can_change_info, - can_invite_users=can_invite_users, - can_pin_messages=can_pin_messages, - ) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chat_photo.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chat_photo.py deleted file mode 100644 index d0282a58..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chat_photo.py +++ /dev/null @@ -1,80 +0,0 @@ -import os -import pathlib - -from . import base -from . import fields - - -class ChatPhoto(base.TelegramObject): - """ - This object represents a chat photo. - - https://core.telegram.org/bots/api#chatphoto - """ - small_file_id: base.String = fields.Field() - small_file_unique_id: base.String = fields.Field() - big_file_id: base.String = fields.Field() - big_file_unique_id: base.String = fields.Field() - - async def download_small(self, destination=None, timeout=30, chunk_size=65536, seek=True, make_dirs=True): - """ - Download file - - :param destination: filename or instance of :class:`io.IOBase`. For e. g. :class:`io.BytesIO` - :param timeout: Integer - :param chunk_size: Integer - :param seek: Boolean - go to start of file when downloading is finished. - :param make_dirs: Make dirs if not exist - :return: destination - """ - file = await self.get_small_file() - - is_path = True - if destination is None: - destination = file.file_path - elif isinstance(destination, (str, pathlib.Path)) and os.path.isdir(destination): - os.path.join(destination, file.file_path) - else: - is_path = False - - if is_path and make_dirs: - os.makedirs(os.path.dirname(destination), exist_ok=True) - - return await self.bot.download_file(file_path=file.file_path, destination=destination, timeout=timeout, - chunk_size=chunk_size, seek=seek) - - async def download_big(self, destination=None, timeout=30, chunk_size=65536, seek=True, make_dirs=True): - """ - Download file - - :param destination: filename or instance of :class:`io.IOBase`. For e. g. :class:`io.BytesIO` - :param timeout: Integer - :param chunk_size: Integer - :param seek: Boolean - go to start of file when downloading is finished. - :param make_dirs: Make dirs if not exist - :return: destination - """ - file = await self.get_big_file() - - is_path = True - if destination is None: - destination = file.file_path - elif isinstance(destination, (str, pathlib.Path)) and os.path.isdir(destination): - os.path.join(destination, file.file_path) - else: - is_path = False - - if is_path and make_dirs: - os.makedirs(os.path.dirname(destination), exist_ok=True) - - return await self.bot.download_file(file_path=file.file_path, destination=destination, timeout=timeout, - chunk_size=chunk_size, seek=seek) - - async def get_small_file(self): - return await self.bot.get_file(self.small_file_id) - - async def get_big_file(self): - return await self.bot.get_file(self.big_file_id) - - def __hash__(self): - return hash(self.small_file_id) + hash(self.big_file_id) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chosen_inline_result.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chosen_inline_result.py deleted file mode 100644 index 246b071d..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/chosen_inline_result.py +++ /dev/null @@ -1,22 +0,0 @@ -from . import base -from . import fields -from .location import Location -from .user import User - - -class ChosenInlineResult(base.TelegramObject): - """ - Represents a result of an inline query that was chosen by the user and sent to their chat partner. - - Note: It is necessary to enable inline feedback via @Botfather in order to receive these objects in updates. - Your bot can accept payments from Telegram users. - Please see the introduction to payments for more details on the process and how to set up payments for your bot. - Please note that users will need Telegram v.4.0 or higher to use payments (released on May 18, 2017). - - https://core.telegram.org/bots/api#choseninlineresult - """ - result_id: base.String = fields.Field() - from_user: User = fields.Field(alias='from', base=User) - location: Location = fields.Field(base=Location) - inline_message_id: base.String = fields.Field() - query: base.String = fields.Field() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/contact.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/contact.py deleted file mode 100644 index b70045b9..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/contact.py +++ /dev/null @@ -1,25 +0,0 @@ -from . import base -from . import fields - - -class Contact(base.TelegramObject): - """ - This object represents a phone contact. - - https://core.telegram.org/bots/api#contact - """ - phone_number: base.String = fields.Field() - first_name: base.String = fields.Field() - last_name: base.String = fields.Field() - user_id: base.Integer = fields.Field() - vcard: base.String = fields.Field() - - @property - def full_name(self): - name = self.first_name - if self.last_name is not None: - name += ' ' + self.last_name - return name - - def __hash__(self): - return hash(self.phone_number) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/dice.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/dice.py deleted file mode 100644 index c4f2725e..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/dice.py +++ /dev/null @@ -1,20 +0,0 @@ -from . import base, fields - - -class Dice(base.TelegramObject): - """ - This object represents an animated emoji that displays a random value. - - https://core.telegram.org/bots/api#dice - """ - emoji: base.String = fields.Field() - value: base.Integer = fields.Field() - - -class DiceEmoji: - DICE = '🎲' - DART = '🎯' - BASKETBALL = '🏀' - FOOTBALL = '⚽' - SLOT_MACHINE = '🎰' - BOWLING = '🎳' diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/document.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/document.py deleted file mode 100644 index c3d19fa9..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/document.py +++ /dev/null @@ -1,50 +0,0 @@ -from . import base -from . import fields -from . import mixins -from .photo_size import PhotoSize -from ..utils import helper - - -class Document(base.TelegramObject, mixins.Downloadable): - """ - This object represents a general file (as opposed to photos, voice messages and audio files). - - https://core.telegram.org/bots/api#document - """ - file_id: base.String = fields.Field() - file_unique_id: base.String = fields.Field() - thumb: PhotoSize = fields.Field(base=PhotoSize) - file_name: base.String = fields.Field() - mime_type: base.String = fields.Field() - file_size: base.Integer = fields.Field() - - @property - def mime_base(self) -> str: - base_type, _, _ = self.mime_type.partition('/') - return base_type - - @property - def mime_subtype(self) -> str: - _, _, subtype = self.mime_type.partition('/') - return subtype - - -class MimeBase(helper.Helper): - """ - List of mime base types registered in IANA - - https://www.iana.org/assignments/media-types/media-types.xhtml - """ - - mode = helper.HelperMode.lowercase - - APPLICATION = helper.Item() # application - AUDIO = helper.Item() # audio - EXAMPLE = helper.Item() # example - FONT = helper.Item() # font - IMAGE = helper.Item() # image - MESSAGE = helper.Item() # message - MODEL = helper.Item() # model - MULTIPART = helper.Item() # multipart - TEXT = helper.Item() # text - VIDEO = helper.Item() # video diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/encrypted_credentials.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/encrypted_credentials.py deleted file mode 100644 index d649c8d9..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/encrypted_credentials.py +++ /dev/null @@ -1,16 +0,0 @@ -from . import base -from . import fields - - -class EncryptedCredentials(base.TelegramObject): - """ - Contains data required for decrypting and authenticating EncryptedPassportElement. - See the Telegram Passport Documentation for a complete description of the data decryption - and authentication processes. - - https://core.telegram.org/bots/api#encryptedcredentials - """ - - data: base.String = fields.Field() - hash: base.String = fields.Field() - secret: base.String = fields.Field() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/encrypted_passport_element.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/encrypted_passport_element.py deleted file mode 100644 index 76e02ec1..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/encrypted_passport_element.py +++ /dev/null @@ -1,22 +0,0 @@ -import typing - -from . import base -from . import fields -from .passport_file import PassportFile - - -class EncryptedPassportElement(base.TelegramObject): - """ - Contains information about documents or other Telegram Passport elements shared with the bot by the user. - - https://core.telegram.org/bots/api#encryptedpassportelement - """ - - type: base.String = fields.Field() - data: base.String = fields.Field() - phone_number: base.String = fields.Field() - email: base.String = fields.Field() - files: typing.List[PassportFile] = fields.ListField(base=PassportFile) - front_side: PassportFile = fields.Field(base=PassportFile) - reverse_side: PassportFile = fields.Field(base=PassportFile) - selfie: PassportFile = fields.Field(base=PassportFile) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/fields.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/fields.py deleted file mode 100644 index 7994f04e..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/fields.py +++ /dev/null @@ -1,208 +0,0 @@ -import abc -import datetime -import weakref - -__all__ = ('BaseField', 'Field', 'ListField', 'DateTimeField', 'TextField', 'ListOfLists') - - -class BaseField(metaclass=abc.ABCMeta): - """ - Base field (prop) - """ - - def __init__(self, *, base=None, default=None, alias=None, on_change=None): - """ - Init prop - - :param base: class for child element - :param default: default value - :param alias: alias name (for e.g. field 'from' has to be named 'from_user' - as 'from' is a builtin Python keyword - :param on_change: callback will be called when value is changed - """ - self.base_object = base - self.default = default - self.alias = alias - self.on_change = on_change - - def __set_name__(self, owner, name): - if self.alias is None: - self.alias = name - - def resolve_base(self, instance): - if self.base_object is None or hasattr(self.base_object, 'telegram_types'): - return - elif isinstance(self.base_object, str): - self.base_object = instance.telegram_types.get(self.base_object) - - def get_value(self, instance): - """ - Get value for the current object instance - - :param instance: - :return: - """ - return instance.values.get(self.alias, self.default) - - def set_value(self, instance, value, parent=None): - """ - Set prop value - - :param instance: - :param value: - :param parent: - :return: - """ - self.resolve_base(instance) - value = self.deserialize(value, parent) - instance.values[self.alias] = value - self._trigger_changed(instance, value) - - def _trigger_changed(self, instance, value): - if not self.on_change and instance is not None: - return - callback = getattr(instance, self.on_change) - callback(value) - - def __get__(self, instance, owner): - return self.get_value(instance) - - def __set__(self, instance, value): - self.set_value(instance, value) - - @abc.abstractmethod - def serialize(self, value): - """ - Serialize value to python - - :param value: - :return: - """ - pass - - @abc.abstractmethod - def deserialize(self, value, parent=None): - """Deserialize python object value to TelegramObject value""" - pass - - def export(self, instance): - """ - Alias for `serialize` but for current Object instance - - :param instance: - :return: - """ - return self.serialize(self.get_value(instance)) - - -class Field(BaseField): - """ - Simple field - """ - - def serialize(self, value): - if self.base_object is not None and hasattr(value, 'to_python'): - return value.to_python() - return value - - def deserialize(self, value, parent=None): - if isinstance(value, dict) \ - and self.base_object is not None \ - and not hasattr(value, 'base_object') \ - and not hasattr(value, 'to_python'): - if not isinstance(parent, weakref.ReferenceType): - parent = weakref.ref(parent) - return self.base_object.to_object(conf={'parent': parent}, data=value) - return value - - -class ListField(Field): - """ - Field contains list ob objects - """ - - def __init__(self, *args, **kwargs): - default = kwargs.pop('default', None) - if default is None: - default = [] - - super(ListField, self).__init__(*args, default=default, **kwargs) - - def serialize(self, value): - if value is None: - return None - - result = [] - serialize = super(ListField, self).serialize - for item in value: - result.append(serialize(item)) - return result - - def deserialize(self, value, parent=None): - if value is None: - return None - - result = [] - deserialize = super(ListField, self).deserialize - for item in value: - result.append(deserialize(item, parent=parent)) - return result - - -class ListOfLists(Field): - def serialize(self, value): - result = [] - serialize = super(ListOfLists, self).serialize - for row in value: - row_result = [] - for item in row: - row_result.append(serialize(item)) - result.append(row_result) - return result - - def deserialize(self, value, parent=None): - result = [] - deserialize = super(ListOfLists, self).deserialize - if hasattr(value, '__iter__'): - for row in value: - row_result = [] - for item in row: - row_result.append(deserialize(item, parent=parent)) - result.append(row_result) - return result - - -class DateTimeField(Field): - """ - In this field st_ored datetime - - in: unixtime - out: datetime - """ - - def serialize(self, value: datetime.datetime): - return round(value.timestamp()) - - def deserialize(self, value, parent=None): - return datetime.datetime.fromtimestamp(value) - - -class TextField(Field): - def __init__(self, *, prefix=None, suffix=None, default=None, alias=None): - super(TextField, self).__init__(default=default, alias=alias) - self.prefix = prefix - self.suffix = suffix - - def serialize(self, value): - if value is None: - return value - if self.prefix: - value = self.prefix + value - if self.suffix: - value += self.suffix - return value - - def deserialize(self, value, parent=None): - if value is not None and not isinstance(value, str): - raise TypeError(f"Field '{self.alias}' should be str not {type(value).__name__}") - return value diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/file.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/file.py deleted file mode 100644 index ae813ac6..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/file.py +++ /dev/null @@ -1,22 +0,0 @@ -from . import base -from . import fields -from . import mixins - - -class File(base.TelegramObject, mixins.Downloadable): - """ - This object represents a file ready to be downloaded. - - The file can be downloaded via the link https://api.telegram.org/file/bot/. - - It is guaranteed that the link will be valid for at least 1 hour. - When the link expires, a new one can be requested by calling getFile. - - Maximum file size to download is 20 MB - - https://core.telegram.org/bots/api#file - """ - file_id: base.String = fields.Field() - file_unique_id: base.String = fields.Field() - file_size: base.Integer = fields.Field() - file_path: base.String = fields.Field() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/force_reply.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/force_reply.py deleted file mode 100644 index d6b4f19f..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/force_reply.py +++ /dev/null @@ -1,33 +0,0 @@ -import typing - -from . import base -from . import fields - - -class ForceReply(base.TelegramObject): - """ - Upon receiving a message with this object, Telegram clients will - display a reply interface to the user (act as if the user has - selected the bot's message and tapped 'Reply'). This can be - extremely useful if you want to create user-friendly step-by-step - interfaces without having to sacrifice privacy mode. - - https://core.telegram.org/bots/api#forcereply - """ - force_reply: base.Boolean = fields.Field(default=True) - input_field_placeholder: base.String = fields.Field() - selective: base.Boolean = fields.Field() - - @classmethod - def create(cls, - input_field_placeholder: typing.Optional[base.String] = None, - selective: typing.Optional[base.Boolean] = None, - ) -> 'ForceReply': - """ - Create new force reply - - :param selective: - :param input_field_placeholder: - :return: - """ - return cls(selective=selective, input_field_placeholder=input_field_placeholder) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/game.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/game.py deleted file mode 100644 index f5861d90..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/game.py +++ /dev/null @@ -1,23 +0,0 @@ -import typing - -from . import base -from . import fields -from .animation import Animation -from .message_entity import MessageEntity -from .photo_size import PhotoSize - - -class Game(base.TelegramObject): - """ - This object represents a game. - - Use BotFather to create and edit games, their short names will act as unique identifiers. - - https://core.telegram.org/bots/api#game - """ - title: base.String = fields.Field() - description: base.String = fields.Field() - photo: typing.List[PhotoSize] = fields.ListField(base=PhotoSize) - text: base.String = fields.Field() - text_entities: typing.List[MessageEntity] = fields.ListField(base=MessageEntity) - animation: Animation = fields.Field(base=Animation) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/game_high_score.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/game_high_score.py deleted file mode 100644 index 43f9c1c9..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/game_high_score.py +++ /dev/null @@ -1,16 +0,0 @@ -from . import base -from . import fields -from .user import User - - -class GameHighScore(base.TelegramObject): - """ - This object represents one row of the high scores table for a game. - And that‘s about all we’ve got for now. - If you've got any questions, please check out our Bot FAQ - - https://core.telegram.org/bots/api#gamehighscore - """ - position: base.Integer = fields.Field() - user: User = fields.Field(base=User) - score: base.Integer = fields.Field() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/inline_keyboard.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/inline_keyboard.py deleted file mode 100644 index 97ad35da..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/inline_keyboard.py +++ /dev/null @@ -1,116 +0,0 @@ -import typing - -from . import base -from . import fields -from .callback_game import CallbackGame -from .login_url import LoginUrl - - -class InlineKeyboardMarkup(base.TelegramObject): - """ - This object represents an inline keyboard that appears right next to the message it belongs to. - - Note: This will only work in Telegram versions released after 9 April, 2016. - Older clients will display unsupported message. - - https://core.telegram.org/bots/api#inlinekeyboardmarkup - """ - inline_keyboard: 'typing.List[typing.List[InlineKeyboardButton]]' = fields.ListOfLists(base='InlineKeyboardButton') - - def __init__(self, row_width=3, inline_keyboard=None, **kwargs): - if inline_keyboard is None: - inline_keyboard = [] - - conf = kwargs.pop('conf', {}) or {} - conf['row_width'] = row_width - - super(InlineKeyboardMarkup, self).__init__(**kwargs, - conf=conf, - inline_keyboard=inline_keyboard) - - @property - def row_width(self): - return self.conf.get('row_width', 3) - - @row_width.setter - def row_width(self, value): - self.conf['row_width'] = value - - def add(self, *args): - """ - Add buttons - - :param args: - :return: self - :rtype: :obj:`types.InlineKeyboardMarkup` - """ - row = [] - for index, button in enumerate(args, start=1): - row.append(button) - if index % self.row_width == 0: - self.inline_keyboard.append(row) - row = [] - if len(row) > 0: - self.inline_keyboard.append(row) - return self - - def row(self, *args): - """ - Add row - - :param args: - :return: self - :rtype: :obj:`types.InlineKeyboardMarkup` - """ - btn_array = [] - for button in args: - btn_array.append(button) - self.inline_keyboard.append(btn_array) - return self - - def insert(self, button): - """ - Insert button to last row - - :param button: - :return: self - :rtype: :obj:`types.InlineKeyboardMarkup` - """ - if self.inline_keyboard and len(self.inline_keyboard[-1]) < self.row_width: - self.inline_keyboard[-1].append(button) - else: - self.add(button) - return self - - -class InlineKeyboardButton(base.TelegramObject): - """ - This object represents one button of an inline keyboard. You must use exactly one of the optional fields. - - https://core.telegram.org/bots/api#inlinekeyboardbutton - """ - text: base.String = fields.Field() - url: base.String = fields.Field() - login_url: LoginUrl = fields.Field(base=LoginUrl) - callback_data: base.String = fields.Field() - switch_inline_query: base.String = fields.Field() - switch_inline_query_current_chat: base.String = fields.Field() - callback_game: CallbackGame = fields.Field(base=CallbackGame) - pay: base.Boolean = fields.Field() - - def __init__(self, text: base.String, - url: base.String = None, - login_url: LoginUrl = None, - callback_data: base.String = None, - switch_inline_query: base.String = None, - switch_inline_query_current_chat: base.String = None, - callback_game: CallbackGame = None, - pay: base.Boolean = None, **kwargs): - super(InlineKeyboardButton, self).__init__(text=text, - url=url, - login_url=login_url, - callback_data=callback_data, - switch_inline_query=switch_inline_query, - switch_inline_query_current_chat=switch_inline_query_current_chat, - callback_game=callback_game, - pay=pay, **kwargs) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/inline_query.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/inline_query.py deleted file mode 100644 index 63f4ab32..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/inline_query.py +++ /dev/null @@ -1,67 +0,0 @@ -import typing - -from . import base -from . import fields -from .inline_query_result import InlineQueryResult -from .location import Location -from .user import User - - -class InlineQuery(base.TelegramObject): - """ - This object represents an incoming inline query. - - When the user sends an empty query, your bot could return some default or trending results. - - https://core.telegram.org/bots/api#inlinequery - """ - id: base.String = fields.Field() - from_user: User = fields.Field(alias='from', base=User) - query: base.String = fields.Field() - offset: base.String = fields.Field() - chat_type: base.String = fields.Field() - location: Location = fields.Field(base=Location) - - async def answer(self, - results: typing.List[InlineQueryResult], - cache_time: typing.Optional[base.Integer] = None, - is_personal: typing.Optional[base.Boolean] = None, - next_offset: typing.Optional[base.String] = None, - switch_pm_text: typing.Optional[base.String] = None, - switch_pm_parameter: typing.Optional[base.String] = None): - """ - Use this method to send answers to an inline query. - No more than 50 results per query are allowed. - - Source: https://core.telegram.org/bots/api#answerinlinequery - - :param results: A JSON-serialized array of results for the inline query - :type results: :obj:`typing.List[types.InlineQueryResult]` - :param cache_time: The maximum amount of time in seconds that the result of the - inline query may be cached on the server. Defaults to 300. - :type cache_time: :obj:`typing.Optional[base.Integer]` - :param is_personal: Pass True, if results may be cached on the server side only - for the user that sent the query. By default, results may be returned to any user who sends the same query - :type is_personal: :obj:`typing.Optional[base.Boolean]` - :param next_offset: Pass the offset that a client should send in the - next query with the same text to receive more results. - Pass an empty string if there are no more results or if you don‘t support pagination. - Offset length can’t exceed 64 bytes. - :type next_offset: :obj:`typing.Optional[base.String]` - :param switch_pm_text: If passed, clients will display a button with specified text that - switches the user to a private chat with the bot and sends the bot a start message - with the parameter switch_pm_parameter - :type switch_pm_text: :obj:`typing.Optional[base.String]` - :param switch_pm_parameter: Deep-linking parameter for the /start message sent to the bot when - user presses the switch button. 1-64 characters, only A-Z, a-z, 0-9, _ and - are allowed. - :type switch_pm_parameter: :obj:`typing.Optional[base.String]` - :return: On success, True is returned - :rtype: :obj:`base.Boolean` - """ - return await self.bot.answer_inline_query(self.id, - results=results, - cache_time=cache_time, - is_personal=is_personal, - next_offset=next_offset, - switch_pm_text=switch_pm_text, - switch_pm_parameter=switch_pm_parameter) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/inline_query_result.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/inline_query_result.py deleted file mode 100644 index da09db9d..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/inline_query_result.py +++ /dev/null @@ -1,843 +0,0 @@ -import typing - -from . import base -from . import fields -from .inline_keyboard import InlineKeyboardMarkup -from .input_message_content import InputMessageContent -from .message_entity import MessageEntity - - -class InlineQueryResult(base.TelegramObject): - """ - This object represents one result of an inline query. - - Telegram clients currently support results of the following 20 types - - https://core.telegram.org/bots/api#inlinequeryresult - """ - id: base.String = fields.Field() - reply_markup: InlineKeyboardMarkup = fields.Field(base=InlineKeyboardMarkup) - - def safe_get_parse_mode(self): - try: - return self.bot.parse_mode - except RuntimeError: - pass - - def __init__(self, **kwargs): - if 'parse_mode' in kwargs and kwargs['parse_mode'] is None: - kwargs['parse_mode'] = self.safe_get_parse_mode() - super(InlineQueryResult, self).__init__(**kwargs) - - -class InlineQueryResultArticle(InlineQueryResult): - """ - Represents a link to an article or web page. - - https://core.telegram.org/bots/api#inlinequeryresultarticle - """ - type: base.String = fields.Field(alias='type', default='article') - title: base.String = fields.Field() - input_message_content: InputMessageContent = fields.Field(base=InputMessageContent) - url: base.String = fields.Field() - hide_url: base.Boolean = fields.Field() - description: base.String = fields.Field() - thumb_url: base.String = fields.Field() - thumb_width: base.Integer = fields.Field() - thumb_height: base.Integer = fields.Field() - - def __init__(self, *, - id: base.String, - title: base.String, - input_message_content: InputMessageContent, - reply_markup: typing.Optional[InlineKeyboardMarkup] = None, - url: typing.Optional[base.String] = None, - hide_url: typing.Optional[base.Boolean] = None, - description: typing.Optional[base.String] = None, - thumb_url: typing.Optional[base.String] = None, - thumb_width: typing.Optional[base.Integer] = None, - thumb_height: typing.Optional[base.Integer] = None): - super(InlineQueryResultArticle, self).__init__(id=id, title=title, - input_message_content=input_message_content, - reply_markup=reply_markup, url=url, hide_url=hide_url, - description=description, thumb_url=thumb_url, - thumb_width=thumb_width, thumb_height=thumb_height) - - -class InlineQueryResultPhoto(InlineQueryResult): - """ - Represents a link to a photo. - - By default, this photo will be sent by the user with optional caption. - Alternatively, you can use input_message_content to send a message with the specified content - instead of the photo. - - https://core.telegram.org/bots/api#inlinequeryresultphoto - """ - type: base.String = fields.Field(alias='type', default='photo') - photo_url: base.String = fields.Field() - thumb_url: base.String = fields.Field() - photo_width: base.Integer = fields.Field() - photo_height: base.Integer = fields.Field() - title: base.String = fields.Field() - description: base.String = fields.Field() - caption: base.String = fields.Field() - input_message_content: InputMessageContent = fields.Field(base=InputMessageContent) - - def __init__( - self, - *, - id: base.String, - photo_url: base.String, - thumb_url: base.String, - photo_width: typing.Optional[base.Integer] = None, - photo_height: typing.Optional[base.Integer] = None, - title: typing.Optional[base.String] = None, - description: typing.Optional[base.String] = None, - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - reply_markup: typing.Optional[InlineKeyboardMarkup] = None, - input_message_content: typing.Optional[InputMessageContent] = None, - ): - super().__init__( - id=id, photo_url=photo_url, thumb_url=thumb_url, - photo_width=photo_width, photo_height=photo_height, title=title, - description=description, caption=caption, - parse_mode=parse_mode, caption_entities=caption_entities, - reply_markup=reply_markup, input_message_content=input_message_content, - ) - - -class InlineQueryResultGif(InlineQueryResult): - """ - Represents a link to an animated GIF file. - - By default, this animated GIF file will be sent by the user with optional caption. - Alternatively, you can use input_message_content to send a message with the specified content - instead of the animation. - - https://core.telegram.org/bots/api#inlinequeryresultgif - """ - type: base.String = fields.Field(alias='type', default='gif') - gif_url: base.String = fields.Field() - gif_width: base.Integer = fields.Field() - gif_height: base.Integer = fields.Field() - gif_duration: base.Integer = fields.Field() - thumb_url: base.String = fields.Field() - thumb_mime_type: base.String = fields.Field() - title: base.String = fields.Field() - caption: base.String = fields.Field() - input_message_content: InputMessageContent = fields.Field(base=InputMessageContent) - - def __init__( - self, - *, - id: base.String, - gif_url: base.String, - gif_width: typing.Optional[base.Integer] = None, - gif_height: typing.Optional[base.Integer] = None, - gif_duration: typing.Optional[base.Integer] = None, - thumb_url: typing.Optional[base.String] = None, - title: typing.Optional[base.String] = None, - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - reply_markup: typing.Optional[InlineKeyboardMarkup] = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - input_message_content: typing.Optional[InputMessageContent] = None, - ): - super().__init__( - id=id, gif_url=gif_url, gif_width=gif_width, gif_height=gif_height, - gif_duration=gif_duration, thumb_url=thumb_url, title=title, - caption=caption, parse_mode=parse_mode, reply_markup=reply_markup, - caption_entities=caption_entities, - input_message_content=input_message_content, - ) - - -class InlineQueryResultMpeg4Gif(InlineQueryResult): - """ - Represents a link to a video animation (H.264/MPEG-4 AVC video without sound). - - By default, this animated MPEG-4 file will be sent by the user with optional caption. - Alternatively, you can use input_message_content to send a message with the specified content - instead of the animation. - - https://core.telegram.org/bots/api#inlinequeryresultmpeg4gif - """ - type: base.String = fields.Field(alias='type', default='mpeg4_gif') - mpeg4_url: base.String = fields.Field() - mpeg4_width: base.Integer = fields.Field() - mpeg4_height: base.Integer = fields.Field() - mpeg4_duration: base.Integer = fields.Field() - thumb_url: base.String = fields.Field() - thumb_mime_type: base.String = fields.Field() - title: base.String = fields.Field() - caption: base.String = fields.Field() - input_message_content: InputMessageContent = fields.Field(base=InputMessageContent) - - def __init__( - self, - *, - id: base.String, - mpeg4_url: base.String, - thumb_url: base.String, - mpeg4_width: typing.Optional[base.Integer] = None, - mpeg4_height: typing.Optional[base.Integer] = None, - mpeg4_duration: typing.Optional[base.Integer] = None, - title: typing.Optional[base.String] = None, - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - reply_markup: typing.Optional[InlineKeyboardMarkup] = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - input_message_content: typing.Optional[InputMessageContent] = None, - ): - super().__init__( - id=id, mpeg4_url=mpeg4_url, mpeg4_width=mpeg4_width, - mpeg4_height=mpeg4_height, mpeg4_duration=mpeg4_duration, - thumb_url=thumb_url, title=title, caption=caption, - parse_mode=parse_mode, reply_markup=reply_markup, - caption_entities=caption_entities, - input_message_content=input_message_content, - ) - - -class InlineQueryResultVideo(InlineQueryResult): - """ - Represents a link to a page containing an embedded video player or a video file. - - By default, this video file will be sent by the user with an optional caption. - Alternatively, you can use input_message_content to send a message with the specified content - instead of the video. - - If an InlineQueryResultVideo message contains an embedded video (e.g., YouTube), - you must replace its content using input_message_content. - - https://core.telegram.org/bots/api#inlinequeryresultvideo - """ - type: base.String = fields.Field(alias='type', default='video') - video_url: base.String = fields.Field() - mime_type: base.String = fields.Field() - thumb_url: base.String = fields.Field() - title: base.String = fields.Field() - caption: base.String = fields.Field() - video_width: base.Integer = fields.Field() - video_height: base.Integer = fields.Field() - video_duration: base.Integer = fields.Field() - description: base.String = fields.Field() - input_message_content: InputMessageContent = fields.Field(base=InputMessageContent) - - def __init__( - self, - *, - id: base.String, - video_url: base.String, - mime_type: base.String, - thumb_url: base.String, - title: base.String, - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - video_width: typing.Optional[base.Integer] = None, - video_height: typing.Optional[base.Integer] = None, - video_duration: typing.Optional[base.Integer] = None, - description: typing.Optional[base.String] = None, - reply_markup: typing.Optional[InlineKeyboardMarkup] = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - input_message_content: typing.Optional[InputMessageContent] = None, - ): - super().__init__( - id=id, video_url=video_url, mime_type=mime_type, thumb_url=thumb_url, - title=title, caption=caption, video_width=video_width, - video_height=video_height, video_duration=video_duration, - description=description, parse_mode=parse_mode, - reply_markup=reply_markup, caption_entities=caption_entities, - input_message_content=input_message_content, - ) - - -class InlineQueryResultAudio(InlineQueryResult): - """ - Represents a link to an mp3 audio file. By default, this audio file will be sent by the user. - Alternatively, you can use input_message_content to send a message with the specified content - instead of the audio. - - Note: This will only work in Telegram versions released after 9 April, 2016. - Older clients will ignore them. - - https://core.telegram.org/bots/api#inlinequeryresultaudio - """ - type: base.String = fields.Field(alias='type', default='audio') - audio_url: base.String = fields.Field() - title: base.String = fields.Field() - caption: base.String = fields.Field() - performer: base.String = fields.Field() - audio_duration: base.Integer = fields.Field() - input_message_content: InputMessageContent = fields.Field(base=InputMessageContent) - - def __init__( - self, - *, - id: base.String, - audio_url: base.String, - title: base.String, - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - performer: typing.Optional[base.String] = None, - audio_duration: typing.Optional[base.Integer] = None, - reply_markup: typing.Optional[InlineKeyboardMarkup] = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - input_message_content: typing.Optional[InputMessageContent] = None, - ): - super().__init__( - id=id, audio_url=audio_url, title=title, - caption=caption, parse_mode=parse_mode, - performer=performer, audio_duration=audio_duration, - reply_markup=reply_markup, caption_entities=caption_entities, - input_message_content=input_message_content, - ) - - -class InlineQueryResultVoice(InlineQueryResult): - """ - Represents a link to a voice recording in an .ogg container encoded with OPUS. - - By default, this voice recording will be sent by the user. - Alternatively, you can use input_message_content to send a message with the specified content - instead of the the voice message. - - Note: This will only work in Telegram versions released after 9 April, 2016. - Older clients will ignore them. - - https://core.telegram.org/bots/api#inlinequeryresultvoice - """ - type: base.String = fields.Field(alias='type', default='voice') - voice_url: base.String = fields.Field() - title: base.String = fields.Field() - caption: base.String = fields.Field() - voice_duration: base.Integer = fields.Field() - input_message_content: InputMessageContent = fields.Field(base=InputMessageContent) - - def __init__( - self, - *, - id: base.String, - voice_url: base.String, - title: base.String, - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - voice_duration: typing.Optional[base.Integer] = None, - reply_markup: typing.Optional[InlineKeyboardMarkup] = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - input_message_content: typing.Optional[InputMessageContent] = None, - ): - super().__init__( - id=id, voice_url=voice_url, title=title, caption=caption, - voice_duration=voice_duration, parse_mode=parse_mode, - reply_markup=reply_markup, caption_entities=caption_entities, - input_message_content=input_message_content, - ) - - -class InlineQueryResultDocument(InlineQueryResult): - """ - Represents a link to a file. - - By default, this file will be sent by the user with an optional caption. - Alternatively, you can use input_message_content to send a message with the specified content - instead of the file. Currently, only .PDF and .ZIP files can be sent using this method. - - Note: This will only work in Telegram versions released after 9 April, 2016. Older clients will ignore them. - - https://core.telegram.org/bots/api#inlinequeryresultdocument - """ - type: base.String = fields.Field(alias='type', default='document') - title: base.String = fields.Field() - caption: base.String = fields.Field() - document_url: base.String = fields.Field() - mime_type: base.String = fields.Field() - description: base.String = fields.Field() - input_message_content: InputMessageContent = fields.Field(base=InputMessageContent) - thumb_url: base.String = fields.Field() - thumb_width: base.Integer = fields.Field() - thumb_height: base.Integer = fields.Field() - - def __init__( - self, - *, - id: base.String, - title: base.String, - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - document_url: typing.Optional[base.String] = None, - mime_type: typing.Optional[base.String] = None, - description: typing.Optional[base.String] = None, - reply_markup: typing.Optional[InlineKeyboardMarkup] = None, - input_message_content: typing.Optional[InputMessageContent] = None, - thumb_url: typing.Optional[base.String] = None, - thumb_width: typing.Optional[base.Integer] = None, - thumb_height: typing.Optional[base.Integer] = None, - ): - super().__init__( - id=id, title=title, caption=caption, parse_mode=parse_mode, - caption_entities=caption_entities, document_url=document_url, - mime_type=mime_type, description=description, reply_markup=reply_markup, - input_message_content=input_message_content, - thumb_url=thumb_url, thumb_width=thumb_width, - thumb_height=thumb_height, - ) - - -class InlineQueryResultLocation(InlineQueryResult): - """ - Represents a location on a map. - - By default, the location will be sent by the user. - Alternatively, you can use input_message_content to send a message with the specified content - instead of the location. - - https://core.telegram.org/bots/api#inlinequeryresultlocation - """ - type: base.String = fields.Field(alias='type', default='location') - latitude: base.Float = fields.Field() - longitude: base.Float = fields.Field() - title: base.String = fields.Field() - horizontal_accuracy: typing.Optional[base.Float] = fields.Field() - live_period: base.Integer = fields.Field() - heading: typing.Optional[base.Integer] = fields.Field() - proximity_alert_radius: typing.Optional[base.Integer] = fields.Field() - input_message_content: InputMessageContent = fields.Field(base=InputMessageContent) - thumb_url: base.String = fields.Field() - thumb_width: base.Integer = fields.Field() - thumb_height: base.Integer = fields.Field() - - def __init__(self, *, - id: base.String, - latitude: base.Float, - longitude: base.Float, - title: base.String, - horizontal_accuracy: typing.Optional[base.Float] = None, - live_period: typing.Optional[base.Integer] = None, - heading: typing.Optional[base.Integer] = None, - proximity_alert_radius: typing.Optional[base.Integer] = None, - reply_markup: typing.Optional[InlineKeyboardMarkup] = None, - input_message_content: typing.Optional[InputMessageContent] = None, - thumb_url: typing.Optional[base.String] = None, - thumb_width: typing.Optional[base.Integer] = None, - thumb_height: typing.Optional[base.Integer] = None, - ): - super().__init__( - id=id, - latitude=latitude, - longitude=longitude, - title=title, - horizontal_accuracy=horizontal_accuracy, - live_period=live_period, - heading=heading, - proximity_alert_radius=proximity_alert_radius, - reply_markup=reply_markup, - input_message_content=input_message_content, - thumb_url=thumb_url, - thumb_width=thumb_width, - thumb_height=thumb_height - ) - - -class InlineQueryResultVenue(InlineQueryResult): - """ - Represents a venue. By default, the venue will be sent by the user. - - Alternatively, you can use input_message_content to send a message with the specified content - instead of the venue. - - Note: This will only work in Telegram versions released after 9 April, 2016. - Older clients will ignore them. - - https://core.telegram.org/bots/api#inlinequeryresultvenue - """ - type: base.String = fields.Field(alias='type', default='venue') - latitude: base.Float = fields.Field() - longitude: base.Float = fields.Field() - title: base.String = fields.Field() - address: base.String = fields.Field() - foursquare_id: base.String = fields.Field() - foursquare_type: base.String = fields.Field() - google_place_id: base.String = fields.Field() - google_place_type: base.String = fields.Field() - input_message_content: InputMessageContent = fields.Field(base=InputMessageContent) - thumb_url: base.String = fields.Field() - thumb_width: base.Integer = fields.Field() - thumb_height: base.Integer = fields.Field() - - def __init__( - self, - *, - id: base.String, - latitude: base.Float, - longitude: base.Float, - title: base.String, - address: base.String, - foursquare_id: typing.Optional[base.String] = None, - foursquare_type: typing.Optional[base.String] = None, - google_place_id: typing.Optional[base.String] = None, - google_place_type: typing.Optional[base.String] = None, - reply_markup: typing.Optional[InlineKeyboardMarkup] = None, - input_message_content: typing.Optional[InputMessageContent] = None, - thumb_url: typing.Optional[base.String] = None, - thumb_width: typing.Optional[base.Integer] = None, - thumb_height: typing.Optional[base.Integer] = None, - ): - super().__init__( - id=id, latitude=latitude, longitude=longitude, title=title, - address=address, foursquare_id=foursquare_id, - foursquare_type=foursquare_type, google_place_id=google_place_id, - google_place_type=google_place_type, reply_markup=reply_markup, - input_message_content=input_message_content, thumb_url=thumb_url, - thumb_width=thumb_width, thumb_height=thumb_height, - ) - - -class InlineQueryResultContact(InlineQueryResult): - """ - Represents a contact with a phone number. - - By default, this contact will be sent by the user. - Alternatively, you can use input_message_content to send a message with the specified content - instead of the contact. - - Note: This will only work in Telegram versions released after 9 April, 2016. Older clients will ignore them. - - https://core.telegram.org/bots/api#inlinequeryresultcontact - """ - type: base.String = fields.Field(alias='type', default='contact') - phone_number: base.String = fields.Field() - first_name: base.String = fields.Field() - last_name: base.String = fields.Field() - vcard: base.String = fields.Field() - input_message_content: InputMessageContent = fields.Field(base=InputMessageContent) - thumb_url: base.String = fields.Field() - thumb_width: base.Integer = fields.Field() - thumb_height: base.Integer = fields.Field() - foursquare_type: base.String = fields.Field() - - def __init__(self, *, - id: base.String, - phone_number: base.String, - first_name: base.String, - last_name: typing.Optional[base.String] = None, - reply_markup: typing.Optional[InlineKeyboardMarkup] = None, - input_message_content: typing.Optional[InputMessageContent] = None, - thumb_url: typing.Optional[base.String] = None, - thumb_width: typing.Optional[base.Integer] = None, - thumb_height: typing.Optional[base.Integer] = None, - foursquare_type: typing.Optional[base.String] = None): - super(InlineQueryResultContact, self).__init__(id=id, phone_number=phone_number, - first_name=first_name, last_name=last_name, - reply_markup=reply_markup, - input_message_content=input_message_content, thumb_url=thumb_url, - thumb_width=thumb_width, thumb_height=thumb_height, - foursquare_type=foursquare_type) - - -class InlineQueryResultGame(InlineQueryResult): - """ - Represents a Game. - - Note: This will only work in Telegram versions released after October 1, 2016. - Older clients will not display any inline results if a game result is among them. - - https://core.telegram.org/bots/api#inlinequeryresultgame - """ - type: base.String = fields.Field(alias='type', default='game') - game_short_name: base.String = fields.Field() - - def __init__(self, *, - id: base.String, - game_short_name: base.String, - reply_markup: typing.Optional[InlineKeyboardMarkup] = None): - super(InlineQueryResultGame, self).__init__(id=id, game_short_name=game_short_name, - reply_markup=reply_markup) - - -class InlineQueryResultCachedPhoto(InlineQueryResult): - """ - Represents a link to a photo stored on the Telegram servers. - - By default, this photo will be sent by the user with an optional caption. - Alternatively, you can use input_message_content to send a message with the specified content - instead of the photo. - - https://core.telegram.org/bots/api#inlinequeryresultcachedphoto - """ - type: base.String = fields.Field(alias='type', default='photo') - photo_file_id: base.String = fields.Field() - title: base.String = fields.Field() - description: base.String = fields.Field() - caption: base.String = fields.Field() - input_message_content: InputMessageContent = fields.Field(base=InputMessageContent) - - def __init__( - self, - *, - id: base.String, - photo_file_id: base.String, - title: typing.Optional[base.String] = None, - description: typing.Optional[base.String] = None, - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - reply_markup: typing.Optional[InlineKeyboardMarkup] = None, - input_message_content: typing.Optional[InputMessageContent] = None, - ): - super().__init__( - id=id, photo_file_id=photo_file_id, title=title, description=description, - caption=caption, parse_mode=parse_mode, caption_entities=caption_entities, - reply_markup=reply_markup, input_message_content=input_message_content, - ) - - -class InlineQueryResultCachedGif(InlineQueryResult): - """ - Represents a link to an animated GIF file stored on the Telegram servers. - - By default, this animated GIF file will be sent by the user with an optional caption. - Alternatively, you can use input_message_content to send a message with specified content - instead of the animation. - - https://core.telegram.org/bots/api#inlinequeryresultcachedgif - """ - type: base.String = fields.Field(alias='type', default='gif') - gif_file_id: base.String = fields.Field() - title: base.String = fields.Field() - caption: base.String = fields.Field() - input_message_content: InputMessageContent = fields.Field(base=InputMessageContent) - - def __init__( - self, - *, - id: base.String, - gif_file_id: base.String, - title: typing.Optional[base.String] = None, - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - reply_markup: typing.Optional[InlineKeyboardMarkup] = None, - input_message_content: typing.Optional[InputMessageContent] = None, - ): - super().__init__( - id=id, gif_file_id=gif_file_id, title=title, caption=caption, - parse_mode=parse_mode, caption_entities=caption_entities, - reply_markup=reply_markup, input_message_content=input_message_content, - ) - - -class InlineQueryResultCachedMpeg4Gif(InlineQueryResult): - """ - Represents a link to a video animation (H.264/MPEG-4 AVC video without sound) stored on the Telegram servers. - - By default, this animated MPEG-4 file will be sent by the user with an optional caption. - Alternatively, you can use input_message_content to send a message with the specified content - instead of the animation. - - https://core.telegram.org/bots/api#inlinequeryresultcachedmpeg4gif - """ - type: base.String = fields.Field(alias='type', default='mpeg4_gif') - mpeg4_file_id: base.String = fields.Field() - title: base.String = fields.Field() - caption: base.String = fields.Field() - input_message_content: InputMessageContent = fields.Field(base=InputMessageContent) - - def __init__( - self, - *, - id: base.String, - mpeg4_file_id: base.String, - title: typing.Optional[base.String] = None, - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - reply_markup: typing.Optional[InlineKeyboardMarkup] = None, - input_message_content: typing.Optional[InputMessageContent] = None, - ): - super().__init__( - id=id, mpeg4_file_id=mpeg4_file_id, title=title, caption=caption, - parse_mode=parse_mode, caption_entities=caption_entities, - reply_markup=reply_markup, input_message_content=input_message_content, - ) - - -class InlineQueryResultCachedSticker(InlineQueryResult): - """ - Represents a link to a sticker stored on the Telegram servers. - - By default, this sticker will be sent by the user. - Alternatively, you can use input_message_content to send a message with the specified content - instead of the sticker. - - Note: This will only work in Telegram versions released after 9 April, 2016. - Older clients will ignore them. - - https://core.telegram.org/bots/api#inlinequeryresultcachedsticker - """ - type: base.String = fields.Field(alias='type', default='sticker') - sticker_file_id: base.String = fields.Field() - input_message_content: InputMessageContent = fields.Field(base=InputMessageContent) - - def __init__(self, *, - id: base.String, - sticker_file_id: base.String, - reply_markup: typing.Optional[InlineKeyboardMarkup] = None, - input_message_content: typing.Optional[InputMessageContent] = None): - super(InlineQueryResultCachedSticker, self).__init__(id=id, sticker_file_id=sticker_file_id, - reply_markup=reply_markup, - input_message_content=input_message_content) - - -class InlineQueryResultCachedDocument(InlineQueryResult): - """ - Represents a link to a file stored on the Telegram servers. - By default, this file will be sent by the user with an optional caption. - Alternatively, you can use input_message_content to send a message with the specified content - instead of the file. - - Note: This will only work in Telegram versions released after 9 April, 2016. - Older clients will ignore them. - - https://core.telegram.org/bots/api#inlinequeryresultcacheddocument - """ - type: base.String = fields.Field(alias='type', default='document') - title: base.String = fields.Field() - document_file_id: base.String = fields.Field() - description: base.String = fields.Field() - caption: base.String = fields.Field() - input_message_content: InputMessageContent = fields.Field(base=InputMessageContent) - - def __init__( - self, - *, - id: base.String, - title: base.String, - document_file_id: base.String, - description: typing.Optional[base.String] = None, - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - reply_markup: typing.Optional[InlineKeyboardMarkup] = None, - input_message_content: typing.Optional[InputMessageContent] = None, - ): - super().__init__( - id=id, title=title, document_file_id=document_file_id, - description=description, caption=caption, parse_mode=parse_mode, - caption_entities=caption_entities, reply_markup=reply_markup, - input_message_content=input_message_content, - ) - - -class InlineQueryResultCachedVideo(InlineQueryResult): - """ - Represents a link to a video file stored on the Telegram servers. - - By default, this video file will be sent by the user with an optional caption. - Alternatively, you can use input_message_content to send a message with the specified content - instead of the video. - - https://core.telegram.org/bots/api#inlinequeryresultcachedvideo - """ - type: base.String = fields.Field(alias='type', default='video') - video_file_id: base.String = fields.Field() - title: base.String = fields.Field() - description: base.String = fields.Field() - caption: base.String = fields.Field() - input_message_content: InputMessageContent = fields.Field(base=InputMessageContent) - - def __init__( - self, - *, - id: base.String, - video_file_id: base.String, - title: base.String, - description: typing.Optional[base.String] = None, - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - reply_markup: typing.Optional[InlineKeyboardMarkup] = None, - input_message_content: typing.Optional[InputMessageContent] = None, - ): - super().__init__( - id=id, video_file_id=video_file_id, title=title, description=description, - caption=caption, parse_mode=parse_mode, caption_entities=caption_entities, - reply_markup=reply_markup, input_message_content=input_message_content, - ) - - -class InlineQueryResultCachedVoice(InlineQueryResult): - """ - Represents a link to a voice message stored on the Telegram servers. - - By default, this voice message will be sent by the user. - Alternatively, you can use input_message_content to send a message with the specified content - instead of the voice message. - - Note: This will only work in Telegram versions released after 9 April, 2016. Older clients will ignore them. - - https://core.telegram.org/bots/api#inlinequeryresultcachedvoice - """ - type: base.String = fields.Field(alias='type', default='voice') - voice_file_id: base.String = fields.Field() - title: base.String = fields.Field() - caption: base.String = fields.Field() - input_message_content: InputMessageContent = fields.Field(base=InputMessageContent) - - def __init__( - self, - *, - id: base.String, - voice_file_id: base.String, - title: base.String, - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - reply_markup: typing.Optional[InlineKeyboardMarkup] = None, - input_message_content: typing.Optional[InputMessageContent] = None, - ): - super().__init__( - id=id, voice_file_id=voice_file_id, title=title, caption=caption, - parse_mode=parse_mode, caption_entities=caption_entities, - reply_markup=reply_markup, input_message_content=input_message_content, - ) - - -class InlineQueryResultCachedAudio(InlineQueryResult): - """ - Represents a link to an mp3 audio file stored on the Telegram servers. - - By default, this audio file will be sent by the user. - Alternatively, you can use input_message_content to send a message with - the specified content instead of the audio. - - Note: This will only work in Telegram versions released after 9 April, 2016. - Older clients will ignore them. - - https://core.telegram.org/bots/api#inlinequeryresultcachedaudio - """ - type: base.String = fields.Field(alias='type', default='audio') - audio_file_id: base.String = fields.Field() - caption: base.String = fields.Field() - input_message_content: InputMessageContent = fields.Field(base=InputMessageContent) - - def __init__( - self, - *, - id: base.String, - audio_file_id: base.String, - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - reply_markup: typing.Optional[InlineKeyboardMarkup] = None, - input_message_content: typing.Optional[InputMessageContent] = None, - ): - super().__init__( - id=id, audio_file_id=audio_file_id, caption=caption, - parse_mode=parse_mode, caption_entities=caption_entities, - reply_markup=reply_markup, input_message_content=input_message_content, - ) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/input_file.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/input_file.py deleted file mode 100644 index 3a78c499..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/input_file.py +++ /dev/null @@ -1,227 +0,0 @@ -import asyncio -import inspect -import io -import logging -import os -import secrets -from pathlib import Path -from typing import Union - -import aiohttp - -from . import base -from ..bot import api - -CHUNK_SIZE = 65536 - -log = logging.getLogger('aiogram') - - -class InputFile(base.TelegramObject): - """ - This object represents the contents of a file to be uploaded. - Must be posted using multipart/form-data in the usual way that files are uploaded via the browser. - - Also that is not typical TelegramObject! - - https://core.telegram.org/bots/api#inputfile - """ - - def __init__(self, path_or_bytesio: Union[str, io.IOBase, Path], filename=None, conf=None): - """ - - :param path_or_bytesio: - :param filename: - :param conf: - """ - super(InputFile, self).__init__(conf=conf) - if isinstance(path_or_bytesio, str): - # As path - self._file = open(path_or_bytesio, 'rb') - self._path = path_or_bytesio - if filename is None: - filename = os.path.split(path_or_bytesio)[-1] - elif isinstance(path_or_bytesio, io.IOBase): - self._path = None - self._file = path_or_bytesio - elif isinstance(path_or_bytesio, _WebPipe): - self._path = None - self._file = path_or_bytesio - - elif isinstance(path_or_bytesio, Path): - self._file = path_or_bytesio.open("rb") - self._path = path_or_bytesio.resolve() - if filename is None: - filename = path_or_bytesio.name - else: - raise TypeError('Not supported file type.') - - self._filename = filename - - self.attachment_key = secrets.token_urlsafe(16) - - def __del__(self): - """ - Close file descriptor - """ - if not hasattr(self, '_file'): - return - - if inspect.iscoroutinefunction(self._file.close): - return asyncio.ensure_future(self._file.close()) - self._file.close() - - @property - def filename(self): - if self._filename is None: - self._filename = api.guess_filename(self._file) - return self._filename - - @filename.setter - def filename(self, value): - self._filename = value - - @property - def attach(self): - return f"attach://{self.attachment_key}" - - def get_filename(self) -> str: - """ - Get file name - - :return: name - """ - return self.filename - - @property - def file(self): - return self._file - - def get_file(self): - """ - Get file object - - :return: - """ - return self.file - - @classmethod - def from_url(cls, url, filename=None, chunk_size=CHUNK_SIZE): - """ - Download file from URL - - Manually is not required action. You can send urls instead! - - :param url: target URL - :param filename: optional. set custom file name - :param chunk_size: - - :return: InputFile - """ - pipe = _WebPipe(url, chunk_size=chunk_size) - if filename is None: - filename = pipe.name - - return cls(pipe, filename, chunk_size) - - def save(self, filename, chunk_size=CHUNK_SIZE): - """ - Write file to disk - - :param filename: - :param chunk_size: - """ - with open(filename, 'wb') as fp: - while True: - # Chunk writer - data = self.file.read(chunk_size) - if not data: - break - fp.write(data) - # Flush all data - fp.flush() - - # Go to start of file. - if self.file.seekable(): - self.file.seek(0) - - def __str__(self): - return f"" - - __repr__ = __str__ - - def to_python(self): - raise TypeError('Object of this type is not exportable!') - - @classmethod - def to_object(cls, data): - raise TypeError('Object of this type is not importable!') - - -class _WebPipe: - def __init__(self, url, chunk_size=-1): - self.url = url - self.chunk_size = chunk_size - - self._session: aiohttp.ClientSession = None - self._response: aiohttp.ClientResponse = None - self._reader = None - self._name = None - - self._lock = asyncio.Lock() - - @property - def name(self): - if not self._name: - *_, part = self.url.rpartition('/') - if part: - self._name = part - else: - self._name = secrets.token_urlsafe(24) - return self._name - - async def open(self): - session = self._session = aiohttp.ClientSession() - self._response = await session.get(self.url) # type: aiohttp.ClientResponse - await self._lock.acquire() - - return self - - async def close(self): - if self._response and not self._response.closed: - await self._response.close() - if self._session and not self._session.closed: - await self._session.close() - if self._lock.locked(): - self._lock.release() - - @property - def closed(self): - return not self._session or self._session.closed - - def __aiter__(self): - return self - - async def __anext__(self): - if self.closed: - await self.open() - - chunk = await self.read(self.chunk_size) - if not chunk: - await self.close() - raise StopAsyncIteration - return chunk - - async def read(self, chunk_size=-1): - if not self._response: - raise LookupError('I/O operation on closed stream') - response: aiohttp.ClientResponse = self._response - reader: aiohttp.StreamReader = response.content - - return await reader.read(chunk_size) - - def __str__(self): - result = f"WebPipe url='{self.url}', name='{self.name}'" - return '<' + result + '>' - - __repr__ = __str__ diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/input_media.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/input_media.py deleted file mode 100644 index 6804b460..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/input_media.py +++ /dev/null @@ -1,425 +0,0 @@ -import io -import secrets -import typing - -from . import base -from . import fields -from .input_file import InputFile -from .message_entity import MessageEntity - -ATTACHMENT_PREFIX = 'attach://' - - -class InputMedia(base.TelegramObject): - """ - This object represents the content of a media message to be sent. It should be one of - - InputMediaAnimation - - InputMediaDocument - - InputMediaAudio - - InputMediaPhoto - - InputMediaVideo - - That is only base class. - - https://core.telegram.org/bots/api#inputmedia - """ - type: base.String = fields.Field(default='photo') - media: base.String = fields.Field(alias='media', on_change='_media_changed') - thumb: typing.Union[base.InputFile, base.String] = fields.Field(alias='thumb', on_change='_thumb_changed') - caption: base.String = fields.Field() - parse_mode: base.String = fields.Field() - caption_entities: typing.List[MessageEntity] = fields.ListField(base=MessageEntity) - - def __init__(self, *args, **kwargs): - self._thumb_file = None - self._media_file = None - - media = kwargs.pop('media', None) - if isinstance(media, (io.IOBase, InputFile)): - self.file = media - elif media is not None: - self.media = media - - thumb = kwargs.pop('thumb', None) - if isinstance(thumb, (io.IOBase, InputFile)): - self.thumb_file = thumb - elif thumb is not None: - self.thumb = thumb - - super(InputMedia, self).__init__(*args, **kwargs) - - try: - if self.parse_mode is None and self.bot and self.bot.parse_mode: - self.parse_mode = self.bot.parse_mode - except RuntimeError: - pass - - @property - def file(self): - return self._media_file - - @file.setter - def file(self, file: io.IOBase): - self.media = 'attach://' + secrets.token_urlsafe(16) - self._media_file = file - - @file.deleter - def file(self): - self.media = None - self._media_file = None - - def _media_changed(self, value): - if value is None or isinstance(value, str) and not value.startswith('attach://'): - self._media_file = None - - @property - def thumb_file(self): - return self._thumb_file - - @thumb_file.setter - def thumb_file(self, file: io.IOBase): - self.thumb = 'attach://' + secrets.token_urlsafe(16) - self._thumb_file = file - - @thumb_file.deleter - def thumb_file(self): - self.thumb = None - self._thumb_file = None - - def _thumb_changed(self, value): - if value is None or isinstance(value, str) and not value.startswith('attach://'): - self._thumb_file = None - - def get_files(self): - if self._media_file: - yield self.media[9:], self._media_file - if self._thumb_file: - yield self.thumb[9:], self._thumb_file - - -class InputMediaAnimation(InputMedia): - """ - Represents an animation file (GIF or H.264/MPEG-4 AVC video without sound) to be sent. - - https://core.telegram.org/bots/api#inputmediaanimation - """ - - width: base.Integer = fields.Field() - height: base.Integer = fields.Field() - duration: base.Integer = fields.Field() - - def __init__( - self, - media: base.InputFile, - thumb: typing.Union[base.InputFile, base.String] = None, - caption: base.String = None, - width: base.Integer = None, - height: base.Integer = None, - duration: base.Integer = None, - parse_mode: base.String = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - **kwargs, - ): - super().__init__( - type='animation', media=media, thumb=thumb, caption=caption, width=width, - height=height, duration=duration, parse_mode=parse_mode, - caption_entities=caption_entities, conf=kwargs, - ) - - -class InputMediaDocument(InputMedia): - """ - Represents a general file to be sent. - - https://core.telegram.org/bots/api#inputmediadocument - """ - - def __init__( - self, - media: base.InputFile, - thumb: typing.Union[base.InputFile, base.String, None] = None, - caption: base.String = None, - parse_mode: base.String = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - disable_content_type_detection: typing.Optional[base.Boolean] = None, - **kwargs, - ): - super().__init__( - type='document', media=media, thumb=thumb, caption=caption, - parse_mode=parse_mode, caption_entities=caption_entities, - disable_content_type_detection=disable_content_type_detection, - conf=kwargs, - ) - - -class InputMediaAudio(InputMedia): - """ - Represents an audio file to be treated as music to be sent. - - https://core.telegram.org/bots/api#inputmediaaudio - """ - - duration: base.Integer = fields.Field() - performer: base.String = fields.Field() - title: base.String = fields.Field() - - def __init__( - self, - media: base.InputFile, - thumb: typing.Union[base.InputFile, base.String] = None, - caption: base.String = None, - duration: base.Integer = None, - performer: base.String = None, - title: base.String = None, - parse_mode: base.String = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - **kwargs, - ): - super().__init__( - type='audio', media=media, thumb=thumb, caption=caption, - duration=duration, performer=performer, title=title, - parse_mode=parse_mode, caption_entities=caption_entities, conf=kwargs, - ) - - -class InputMediaPhoto(InputMedia): - """ - Represents a photo to be sent. - - https://core.telegram.org/bots/api#inputmediaphoto - """ - - def __init__( - self, - media: base.InputFile, - caption: base.String = None, - parse_mode: base.String = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - **kwargs, - ): - super().__init__( - type='photo', media=media, caption=caption, parse_mode=parse_mode, - caption_entities=caption_entities, conf=kwargs, - ) - - -class InputMediaVideo(InputMedia): - """ - Represents a video to be sent. - - https://core.telegram.org/bots/api#inputmediavideo - """ - width: base.Integer = fields.Field() - height: base.Integer = fields.Field() - duration: base.Integer = fields.Field() - supports_streaming: base.Boolean = fields.Field() - - def __init__( - self, - media: base.InputFile, - thumb: typing.Union[base.InputFile, base.String] = None, - caption: base.String = None, - width: base.Integer = None, - height: base.Integer = None, - duration: base.Integer = None, - parse_mode: base.String = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - supports_streaming: base.Boolean = None, - **kwargs, - ): - super().__init__( - type='video', media=media, thumb=thumb, caption=caption, - width=width, height=height, duration=duration, - parse_mode=parse_mode, caption_entities=caption_entities, - supports_streaming=supports_streaming, conf=kwargs - ) - - -class MediaGroup(base.TelegramObject): - """ - Helper for sending media group - """ - - def __init__(self, medias: typing.Optional[typing.List[typing.Union[InputMedia, typing.Dict]]] = None): - super(MediaGroup, self).__init__() - self.media = [] - - if medias: - self.attach_many(*medias) - - def attach_many(self, *medias: typing.Union[InputMedia, typing.Dict]): - """ - Attach list of media - - :param medias: - """ - for media in medias: - self.attach(media) - - def attach(self, media: typing.Union[InputMedia, typing.Dict]): - """ - Attach media - - :param media: - """ - if isinstance(media, dict): - if 'type' not in media: - raise ValueError(f"Invalid media!") - - media_type = media['type'] - if media_type == 'photo': - media = InputMediaPhoto(**media) - elif media_type == 'video': - media = InputMediaVideo(**media) - elif media_type == 'document': - media = InputMediaDocument(**media) - elif media_type == 'audio': - media = InputMediaAudio(**media) - # elif media_type == 'animation': - # media = InputMediaAnimation(**media) - else: - raise TypeError(f"Invalid media type '{media_type}'!") - - elif not isinstance(media, InputMedia): - raise TypeError(f"Media must be an instance of InputMedia or dict, not {type(media).__name__}") - - elif media.type == 'animation': - raise ValueError("This type of media is not supported by media groups!") - - self.media.append(media) - - ''' - def attach_animation(self, animation: base.InputFile, - thumb: typing.Union[base.InputFile, base.String] = None, - caption: base.String = None, - width: base.Integer = None, height: base.Integer = None, duration: base.Integer = None, - parse_mode: base.Boolean = None): - """ - Attach animation - - :param animation: - :param thumb: - :param caption: - :param width: - :param height: - :param duration: - :param parse_mode: - """ - if not isinstance(animation, InputMedia): - animation = InputMediaAnimation(media=animation, thumb=thumb, caption=caption, - width=width, height=height, duration=duration, - parse_mode=parse_mode) - self.attach(animation) - ''' - - def attach_audio(self, audio: typing.Union[InputMediaAudio, base.InputFile], - thumb: typing.Union[base.InputFile, base.String] = None, - caption: base.String = None, - duration: base.Integer = None, - performer: base.String = None, - title: base.String = None, - parse_mode: base.String = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None): - """ - Attach audio - - :param audio: - :param thumb: - :param caption: - :param duration: - :param performer: - :param title: - :param parse_mode: - :param caption_entities: - """ - if not isinstance(audio, InputMedia): - audio = InputMediaAudio(media=audio, thumb=thumb, caption=caption, - duration=duration, - performer=performer, title=title, - parse_mode=parse_mode, - caption_entities=caption_entities) - self.attach(audio) - - def attach_document(self, document: typing.Union[InputMediaDocument, base.InputFile], - thumb: typing.Union[base.InputFile, base.String] = None, - caption: base.String = None, parse_mode: base.String = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - disable_content_type_detection: typing.Optional[base.Boolean] = None): - """ - Attach document - - :param document: - :param caption: - :param thumb: - :param parse_mode: - :param caption_entities: - :param disable_content_type_detection: - """ - if not isinstance(document, InputMedia): - document = InputMediaDocument(media=document, thumb=thumb, caption=caption, - parse_mode=parse_mode, caption_entities=caption_entities, - disable_content_type_detection=disable_content_type_detection) - self.attach(document) - - def attach_photo(self, photo: typing.Union[InputMediaPhoto, base.InputFile], - caption: base.String = None, parse_mode: base.String = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None): - """ - Attach photo - - :param photo: - :param caption: - :param parse_mode: - :param caption_entities: - """ - if not isinstance(photo, InputMedia): - photo = InputMediaPhoto(media=photo, caption=caption, parse_mode=parse_mode, - caption_entities=caption_entities) - self.attach(photo) - - def attach_video(self, video: typing.Union[InputMediaVideo, base.InputFile], - thumb: typing.Union[base.InputFile, base.String] = None, - caption: base.String = None, - width: base.Integer = None, height: base.Integer = None, - duration: base.Integer = None, parse_mode: base.String = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - supports_streaming: base.Boolean = None): - """ - Attach video - - :param video: - :param thumb: - :param caption: - :param width: - :param height: - :param duration: - :param parse_mode: - :param caption_entities: - :param supports_streaming: - """ - if not isinstance(video, InputMedia): - video = InputMediaVideo(media=video, thumb=thumb, caption=caption, - width=width, height=height, duration=duration, - parse_mode=parse_mode, caption_entities=caption_entities, - supports_streaming=supports_streaming) - self.attach(video) - - def to_python(self) -> typing.List: - """ - Get object as JSON serializable - - :return: - """ - # self.clean() - result = [] - for obj in self.media: - if isinstance(obj, base.TelegramObject): - obj = obj.to_python() - result.append(obj) - return result - - def get_files(self): - for inputmedia in self.media: - if not isinstance(inputmedia, InputMedia) or not inputmedia.file: - continue - yield from inputmedia.get_files() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/input_message_content.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/input_message_content.py deleted file mode 100644 index f0c452cd..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/input_message_content.py +++ /dev/null @@ -1,213 +0,0 @@ -import typing - -from . import base -from . import fields -from .message_entity import MessageEntity -from .labeled_price import LabeledPrice -from ..utils.payload import generate_payload - - -class InputMessageContent(base.TelegramObject): - """ - This object represents the content of a message to be sent as a result of an inline query. - - Telegram clients currently support the following 4 types - - https://core.telegram.org/bots/api#inputmessagecontent - """ - pass - - -class InputContactMessageContent(InputMessageContent): - """ - Represents the content of a contact message to be sent as the result of an inline query. - - Note: This will only work in Telegram versions released after 9 April, 2016. - Older clients will ignore them. - - https://core.telegram.org/bots/api#inputcontactmessagecontent - """ - phone_number: base.String = fields.Field() - first_name: base.String = fields.Field() - last_name: typing.Optional[base.String] = fields.Field() - vcard: typing.Optional[base.String] = fields.Field() - - def __init__(self, - phone_number: base.String, - first_name: base.String = None, - last_name: typing.Optional[base.String] = None, - vcard: typing.Optional[base.String] = None, - ): - super().__init__( - phone_number=phone_number, - first_name=first_name, - last_name=last_name, - vcard=vcard - ) - - -class InputInvoiceMessageContent(InputMessageContent): - """ - Represents the content of an invoice message to be sent as the - result of an inline query. - - https://core.telegram.org/bots/api#inputinvoicemessagecontent - """ - - title: base.String = fields.Field() - description: base.String = fields.Field() - payload: base.String = fields.Field() - provider_token: base.String = fields.Field() - currency: base.String = fields.Field() - prices: typing.List[LabeledPrice] = fields.ListField(base=LabeledPrice) - max_tip_amount: typing.Optional[base.Integer] = fields.Field() - suggested_tip_amounts: typing.Optional[ - typing.List[base.Integer] - ] = fields.ListField(base=base.Integer) - provider_data: typing.Optional[base.String] = fields.Field() - photo_url: typing.Optional[base.String] = fields.Field() - photo_size: typing.Optional[base.Integer] = fields.Field() - photo_width: typing.Optional[base.Integer] = fields.Field() - photo_height: typing.Optional[base.Integer] = fields.Field() - need_name: typing.Optional[base.Boolean] = fields.Field() - need_phone_number: typing.Optional[base.Boolean] = fields.Field() - need_email: typing.Optional[base.Boolean] = fields.Field() - need_shipping_address: typing.Optional[base.Boolean] = fields.Field() - send_phone_number_to_provider: typing.Optional[base.Boolean] = fields.Field() - send_email_to_provider: typing.Optional[base.Boolean] = fields.Field() - is_flexible: typing.Optional[base.Boolean] = fields.Field() - - def __init__( - self, - title: base.String, - description: base.String, - payload: base.String, - provider_token: base.String, - currency: base.String, - prices: typing.List[LabeledPrice] = None, - max_tip_amount: typing.Optional[base.Integer] = None, - suggested_tip_amounts: typing.Optional[typing.List[base.Integer]] = None, - provider_data: typing.Optional[base.String] = None, - photo_url: typing.Optional[base.String] = None, - photo_size: typing.Optional[base.Integer] = None, - photo_width: typing.Optional[base.Integer] = None, - photo_height: typing.Optional[base.Integer] = None, - need_name: typing.Optional[base.Boolean] = None, - need_phone_number: typing.Optional[base.Boolean] = None, - need_email: typing.Optional[base.Boolean] = None, - need_shipping_address: typing.Optional[base.Boolean] = None, - send_phone_number_to_provider: typing.Optional[base.Boolean] = None, - send_email_to_provider: typing.Optional[base.Boolean] = None, - is_flexible: typing.Optional[base.Boolean] = None, - ): - if prices is None: - prices = [] - payload = generate_payload(**locals()) - super().__init__(**payload) - - -class InputLocationMessageContent(InputMessageContent): - """ - Represents the content of a location message to be sent as the result of an inline query. - - https://core.telegram.org/bots/api#inputlocationmessagecontent - """ - latitude: base.Float = fields.Field() - longitude: base.Float = fields.Field() - horizontal_accuracy: typing.Optional[base.Float] = fields.Field() - live_period: typing.Optional[base.Integer] = fields.Field() - heading: typing.Optional[base.Integer] = fields.Field() - proximity_alert_radius: typing.Optional[base.Integer] = fields.Field() - - def __init__(self, - latitude: base.Float, - longitude: base.Float, - horizontal_accuracy: typing.Optional[base.Float] = None, - live_period: typing.Optional[base.Integer] = None, - heading: typing.Optional[base.Integer] = None, - proximity_alert_radius: typing.Optional[base.Integer] = None, - ): - super().__init__( - latitude=latitude, - longitude=longitude, - horizontal_accuracy=horizontal_accuracy, - live_period=live_period, - heading=heading, - proximity_alert_radius=proximity_alert_radius, - ) - - -class InputTextMessageContent(InputMessageContent): - """ - Represents the content of a text message to be sent as the result of an inline query. - - https://core.telegram.org/bots/api#inputtextmessagecontent - """ - message_text: base.String = fields.Field() - parse_mode: typing.Optional[base.String] = fields.Field() - caption_entities: typing.Optional[typing.List[MessageEntity]] = fields.Field() - disable_web_page_preview: base.Boolean = fields.Field() - - def safe_get_parse_mode(self): - try: - return self.bot.parse_mode - except RuntimeError: - pass - - def __init__( - self, - message_text: base.String, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - disable_web_page_preview: typing.Optional[base.Boolean] = None, - ): - if parse_mode is None: - parse_mode = self.safe_get_parse_mode() - - super().__init__( - message_text=message_text, - parse_mode=parse_mode, - caption_entities=caption_entities, - disable_web_page_preview=disable_web_page_preview, - ) - - -class InputVenueMessageContent(InputMessageContent): - """ - Represents the content of a venue message to be sent as the result of an inline query. - - Note: This will only work in Telegram versions released after 9 April, 2016. - Older clients will ignore them. - - https://core.telegram.org/bots/api#inputvenuemessagecontent - """ - latitude: base.Float = fields.Field() - longitude: base.Float = fields.Field() - title: base.String = fields.Field() - address: base.String = fields.Field() - foursquare_id: typing.Optional[base.String] = fields.Field() - foursquare_type: typing.Optional[base.String] = fields.Field() - google_place_id: typing.Optional[base.String] = fields.Field() - google_place_type: typing.Optional[base.String] = fields.Field() - - def __init__( - self, - latitude: base.Float, - longitude: base.Float, - title: base.String, - address: base.String, - foursquare_id: typing.Optional[base.String] = None, - foursquare_type: typing.Optional[base.String] = None, - google_place_id: typing.Optional[base.String] = None, - google_place_type: typing.Optional[base.String] = None, - ): - super().__init__( - latitude=latitude, - longitude=longitude, - title=title, - address=address, - foursquare_id=foursquare_id, - foursquare_type=foursquare_type, - google_place_id=google_place_id, - google_place_type=google_place_type, - ) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/invoice.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/invoice.py deleted file mode 100644 index 172fcbc4..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/invoice.py +++ /dev/null @@ -1,15 +0,0 @@ -from . import base -from . import fields - - -class Invoice(base.TelegramObject): - """ - This object contains basic information about an invoice. - - https://core.telegram.org/bots/api#invoice - """ - title: base.String = fields.Field() - description: base.String = fields.Field() - start_parameter: base.String = fields.Field() - currency: base.String = fields.Field() - total_amount: base.Integer = fields.Field() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/labeled_price.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/labeled_price.py deleted file mode 100644 index f2cbd38b..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/labeled_price.py +++ /dev/null @@ -1,15 +0,0 @@ -from . import base -from . import fields - - -class LabeledPrice(base.TelegramObject): - """ - This object represents a portion of the price for goods or services. - - https://core.telegram.org/bots/api#labeledprice - """ - label: base.String = fields.Field() - amount: base.Integer = fields.Field() - - def __init__(self, label: base.String, amount: base.Integer): - super(LabeledPrice, self).__init__(label=label, amount=amount) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/location.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/location.py deleted file mode 100644 index 5f159e33..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/location.py +++ /dev/null @@ -1,18 +0,0 @@ -import typing - -from . import base -from . import fields - - -class Location(base.TelegramObject): - """ - This object represents a point on the map. - - https://core.telegram.org/bots/api#location - """ - longitude: base.Float = fields.Field() - latitude: base.Float = fields.Field() - horizontal_accuracy: typing.Optional[base.Float] = fields.Field() - live_period: typing.Optional[base.Integer] = fields.Field() - heading: typing.Optional[base.Integer] = fields.Field() - proximity_alert_radius: typing.Optional[base.Integer] = fields.Field() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/login_url.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/login_url.py deleted file mode 100644 index c0dd6133..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/login_url.py +++ /dev/null @@ -1,30 +0,0 @@ -from . import base -from . import fields - - -class LoginUrl(base.TelegramObject): - """ - This object represents a parameter of the inline keyboard button used to automatically authorize a user. - Serves as a great replacement for the Telegram Login Widget when the user is coming from Telegram. - All the user needs to do is tap/click a button and confirm that they want to log in. - - https://core.telegram.org/bots/api#loginurl - """ - url: base.String = fields.Field() - forward_text: base.String = fields.Field() - bot_username: base.String = fields.Field() - request_write_access: base.Boolean = fields.Field() - - def __init__(self, - url: base.String, - forward_text: base.String = None, - bot_username: base.String = None, - request_write_access: base.Boolean = None, - **kwargs): - super(LoginUrl, self).__init__( - url=url, - forward_text=forward_text, - bot_username=bot_username, - request_write_access=request_write_access, - **kwargs - ) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/mask_position.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/mask_position.py deleted file mode 100644 index e0620463..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/mask_position.py +++ /dev/null @@ -1,14 +0,0 @@ -from . import base -from . import fields - - -class MaskPosition(base.TelegramObject): - """ - This object describes the position on faces where a mask should be placed by default. - - https://core.telegram.org/bots/api#maskposition - """ - point: base.String = fields.Field() - x_shift: base.Float = fields.Field() - y_shift: base.Float = fields.Field() - scale: base.Float = fields.Field() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/message.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/message.py deleted file mode 100644 index c95b14b1..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/message.py +++ /dev/null @@ -1,3129 +0,0 @@ -from __future__ import annotations - -import datetime -import functools -import typing - -from . import base, fields -from .animation import Animation -from .audio import Audio -from .chat import Chat, ChatType -from .contact import Contact -from .dice import Dice -from .document import Document -from .force_reply import ForceReply -from .game import Game -from .inline_keyboard import InlineKeyboardMarkup -from .input_media import InputMedia, MediaGroup -from .invoice import Invoice -from .location import Location -from .message_auto_delete_timer_changed import MessageAutoDeleteTimerChanged -from .message_entity import MessageEntity -from .message_id import MessageId -from .passport_data import PassportData -from .photo_size import PhotoSize -from .poll import Poll -from .proximity_alert_triggered import ProximityAlertTriggered -from .reply_keyboard import ReplyKeyboardMarkup, ReplyKeyboardRemove -from .sticker import Sticker -from .successful_payment import SuccessfulPayment -from .user import User -from .venue import Venue -from .video import Video -from .video_note import VideoNote -from .voice import Voice -from .voice_chat_ended import VoiceChatEnded -from .voice_chat_participants_invited import VoiceChatParticipantsInvited -from .voice_chat_scheduled import VoiceChatScheduled -from .voice_chat_started import VoiceChatStarted -from ..utils import helper -from ..utils import markdown as md -from ..utils.text_decorations import html_decoration, markdown_decoration - - -class Message(base.TelegramObject): - """ - This object represents a message. - - https://core.telegram.org/bots/api#message - """ - - message_id: base.Integer = fields.Field() - from_user: User = fields.Field(alias="from", base=User) - sender_chat: Chat = fields.Field(base=Chat) - date: datetime.datetime = fields.DateTimeField() - chat: Chat = fields.Field(base=Chat) - forward_from: User = fields.Field(base=User) - forward_from_chat: Chat = fields.Field(base=Chat) - forward_from_message_id: base.Integer = fields.Field() - forward_signature: base.String = fields.Field() - forward_date: datetime.datetime = fields.DateTimeField() - reply_to_message: Message = fields.Field(base="Message") - via_bot: User = fields.Field(base=User) - edit_date: datetime.datetime = fields.DateTimeField() - media_group_id: base.String = fields.Field() - author_signature: base.String = fields.Field() - forward_sender_name: base.String = fields.Field() - text: base.String = fields.Field() - entities: typing.List[MessageEntity] = fields.ListField(base=MessageEntity) - caption_entities: typing.List[MessageEntity] = fields.ListField(base=MessageEntity) - audio: Audio = fields.Field(base=Audio) - document: Document = fields.Field(base=Document) - animation: Animation = fields.Field(base=Animation) - game: Game = fields.Field(base=Game) - photo: typing.List[PhotoSize] = fields.ListField(base=PhotoSize) - sticker: Sticker = fields.Field(base=Sticker) - video: Video = fields.Field(base=Video) - voice: Voice = fields.Field(base=Voice) - video_note: VideoNote = fields.Field(base=VideoNote) - caption: base.String = fields.Field() - contact: Contact = fields.Field(base=Contact) - location: Location = fields.Field(base=Location) - venue: Venue = fields.Field(base=Venue) - poll: Poll = fields.Field(base=Poll) - dice: Dice = fields.Field(base=Dice) - new_chat_members: typing.List[User] = fields.ListField(base=User) - left_chat_member: User = fields.Field(base=User) - new_chat_title: base.String = fields.Field() - new_chat_photo: typing.List[PhotoSize] = fields.ListField(base=PhotoSize) - delete_chat_photo: base.Boolean = fields.Field() - group_chat_created: base.Boolean = fields.Field() - supergroup_chat_created: base.Boolean = fields.Field() - channel_chat_created: base.Boolean = fields.Field() - message_auto_delete_timer_changed: MessageAutoDeleteTimerChanged = fields.Field(base=MessageAutoDeleteTimerChanged) - migrate_to_chat_id: base.Integer = fields.Field() - migrate_from_chat_id: base.Integer = fields.Field() - pinned_message: Message = fields.Field(base="Message") - invoice: Invoice = fields.Field(base=Invoice) - successful_payment: SuccessfulPayment = fields.Field(base=SuccessfulPayment) - connected_website: base.String = fields.Field() - passport_data: PassportData = fields.Field(base=PassportData) - proximity_alert_triggered: ProximityAlertTriggered = fields.Field(base=ProximityAlertTriggered) - voice_chat_scheduled: VoiceChatScheduled = fields.Field(base=VoiceChatScheduled) - voice_chat_started: VoiceChatStarted = fields.Field(base=VoiceChatStarted) - voice_chat_ended: VoiceChatEnded = fields.Field(base=VoiceChatEnded) - voice_chat_participants_invited: VoiceChatParticipantsInvited = fields.Field(base=VoiceChatParticipantsInvited) - reply_markup: InlineKeyboardMarkup = fields.Field(base=InlineKeyboardMarkup) - - @property - @functools.lru_cache() - def content_type(self): - if self.text: - return ContentType.TEXT - if self.audio: - return ContentType.AUDIO - if self.animation: - return ContentType.ANIMATION - if self.document: - return ContentType.DOCUMENT - if self.game: - return ContentType.GAME - if self.photo: - return ContentType.PHOTO - if self.sticker: - return ContentType.STICKER - if self.video: - return ContentType.VIDEO - if self.video_note: - return ContentType.VIDEO_NOTE - if self.voice: - return ContentType.VOICE - if self.contact: - return ContentType.CONTACT - if self.venue: - return ContentType.VENUE - if self.location: - return ContentType.LOCATION - if self.poll: - return ContentType.POLL - if self.dice: - return ContentType.DICE - if self.new_chat_members: - return ContentType.NEW_CHAT_MEMBERS - if self.left_chat_member: - return ContentType.LEFT_CHAT_MEMBER - if self.invoice: - return ContentType.INVOICE - if self.successful_payment: - return ContentType.SUCCESSFUL_PAYMENT - if self.connected_website: - return ContentType.CONNECTED_WEBSITE - if self.message_auto_delete_timer_changed: - return ContentType.MESSAGE_AUTO_DELETE_TIMER_CHANGED - if self.migrate_from_chat_id: - return ContentType.MIGRATE_FROM_CHAT_ID - if self.migrate_to_chat_id: - return ContentType.MIGRATE_TO_CHAT_ID - if self.pinned_message: - return ContentType.PINNED_MESSAGE - if self.new_chat_title: - return ContentType.NEW_CHAT_TITLE - if self.new_chat_photo: - return ContentType.NEW_CHAT_PHOTO - if self.delete_chat_photo: - return ContentType.DELETE_CHAT_PHOTO - if self.group_chat_created: - return ContentType.GROUP_CHAT_CREATED - if self.passport_data: - return ContentType.PASSPORT_DATA - if self.proximity_alert_triggered: - return ContentType.PROXIMITY_ALERT_TRIGGERED - if self.voice_chat_scheduled: - return ContentType.VOICE_CHAT_SCHEDULED - if self.voice_chat_started: - return ContentType.VOICE_CHAT_STARTED - if self.voice_chat_ended: - return ContentType.VOICE_CHAT_ENDED - if self.voice_chat_participants_invited: - return ContentType.VOICE_CHAT_PARTICIPANTS_INVITED - - return ContentType.UNKNOWN - - def is_forward(self) -> bool: - """ - Check that the message is forwarded. - Only `forward_date` is required to be in forwarded message. - - :return: bool - """ - return bool(self.forward_date) - - def is_command(self) -> bool: - """ - Check message text is command - - :return: bool - """ - text = self.text or self.caption - return text and text.startswith("/") - - def get_full_command(self) -> typing.Optional[typing.Tuple[str, str]]: - """ - Split command and args - - :return: tuple of (command, args) - """ - if self.is_command(): - text = self.text or self.caption - command, *args = text.split(maxsplit=1) - args = args[0] if args else "" - return command, args - - def get_command(self, pure=False) -> typing.Optional[str]: - """ - Get command from message - - :return: - """ - command = self.get_full_command() - if command: - command = command[0] - if pure: - command, _, _ = command[1:].partition("@") - return command - - def get_args(self) -> typing.Optional[str]: - """ - Get arguments - - :return: - """ - command = self.get_full_command() - if command: - return command[1] - - def parse_entities(self, as_html=True) -> str: - """ - Text or caption formatted as HTML or Markdown. - - :return: str - """ - - text = self.text or self.caption - if text is None: - raise TypeError("This message doesn't have any text.") - - entities = self.entities or self.caption_entities - text_decorator = html_decoration if as_html else markdown_decoration - - return text_decorator.unparse(text, entities) - - @property - def md_text(self) -> str: - """ - Text or caption formatted as markdown. - - :return: str - """ - return self.parse_entities(False) - - @property - def html_text(self) -> str: - """ - Text or caption formatted as HTML - - :return: str - """ - return self.parse_entities() - - @property - def url(self) -> str: - """ - Get URL for the message - - :return: str - """ - - if self.chat.type == ChatType.PRIVATE: - raise TypeError("Invalid chat type!") - url = "https://t.me/" - if self.chat.username: - # Generates public link - url += f"{self.chat.username}/" - else: - # Generates private link available for chat members - url += f"c/{self.chat.shifted_id}/" - url += f"{self.message_id}" - - return url - - def link(self, text, as_html=True) -> str: - """ - Generate URL for using in text messages with HTML or MD parse mode - - :param text: link label - :param as_html: generate as HTML - :return: str - """ - try: - url = self.url - except TypeError: # URL is not accessible - if as_html: - return md.quote_html(text) - return md.escape_md(text) - - if as_html: - return md.hlink(text, url) - return md.link(text, url) - - async def answer( - self, - text: base.String, - parse_mode: typing.Optional[base.String] = None, - entities: typing.Optional[typing.List[MessageEntity]] = None, - disable_web_page_preview: typing.Optional[base.Boolean] = None, - disable_notification: typing.Optional[base.Boolean] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[ - InlineKeyboardMarkup, - ReplyKeyboardMarkup, - ReplyKeyboardRemove, - ForceReply, - None, - ] = None, - reply: base.Boolean = False, - ) -> Message: - """ - Answer to this message - - :param text: Text of the message to be sent - :type text: :obj:`base.String` - - :param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic, - fixed-width text or inline URLs in your bot's message. - :type parse_mode: :obj:`typing.Optional[base.String]` - - :param entities: List of special entities that appear in message text, - which can be specified instead of parse_mode - :type entities: :obj:`typing.Optional[typing.List[MessageEntity]]` - - :param disable_web_page_preview: Disables link previews for links in this message - :type disable_web_page_preview: :obj:`typing.Optional[base.Boolean]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]` - - :param reply: fill 'reply_to_message_id' - :type reply: :obj:`base.Boolean` - - :return: On success, the sent Message is returned - :rtype: :obj:`types.Message` - """ - return await self.bot.send_message( - chat_id=self.chat.id, - text=text, - parse_mode=parse_mode, - entities=entities, - disable_web_page_preview=disable_web_page_preview, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - allow_sending_without_reply=allow_sending_without_reply, - reply_markup=reply_markup, - ) - - async def answer_photo( - self, - photo: typing.Union[base.InputFile, base.String], - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - disable_notification: typing.Optional[base.Boolean] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[ - InlineKeyboardMarkup, - ReplyKeyboardMarkup, - ReplyKeyboardRemove, - ForceReply, - None, - ] = None, - reply: base.Boolean = False, - ) -> Message: - """ - Use this method to send photos. - - Source: https://core.telegram.org/bots/api#sendphoto - - :param photo: Photo to send - :type photo: :obj:`typing.Union[base.InputFile, base.String]` - - :param caption: Photo caption (may also be used when resending photos by file_id), 0-1024 characters - :type caption: :obj:`typing.Optional[base.String]` - - :param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic, - fixed-width text or inline URLs in your bot's message. - :type parse_mode: :obj:`typing.Optional[base.String]` - - :param caption_entities: List of special entities that appear in message text, - which can be specified instead of parse_mode - :type caption_entities: :obj:`typing.Optional[typing.List[MessageEntity]]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]` - - :param reply: fill 'reply_to_message_id' - :type reply: :obj:`base.Boolean` - - :return: On success, the sent Message is returned - :rtype: :obj:`types.Message` - """ - return await self.bot.send_photo( - chat_id=self.chat.id, - photo=photo, - caption=caption, - parse_mode=parse_mode, - caption_entities=caption_entities, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - allow_sending_without_reply=allow_sending_without_reply, - reply_markup=reply_markup, - ) - - async def answer_audio( - self, - audio: typing.Union[base.InputFile, base.String], - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - duration: typing.Optional[base.Integer] = None, - performer: typing.Optional[base.String] = None, - title: typing.Optional[base.String] = None, - thumb: typing.Union[typing.Union[base.InputFile, base.String], None] = None, - disable_notification: typing.Optional[base.Boolean] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[ - InlineKeyboardMarkup, - ReplyKeyboardMarkup, - ReplyKeyboardRemove, - ForceReply, - None, - ] = None, - reply: base.Boolean = False, - ) -> Message: - """ - Use this method to send audio files, if you want Telegram clients to display them in the music player. - Your audio must be in the .mp3 format. - - For sending voice messages, use the sendVoice method instead. - - Source: https://core.telegram.org/bots/api#sendaudio - - :param audio: Audio file to send. - :type audio: :obj:`typing.Union[base.InputFile, base.String]` - - :param caption: Audio caption, 0-1024 characters after entities parsing - :type caption: :obj:`typing.Optional[base.String]` - - :param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic, - fixed-width text or inline URLs in your bot's message. - :type parse_mode: :obj:`typing.Optional[base.String]` - - :param caption_entities: List of special entities that appear in message text, - which can be specified instead of parse_mode - :type caption_entities: :obj:`typing.Optional[typing.List[MessageEntity]]` - - :param duration: Duration of the audio in seconds - :type duration: :obj:`typing.Optional[base.Integer]` - - :param performer: Performer - :type performer: :obj:`typing.Optional[base.String]` - - :param title: Track name - :type title: :obj:`typing.Optional[base.String]` - - :param thumb: Thumbnail of the file sent. The thumbnail should be in JPEG format and less than 200 kB in size. - A thumbnail‘s width and height should not exceed 320. - :type thumb: :obj:`typing.Union[typing.Union[base.InputFile, base.String], None]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound. - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]` - - :param reply: fill 'reply_to_message_id' - :type reply: :obj:`base.Boolean` - - :return: On success, the sent Message is returned. - :rtype: :obj:`types.Message` - """ - return await self.bot.send_audio( - chat_id=self.chat.id, - audio=audio, - caption=caption, - parse_mode=parse_mode, - caption_entities=caption_entities, - duration=duration, - performer=performer, - title=title, - thumb=thumb, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - allow_sending_without_reply=allow_sending_without_reply, - reply_markup=reply_markup, - ) - - async def answer_animation( - self, - animation: typing.Union[base.InputFile, base.String], - duration: typing.Optional[base.Integer] = None, - width: typing.Optional[base.Integer] = None, - height: typing.Optional[base.Integer] = None, - thumb: typing.Union[typing.Union[base.InputFile, base.String], None] = None, - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - disable_notification: typing.Optional[base.Boolean] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[ - InlineKeyboardMarkup, - ReplyKeyboardMarkup, - ReplyKeyboardRemove, - ForceReply, - None, - ] = None, - reply: base.Boolean = False, - ) -> Message: - """ - Use this method to send animation files (GIF or H.264/MPEG-4 AVC video without sound). - - On success, the sent Message is returned. - Bots can currently send animation files of up to 50 MB in size, this limit may be changed in the future. - - Source https://core.telegram.org/bots/api#sendanimation - - :param animation: Animation to send. Pass a file_id as String to send an animation that exists - on the Telegram servers (recommended), pass an HTTP URL as a String for Telegram to get an animation - from the Internet, or upload a new animation using multipart/form-data - :type animation: :obj:`typing.Union[base.InputFile, base.String]` - - :param duration: Duration of sent animation in seconds - :type duration: :obj:`typing.Optional[base.Integer]` - - :param width: Animation width - :type width: :obj:`typing.Optional[base.Integer]` - - :param height: Animation height - :type height: :obj:`typing.Optional[base.Integer]` - - :param thumb: Thumbnail of the file sent. The thumbnail should be in JPEG format and less than 200 kB in size. - A thumbnail‘s width and height should not exceed 320. - :type thumb: :obj:`typing.Union[typing.Union[base.InputFile, base.String], None]` - - :param caption: Animation caption (may also be used when resending animation by file_id), 0-1024 characters - :type caption: :obj:`typing.Optional[base.String]` - - :param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic, - fixed-width text or inline URLs in the media caption - :type parse_mode: :obj:`typing.Optional[base.String]` - - :param caption_entities: List of special entities that appear in message text, - which can be specified instead of parse_mode - :type caption_entities: :obj:`typing.Optional[typing.List[MessageEntity]]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[typing.Union[types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup, - types.ReplyKeyboardRemove, types.ForceReply], None]` - - :param reply: fill 'reply_to_message_id' - :type reply: :obj:`base.Boolean` - - :return: On success, the sent Message is returned - :rtype: :obj:`types.Message` - """ - return await self.bot.send_animation( - self.chat.id, - animation=animation, - duration=duration, - width=width, - height=height, - thumb=thumb, - caption=caption, - parse_mode=parse_mode, - caption_entities=caption_entities, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - allow_sending_without_reply=allow_sending_without_reply, - reply_markup=reply_markup, - ) - - async def answer_document( - self, - document: typing.Union[base.InputFile, base.String], - thumb: typing.Union[typing.Union[base.InputFile, base.String], None] = None, - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - disable_content_type_detection: typing.Optional[base.Boolean] = None, - disable_notification: typing.Optional[base.Boolean] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[ - InlineKeyboardMarkup, - ReplyKeyboardMarkup, - ReplyKeyboardRemove, - ForceReply, - None, - ] = None, - reply: base.Boolean = False, - ) -> Message: - """ - Use this method to send general files. On success, the sent Message is - returned. Bots can currently send files of any type of up to 50 MB in size, - this limit may be changed in the future. - - Source: https://core.telegram.org/bots/api#senddocument - - :param document: File to send - :type document: :obj:`typing.Union[base.InputFile, base.String]` - - :param thumb: Thumbnail of the file sent - :type thumb: :obj:`typing.Union[base.InputFile, base.String, None]` - - :param caption: Document caption (may also be used when resending documents - by file_id), 0-1024 characters - :type caption: :obj:`typing.Optional[base.String]` - - :param disable_content_type_detection: Disables automatic server-side content - type detection for files uploaded using multipart/form-data - :type disable_content_type_detection: :obj:`typing.Optional[base.Boolean]` - - :param parse_mode: Send Markdown or HTML, if you want Telegram apps to show - bold, italic, fixed-width text or inline URLs in your bot's message. - :type parse_mode: :obj:`typing.Optional[base.String]` - - :param caption_entities: List of special entities that appear in message text, - which can be specified instead of parse_mode - :type caption_entities: :obj:`typing.Optional[typing.List[MessageEntity]]` - - :param disable_notification: Sends the message silently. Users will receive a - notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object - for an inline keyboard, custom reply keyboard, instructions to remove - reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply], - None]` - - :param reply: True if the message is a reply - :type reply: :obj:`typing.Optional[base.Boolean]` - - :return: On success, the sent Message is returned - :rtype: :obj:`types.Message` - """ - return await self.bot.send_document( - chat_id=self.chat.id, - thumb=thumb, - document=document, - caption=caption, - parse_mode=parse_mode, - caption_entities=caption_entities, - disable_content_type_detection=disable_content_type_detection, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - allow_sending_without_reply=allow_sending_without_reply, - reply_markup=reply_markup, - ) - - async def answer_video( - self, - video: typing.Union[base.InputFile, base.String], - duration: typing.Optional[base.Integer] = None, - width: typing.Optional[base.Integer] = None, - height: typing.Optional[base.Integer] = None, - thumb: typing.Union[base.InputFile, base.String, None] = None, - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - supports_streaming: typing.Optional[base.Boolean] = None, - disable_notification: typing.Optional[base.Boolean] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[ - InlineKeyboardMarkup, - ReplyKeyboardMarkup, - ReplyKeyboardRemove, - ForceReply, - None, - ] = None, - reply: base.Boolean = False, - ) -> Message: - """ - Use this method to send video files, Telegram clients support mp4 videos - (other formats may be sent as Document). - - Source: https://core.telegram.org/bots/api#sendvideo - - :param video: Video to send. - :type video: :obj:`typing.Union[base.InputFile, base.String]` - - :param duration: Duration of sent video in seconds - :type duration: :obj:`typing.Optional[base.Integer]` - - :param width: Video width - :type width: :obj:`typing.Optional[base.Integer]` - - :param height: Video height - :type height: :obj:`typing.Optional[base.Integer]` - - :param thumb: Thumbnail of the file sent. The thumbnail should be in JPEG format and less than 200 kB in size. - A thumbnail‘s width and height should not exceed 320. - :type thumb: :obj:`typing.Union[base.InputFile, base.String, None]` - - :param caption: Video caption (may also be used when resending videos by file_id), 0-1024 characters after entities parsing - :type caption: :obj:`typing.Optional[base.String]` - - :param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic, - fixed-width text or inline URLs in the media caption - :type parse_mode: :obj:`typing.Optional[base.String]` - - :param caption_entities: List of special entities that appear in message text, - which can be specified instead of parse_mode - :type caption_entities: :obj:`typing.Optional[typing.List[MessageEntity]]` - - :param supports_streaming: Pass True, if the uploaded video is suitable for streaming - :type supports_streaming: :obj:`typing.Optional[base.Boolean]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound. - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]` - - :param reply: fill 'reply_to_message_id' - :type reply: :obj:`base.Boolean` - - :return: On success, the sent Message is returned. - :rtype: :obj:`types.Message` - """ - return await self.bot.send_video( - chat_id=self.chat.id, - video=video, - duration=duration, - width=width, - height=height, - thumb=thumb, - caption=caption, - parse_mode=parse_mode, - caption_entities=caption_entities, - supports_streaming=supports_streaming, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - allow_sending_without_reply=allow_sending_without_reply, - reply_markup=reply_markup, - ) - - async def answer_voice( - self, - voice: typing.Union[base.InputFile, base.String], - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - duration: typing.Optional[base.Integer] = None, - disable_notification: typing.Optional[base.Boolean] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[ - InlineKeyboardMarkup, - ReplyKeyboardMarkup, - ReplyKeyboardRemove, - ForceReply, - None, - ] = None, - reply: base.Boolean = False, - ) -> Message: - """ - Use this method to send audio files, if you want Telegram clients to display the file - as a playable voice message. - - For this to work, your audio must be in an .ogg file encoded with OPUS - (other formats may be sent as Audio or Document). - - Source: https://core.telegram.org/bots/api#sendvoice - - :param voice: Audio file to send. - :type voice: :obj:`typing.Union[base.InputFile, base.String]` - - :param caption: Voice message caption, 0-1024 characters after entities parsing - :type caption: :obj:`typing.Optional[base.String]` - - :param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic, - fixed-width text or inline URLs in the media caption - :type parse_mode: :obj:`typing.Optional[base.String]` - - :param caption_entities: List of special entities that appear in message text, - which can be specified instead of parse_mode - :type caption_entities: :obj:`typing.Optional[typing.List[MessageEntity]]` - - :param duration: Duration of the voice message in seconds - :type duration: :obj:`typing.Optional[base.Integer]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound. - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]` - - :param reply: fill 'reply_to_message_id' - :type reply: :obj:`base.Boolean` - - :return: On success, the sent Message is returned. - :rtype: :obj:`types.Message` - """ - return await self.bot.send_voice( - chat_id=self.chat.id, - voice=voice, - caption=caption, - parse_mode=parse_mode, - caption_entities=caption_entities, - duration=duration, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - allow_sending_without_reply=allow_sending_without_reply, - reply_markup=reply_markup, - ) - - async def answer_video_note( - self, - video_note: typing.Union[base.InputFile, base.String], - duration: typing.Optional[base.Integer] = None, - length: typing.Optional[base.Integer] = None, - thumb: typing.Union[typing.Union[base.InputFile, base.String], None] = None, - disable_notification: typing.Optional[base.Boolean] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[ - InlineKeyboardMarkup, - ReplyKeyboardMarkup, - ReplyKeyboardRemove, - ForceReply, - None, - ] = None, - reply: base.Boolean = False, - ) -> Message: - """ - As of v.4.0, Telegram clients support rounded square mp4 videos of up to 1 minute long. - Use this method to send video messages. - - Source: https://core.telegram.org/bots/api#sendvideonote - - :param video_note: Video note to send. - :type video_note: :obj:`typing.Union[base.InputFile, base.String]` - - :param duration: Duration of sent video in seconds - :type duration: :obj:`typing.Optional[base.Integer]` - - :param length: Video width and height - :type length: :obj:`typing.Optional[base.Integer]` - - :param thumb: Thumbnail of the file sent. The thumbnail should be in JPEG format and less than 200 kB in size. - A thumbnail‘s width and height should not exceed 320. - :type thumb: :obj:`typing.Union[typing.Union[base.InputFile, base.String], None]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound. - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]` - - :param reply: fill 'reply_to_message_id' - :type reply: :obj:`base.Boolean` - - :return: On success, the sent Message is returned. - :rtype: :obj:`types.Message` - """ - return await self.bot.send_video_note( - chat_id=self.chat.id, - video_note=video_note, - duration=duration, - length=length, - thumb=thumb, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - allow_sending_without_reply=allow_sending_without_reply, - reply_markup=reply_markup, - ) - - async def answer_media_group( - self, - media: typing.Union[MediaGroup, typing.List], - disable_notification: typing.Optional[base.Boolean] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply: base.Boolean = False, - ) -> typing.List[Message]: - """ - Use this method to send a group of photos, videos, documents or audios as - an album. Documents and audio files can be only group in an album with - messages of the same type. On success, an array of Messages that were sent - is returned. - - Source: https://core.telegram.org/bots/api#sendmediagroup - - :param media: A JSON-serialized array describing photos and videos to be sent - :type media: :obj:`typing.Union[types.MediaGroup, typing.List]` - - :param disable_notification: Sends the message silently. Users will receive - a notification with no sound. - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply: fill 'reply_to_message_id' - :type reply: :obj:`base.Boolean` - - :return: On success, an array of the sent Messages is returned. - :rtype: typing.List[types.Message] - """ - return await self.bot.send_media_group( - self.chat.id, - media=media, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - allow_sending_without_reply=allow_sending_without_reply, - ) - - async def answer_location( - self, - latitude: base.Float, - longitude: base.Float, - live_period: typing.Optional[base.Integer] = None, - disable_notification: typing.Optional[base.Boolean] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - horizontal_accuracy: typing.Optional[base.Float] = None, - heading: typing.Optional[base.Integer] = None, - proximity_alert_radius: typing.Optional[base.Integer] = None, - reply_markup: typing.Union[ - InlineKeyboardMarkup, - ReplyKeyboardMarkup, - ReplyKeyboardRemove, - ForceReply, - None, - ] = None, - reply: base.Boolean = False, - ) -> Message: - """ - Use this method to send point on the map. - - Source: https://core.telegram.org/bots/api#sendlocation - - :param latitude: Latitude of the location - :type latitude: :obj:`base.Float` - - :param longitude: Longitude of the location - :type longitude: :obj:`base.Float` - - :param horizontal_accuracy: The radius of uncertainty for the location, - measured in meters; 0-1500 - :type horizontal_accuracy: :obj:`typing.Optional[base.Float]` - - :param live_period: Period in seconds for which the location will be updated - :type live_period: :obj:`typing.Optional[base.Integer]` - - :param heading: For live locations, a direction in which the user is moving, - in degrees. Must be between 1 and 360 if specified. - :type heading: :obj:`typing.Optional[base.Integer]` - - :param proximity_alert_radius: For live locations, a maximum distance for - proximity alerts about approaching another chat member, in meters. Must - be between 1 and 100000 if specified. - :type proximity_alert_radius: :obj:`typing.Optional[base.Integer]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound. - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]` - - :param reply: fill 'reply_to_message_id' - :type reply: :obj:`base.Boolean` - - :return: On success, the sent Message is returned. - :rtype: :obj:`types.Message` - """ - return await self.bot.send_location( - chat_id=self.chat.id, - latitude=latitude, - longitude=longitude, - horizontal_accuracy=horizontal_accuracy, - live_period=live_period, - heading=heading, - proximity_alert_radius=proximity_alert_radius, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - allow_sending_without_reply=allow_sending_without_reply, - reply_markup=reply_markup, - ) - - async def answer_venue( - self, - latitude: base.Float, - longitude: base.Float, - title: base.String, - address: base.String, - foursquare_id: typing.Optional[base.String] = None, - foursquare_type: typing.Optional[base.String] = None, - google_place_id: typing.Optional[base.String] = None, - google_place_type: typing.Optional[base.String] = None, - disable_notification: typing.Optional[base.Boolean] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[ - InlineKeyboardMarkup, - ReplyKeyboardMarkup, - ReplyKeyboardRemove, - ForceReply, - None, - ] = None, - reply: base.Boolean = False, - ) -> Message: - """ - Use this method to send information about a venue. - - Source: https://core.telegram.org/bots/api#sendvenue - - :param latitude: Latitude of the venue - :type latitude: :obj:`base.Float` - - :param longitude: Longitude of the venue - :type longitude: :obj:`base.Float` - - :param title: Name of the venue - :type title: :obj:`base.String` - - :param address: Address of the venue - :type address: :obj:`base.String` - - :param foursquare_id: Foursquare identifier of the venue - :type foursquare_id: :obj:`typing.Optional[base.String]` - - :param foursquare_type: Foursquare type of the venue, if known - :type foursquare_type: :obj:`typing.Optional[base.String]` - - :param google_place_id: Google Places identifier of the venue - :type google_place_id: :obj:`typing.Optional[base.String]` - - :param google_place_type: Google Places type of the venue. See supported - types: https://developers.google.com/places/web-service/supported_types - :type google_place_type: :obj:`typing.Optional[base.String]` - - :param disable_notification: Sends the message silently. Users will receive - a notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object - for an inline keyboard, custom reply keyboard, instructions to remove - reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, - None]` - - :param reply: fill 'reply_to_message_id' - :type reply: :obj:`base.Boolean` - - :return: On success, the sent Message is returned. - :rtype: :obj:`types.Message` - """ - return await self.bot.send_venue( - chat_id=self.chat.id, - latitude=latitude, - longitude=longitude, - title=title, - address=address, - foursquare_id=foursquare_id, - foursquare_type=foursquare_type, - google_place_id=google_place_id, - google_place_type=google_place_type, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - allow_sending_without_reply=allow_sending_without_reply, - reply_markup=reply_markup, - ) - - async def answer_contact( - self, - phone_number: base.String, - first_name: base.String, - last_name: typing.Optional[base.String] = None, - disable_notification: typing.Optional[base.Boolean] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[ - InlineKeyboardMarkup, - ReplyKeyboardMarkup, - ReplyKeyboardRemove, - ForceReply, - None, - ] = None, - reply: base.Boolean = False, - ) -> Message: - """ - Use this method to send phone contacts. - - Source: https://core.telegram.org/bots/api#sendcontact - - :param phone_number: Contact's phone number - :type phone_number: :obj:`base.String` - - :param first_name: Contact's first name - :type first_name: :obj:`base.String` - - :param last_name: Contact's last name - :type last_name: :obj:`typing.Optional[base.String]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound. - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]` - - :param reply: fill 'reply_to_message_id' - :type reply: :obj:`base.Boolean` - - :return: On success, the sent Message is returned. - :rtype: :obj:`types.Message` - """ - return await self.bot.send_contact( - chat_id=self.chat.id, - phone_number=phone_number, - first_name=first_name, - last_name=last_name, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - allow_sending_without_reply=allow_sending_without_reply, - reply_markup=reply_markup, - ) - - async def answer_sticker( - self, - sticker: typing.Union[base.InputFile, base.String], - disable_notification: typing.Optional[base.Boolean] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[ - InlineKeyboardMarkup, - ReplyKeyboardMarkup, - ReplyKeyboardRemove, - ForceReply, - None, - ] = None, - reply: base.Boolean = False, - ) -> Message: - """ - Use this method to send .webp stickers. - - Source: https://core.telegram.org/bots/api#sendsticker - - :param sticker: Sticker to send. - :type sticker: :obj:`typing.Union[base.InputFile, base.String]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound. - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]` - - :param reply: fill 'reply_to_message_id' - :type reply: :obj:`base.Boolean` - - :return: On success, the sent Message is returned. - :rtype: :obj:`types.Message` - """ - return await self.bot.send_sticker( - chat_id=self.chat.id, - sticker=sticker, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - allow_sending_without_reply=allow_sending_without_reply, - reply_markup=reply_markup, - ) - - async def answer_poll( - self, - question: base.String, - options: typing.List[base.String], - is_anonymous: typing.Optional[base.Boolean] = None, - type: typing.Optional[base.String] = None, - allows_multiple_answers: typing.Optional[base.Boolean] = None, - correct_option_id: typing.Optional[base.Integer] = None, - explanation: typing.Optional[base.String] = None, - explanation_parse_mode: typing.Optional[base.String] = None, - explanation_entities: typing.Optional[typing.List[MessageEntity]] = None, - open_period: typing.Optional[base.Integer] = None, - close_date: typing.Union[base.Integer, datetime.datetime, datetime.timedelta, None] = None, - is_closed: typing.Optional[base.Boolean] = None, - disable_notification: typing.Optional[base.Boolean] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[ - InlineKeyboardMarkup, - ReplyKeyboardMarkup, - ReplyKeyboardRemove, - ForceReply, - None, - ] = None, - reply: base.Boolean = False, - ) -> Message: - """ - Use this method to send a native poll. On success, the sent Message is - returned. - - Source: https://core.telegram.org/bots/api#sendpoll - - :param question: Poll question, 1-255 characters - :type question: :obj:`base.String` - - :param options: List of answer options, 2-10 strings 1-100 characters each - :type options: :obj:`typing.List[base.String]` - - :param is_anonymous: True, if the poll needs to be anonymous, defaults to True - :type is_anonymous: :obj:`typing.Optional[base.Boolean]` - - :param type: Poll type, “quiz” or “regular”, defaults to “regular” - :type type: :obj:`typing.Optional[base.String]` - - :param allows_multiple_answers: True, if the poll allows multiple answers, - ignored for polls in quiz mode, defaults to False - :type allows_multiple_answers: :obj:`typing.Optional[base.Boolean]` - - :param correct_option_id: 0-based identifier of the correct answer option, - required for polls in quiz mode - :type correct_option_id: :obj:`typing.Optional[base.Integer]` - - :param explanation: Text that is shown when a user chooses an incorrect - answer or taps on the lamp icon in a quiz-style poll, 0-200 characters - with at most 2 line feeds after entities parsing - :type explanation: :obj:`typing.Optional[base.String]` - - :param explanation_parse_mode: Mode for parsing entities in the explanation. - See formatting options for more details. - :type explanation_parse_mode: :obj:`typing.Optional[base.String]` - - :param explanation_entities: List of special entities that appear in message - text, which can be specified instead of parse_mode - :type explanation_entities: :obj:`typing.Optional[typing.List[MessageEntity]]` - - :param open_period: Amount of time in seconds the poll will be active after - creation, 5-600. Can't be used together with close_date. - :type open_period: :obj:`typing.Optional[base.Integer]` - - :param close_date: Point in time (Unix timestamp) when the poll will be - automatically closed. Must be at least 5 and no more than 600 seconds in - the future. Can't be used together with open_period. - :type close_date: :obj:`typing.Union[base.Integer, datetime.datetime, - datetime.timedelta, None]` - - :param is_closed: Pass True, if the poll needs to be immediately closed - :type is_closed: :obj:`typing.Optional[base.Boolean]` - - :param disable_notification: Sends the message silently. Users will receive - a notification with no sound. - :type disable_notification: :obj:`typing.Optional[Boolean]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object - for an inline keyboard, custom reply keyboard, instructions to remove - reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, - None]` - - :param reply: fill 'reply_to_message_id' - :type reply: :obj:`base.Boolean` - - :return: On success, the sent Message is returned - :rtype: :obj:`types.Message` - """ - return await self.bot.send_poll( - chat_id=self.chat.id, - question=question, - options=options, - is_anonymous=is_anonymous, - type=type, - allows_multiple_answers=allows_multiple_answers, - correct_option_id=correct_option_id, - explanation=explanation, - explanation_parse_mode=explanation_parse_mode, - explanation_entities=explanation_entities, - open_period=open_period, - close_date=close_date, - is_closed=is_closed, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - allow_sending_without_reply=allow_sending_without_reply, - reply_markup=reply_markup, - ) - - async def answer_dice( - self, - emoji: typing.Optional[base.String] = None, - disable_notification: typing.Optional[base.Boolean] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[ - InlineKeyboardMarkup, - ReplyKeyboardMarkup, - ReplyKeyboardRemove, - ForceReply, - None, - ] = None, - reply: base.Boolean = False, - ) -> Message: - """ - Use this method to send an animated emoji that will display a random value. - On success, the sent Message is returned. - - Source: https://core.telegram.org/bots/api#senddice - - :param emoji: Emoji on which the dice throw animation is based. Currently, - must be one of “🎲”, “🎯”, “🏀”, “⚽”, or “🎰”. Dice can have values 1-6 - for “🎲” and “🎯”, values 1-5 for “🏀” and “⚽”, and values 1-64 for “🎰”. - Defaults to “🎲” - :type emoji: :obj:`typing.Optional[base.String]` - - :param disable_notification: Sends the message silently. Users will receive - a notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object - for an inline keyboard, custom reply keyboard, instructions to remove - reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, - None]` - - :param reply: fill 'reply_to_message_id' - :type reply: :obj:`base.Boolean` - - :return: On success, the sent Message is returned. - :rtype: :obj:`types.Message` - """ - return await self.bot.send_dice( - chat_id=self.chat.id, - emoji=emoji, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - allow_sending_without_reply=allow_sending_without_reply, - reply_markup=reply_markup, - ) - - async def answer_chat_action( - self, - action: base.String, - ) -> base.Boolean: - """ - Use this method when you need to tell the user that something is happening on the bot's side. - The status is set for 5 seconds or less - (when a message arrives from your bot, Telegram clients clear its typing status). - - We only recommend using this method when a response from the bot will take - a noticeable amount of time to arrive. - - Source: https://core.telegram.org/bots/api#sendchataction - - :param action: Type of action to broadcast - :type action: :obj:`base.String` - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - return await self.bot.send_chat_action( - chat_id=self.chat.id, - action=action, - ) - - async def reply( - self, - text: base.String, - parse_mode: typing.Optional[base.String] = None, - entities: typing.Optional[typing.List[MessageEntity]] = None, - disable_web_page_preview: typing.Optional[base.Boolean] = None, - disable_notification: typing.Optional[base.Boolean] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[ - InlineKeyboardMarkup, - ReplyKeyboardMarkup, - ReplyKeyboardRemove, - ForceReply, - None, - ] = None, - reply: base.Boolean = True, - ) -> Message: - """ - Reply to this message - - :param text: Text of the message to be sent - :type text: :obj:`base.String` - - :param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic, - fixed-width text or inline URLs in your bot's message. - :type parse_mode: :obj:`typing.Optional[base.String]` - - :param entities: List of special entities that appear in message text, - which can be specified instead of parse_mode - :type entities: :obj:`typing.Optional[typing.List[MessageEntity]]` - - :param disable_web_page_preview: Disables link previews for links in this message - :type disable_web_page_preview: :obj:`typing.Optional[base.Boolean]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]` - - :param reply: fill 'reply_to_message_id' - :type reply: :obj:`base.Boolean` - - :return: On success, the sent Message is returned - :rtype: :obj:`types.Message` - """ - return await self.bot.send_message( - chat_id=self.chat.id, - text=text, - parse_mode=parse_mode, - entities=entities, - disable_web_page_preview=disable_web_page_preview, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - allow_sending_without_reply=allow_sending_without_reply, - reply_markup=reply_markup, - ) - - async def reply_photo( - self, - photo: typing.Union[base.InputFile, base.String], - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - disable_notification: typing.Optional[base.Boolean] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[ - InlineKeyboardMarkup, - ReplyKeyboardMarkup, - ReplyKeyboardRemove, - ForceReply, - None, - ] = None, - reply: base.Boolean = True, - ) -> Message: - """ - Use this method to send photos. - - Source: https://core.telegram.org/bots/api#sendphoto - - :param photo: Photo to send - :type photo: :obj:`typing.Union[base.InputFile, base.String]` - - :param caption: Photo caption (may also be used when resending photos by file_id), 0-1024 characters - :type caption: :obj:`typing.Optional[base.String]` - - :param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic, - fixed-width text or inline URLs in your bot's message. - :type parse_mode: :obj:`typing.Optional[base.String]` - - :param caption_entities: List of special entities that appear in message text, - which can be specified instead of parse_mode - :type caption_entities: :obj:`typing.Optional[typing.List[MessageEntity]]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]` - - :param reply: fill 'reply_to_message_id' - :type reply: :obj:`base.Boolean` - - :return: On success, the sent Message is returned - :rtype: :obj:`types.Message` - """ - return await self.bot.send_photo( - chat_id=self.chat.id, - photo=photo, - caption=caption, - parse_mode=parse_mode, - caption_entities=caption_entities, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - allow_sending_without_reply=allow_sending_without_reply, - reply_markup=reply_markup, - ) - - async def reply_audio( - self, - audio: typing.Union[base.InputFile, base.String], - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - duration: typing.Optional[base.Integer] = None, - performer: typing.Optional[base.String] = None, - title: typing.Optional[base.String] = None, - thumb: typing.Union[typing.Union[base.InputFile, base.String], None] = None, - disable_notification: typing.Optional[base.Boolean] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[ - InlineKeyboardMarkup, - ReplyKeyboardMarkup, - ReplyKeyboardRemove, - ForceReply, - None, - ] = None, - reply: base.Boolean = True, - ) -> Message: - """ - Use this method to send audio files, if you want Telegram clients to display them in the music player. - Your audio must be in the .mp3 format. - - For sending voice messages, use the sendVoice method instead. - - Source: https://core.telegram.org/bots/api#sendaudio - - :param audio: Audio file to send. - :type audio: :obj:`typing.Union[base.InputFile, base.String]` - - :param caption: Audio caption, 0-1024 characters after entities parsing - :type caption: :obj:`typing.Optional[base.String]` - - :param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic, - fixed-width text or inline URLs in your bot's message. - :type parse_mode: :obj:`typing.Optional[base.String]` - - :param caption_entities: List of special entities that appear in message text, - which can be specified instead of parse_mode - :type caption_entities: :obj:`typing.Optional[typing.List[MessageEntity]]` - - :param duration: Duration of the audio in seconds - :type duration: :obj:`typing.Optional[base.Integer]` - - :param performer: Performer - :type performer: :obj:`typing.Optional[base.String]` - - :param title: Track name - :type title: :obj:`typing.Optional[base.String]` - - :param thumb: Thumbnail of the file sent. The thumbnail should be in JPEG format and less than 200 kB in size. - A thumbnail‘s width and height should not exceed 320. - :type thumb: :obj:`typing.Union[typing.Union[base.InputFile, base.String], None]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound. - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]` - - :param reply: fill 'reply_to_message_id' - :type reply: :obj:`base.Boolean` - - :return: On success, the sent Message is returned. - :rtype: :obj:`types.Message` - """ - return await self.bot.send_audio( - chat_id=self.chat.id, - audio=audio, - caption=caption, - parse_mode=parse_mode, - caption_entities=caption_entities, - duration=duration, - performer=performer, - title=title, - thumb=thumb, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - allow_sending_without_reply=allow_sending_without_reply, - reply_markup=reply_markup, - ) - - async def reply_animation( - self, - animation: typing.Union[base.InputFile, base.String], - duration: typing.Optional[base.Integer] = None, - width: typing.Optional[base.Integer] = None, - height: typing.Optional[base.Integer] = None, - thumb: typing.Union[typing.Union[base.InputFile, base.String], None] = None, - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - disable_notification: typing.Optional[base.Boolean] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[ - InlineKeyboardMarkup, - ReplyKeyboardMarkup, - ReplyKeyboardRemove, - ForceReply, - None, - ] = None, - reply: base.Boolean = True, - ) -> Message: - """ - Use this method to send animation files (GIF or H.264/MPEG-4 AVC video without sound). - - On success, the sent Message is returned. - Bots can currently send animation files of up to 50 MB in size, this limit may be changed in the future. - - Source https://core.telegram.org/bots/api#sendanimation - - :param animation: Animation to send. Pass a file_id as String to send an animation that exists - on the Telegram servers (recommended), pass an HTTP URL as a String for Telegram to get an animation - from the Internet, or upload a new animation using multipart/form-data - :type animation: :obj:`typing.Union[base.InputFile, base.String]` - - :param duration: Duration of sent animation in seconds - :type duration: :obj:`typing.Optional[base.Integer]` - - :param width: Animation width - :type width: :obj:`typing.Optional[base.Integer]` - - :param height: Animation height - :type height: :obj:`typing.Optional[base.Integer]` - - :param thumb: Thumbnail of the file sent. The thumbnail should be in JPEG format and less than 200 kB in size. - A thumbnail‘s width and height should not exceed 320. - :type thumb: :obj:`typing.Union[typing.Union[base.InputFile, base.String], None]` - - :param caption: Animation caption (may also be used when resending animation by file_id), 0-1024 characters - :type caption: :obj:`typing.Optional[base.String]` - - :param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic, - fixed-width text or inline URLs in the media caption - :type parse_mode: :obj:`typing.Optional[base.String]` - - :param caption_entities: List of special entities that appear in message text, - which can be specified instead of parse_mode - :type caption_entities: :obj:`typing.Optional[typing.List[MessageEntity]]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[typing.Union[types.InlineKeyboardMarkup, types.ReplyKeyboardMarkup, - types.ReplyKeyboardRemove, types.ForceReply], None]` - - :param reply: fill 'reply_to_message_id' - :type reply: :obj:`base.Boolean` - - :return: On success, the sent Message is returned - :rtype: :obj:`types.Message` - """ - return await self.bot.send_animation( - self.chat.id, - animation=animation, - duration=duration, - width=width, - height=height, - thumb=thumb, - caption=caption, - parse_mode=parse_mode, - caption_entities=caption_entities, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - allow_sending_without_reply=allow_sending_without_reply, - reply_markup=reply_markup, - ) - - async def reply_document( - self, - document: typing.Union[base.InputFile, base.String], - thumb: typing.Union[typing.Union[base.InputFile, base.String], None] = None, - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - disable_content_type_detection: typing.Optional[base.Boolean] = None, - disable_notification: typing.Optional[base.Boolean] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[ - InlineKeyboardMarkup, - ReplyKeyboardMarkup, - ReplyKeyboardRemove, - ForceReply, - None, - ] = None, - reply: base.Boolean = True, - ) -> Message: - """ - Use this method to send general files. On success, the sent Message is - returned. Bots can currently send files of any type of up to 50 MB in size, - this limit may be changed in the future. - - Source: https://core.telegram.org/bots/api#senddocument - - :param document: File to send - :type document: :obj:`typing.Union[base.InputFile, base.String]` - - :param thumb: Thumbnail of the file sent - :type thumb: :obj:`typing.Union[base.InputFile, base.String, None]` - - :param caption: Document caption (may also be used when resending documents - by file_id), 0-1024 characters - :type caption: :obj:`typing.Optional[base.String]` - - :param disable_content_type_detection: Disables automatic server-side content - type detection for files uploaded using multipart/form-data - :type disable_content_type_detection: :obj:`typing.Optional[base.Boolean]` - - :param parse_mode: Send Markdown or HTML, if you want Telegram apps to show - bold, italic, fixed-width text or inline URLs in your bot's message. - :type parse_mode: :obj:`typing.Optional[base.String]` - - :param caption_entities: List of special entities that appear in message text, - which can be specified instead of parse_mode - :type caption_entities: :obj:`typing.Optional[typing.List[MessageEntity]]` - - :param disable_notification: Sends the message silently. Users will receive a - notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object - for an inline keyboard, custom reply keyboard, instructions to remove - reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply], - None]` - - :param reply: True if the message is a reply - :type reply: :obj:`typing.Optional[base.Boolean]` - - :return: On success, the sent Message is returned - :rtype: :obj:`types.Message` - """ - return await self.bot.send_document( - chat_id=self.chat.id, - document=document, - thumb=thumb, - caption=caption, - parse_mode=parse_mode, - caption_entities=caption_entities, - disable_content_type_detection=disable_content_type_detection, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - allow_sending_without_reply=allow_sending_without_reply, - reply_markup=reply_markup, - ) - - async def reply_video( - self, - video: typing.Union[base.InputFile, base.String], - duration: typing.Optional[base.Integer] = None, - width: typing.Optional[base.Integer] = None, - height: typing.Optional[base.Integer] = None, - thumb: typing.Union[base.InputFile, base.String, None] = None, - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - supports_streaming: typing.Optional[base.Boolean] = None, - disable_notification: typing.Optional[base.Boolean] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[ - InlineKeyboardMarkup, - ReplyKeyboardMarkup, - ReplyKeyboardRemove, - ForceReply, - None, - ] = None, - reply: base.Boolean = True, - ) -> Message: - """ - Use this method to send video files, Telegram clients support mp4 videos - (other formats may be sent as Document). - - Source: https://core.telegram.org/bots/api#sendvideo - - :param video: Video to send. - :type video: :obj:`typing.Union[base.InputFile, base.String]` - - :param duration: Duration of sent video in seconds - :type duration: :obj:`typing.Optional[base.Integer]` - - :param width: Video width - :type width: :obj:`typing.Optional[base.Integer]` - - :param height: Video height - :type height: :obj:`typing.Optional[base.Integer]` - - :param thumb: Thumbnail of the file sent. The thumbnail should be in JPEG format and less than 200 kB in size. - A thumbnail‘s width and height should not exceed 320. - :type thumb: :obj:`typing.Union[base.InputFile, base.String, None]` - - :param caption: Video caption (may also be used when resending videos by file_id), 0-1024 characters after entities parsing - :type caption: :obj:`typing.Optional[base.String]` - - :param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic, - fixed-width text or inline URLs in the media caption - :type parse_mode: :obj:`typing.Optional[base.String]` - - :param caption_entities: List of special entities that appear in message text, - which can be specified instead of parse_mode - :type caption_entities: :obj:`typing.Optional[typing.List[MessageEntity]]` - - :param supports_streaming: Pass True, if the uploaded video is suitable for streaming - :type supports_streaming: :obj:`typing.Optional[base.Boolean]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound. - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]` - - :param reply: fill 'reply_to_message_id' - :type reply: :obj:`base.Boolean` - - :return: On success, the sent Message is returned. - :rtype: :obj:`types.Message` - """ - return await self.bot.send_video( - chat_id=self.chat.id, - video=video, - duration=duration, - width=width, - height=height, - thumb=thumb, - caption=caption, - parse_mode=parse_mode, - caption_entities=caption_entities, - supports_streaming=supports_streaming, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - allow_sending_without_reply=allow_sending_without_reply, - reply_markup=reply_markup, - ) - - async def reply_voice( - self, - voice: typing.Union[base.InputFile, base.String], - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - duration: typing.Optional[base.Integer] = None, - disable_notification: typing.Optional[base.Boolean] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[ - InlineKeyboardMarkup, - ReplyKeyboardMarkup, - ReplyKeyboardRemove, - ForceReply, - None, - ] = None, - reply: base.Boolean = True, - ) -> Message: - """ - Use this method to send audio files, if you want Telegram clients to display the file - as a playable voice message. - - For this to work, your audio must be in an .ogg file encoded with OPUS - (other formats may be sent as Audio or Document). - - Source: https://core.telegram.org/bots/api#sendvoice - - :param voice: Audio file to send. - :type voice: :obj:`typing.Union[base.InputFile, base.String]` - - :param caption: Voice message caption, 0-1024 characters after entities parsing - :type caption: :obj:`typing.Optional[base.String]` - - :param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic, - fixed-width text or inline URLs in the media caption - :type parse_mode: :obj:`typing.Optional[base.String]` - - :param caption_entities: List of special entities that appear in message text, - which can be specified instead of parse_mode - :type caption_entities: :obj:`typing.Optional[typing.List[MessageEntity]]` - - :param duration: Duration of the voice message in seconds - :type duration: :obj:`typing.Optional[base.Integer]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound. - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]` - - :param reply: fill 'reply_to_message_id' - :type reply: :obj:`base.Boolean` - - :return: On success, the sent Message is returned. - :rtype: :obj:`types.Message` - """ - return await self.bot.send_voice( - chat_id=self.chat.id, - voice=voice, - caption=caption, - parse_mode=parse_mode, - caption_entities=caption_entities, - duration=duration, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - allow_sending_without_reply=allow_sending_without_reply, - reply_markup=reply_markup, - ) - - async def reply_video_note( - self, - video_note: typing.Union[base.InputFile, base.String], - duration: typing.Optional[base.Integer] = None, - length: typing.Optional[base.Integer] = None, - thumb: typing.Union[typing.Union[base.InputFile, base.String], None] = None, - disable_notification: typing.Optional[base.Boolean] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[ - InlineKeyboardMarkup, - ReplyKeyboardMarkup, - ReplyKeyboardRemove, - ForceReply, - None, - ] = None, - reply: base.Boolean = True, - ) -> Message: - """ - As of v.4.0, Telegram clients support rounded square mp4 videos of up to 1 minute long. - Use this method to send video messages. - - Source: https://core.telegram.org/bots/api#sendvideonote - - :param video_note: Video note to send. - :type video_note: :obj:`typing.Union[base.InputFile, base.String]` - - :param duration: Duration of sent video in seconds - :type duration: :obj:`typing.Optional[base.Integer]` - - :param length: Video width and height - :type length: :obj:`typing.Optional[base.Integer]` - - :param thumb: Thumbnail of the file sent. The thumbnail should be in JPEG format and less than 200 kB in size. - A thumbnail‘s width and height should not exceed 320. - :type thumb: :obj:`typing.Union[typing.Union[base.InputFile, base.String], None]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound. - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None] - ` - :param reply: fill 'reply_to_message_id' - :type reply: :obj:`base.Boolean` - - :return: On success, the sent Message is returned. - :rtype: :obj:`types.Message` - """ - return await self.bot.send_video_note( - chat_id=self.chat.id, - video_note=video_note, - duration=duration, - length=length, - thumb=thumb, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - allow_sending_without_reply=allow_sending_without_reply, - reply_markup=reply_markup, - ) - - async def reply_media_group( - self, - media: typing.Union[MediaGroup, typing.List], - disable_notification: typing.Optional[base.Boolean] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply: base.Boolean = True, - ) -> typing.List[Message]: - """ - Use this method to send a group of photos, videos, documents or audios as - an album. Documents and audio files can be only group in an album with - messages of the same type. On success, an array of Messages that were sent - is returned. - - Source: https://core.telegram.org/bots/api#sendmediagroup - - :param media: A JSON-serialized array describing photos and videos to be sent - :type media: :obj:`typing.Union[types.MediaGroup, typing.List]` - - :param disable_notification: Sends the message silently. Users will receive - a notification with no sound. - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply: fill 'reply_to_message_id' - :type reply: :obj:`base.Boolean` - - :return: On success, an array of the sent Messages is returned. - :rtype: typing.List[types.Message] - """ - return await self.bot.send_media_group( - self.chat.id, - media=media, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - allow_sending_without_reply=allow_sending_without_reply, - ) - - async def reply_location( - self, - latitude: base.Float, - longitude: base.Float, - live_period: typing.Optional[base.Integer] = None, - disable_notification: typing.Optional[base.Boolean] = None, - horizontal_accuracy: typing.Optional[base.Float] = None, - heading: typing.Optional[base.Integer] = None, - proximity_alert_radius: typing.Optional[base.Integer] = None, - reply_markup: typing.Union[ - InlineKeyboardMarkup, - ReplyKeyboardMarkup, - ReplyKeyboardRemove, - ForceReply, - None, - ] = None, - reply: base.Boolean = True, - ) -> Message: - """ - Use this method to send point on the map. - - Source: https://core.telegram.org/bots/api#sendlocation - - :param latitude: Latitude of the location - :type latitude: :obj:`base.Float` - - :param longitude: Longitude of the location - :type longitude: :obj:`base.Float` - - :param horizontal_accuracy: The radius of uncertainty for the location, - measured in meters; 0-1500 - :type horizontal_accuracy: :obj:`typing.Optional[base.Float]` - - :param live_period: Period in seconds for which the location will be updated - :type live_period: :obj:`typing.Optional[base.Integer]` - - :param heading: For live locations, a direction in which the user is moving, - in degrees. Must be between 1 and 360 if specified. - :type heading: :obj:`typing.Optional[base.Integer]` - - :param proximity_alert_radius: For live locations, a maximum distance for - proximity alerts about approaching another chat member, in meters. Must - be between 1 and 100000 if specified. - :type proximity_alert_radius: :obj:`typing.Optional[base.Integer]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound. - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]` - - :param reply: fill 'reply_to_message_id' - :type reply: :obj:`base.Boolean` - - :return: On success, the sent Message is returned. - :rtype: :obj:`types.Message` - """ - return await self.bot.send_location( - chat_id=self.chat.id, - latitude=latitude, - longitude=longitude, - horizontal_accuracy=horizontal_accuracy, - live_period=live_period, - heading=heading, - proximity_alert_radius=proximity_alert_radius, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - reply_markup=reply_markup, - ) - - async def reply_venue( - self, - latitude: base.Float, - longitude: base.Float, - title: base.String, - address: base.String, - foursquare_id: typing.Optional[base.String] = None, - foursquare_type: typing.Optional[base.String] = None, - google_place_id: typing.Optional[base.String] = None, - google_place_type: typing.Optional[base.String] = None, - disable_notification: typing.Optional[base.Boolean] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[ - InlineKeyboardMarkup, - ReplyKeyboardMarkup, - ReplyKeyboardRemove, - ForceReply, - None, - ] = None, - reply: base.Boolean = True, - ) -> Message: - """ - Use this method to send information about a venue. - - Source: https://core.telegram.org/bots/api#sendvenue - - :param latitude: Latitude of the venue - :type latitude: :obj:`base.Float` - - :param longitude: Longitude of the venue - :type longitude: :obj:`base.Float` - - :param title: Name of the venue - :type title: :obj:`base.String` - - :param address: Address of the venue - :type address: :obj:`base.String` - - :param foursquare_id: Foursquare identifier of the venue - :type foursquare_id: :obj:`typing.Optional[base.String]` - - :param foursquare_type: Foursquare type of the venue, if known - :type foursquare_type: :obj:`typing.Optional[base.String]` - - :param google_place_id: Google Places identifier of the venue - :type google_place_id: :obj:`typing.Optional[base.String]` - - :param google_place_type: Google Places type of the venue. See supported - types: https://developers.google.com/places/web-service/supported_types - :type google_place_type: :obj:`typing.Optional[base.String]` - - :param disable_notification: Sends the message silently. Users will receive - a notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object - for an inline keyboard, custom reply keyboard, instructions to remove - reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, - None]` - - :param reply: fill 'reply_to_message_id' - :type reply: :obj:`base.Boolean` - - :return: On success, the sent Message is returned. - :rtype: :obj:`types.Message` - """ - return await self.bot.send_venue( - chat_id=self.chat.id, - latitude=latitude, - longitude=longitude, - title=title, - address=address, - foursquare_id=foursquare_id, - foursquare_type=foursquare_type, - google_place_id=google_place_id, - google_place_type=google_place_type, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - allow_sending_without_reply=allow_sending_without_reply, - reply_markup=reply_markup, - ) - - async def reply_contact( - self, - phone_number: base.String, - first_name: base.String, - last_name: typing.Optional[base.String] = None, - disable_notification: typing.Optional[base.Boolean] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[ - InlineKeyboardMarkup, - ReplyKeyboardMarkup, - ReplyKeyboardRemove, - ForceReply, - None, - ] = None, - reply: base.Boolean = True, - ) -> Message: - """ - Use this method to send phone contacts. - - Source: https://core.telegram.org/bots/api#sendcontact - - :param phone_number: Contact's phone number - :type phone_number: :obj:`base.String` - - :param first_name: Contact's first name - :type first_name: :obj:`base.String` - - :param last_name: Contact's last name - :type last_name: :obj:`typing.Optional[base.String]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound. - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]` - - :param reply: fill 'reply_to_message_id' - :type reply: :obj:`base.Boolean` - - :return: On success, the sent Message is returned. - :rtype: :obj:`types.Message` - """ - return await self.bot.send_contact( - chat_id=self.chat.id, - phone_number=phone_number, - first_name=first_name, - last_name=last_name, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - allow_sending_without_reply=allow_sending_without_reply, - reply_markup=reply_markup, - ) - - async def reply_poll( - self, - question: base.String, - options: typing.List[base.String], - is_anonymous: typing.Optional[base.Boolean] = None, - type: typing.Optional[base.String] = None, - allows_multiple_answers: typing.Optional[base.Boolean] = None, - correct_option_id: typing.Optional[base.Integer] = None, - explanation: typing.Optional[base.String] = None, - explanation_parse_mode: typing.Optional[base.String] = None, - explanation_entities: typing.Optional[typing.List[MessageEntity]] = None, - open_period: typing.Optional[base.Integer] = None, - close_date: typing.Union[base.Integer, datetime.datetime, datetime.timedelta, None] = None, - is_closed: typing.Optional[base.Boolean] = None, - disable_notification: typing.Optional[base.Boolean] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[ - InlineKeyboardMarkup, - ReplyKeyboardMarkup, - ReplyKeyboardRemove, - ForceReply, - None, - ] = None, - reply: base.Boolean = True, - ) -> Message: - """ - Use this method to send a native poll. On success, the sent Message is - returned. - - Source: https://core.telegram.org/bots/api#sendpoll - - :param question: Poll question, 1-255 characters - :type question: :obj:`base.String` - - :param options: List of answer options, 2-10 strings 1-100 characters each - :type options: :obj:`typing.List[base.String]` - - :param is_anonymous: True, if the poll needs to be anonymous, defaults to True - :type is_anonymous: :obj:`typing.Optional[base.Boolean]` - - :param type: Poll type, “quiz” or “regular”, defaults to “regular” - :type type: :obj:`typing.Optional[base.String]` - - :param allows_multiple_answers: True, if the poll allows multiple answers, - ignored for polls in quiz mode, defaults to False - :type allows_multiple_answers: :obj:`typing.Optional[base.Boolean]` - - :param correct_option_id: 0-based identifier of the correct answer option, - required for polls in quiz mode - :type correct_option_id: :obj:`typing.Optional[base.Integer]` - - :param explanation: Text that is shown when a user chooses an incorrect - answer or taps on the lamp icon in a quiz-style poll, 0-200 characters - with at most 2 line feeds after entities parsing - :type explanation: :obj:`typing.Optional[base.String]` - - :param explanation_parse_mode: Mode for parsing entities in the explanation. - See formatting options for more details. - :type explanation_parse_mode: :obj:`typing.Optional[base.String]` - - :param explanation_entities: List of special entities that appear in message - text, which can be specified instead of parse_mode - :type explanation_entities: :obj:`typing.Optional[typing.List[MessageEntity]]` - - :param open_period: Amount of time in seconds the poll will be active after - creation, 5-600. Can't be used together with close_date. - :type open_period: :obj:`typing.Optional[base.Integer]` - - :param close_date: Point in time (Unix timestamp) when the poll will be - automatically closed. Must be at least 5 and no more than 600 seconds in - the future. Can't be used together with open_period. - :type close_date: :obj:`typing.Union[base.Integer, datetime.datetime, - datetime.timedelta, None]` - - :param is_closed: Pass True, if the poll needs to be immediately closed - :type is_closed: :obj:`typing.Optional[base.Boolean]` - - :param disable_notification: Sends the message silently. Users will receive - a notification with no sound. - :type disable_notification: :obj:`typing.Optional[Boolean]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object - for an inline keyboard, custom reply keyboard, instructions to remove - reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, - None]` - - :param reply: fill 'reply_to_message_id' - :type reply: :obj:`base.Boolean` - - :return: On success, the sent Message is returned - :rtype: :obj:`types.Message` - """ - return await self.bot.send_poll( - chat_id=self.chat.id, - question=question, - options=options, - is_anonymous=is_anonymous, - type=type, - allows_multiple_answers=allows_multiple_answers, - correct_option_id=correct_option_id, - explanation=explanation, - explanation_parse_mode=explanation_parse_mode, - explanation_entities=explanation_entities, - open_period=open_period, - close_date=close_date, - is_closed=is_closed, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - allow_sending_without_reply=allow_sending_without_reply, - reply_markup=reply_markup, - ) - - async def reply_sticker( - self, - sticker: typing.Union[base.InputFile, base.String], - disable_notification: typing.Optional[base.Boolean] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[ - InlineKeyboardMarkup, - ReplyKeyboardMarkup, - ReplyKeyboardRemove, - ForceReply, - None, - ] = None, - reply: base.Boolean = True, - ) -> Message: - """ - Use this method to send .webp stickers. - - Source: https://core.telegram.org/bots/api#sendsticker - - :param sticker: Sticker to send. - :type sticker: :obj:`typing.Union[base.InputFile, base.String]` - - :param disable_notification: Sends the message silently. Users will receive a notification with no sound. - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object for an inline keyboard, - custom reply keyboard, instructions to remove reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, None]` - - :param reply: fill 'reply_to_message_id' - :type reply: :obj:`base.Boolean` - - :return: On success, the sent Message is returned. - :rtype: :obj:`types.Message` - """ - return await self.bot.send_sticker( - chat_id=self.chat.id, - sticker=sticker, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - allow_sending_without_reply=allow_sending_without_reply, - reply_markup=reply_markup, - ) - - async def reply_dice( - self, - emoji: typing.Optional[base.String] = None, - disable_notification: typing.Optional[base.Boolean] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[ - InlineKeyboardMarkup, - ReplyKeyboardMarkup, - ReplyKeyboardRemove, - ForceReply, - None, - ] = None, - reply: base.Boolean = True, - ) -> Message: - """ - Use this method to send an animated emoji that will display a random value. - On success, the sent Message is returned. - - Source: https://core.telegram.org/bots/api#senddice - - :param emoji: Emoji on which the dice throw animation is based. Currently, - must be one of “🎲”, “🎯”, “🏀”, “⚽”, or “🎰”. Dice can have values 1-6 - for “🎲” and “🎯”, values 1-5 for “🏀” and “⚽”, and values 1-64 for “🎰”. - Defaults to “🎲” - :type emoji: :obj:`typing.Optional[base.String]` - - :param disable_notification: Sends the message silently. Users will receive - a notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :param allow_sending_without_reply: Pass True, if the message should be sent - even if the specified replied-to message is not found - :type allow_sending_without_reply: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: Additional interface options. A JSON-serialized object - for an inline keyboard, custom reply keyboard, instructions to remove - reply keyboard or to force a reply from the user - :type reply_markup: :obj:`typing.Union[types.InlineKeyboardMarkup, - types.ReplyKeyboardMarkup, types.ReplyKeyboardRemove, types.ForceReply, - None]` - - :param reply: fill 'reply_to_message_id' - :type reply: :obj:`base.Boolean` - - :return: On success, the sent Message is returned. - :rtype: :obj:`types.Message` - """ - return await self.bot.send_dice( - chat_id=self.chat.id, - emoji=emoji, - disable_notification=disable_notification, - reply_to_message_id=self.message_id if reply else None, - allow_sending_without_reply=allow_sending_without_reply, - reply_markup=reply_markup, - ) - - async def forward( - self, - chat_id: typing.Union[base.Integer, base.String], - disable_notification: typing.Optional[base.Boolean] = None, - ) -> Message: - """ - Forward this message - - Source: https://core.telegram.org/bots/api#forwardmessage - - :param chat_id: Unique identifier for the target chat or username of the target channel - :type chat_id: :obj:`typing.Union[base.Integer, base.String]` - :param disable_notification: Sends the message silently. Users will receive a notification with no sound - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - :return: On success, the sent Message is returned - :rtype: :obj:`types.Message` - """ - return await self.bot.forward_message( - chat_id, self.chat.id, self.message_id, disable_notification - ) - - async def edit_text( - self, - text: base.String, - parse_mode: typing.Optional[base.String] = None, - entities: typing.Optional[typing.List[MessageEntity]] = None, - disable_web_page_preview: typing.Optional[base.Boolean] = None, - reply_markup: typing.Optional[InlineKeyboardMarkup] = None, - ) -> typing.Union[Message, base.Boolean]: - """ - Use this method to edit text and game messages sent by the bot or via the bot (for inline bots). - - Source: https://core.telegram.org/bots/api#editmessagetext - - :param text: New text of the message - :type text: :obj:`base.String` - - :param parse_mode: Send Markdown or HTML, if you want Telegram apps to show bold, italic, - fixed-width text or inline URLs in your bot's message. - :type parse_mode: :obj:`typing.Optional[base.String]` - - :param entities: List of special entities that appear in message text, - which can be specified instead of parse_mode - :type entities: :obj:`typing.Optional[typing.List[MessageEntity]]` - - :param disable_web_page_preview: Disables link previews for links in this message - :type disable_web_page_preview: :obj:`typing.Optional[base.Boolean]` - - :param reply_markup: A JSON-serialized object for an inline keyboard. - :type reply_markup: :obj:`typing.Optional[types.InlineKeyboardMarkup]` - - :return: On success, if edited message is sent by the bot, - the edited Message is returned, otherwise True is returned. - :rtype: :obj:`typing.Union[types.Message, base.Boolean]` - """ - return await self.bot.edit_message_text( - text=text, - chat_id=self.chat.id, - message_id=self.message_id, - parse_mode=parse_mode, - entities=entities, - disable_web_page_preview=disable_web_page_preview, - reply_markup=reply_markup, - ) - - async def edit_caption( - self, - caption: base.String, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - reply_markup: typing.Optional[InlineKeyboardMarkup] = None, - ) -> typing.Union[Message, base.Boolean]: - """ - Use this method to edit captions of messages sent by the bot or via the bot - (for inline bots). - - Source: https://core.telegram.org/bots/api#editmessagecaption - - :param caption: New caption of the message - :type caption: :obj:`typing.Optional[base.String]` - - :param parse_mode: Send Markdown or HTML, if you want Telegram apps to show - bold, italic, fixed-width text or inline URLs in your bot's message. - :type parse_mode: :obj:`typing.Optional[base.String]` - - :param caption_entities: List of special entities that appear in message text, - which can be specified instead of parse_mode - :type caption_entities: :obj:`typing.Optional[typing.List[MessageEntity]]` - - :param reply_markup: A JSON-serialized object for an inline keyboard - :type reply_markup: :obj:`typing.Optional[types.InlineKeyboardMarkup]` - - :return: On success, if edited message is sent by the bot, the edited Message - is returned, otherwise True is returned. - :rtype: :obj:`typing.Union[types.Message, base.Boolean]` - """ - return await self.bot.edit_message_caption( - chat_id=self.chat.id, - message_id=self.message_id, - caption=caption, - parse_mode=parse_mode, - caption_entities=caption_entities, - reply_markup=reply_markup, - ) - - async def edit_media( - self, - media: InputMedia, - reply_markup: typing.Optional[InlineKeyboardMarkup] = None, - ) -> typing.Union[Message, base.Boolean]: - """ - Use this method to edit audio, document, photo, or video messages. - If a message is a part of a message album, then it can be edited only to a photo or a video. - Otherwise, message type can be changed arbitrarily. - When inline message is edited, new file can't be uploaded. - Use previously uploaded file via its file_id or specify a URL. - - On success, if the edited message was sent by the bot, - the edited Message is returned, otherwise True is returned. - - Source https://core.telegram.org/bots/api#editmessagemedia - - :param media: A JSON-serialized object for a new media content of the message - :type media: :obj:`types.InputMedia` - :param reply_markup: A JSON-serialized object for a new inline keyboard - :type reply_markup: :obj:`typing.Optional[types.InlineKeyboardMarkup]` - :return: On success, if the edited message was sent by the bot, the edited Message is returned, - otherwise True is returned - :rtype: :obj:`typing.Union[types.Message, base.Boolean]` - """ - return await self.bot.edit_message_media( - media=media, - chat_id=self.chat.id, - message_id=self.message_id, - reply_markup=reply_markup, - ) - - async def edit_reply_markup( - self, reply_markup: typing.Optional[InlineKeyboardMarkup] = None - ) -> typing.Union[Message, base.Boolean]: - """ - Use this method to edit only the reply markup of messages sent by the bot or via the bot (for inline bots). - - Source: https://core.telegram.org/bots/api#editmessagereplymarkup - - :param reply_markup: A JSON-serialized object for an inline keyboard - :type reply_markup: :obj:`typing.Optional[types.InlineKeyboardMarkup]` - :return: On success, if edited message is sent by the bot, the edited Message is returned, - otherwise True is returned. - :rtype: :obj:`typing.Union[types.Message, base.Boolean]` - """ - return await self.bot.edit_message_reply_markup( - chat_id=self.chat.id, message_id=self.message_id, reply_markup=reply_markup - ) - - async def delete_reply_markup(self) -> typing.Union[Message, base.Boolean]: - """ - Use this method to delete reply markup of messages sent by the bot or via the bot (for inline bots). - - :return: On success, if edited message is sent by the bot, the edited Message is returned, - otherwise True is returned. - :rtype: :obj:`typing.Union[types.Message, base.Boolean]` - """ - return await self.bot.edit_message_reply_markup( - chat_id=self.chat.id, message_id=self.message_id - ) - - async def edit_live_location( - self, - latitude: base.Float, - longitude: base.Float, - reply_markup: typing.Optional[InlineKeyboardMarkup] = None, - ) -> typing.Union[Message, base.Boolean]: - """ - Use this method to edit live location messages sent by the bot or via the bot (for inline bots). - A location can be edited until its live_period expires or editing is explicitly disabled by a call - to stopMessageLiveLocation. - - Source: https://core.telegram.org/bots/api#editmessagelivelocation - - :param latitude: Latitude of new location - :type latitude: :obj:`base.Float` - :param longitude: Longitude of new location - :type longitude: :obj:`base.Float` - :param reply_markup: A JSON-serialized object for a new inline keyboard. - :type reply_markup: :obj:`typing.Optional[types.InlineKeyboardMarkup]` - :return: On success, if the edited message was sent by the bot, the edited Message is returned, - otherwise True is returned. - :rtype: :obj:`typing.Union[types.Message, base.Boolean]` - """ - return await self.bot.edit_message_live_location( - latitude=latitude, - longitude=longitude, - chat_id=self.chat.id, - message_id=self.message_id, - reply_markup=reply_markup, - ) - - async def stop_live_location( - self, reply_markup: typing.Optional[InlineKeyboardMarkup] = None - ) -> typing.Union[Message, base.Boolean]: - """ - Use this method to stop updating a live location message sent by the bot or via the bot - (for inline bots) before live_period expires. - - Source: https://core.telegram.org/bots/api#stopmessagelivelocation - - :param reply_markup: A JSON-serialized object for a new inline keyboard. - :type reply_markup: :obj:`typing.Optional[types.InlineKeyboardMarkup]` - :return: On success, if the message was sent by the bot, the sent Message is returned, - otherwise True is returned. - :rtype: :obj:`typing.Union[types.Message, base.Boolean]` - """ - return await self.bot.stop_message_live_location( - chat_id=self.chat.id, message_id=self.message_id, reply_markup=reply_markup - ) - - async def delete(self) -> base.Boolean: - """ - Use this method to delete a message, including service messages, with the following limitations: - - A message can only be deleted if it was sent less than 48 hours ago. - - Bots can delete outgoing messages in private chats, groups, and supergroups. - - Bots can delete incoming messages in private chats. - - Bots granted can_post_messages permissions can delete outgoing messages in channels. - - If the bot is an administrator of a group, it can delete any message there. - - If the bot has can_delete_messages permission in a supergroup or a channel, it can delete any message there. - - Source: https://core.telegram.org/bots/api#deletemessage - - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - return await self.bot.delete_message(self.chat.id, self.message_id) - - async def pin( - self, disable_notification: typing.Optional[base.Boolean] = None, - ) -> base.Boolean: - """ - Use this method to add a message to the list of pinned messages in a chat. - If the chat is not a private chat, the bot must be an administrator in the - chat for this to work and must have the 'can_pin_messages' admin right in a - supergroup or 'can_edit_messages' admin right in a channel. Returns True on - success. - - Source: https://core.telegram.org/bots/api#pinchatmessage - - :param disable_notification: Pass True, if it is not necessary to send a - notification to all group members about the new pinned message - :type disable_notification: :obj:`typing.Optional[base.Boolean]` - - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - return await self.chat.pin_message(self.message_id, disable_notification) - - async def unpin(self) -> base.Boolean: - """ - Use this method to remove a message from the list of pinned messages in a - chat. If the chat is not a private chat, the bot must be an administrator in - the chat for this to work and must have the 'can_pin_messages' admin right in - a supergroup or 'can_edit_messages' admin right in a channel. Returns True on - success. - - Source: https://core.telegram.org/bots/api#unpinchatmessage - - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - return await self.chat.unpin_message( - message_id=self.message_id, - ) - - async def send_copy( - self: Message, - chat_id: typing.Union[str, int], - disable_notification: typing.Optional[bool] = None, - disable_web_page_preview: typing.Optional[bool] = None, - reply_to_message_id: typing.Optional[int] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[ - InlineKeyboardMarkup, ReplyKeyboardMarkup, None - ] = None, - ) -> Message: - """ - Send copy of current message - - :param chat_id: - :param disable_notification: - :param disable_web_page_preview: for text messages only - :param reply_to_message_id: - :param allow_sending_without_reply: - :param reply_markup: - :return: - """ - kwargs = { - "chat_id": chat_id, - "allow_sending_without_reply": allow_sending_without_reply, - "reply_markup": reply_markup or self.reply_markup, - "parse_mode": ParseMode.HTML, - "disable_notification": disable_notification, - "reply_to_message_id": reply_to_message_id, - } - text = self.html_text if (self.text or self.caption) else None - - if self.text: - kwargs["disable_web_page_preview"] = disable_web_page_preview - return await self.bot.send_message(text=text, **kwargs) - elif self.audio: - return await self.bot.send_audio( - audio=self.audio.file_id, - caption=text, - title=self.audio.title, - performer=self.audio.performer, - duration=self.audio.duration, - **kwargs, - ) - elif self.animation: - return await self.bot.send_animation( - animation=self.animation.file_id, caption=text, **kwargs - ) - elif self.document: - return await self.bot.send_document( - document=self.document.file_id, caption=text, **kwargs - ) - elif self.photo: - return await self.bot.send_photo( - photo=self.photo[-1].file_id, caption=text, **kwargs - ) - elif self.sticker: - kwargs.pop("parse_mode") - return await self.bot.send_sticker(sticker=self.sticker.file_id, **kwargs) - elif self.video: - return await self.bot.send_video( - video=self.video.file_id, caption=text, **kwargs - ) - elif self.video_note: - kwargs.pop("parse_mode") - return await self.bot.send_video_note( - video_note=self.video_note.file_id, **kwargs - ) - elif self.voice: - return await self.bot.send_voice(voice=self.voice.file_id, **kwargs) - elif self.contact: - kwargs.pop("parse_mode") - return await self.bot.send_contact( - phone_number=self.contact.phone_number, - first_name=self.contact.first_name, - last_name=self.contact.last_name, - vcard=self.contact.vcard, - **kwargs, - ) - elif self.venue: - kwargs.pop("parse_mode") - return await self.bot.send_venue( - latitude=self.venue.location.latitude, - longitude=self.venue.location.longitude, - title=self.venue.title, - address=self.venue.address, - foursquare_id=self.venue.foursquare_id, - foursquare_type=self.venue.foursquare_type, - **kwargs, - ) - elif self.location: - kwargs.pop("parse_mode") - return await self.bot.send_location( - latitude=self.location.latitude, - longitude=self.location.longitude, - **kwargs, - ) - elif self.poll: - kwargs.pop("parse_mode") - return await self.bot.send_poll( - question=self.poll.question, - options=[option.text for option in self.poll.options], - is_anonymous=self.poll.is_anonymous, - allows_multiple_answers=self.poll.allows_multiple_answers, - **kwargs, - ) - elif self.dice: - kwargs.pop("parse_mode") - return await self.bot.send_dice( - emoji=self.dice.emoji, - **kwargs, - ) - else: - raise TypeError("This type of message can't be copied.") - - async def copy_to( - self, - chat_id: typing.Union[base.Integer, base.String], - caption: typing.Optional[base.String] = None, - parse_mode: typing.Optional[base.String] = None, - caption_entities: typing.Optional[typing.List[MessageEntity]] = None, - disable_notification: typing.Optional[base.Boolean] = None, - reply_to_message_id: typing.Optional[base.Integer] = None, - allow_sending_without_reply: typing.Optional[base.Boolean] = None, - reply_markup: typing.Union[InlineKeyboardMarkup, - ReplyKeyboardMarkup, - ReplyKeyboardRemove, - ForceReply, None] = None, - ) -> MessageId: - return await self.bot.copy_message( - chat_id=chat_id, - from_chat_id=self.chat.id, - message_id=self.message_id, - caption=caption, - parse_mode=parse_mode, - caption_entities=caption_entities, - disable_notification=disable_notification, - reply_to_message_id=reply_to_message_id, - allow_sending_without_reply=allow_sending_without_reply, - reply_markup=reply_markup - ) - - def __int__(self): - return self.message_id - - -class ContentType(helper.Helper): - """ - List of message content types - - WARNING: Single elements - - :key: TEXT - :key: AUDIO - :key: DOCUMENT - :key: GAME - :key: PHOTO - :key: STICKER - :key: VIDEO - :key: VIDEO_NOTE - :key: VOICE - :key: CONTACT - :key: LOCATION - :key: VENUE - :key: POLL - :key: DICE - :key: NEW_CHAT_MEMBERS - :key: LEFT_CHAT_MEMBER - :key: INVOICE - :key: SUCCESSFUL_PAYMENT - :key: CONNECTED_WEBSITE - :key: MIGRATE_TO_CHAT_ID - :key: MIGRATE_FROM_CHAT_ID - :key: UNKNOWN - :key: ANY - """ - - mode = helper.HelperMode.snake_case - - TEXT = helper.Item() # text - AUDIO = helper.Item() # audio - DOCUMENT = helper.Item() # document - ANIMATION = helper.Item() # animation - GAME = helper.Item() # game - PHOTO = helper.Item() # photo - STICKER = helper.Item() # sticker - VIDEO = helper.Item() # video - VIDEO_NOTE = helper.Item() # video_note - VOICE = helper.Item() # voice - CONTACT = helper.Item() # contact - LOCATION = helper.Item() # location - VENUE = helper.Item() # venue - POLL = helper.Item() # poll - DICE = helper.Item() # dice - NEW_CHAT_MEMBERS = helper.Item() # new_chat_member - LEFT_CHAT_MEMBER = helper.Item() # left_chat_member - INVOICE = helper.Item() # invoice - SUCCESSFUL_PAYMENT = helper.Item() # successful_payment - CONNECTED_WEBSITE = helper.Item() # connected_website - MESSAGE_AUTO_DELETE_TIMER_CHANGED = helper.Item() # message_auto_delete_timer_changed - MIGRATE_TO_CHAT_ID = helper.Item() # migrate_to_chat_id - MIGRATE_FROM_CHAT_ID = helper.Item() # migrate_from_chat_id - PINNED_MESSAGE = helper.Item() # pinned_message - NEW_CHAT_TITLE = helper.Item() # new_chat_title - NEW_CHAT_PHOTO = helper.Item() # new_chat_photo - DELETE_CHAT_PHOTO = helper.Item() # delete_chat_photo - GROUP_CHAT_CREATED = helper.Item() # group_chat_created - PASSPORT_DATA = helper.Item() # passport_data - PROXIMITY_ALERT_TRIGGERED = helper.Item() # proximity_alert_triggered - VOICE_CHAT_SCHEDULED = helper.Item() # voice_chat_scheduled - VOICE_CHAT_STARTED = helper.Item() # voice_chat_started - VOICE_CHAT_ENDED = helper.Item() # voice_chat_ended - VOICE_CHAT_PARTICIPANTS_INVITED = helper.Item() # voice_chat_participants_invited - - UNKNOWN = helper.Item() # unknown - ANY = helper.Item() # any - - -class ContentTypes(helper.Helper): - """ - List of message content types - - WARNING: List elements. - - :key: TEXT - :key: AUDIO - :key: DOCUMENT - :key: GAME - :key: PHOTO - :key: STICKER - :key: VIDEO - :key: VIDEO_NOTE - :key: VOICE - :key: CONTACT - :key: LOCATION - :key: VENUE - :key: POLL - :key: DICE - :key: NEW_CHAT_MEMBERS - :key: LEFT_CHAT_MEMBER - :key: INVOICE - :key: SUCCESSFUL_PAYMENT - :key: CONNECTED_WEBSITE - :key: MIGRATE_TO_CHAT_ID - :key: MIGRATE_FROM_CHAT_ID - :key: UNKNOWN - :key: ANY - """ - - mode = helper.HelperMode.snake_case - - TEXT = helper.ListItem() # text - AUDIO = helper.ListItem() # audio - DOCUMENT = helper.ListItem() # document - ANIMATION = helper.ListItem() # animation - GAME = helper.ListItem() # game - PHOTO = helper.ListItem() # photo - STICKER = helper.ListItem() # sticker - VIDEO = helper.ListItem() # video - VIDEO_NOTE = helper.ListItem() # video_note - VOICE = helper.ListItem() # voice - CONTACT = helper.ListItem() # contact - LOCATION = helper.ListItem() # location - VENUE = helper.ListItem() # venue - POLL = helper.ListItem() # poll - DICE = helper.ListItem() # dice - NEW_CHAT_MEMBERS = helper.ListItem() # new_chat_member - LEFT_CHAT_MEMBER = helper.ListItem() # left_chat_member - INVOICE = helper.ListItem() # invoice - SUCCESSFUL_PAYMENT = helper.ListItem() # successful_payment - CONNECTED_WEBSITE = helper.ListItem() # connected_website - MIGRATE_TO_CHAT_ID = helper.ListItem() # migrate_to_chat_id - MIGRATE_FROM_CHAT_ID = helper.ListItem() # migrate_from_chat_id - PINNED_MESSAGE = helper.ListItem() # pinned_message - NEW_CHAT_TITLE = helper.ListItem() # new_chat_title - NEW_CHAT_PHOTO = helper.ListItem() # new_chat_photo - DELETE_CHAT_PHOTO = helper.ListItem() # delete_chat_photo - GROUP_CHAT_CREATED = helper.ListItem() # group_chat_created - PASSPORT_DATA = helper.ListItem() # passport_data - - UNKNOWN = helper.ListItem() # unknown - ANY = helper.ListItem() # any - - -class ParseMode(helper.Helper): - """ - Parse modes - - :key: MARKDOWN - :key: HTML - """ - - mode = helper.HelperMode.lowercase - - MARKDOWN = helper.Item() - MARKDOWN_V2 = helper.Item() - HTML = helper.Item() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/message_auto_delete_timer_changed.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/message_auto_delete_timer_changed.py deleted file mode 100644 index 8b882d1b..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/message_auto_delete_timer_changed.py +++ /dev/null @@ -1,11 +0,0 @@ -from . import base -from . import fields - - -class MessageAutoDeleteTimerChanged(base.TelegramObject): - """ - This object represents a service message about a change in auto-delete timer settings. - - https://core.telegram.org/bots/api#messageautodeletetimerchanged - """ - message_auto_delete_time: base.Integer = fields.Field() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/message_entity.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/message_entity.py deleted file mode 100644 index 58705265..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/message_entity.py +++ /dev/null @@ -1,137 +0,0 @@ -import sys - -from ..utils import helper, markdown -from ..utils.deprecated import deprecated -from . import base, fields -from .user import User - - -class MessageEntity(base.TelegramObject): - """ - This object represents one special entity in a text message. For example, hashtags, usernames, URLs, etc. - - https://core.telegram.org/bots/api#messageentity - """ - - type: base.String = fields.Field() - offset: base.Integer = fields.Field() - length: base.Integer = fields.Field() - url: base.String = fields.Field() - user: User = fields.Field(base=User) - language: base.String = fields.Field() - - def __init__( - self, - type: base.String, - offset: base.Integer, - length: base.Integer, - url: base.String = None, - user: User = None, - language: base.String = None, - **kwargs - ): - super().__init__( - type=type, - offset=offset, - length=length, - url=url, - user=user, - language=language, - **kwargs - ) - - def get_text(self, text): - """ - Get value of entity - - :param text: full text - :return: part of text - """ - if sys.maxunicode == 0xFFFF: - return text[self.offset : self.offset + self.length] - - if not isinstance(text, bytes): - entity_text = text.encode("utf-16-le") - else: - entity_text = text - - entity_text = entity_text[self.offset * 2 : (self.offset + self.length) * 2] - return entity_text.decode("utf-16-le") - - @deprecated( - "This method doesn't work with nested entities and will be removed in aiogram 3.0" - ) - def parse(self, text, as_html=True): - """ - Get entity value with markup - - :param text: original text - :param as_html: as html? - :return: entity text with markup - """ - if not text: - return text - entity_text = self.get_text(text) - - if self.type == MessageEntityType.BOLD: - method = markdown.hbold if as_html else markdown.bold - return method(entity_text) - if self.type == MessageEntityType.ITALIC: - method = markdown.hitalic if as_html else markdown.italic - return method(entity_text) - if self.type == MessageEntityType.PRE: - method = markdown.hpre if as_html else markdown.pre - return method(entity_text) - if self.type == MessageEntityType.CODE: - method = markdown.hcode if as_html else markdown.code - return method(entity_text) - if self.type == MessageEntityType.URL: - method = markdown.hlink if as_html else markdown.link - return method(entity_text, entity_text) - if self.type == MessageEntityType.TEXT_LINK: - method = markdown.hlink if as_html else markdown.link - return method(entity_text, self.url) - if self.type == MessageEntityType.TEXT_MENTION and self.user: - return self.user.get_mention(entity_text, as_html=as_html) - - return entity_text - - -class MessageEntityType(helper.Helper): - """ - List of entity types - - :key: MENTION - :key: HASHTAG - :key: CASHTAG - :key: BOT_COMMAND - :key: URL - :key: EMAIL - :key: PHONE_NUMBER - :key: BOLD - :key: ITALIC - :key: CODE - :key: PRE - :key: UNDERLINE - :key: STRIKETHROUGH - :key: TEXT_LINK - :key: TEXT_MENTION - """ - - mode = helper.HelperMode.snake_case - - MENTION = helper.Item() # mention - @username - HASHTAG = helper.Item() # hashtag - CASHTAG = helper.Item() # cashtag - BOT_COMMAND = helper.Item() # bot_command - URL = helper.Item() # url - EMAIL = helper.Item() # email - PHONE_NUMBER = helper.Item() # phone_number - BOLD = helper.Item() # bold - bold text - ITALIC = helper.Item() # italic - italic text - CODE = helper.Item() # code - monowidth string - PRE = helper.Item() # pre - monowidth block - UNDERLINE = helper.Item() # underline - STRIKETHROUGH = helper.Item() # strikethrough - TEXT_LINK = helper.Item() # text_link - for clickable text URLs - TEXT_MENTION = helper.Item() # text_mention - for users without usernames diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/message_id.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/message_id.py deleted file mode 100644 index 0157f5e7..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/message_id.py +++ /dev/null @@ -1,10 +0,0 @@ -from . import base, fields - - -class MessageId(base.TelegramObject): - """ - This object represents a unique message identifier. - - https://core.telegram.org/bots/api#messageid - """ - message_id: base.String = fields.Field() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/mixins.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/mixins.py deleted file mode 100644 index 13f8412f..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/mixins.py +++ /dev/null @@ -1,62 +0,0 @@ -import os -import pathlib - - -class Downloadable: - """ - Mixin for files - """ - - async def download(self, destination=None, timeout=30, chunk_size=65536, seek=True, make_dirs=True): - """ - Download file - - :param destination: filename or instance of :class:`io.IOBase`. For e. g. :class:`io.BytesIO` - :param timeout: Integer - :param chunk_size: Integer - :param seek: Boolean - go to start of file when downloading is finished. - :param make_dirs: Make dirs if not exist - :return: destination - """ - file = await self.get_file() - - is_path = True - if destination is None: - destination = file.file_path - elif isinstance(destination, (str, pathlib.Path)) and os.path.isdir(destination): - destination = os.path.join(destination, file.file_path) - else: - is_path = False - - if is_path and make_dirs: - os.makedirs(os.path.dirname(destination), exist_ok=True) - - return await self.bot.download_file(file_path=file.file_path, destination=destination, timeout=timeout, - chunk_size=chunk_size, seek=seek) - - async def get_file(self): - """ - Get file information - - :return: :obj:`aiogram.types.File` - """ - if hasattr(self, 'file_path'): - return self - else: - return await self.bot.get_file(self.file_id) - - async def get_url(self): - """ - Get file url. - - Attention!! - This method has security vulnerabilities for the reason that result - contains bot's *access token* in open form. Use at your own risk! - - :return: url - """ - file = await self.get_file() - return self.bot.get_file_url(file.file_path) - - def __hash__(self): - return hash(self.file_id) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/order_info.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/order_info.py deleted file mode 100644 index 73bac9e2..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/order_info.py +++ /dev/null @@ -1,15 +0,0 @@ -from . import base -from . import fields -from .shipping_address import ShippingAddress - - -class OrderInfo(base.TelegramObject): - """ - This object represents information about an order. - - https://core.telegram.org/bots/api#orderinfo - """ - name: base.String = fields.Field() - phone_number: base.String = fields.Field() - email: base.String = fields.Field() - shipping_address: ShippingAddress = fields.Field(base=ShippingAddress) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/passport_data.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/passport_data.py deleted file mode 100644 index 2fed9fae..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/passport_data.py +++ /dev/null @@ -1,17 +0,0 @@ -import typing - -from . import base -from . import fields -from .encrypted_credentials import EncryptedCredentials -from .encrypted_passport_element import EncryptedPassportElement - - -class PassportData(base.TelegramObject): - """ - Contains information about Telegram Passport data shared with the bot by the user. - - https://core.telegram.org/bots/api#passportdata - """ - - data: typing.List[EncryptedPassportElement] = fields.ListField(base=EncryptedPassportElement) - credentials: EncryptedCredentials = fields.Field(base=EncryptedCredentials) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/passport_element_error.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/passport_element_error.py deleted file mode 100644 index f673ba16..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/passport_element_error.py +++ /dev/null @@ -1,110 +0,0 @@ -import typing - -from . import base -from . import fields - - -class PassportElementError(base.TelegramObject): - """ - This object represents an error in the Telegram Passport element which was submitted that - should be resolved by the user. - - https://core.telegram.org/bots/api#passportelementerror - """ - - source: base.String = fields.Field() - type: base.String = fields.Field() - message: base.String = fields.Field() - - -class PassportElementErrorDataField(PassportElementError): - """ - Represents an issue in one of the data fields that was provided by the user. - The error is considered resolved when the field's value changes. - - https://core.telegram.org/bots/api#passportelementerrordatafield - """ - - field_name: base.String = fields.Field() - data_hash: base.String = fields.Field() - - def __init__(self, source: base.String, type: base.String, field_name: base.String, - data_hash: base.String, message: base.String): - super(PassportElementErrorDataField, self).__init__(source=source, type=type, field_name=field_name, - data_hash=data_hash, message=message) - - -class PassportElementErrorFile(PassportElementError): - """ - Represents an issue with a document scan. - The error is considered resolved when the file with the document scan changes. - - https://core.telegram.org/bots/api#passportelementerrorfile - """ - - file_hash: base.String = fields.Field() - - def __init__(self, source: base.String, type: base.String, file_hash: base.String, message: base.String): - super(PassportElementErrorFile, self).__init__(source=source, type=type, file_hash=file_hash, - message=message) - - -class PassportElementErrorFiles(PassportElementError): - """ - Represents an issue with a list of scans. - The error is considered resolved when the list of files containing the scans changes. - - https://core.telegram.org/bots/api#passportelementerrorfiles - """ - - file_hashes: typing.List[base.String] = fields.ListField() - - def __init__(self, source: base.String, type: base.String, file_hashes: typing.List[base.String], - message: base.String): - super(PassportElementErrorFiles, self).__init__(source=source, type=type, file_hashes=file_hashes, - message=message) - - -class PassportElementErrorFrontSide(PassportElementError): - """ - Represents an issue with the front side of a document. - The error is considered resolved when the file with the front side of the document changes. - - https://core.telegram.org/bots/api#passportelementerrorfrontside - """ - - file_hash: base.String = fields.Field() - - def __init__(self, source: base.String, type: base.String, file_hash: base.String, message: base.String): - super(PassportElementErrorFrontSide, self).__init__(source=source, type=type, file_hash=file_hash, - message=message) - - -class PassportElementErrorReverseSide(PassportElementError): - """ - Represents an issue with the reverse side of a document. - The error is considered resolved when the file with reverse side of the document changes. - - https://core.telegram.org/bots/api#passportelementerrorreverseside - """ - - file_hash: base.String = fields.Field() - - def __init__(self, source: base.String, type: base.String, file_hash: base.String, message: base.String): - super(PassportElementErrorReverseSide, self).__init__(source=source, type=type, file_hash=file_hash, - message=message) - - -class PassportElementErrorSelfie(PassportElementError): - """ - Represents an issue with the selfie with a document. - The error is considered resolved when the file with the selfie changes. - - https://core.telegram.org/bots/api#passportelementerrorselfie - """ - - file_hash: base.String = fields.Field() - - def __init__(self, source: base.String, type: base.String, file_hash: base.String, message: base.String): - super(PassportElementErrorSelfie, self).__init__(source=source, type=type, file_hash=file_hash, - message=message) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/passport_file.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/passport_file.py deleted file mode 100644 index de59e66b..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/passport_file.py +++ /dev/null @@ -1,15 +0,0 @@ -from . import base -from . import fields - - -class PassportFile(base.TelegramObject): - """ - This object represents a file uploaded to Telegram Passport. - Currently all Telegram Passport files are in JPEG format when decrypted and don't exceed 10MB. - - https://core.telegram.org/bots/api#passportfile - """ - file_id: base.String = fields.Field() - file_unique_id: base.String = fields.Field() - file_size: base.Integer = fields.Field() - file_date: base.Integer = fields.Field() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/photo_size.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/photo_size.py deleted file mode 100644 index cca95304..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/photo_size.py +++ /dev/null @@ -1,16 +0,0 @@ -from . import base -from . import fields -from . import mixins - - -class PhotoSize(base.TelegramObject, mixins.Downloadable): - """ - This object represents one size of a photo or a file / sticker thumbnail. - - https://core.telegram.org/bots/api#photosize - """ - file_id: base.String = fields.Field() - file_unique_id: base.String = fields.Field() - width: base.Integer = fields.Field() - height: base.Integer = fields.Field() - file_size: base.Integer = fields.Field() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/poll.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/poll.py deleted file mode 100644 index a709edcd..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/poll.py +++ /dev/null @@ -1,83 +0,0 @@ -import datetime -import typing - -from . import base, fields -from .message_entity import MessageEntity -from .user import User -from ..utils import helper -from ..utils.text_decorations import html_decoration, markdown_decoration - - -class PollOption(base.TelegramObject): - """ - This object contains information about one answer option in a poll. - - https://core.telegram.org/bots/api#polloption - """ - - text: base.String = fields.Field() - voter_count: base.Integer = fields.Field() - - -class PollAnswer(base.TelegramObject): - """ - This object represents an answer of a user in a non-anonymous poll. - - https://core.telegram.org/bots/api#pollanswer - """ - - poll_id: base.String = fields.Field() - user: User = fields.Field(base=User) - option_ids: typing.List[base.Integer] = fields.ListField() - - -class Poll(base.TelegramObject): - """ - This object contains information about a poll. - - https://core.telegram.org/bots/api#poll - """ - - id: base.String = fields.Field() - question: base.String = fields.Field() - options: typing.List[PollOption] = fields.ListField(base=PollOption) - total_voter_count: base.Integer = fields.Field() - is_closed: base.Boolean = fields.Field() - is_anonymous: base.Boolean = fields.Field() - type: base.String = fields.Field() - allows_multiple_answers: base.Boolean = fields.Field() - correct_option_id: base.Integer = fields.Field() - explanation: base.String = fields.Field() - explanation_entities: base.String = fields.ListField(base=MessageEntity) - open_period: base.Integer = fields.Field() - close_date: datetime.datetime = fields.DateTimeField() - - def parse_entities(self, as_html=True): - text_decorator = html_decoration if as_html else markdown_decoration - - return text_decorator.unparse(self.explanation or '', self.explanation_entities or []) - - @property - def md_explanation(self) -> str: - """ - Explanation formatted as markdown. - - :return: str - """ - return self.parse_entities(False) - - @property - def html_explanation(self) -> str: - """ - Explanation formatted as HTML - - :return: str - """ - return self.parse_entities() - - -class PollType(helper.Helper): - mode = helper.HelperMode.snake_case - - REGULAR = helper.Item() - QUIZ = helper.Item() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/pre_checkout_query.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/pre_checkout_query.py deleted file mode 100644 index 4786ce48..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/pre_checkout_query.py +++ /dev/null @@ -1,34 +0,0 @@ -from . import base -from . import fields -from .order_info import OrderInfo -from .user import User - - -class PreCheckoutQuery(base.TelegramObject): - """ - This object contains information about an incoming pre-checkout query. - Your bot can offer users HTML5 games to play solo or to compete against - each other in groups and one-on-one chats. - - Create games via @BotFather using the /newgame command. - - Please note that this kind of power requires responsibility: - you will need to accept the terms for each game that your bots will be offering. - - https://core.telegram.org/bots/api#precheckoutquery - """ - id: base.String = fields.Field() - from_user: User = fields.Field(alias='from', base=User) - currency: base.String = fields.Field() - total_amount: base.Integer = fields.Field() - invoice_payload: base.String = fields.Field() - shipping_option_id: base.String = fields.Field() - order_info: OrderInfo = fields.Field(base=OrderInfo) - - def __hash__(self): - return self.id - - def __eq__(self, other): - if isinstance(other, type(self)): - return other.id == self.id - return self.id == other diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/proximity_alert_triggered.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/proximity_alert_triggered.py deleted file mode 100644 index 240854d8..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/proximity_alert_triggered.py +++ /dev/null @@ -1,15 +0,0 @@ -from . import base -from . import fields -from .user import User - - -class ProximityAlertTriggered(base.TelegramObject): - """ - This object represents the content of a service message, sent whenever a user in - the chat triggers a proximity alert set by another user. - - https://core.telegram.org/bots/api#proximityalerttriggered - """ - traveler: User = fields.Field() - watcher: User = fields.Field() - distance: base.Integer = fields.Field() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/reply_keyboard.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/reply_keyboard.py deleted file mode 100644 index e648e036..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/reply_keyboard.py +++ /dev/null @@ -1,142 +0,0 @@ -import typing - -from . import base -from . import fields - - -class KeyboardButtonPollType(base.TelegramObject): - """ - This object represents type of a poll, which is allowed to be created and sent when the corresponding button is pressed. - - https://core.telegram.org/bots/api#keyboardbuttonpolltype - """ - type: base.String = fields.Field() - - def __init__(self, type: typing.Optional[base.String] = None): - super(KeyboardButtonPollType, self).__init__(type=type) - - -class ReplyKeyboardMarkup(base.TelegramObject): - """ - This object represents a custom keyboard with reply options - (see https://core.telegram.org/bots#keyboards to bots for details - and examples). - - https://core.telegram.org/bots/api#replykeyboardmarkup - """ - keyboard: 'typing.List[typing.List[KeyboardButton]]' = fields.ListOfLists(base='KeyboardButton', default=[]) - resize_keyboard: base.Boolean = fields.Field() - one_time_keyboard: base.Boolean = fields.Field() - input_field_placeholder: base.String = fields.Field() - selective: base.Boolean = fields.Field() - - def __init__(self, keyboard: 'typing.List[typing.List[KeyboardButton]]' = None, - resize_keyboard: base.Boolean = None, - one_time_keyboard: base.Boolean = None, - input_field_placeholder: base.String = None, - selective: base.Boolean = None, - row_width: base.Integer = 3): - super().__init__( - keyboard=keyboard, - resize_keyboard=resize_keyboard, - one_time_keyboard=one_time_keyboard, - input_field_placeholder=input_field_placeholder, - selective=selective, - conf={'row_width': row_width}, - ) - - @property - def row_width(self): - return self.conf.get('row_width', 3) - - @row_width.setter - def row_width(self, value): - self.conf['row_width'] = value - - def add(self, *args): - """ - Add buttons - - :param args: - :return: self - :rtype: :obj:`types.ReplyKeyboardMarkup` - """ - row = [] - for index, button in enumerate(args, start=1): - row.append(button) - if index % self.row_width == 0: - self.keyboard.append(row) - row = [] - if len(row) > 0: - self.keyboard.append(row) - return self - - def row(self, *args): - """ - Add row - - :param args: - :return: self - :rtype: :obj:`types.ReplyKeyboardMarkup` - """ - btn_array = [] - for button in args: - btn_array.append(button) - self.keyboard.append(btn_array) - return self - - def insert(self, button): - """ - Insert button to last row - - :param button: - :return: self - :rtype: :obj:`types.ReplyKeyboardMarkup` - """ - if self.keyboard and len(self.keyboard[-1]) < self.row_width: - self.keyboard[-1].append(button) - else: - self.add(button) - return self - - -class KeyboardButton(base.TelegramObject): - """ - This object represents one button of the reply keyboard. - For simple text buttons String can be used instead of this object to specify text of the button. - Optional fields request_contact, request_location, and request_poll are mutually exclusive. - Note: request_contact and request_location options will only work in Telegram versions released after 9 April, 2016. - Older clients will ignore them. - Note: request_poll option will only work in Telegram versions released after 23 January, 2020. - Older clients will receive unsupported message. - - https://core.telegram.org/bots/api#keyboardbutton - """ - text: base.String = fields.Field() - request_contact: base.Boolean = fields.Field() - request_location: base.Boolean = fields.Field() - request_poll: KeyboardButtonPollType = fields.Field() - - def __init__(self, text: base.String, - request_contact: base.Boolean = None, - request_location: base.Boolean = None, - request_poll: KeyboardButtonPollType = None, - **kwargs): - super(KeyboardButton, self).__init__(text=text, - request_contact=request_contact, - request_location=request_location, - request_poll=request_poll, - **kwargs) - - -class ReplyKeyboardRemove(base.TelegramObject): - """ - Upon receiving a message with this object, Telegram clients will remove the current custom keyboard and display the default letter-keyboard. By default, custom keyboards are displayed until a new keyboard is sent by a bot. An exception is made for one-time keyboards that are hidden immediately after the user presses a button (see ReplyKeyboardMarkup). - - https://core.telegram.org/bots/api#replykeyboardremove - """ - remove_keyboard: base.Boolean = fields.Field(default=True) - selective: base.Boolean = fields.Field() - - def __init__(self, selective: base.Boolean = None): - super(ReplyKeyboardRemove, self).__init__(remove_keyboard=True, selective=selective) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/response_parameters.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/response_parameters.py deleted file mode 100644 index 8f40cc11..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/response_parameters.py +++ /dev/null @@ -1,12 +0,0 @@ -from . import base -from . import fields - - -class ResponseParameters(base.TelegramObject): - """ - Contains information about why a request was unsuccessful. - - https://core.telegram.org/bots/api#responseparameters - """ - migrate_to_chat_id: base.Integer = fields.Field() - retry_after: base.Integer = fields.Field() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/shipping_address.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/shipping_address.py deleted file mode 100644 index 8c8d3418..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/shipping_address.py +++ /dev/null @@ -1,16 +0,0 @@ -from . import base -from . import fields - - -class ShippingAddress(base.TelegramObject): - """ - This object represents a shipping address. - - https://core.telegram.org/bots/api#shippingaddress - """ - country_code: base.String = fields.Field() - state: base.String = fields.Field() - city: base.String = fields.Field() - street_line1: base.String = fields.Field() - street_line2: base.String = fields.Field() - post_code: base.String = fields.Field() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/shipping_option.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/shipping_option.py deleted file mode 100644 index 4ec915c5..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/shipping_option.py +++ /dev/null @@ -1,32 +0,0 @@ -import typing - -from . import base -from . import fields -from .labeled_price import LabeledPrice - - -class ShippingOption(base.TelegramObject): - """ - This object represents one shipping option. - - https://core.telegram.org/bots/api#shippingoption - """ - id: base.String = fields.Field() - title: base.String = fields.Field() - prices: typing.List[LabeledPrice] = fields.ListField(base=LabeledPrice) - - def __init__(self, id: base.String, title: base.String, prices: typing.List[LabeledPrice] = None): - if prices is None: - prices = [] - - super(ShippingOption, self).__init__(id=id, title=title, prices=prices) - - def add(self, price: LabeledPrice): - """ - Add price - - :param price: - :return: - """ - self.prices.append(price) - return self diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/shipping_query.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/shipping_query.py deleted file mode 100644 index 0de540a3..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/shipping_query.py +++ /dev/null @@ -1,24 +0,0 @@ -from . import base -from . import fields -from .shipping_address import ShippingAddress -from .user import User - - -class ShippingQuery(base.TelegramObject): - """ - This object contains information about an incoming shipping query. - - https://core.telegram.org/bots/api#shippingquery - """ - id: base.String = fields.Field() - from_user: User = fields.Field(alias='from', base=User) - invoice_payload: base.String = fields.Field() - shipping_address: ShippingAddress = fields.Field(base=ShippingAddress) - - def __hash__(self): - return self.id - - def __eq__(self, other): - if isinstance(other, type(self)): - return other.id == self.id - return self.id == other diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/sticker.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/sticker.py deleted file mode 100644 index ea222831..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/sticker.py +++ /dev/null @@ -1,49 +0,0 @@ -from . import base -from . import fields -from . import mixins -from .mask_position import MaskPosition -from .photo_size import PhotoSize - - -class Sticker(base.TelegramObject, mixins.Downloadable): - """ - This object represents a sticker. - - https://core.telegram.org/bots/api#sticker - """ - file_id: base.String = fields.Field() - file_unique_id: base.String = fields.Field() - width: base.Integer = fields.Field() - height: base.Integer = fields.Field() - is_animated: base.Boolean = fields.Field() - thumb: PhotoSize = fields.Field(base=PhotoSize) - emoji: base.String = fields.Field() - set_name: base.String = fields.Field() - mask_position: MaskPosition = fields.Field(base=MaskPosition) - file_size: base.Integer = fields.Field() - - async def set_position_in_set(self, position: base.Integer) -> base.Boolean: - """ - Use this method to move a sticker in a set created by the bot to a specific position. - - Source: https://core.telegram.org/bots/api#setstickerpositioninset - - :param position: New sticker position in the set, zero-based - :type position: :obj:`base.Integer` - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - return await self.bot.set_sticker_position_in_set(self.file_id, position=position) - - async def delete_from_set(self) -> base.Boolean: - """ - Use this method to delete a sticker from a set created by the bot. - - Source: https://core.telegram.org/bots/api#deletestickerfromset - - :param sticker: File identifier of the sticker - :type sticker: :obj:`base.String` - :return: Returns True on success - :rtype: :obj:`base.Boolean` - """ - return await self.bot.delete_sticker_from_set(self.file_id) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/sticker_set.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/sticker_set.py deleted file mode 100644 index 3b5290c3..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/sticker_set.py +++ /dev/null @@ -1,20 +0,0 @@ -import typing - -from . import base -from . import fields -from .photo_size import PhotoSize -from .sticker import Sticker - - -class StickerSet(base.TelegramObject): - """ - This object represents a sticker set. - - https://core.telegram.org/bots/api#stickerset - """ - name: base.String = fields.Field() - title: base.String = fields.Field() - is_animated: base.Boolean = fields.Field() - contains_masks: base.Boolean = fields.Field() - stickers: typing.List[Sticker] = fields.ListField(base=Sticker) - thumb: PhotoSize = fields.Field(base=PhotoSize) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/successful_payment.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/successful_payment.py deleted file mode 100644 index 41cd32da..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/successful_payment.py +++ /dev/null @@ -1,18 +0,0 @@ -from . import base -from . import fields -from .order_info import OrderInfo - - -class SuccessfulPayment(base.TelegramObject): - """ - This object contains basic information about a successful payment. - - https://core.telegram.org/bots/api#successfulpayment - """ - currency: base.String = fields.Field() - total_amount: base.Integer = fields.Field() - invoice_payload: base.String = fields.Field() - shipping_option_id: base.String = fields.Field() - order_info: OrderInfo = fields.Field(base=OrderInfo) - telegram_payment_charge_id: base.String = fields.Field() - provider_payment_charge_id: base.String = fields.Field() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/update.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/update.py deleted file mode 100644 index e2fd3a55..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/update.py +++ /dev/null @@ -1,78 +0,0 @@ -from __future__ import annotations - -from . import base -from . import fields -from .callback_query import CallbackQuery -from .chat_member_updated import ChatMemberUpdated -from .chosen_inline_result import ChosenInlineResult -from .inline_query import InlineQuery -from .message import Message -from .poll import Poll, PollAnswer -from .pre_checkout_query import PreCheckoutQuery -from .shipping_query import ShippingQuery -from ..utils import helper, deprecated - - -class Update(base.TelegramObject): - """ - This object represents an incoming update. - At most one of the optional parameters can be present in any given update. - - https://core.telegram.org/bots/api#update - """ - update_id: base.Integer = fields.Field() - message: Message = fields.Field(base=Message) - edited_message: Message = fields.Field(base=Message) - channel_post: Message = fields.Field(base=Message) - edited_channel_post: Message = fields.Field(base=Message) - inline_query: InlineQuery = fields.Field(base=InlineQuery) - chosen_inline_result: ChosenInlineResult = fields.Field(base=ChosenInlineResult) - callback_query: CallbackQuery = fields.Field(base=CallbackQuery) - shipping_query: ShippingQuery = fields.Field(base=ShippingQuery) - pre_checkout_query: PreCheckoutQuery = fields.Field(base=PreCheckoutQuery) - poll: Poll = fields.Field(base=Poll) - poll_answer: PollAnswer = fields.Field(base=PollAnswer) - my_chat_member: ChatMemberUpdated = fields.Field(base=ChatMemberUpdated) - chat_member: ChatMemberUpdated = fields.Field(base=ChatMemberUpdated) - - def __hash__(self): - return self.update_id - - def __int__(self): - return self.update_id - - -class AllowedUpdates(helper.Helper): - """ - Helper for allowed_updates parameter in getUpdates and setWebhook methods. - - You can use &, + or | operators for make combination of allowed updates. - - Example: - >>> bot.get_updates(allowed_updates=AllowedUpdates.MESSAGE + AllowedUpdates.EDITED_MESSAGE) - """ - mode = helper.HelperMode.snake_case - - MESSAGE = helper.ListItem() # message - EDITED_MESSAGE = helper.ListItem() # edited_message - CHANNEL_POST = helper.ListItem() # channel_post - EDITED_CHANNEL_POST = helper.ListItem() # edited_channel_post - INLINE_QUERY = helper.ListItem() # inline_query - CHOSEN_INLINE_RESULT = helper.ListItem() # chosen_inline_result - CALLBACK_QUERY = helper.ListItem() # callback_query - SHIPPING_QUERY = helper.ListItem() # shipping_query - PRE_CHECKOUT_QUERY = helper.ListItem() # pre_checkout_query - POLL = helper.ListItem() # poll - POLL_ANSWER = helper.ListItem() # poll_answer - MY_CHAT_MEMBER = helper.ListItem() # my_chat_member - CHAT_MEMBER = helper.ListItem() # chat_member - - CHOSEN_INLINE_QUERY = deprecated.DeprecatedReadOnlyClassVar( - "`CHOSEN_INLINE_QUERY` is a deprecated value for allowed update. " - "Use `CHOSEN_INLINE_RESULT`", - new_value_getter=lambda cls: cls.CHOSEN_INLINE_RESULT, - ) - - @classmethod - def default(cls): - return [] diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/user.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/user.py deleted file mode 100644 index 8263cfc2..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/user.py +++ /dev/null @@ -1,94 +0,0 @@ -from __future__ import annotations - -from typing import Optional - -import babel - -from . import base -from . import fields -from ..utils import markdown -from ..utils.deprecated import deprecated - - -class User(base.TelegramObject): - """ - This object represents a Telegram user or bot. - - https://core.telegram.org/bots/api#user - """ - id: base.Integer = fields.Field() - is_bot: base.Boolean = fields.Field() - first_name: base.String = fields.Field() - last_name: base.String = fields.Field() - username: base.String = fields.Field() - language_code: base.String = fields.Field() - can_join_groups: base.Boolean = fields.Field() - can_read_all_group_messages: base.Boolean = fields.Field() - supports_inline_queries: base.Boolean = fields.Field() - - @property - def full_name(self): - """ - You can get full name of user. - - :return: str - """ - full_name = self.first_name - if self.last_name: - full_name += ' ' + self.last_name - return full_name - - @property - def mention(self): - """ - You can get user's username to mention him - Full name will be returned if user has no username - - :return: str - """ - if self.username: - return '@' + self.username - return self.full_name - - @property - def locale(self) -> Optional[babel.core.Locale]: - """ - Get user's locale - - :return: :class:`babel.core.Locale` - """ - if not self.language_code: - return None - if not hasattr(self, '_locale'): - setattr(self, '_locale', babel.core.Locale.parse(self.language_code, sep='-')) - return getattr(self, '_locale') - - @property - def url(self): - return f"tg://user?id={self.id}" - - def get_mention(self, name=None, as_html=None): - if as_html is None and self.bot.parse_mode and self.bot.parse_mode.lower() == 'html': - as_html = True - - if name is None: - name = self.full_name - if as_html: - return markdown.hlink(name, self.url) - return markdown.link(name, self.url) - - @deprecated( - '`get_user_profile_photos` is outdated, please use `get_profile_photos`', - stacklevel=3 - ) - async def get_user_profile_photos(self, offset=None, limit=None): - return await self.bot.get_user_profile_photos(self.id, offset, limit) - - async def get_profile_photos(self, offset=None, limit=None): - return await self.bot.get_user_profile_photos(self.id, offset, limit) - - def __hash__(self): - return self.id - - def __int__(self): - return self.id diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/user_profile_photos.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/user_profile_photos.py deleted file mode 100644 index 259f669c..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/user_profile_photos.py +++ /dev/null @@ -1,15 +0,0 @@ -import typing - -from . import base -from . import fields -from .photo_size import PhotoSize - - -class UserProfilePhotos(base.TelegramObject): - """ - This object represent a user's profile pictures. - - https://core.telegram.org/bots/api#userprofilephotos - """ - total_count: base.Integer = fields.Field() - photos: typing.List[typing.List[PhotoSize]] = fields.ListOfLists(base=PhotoSize) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/venue.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/venue.py deleted file mode 100644 index b851650b..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/venue.py +++ /dev/null @@ -1,18 +0,0 @@ -from . import base -from . import fields -from .location import Location - - -class Venue(base.TelegramObject): - """ - This object represents a venue. - - https://core.telegram.org/bots/api#venue - """ - location: Location = fields.Field(base=Location) - title: base.String = fields.Field() - address: base.String = fields.Field() - foursquare_id: base.String = fields.Field() - foursquare_type: base.String = fields.Field() - google_place_id: base.String = fields.Field() - google_place_type: base.String = fields.Field() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/video.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/video.py deleted file mode 100644 index d4958761..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/video.py +++ /dev/null @@ -1,21 +0,0 @@ -from . import base -from . import fields -from . import mixins -from .photo_size import PhotoSize - - -class Video(base.TelegramObject, mixins.Downloadable): - """ - This object represents a video file. - - https://core.telegram.org/bots/api#video - """ - file_id: base.String = fields.Field() - file_unique_id: base.String = fields.Field() - width: base.Integer = fields.Field() - height: base.Integer = fields.Field() - duration: base.Integer = fields.Field() - thumb: PhotoSize = fields.Field(base=PhotoSize) - file_name: base.String = fields.Field() - mime_type: base.String = fields.Field() - file_size: base.Integer = fields.Field() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/video_note.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/video_note.py deleted file mode 100644 index 8702faae..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/video_note.py +++ /dev/null @@ -1,18 +0,0 @@ -from . import base -from . import fields -from . import mixins -from .photo_size import PhotoSize - - -class VideoNote(base.TelegramObject, mixins.Downloadable): - """ - This object represents a video message (available in Telegram apps as of v.4.0). - - https://core.telegram.org/bots/api#videonote - """ - file_id: base.String = fields.Field() - file_unique_id: base.String = fields.Field() - length: base.Integer = fields.Field() - duration: base.Integer = fields.Field() - thumb: PhotoSize = fields.Field(base=PhotoSize) - file_size: base.Integer = fields.Field() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/voice.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/voice.py deleted file mode 100644 index fd88e402..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/voice.py +++ /dev/null @@ -1,16 +0,0 @@ -from . import base -from . import fields -from . import mixins - - -class Voice(base.TelegramObject, mixins.Downloadable): - """ - This object represents a voice note. - - https://core.telegram.org/bots/api#voice - """ - file_id: base.String = fields.Field() - file_unique_id: base.String = fields.Field() - duration: base.Integer = fields.Field() - mime_type: base.String = fields.Field() - file_size: base.Integer = fields.Field() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/voice_chat_ended.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/voice_chat_ended.py deleted file mode 100644 index f1bb1f05..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/voice_chat_ended.py +++ /dev/null @@ -1,13 +0,0 @@ -from . import base -from . import fields -from . import mixins - - -class VoiceChatEnded(base.TelegramObject, mixins.Downloadable): - """ - This object represents a service message about a voice chat ended in the chat. - - https://core.telegram.org/bots/api#voicechatended - """ - - duration: base.Integer = fields.Field() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/voice_chat_participants_invited.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/voice_chat_participants_invited.py deleted file mode 100644 index fbd0a457..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/voice_chat_participants_invited.py +++ /dev/null @@ -1,16 +0,0 @@ -import typing - -from . import base -from . import fields -from . import mixins -from .user import User - - -class VoiceChatParticipantsInvited(base.TelegramObject, mixins.Downloadable): - """ - This object represents a service message about new members invited to a voice chat. - - https://core.telegram.org/bots/api#voicechatparticipantsinvited - """ - - users: typing.List[User] = fields.ListField(base=User) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/voice_chat_scheduled.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/voice_chat_scheduled.py deleted file mode 100644 index c134eb0f..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/voice_chat_scheduled.py +++ /dev/null @@ -1,15 +0,0 @@ -from datetime import datetime - -from . import base -from . import fields -from .user import User - - -class VoiceChatScheduled(base.TelegramObject): - """ - This object represents a service message about a voice chat scheduled in the chat. - - https://core.telegram.org/bots/api#voicechatscheduled - """ - - start_date: datetime = fields.DateTimeField() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/voice_chat_started.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/voice_chat_started.py deleted file mode 100644 index 3cd76322..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/voice_chat_started.py +++ /dev/null @@ -1,12 +0,0 @@ -from . import base -from . import mixins - - -class VoiceChatStarted(base.TelegramObject, mixins.Downloadable): - """ - This object represents a service message about a voice chat started in the chat. - Currently holds no information. - - https://core.telegram.org/bots/api#voicechatstarted - """ - pass diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/webhook_info.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/webhook_info.py deleted file mode 100644 index dc1a7cd9..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/types/webhook_info.py +++ /dev/null @@ -1,20 +0,0 @@ -import typing - -from . import base -from . import fields - - -class WebhookInfo(base.TelegramObject): - """ - Contains information about the current status of a webhook. - - https://core.telegram.org/bots/api#webhookinfo - """ - url: base.String = fields.Field() - has_custom_certificate: base.Boolean = fields.Field() - pending_update_count: base.Integer = fields.Field() - ip_address: base.String = fields.Field() - last_error_date: base.Integer = fields.Field() - last_error_message: base.String = fields.Field() - max_connections: base.Integer = fields.Field() - allowed_updates: typing.List[base.String] = fields.ListField() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__init__.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/__init__.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index 2830a5a11f73782c027207f2d53259d83bbea2d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 174 zcmYe~<>g`kf=A4ji6Hthh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o104#VV$tGNvdo zFC{-WrZ_nxKR+iXGdndgzBsukv7jKeC`PX=HLonjCo?IgII|>Gw;(Y&J25@AI3_VO rKfNe1SHH9*GpATTK0Y%qvm`!Vub}c4hfQvNN@-529mulJK+FIDQfDog diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/auth_widget.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/auth_widget.cpython-39.pyc deleted file mode 100644 index cb17624ac1932486aea934a5eb1e0035c8494f4d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2722 zcmbVO&2Jk;6yMpe*z2T8(}G$)$`%ln0oycH$%oR2QY17i8)mXR~wnb;fehnX2C zjq99Ji5@8b03bOMm;M3#GkXLsJ#*`c_hy~cPQ`__=I!jfnK$#^`@P?o&dqrSJbzlN zbhBU>f8odEAKvRHVJd1XE6dBP*BM`4TD}pivYnet%gb!3b)5&41uHjJ zy%!L7W3x;$kMW*>Va3^CbGywGE}-A+P}$k`L+Ph|#ZdXF4>6&V`+aEJ`ixB(wiBxQ zf^Yla@OUsx6oe{N2iq?!*aNqaiU!??@A0T?Wj2_jnWNG!Pcm0eO5b)vT!H}SH65B^0hQ{|-8s;GZ_Xsn(mH_CFj3F7C$L5wnj2}!5 zONbkuW#BwMy!H4H6X)j0f{2>c&oa`@$lh~9%!A37TWqb-J7@@+urzMSpp&LiBkXe8 zl!2hV9v6-39#8ff--fLQBD&Ip1kpB^4H~A1^IBhpk*pyCn>jkGy@RZ{j`(=g6B}>A zHvd2~2L2Res_Ri2&`54nPp3X7S&@ZcTg53W&t)^{M-;X)S9a*q&CfHp-$R6DE>D7# z@vIc2QN#l*J(-p63&sU!Uxk5!6{!FyW)2)VmYKbqh6%(ara@*Ud_QyZeX?SQKgzph zM_{yt3j&twq}JzhGfkaQnOU)H>$v4&0jJJQd36qkq$adtfh>?ka*2o!VQg@7jCl=$ zZNI}Kh^@a*r7w6wW6pe)zFrqoXh%TU&@|ewKnL)w+3?uxont1VUXdXH;>heGKUsrK z4ZkfKg%~zXMz9T3)BgjiK*utpY-SdakoK!=y^31h(_zwta5hS%oCfsfcyx)57{vu5 zuE86uVA!>NF$29Rzfpy)1Wi5!fmIH^1N^bNbuC-U{?XWh8vrW0pq!^r%||BaY~}9G zK!q1{J?j;x^;`s|aE8v1=xDjL2-P=T+5is9co4=kf;0j7$rGm6^MLJDhx>QGyM3qf z;O^}TKonSiOmuh`pcZMMqP?$3C4l_((tRLft%h~D43U1aqLr#^GS3rIDDwd%^n_-* z{9r11lcbXK4w{MlT&iy(%^FMz?P@V*Sa-z>nLx%raZ(f}wEF$Z&?uHF0)6LnKqk7(RtbYmH22sAag zdgiW}posBYf%}#{@dmDW6U8MI?}C8hq&@LAej>ocdnkMqS3#8B350!&qwj;L&yIK0 ziK&;6ADVfV@{^WvrY`gOGiUn*G!kQElorT4#3!Nx{SzQ-CV36Wcy*l?Fj`d*wjB~e z$^K4$CJ;I@_(P{+i;HmQKm!ER1E>q(-o<|yK-7Bp^zNKQB4TYSw*VgjSkfuZbDU!& zM~(mGE2K?o(M%2(ZBTWn@&n+g|3(WWTDx!NQP%F`{W6j7aR5)xy$))rFY}_PLLd3Q z*<@+ZY>LacROc8|S-&*CYO4CGslNIfB5*zYO+d!CAa9zIGP?zrnC2CIC~ZAI$eAM* f*5RJ%M|=ZOEiZzw-2#E1Ics_3;ykq3#q<9H=bYDf diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/callback_data.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/callback_data.cpython-39.pyc deleted file mode 100644 index ced1b063954d65d46863f9a50f86499fdc3ea3ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4144 zcma)9TW=gm74GWWjK^bp;#`P!7q(4SI1^%L<3tIz5|briBNk-BI$U;e7`3}=?6!Nl zCsj2z)3hao_mLlfw7Zi1h{PlRfIop+JRo@5pFp1YPW6mEwj)GaQ?ASDs#E8D-#MrK zsi~TQ=U>*c|DPGd_%{v49~*-whQZ{g=!8bg2w7;xtZTMRMtv)`S{DA>vE6lAj-GR3 zw_9mdnDN{Q-LUex5mpY(Ru!XaIDydwuN+#fiO^a%nl=BQ%rI(C{W#wAgIzE5mG5=@ zK&4_(tNmR1TYRPF;dv^!uecW_Qu#^1y|gnD^Y$aP?ezrjM8Ea?B=mU9yF5`|;&-_$ z-(Fo^^?IpPvi-Wx#lU;)jZS=q18>gL+Wc)#|8GYjb)iF)CiBgjKK|u4PrO0e_X0oh zws^t?X%mdA{nnEf6TW|Q{@zlDcRI_P3(HF#f8qZ3!sUhKaA|qr!P4C@czE~T!~6Gq zoLL_Ecz!S9`#6}c{pisnt@z6Sv&9O%SnB&xEYpkncA{8u@phXmmWww>N`x?@;zKoF zZb#B91+)dWVdwbV{k_eB*Ygz)NLEUnZ>^M@)V?N2HCZv~CrPS&GOS#~*inNXm*}`3 zYs~_Z8-FYeo)G*#L5CYH1_+uV1LVxm`Vz1UozKmdO)$fV;AOWQjB4TJmu6TGr!aQI zX}vlVHZZD$mjJujqCO6Q?EMmB)m?3guq;LqNqi3#6nm^iDKd9C(4yLI z6ZhKfqV@|v?hn`8lA@vlI~9{{=%BQiY}$n_dE61xSSgnsT9tn`#4M)X{3=}8=nXam zK$mtmWU!s4@kX@E{k9B*-|KO)vAD;Ry^Wtln;SAxe4&R}g3uv1{3zWLe)mpaMX|gy z;%l42%wlgqnnp>a+U;-R9C;0m!D{RZvso2?4f=1o%r&#C<8WCVy(K2_0>M{s)fY)X zm>4~DO$Wc95;p#U4q@Yv9kATkVO#6~{@gL28L$3$VCUwMmD?dZHV>TK30dC|YdI6E zIXeQ-kJ*8fG?WdT*kd>$IVQFh-cT+Ox2@b9sG%KX4rxbAyF*kNJC)o4-u{G@3Qn$I zr|JlCN7dXpX3Thf4G8^9Zi>IEiEu(A5Ryl=+=33Sn#|p!`mu4y!rHDa{*Ij{wTuf) z*0YW#3dOAFZw-%ST%z?Af?wD3#nvzqjZN-x!nuGFX0Gvv*XGhaU;jc}wi{1&I9%cVI8C)Sg}swTNnyo2DO{ceX~>%u(aj#j^z8mXg6p$S(um+5s2`Rg`1@)jDSS~aU?jn%;oo7K&RISYQ+;7N_mnspPL zG3yvr&8%^TFWBVGRfL8p*;;%S1?tzh;%yJjtEMTwjg7@sG$)~zjw0&N??G{^g&qMF?TKTfkFX7Kuq3Ic8(y5*4P0Ru(pad9d0SeMhsN5k6c9ra3Be4 zF(bDDUpos<;QPWCk`D_Jk#;p6MmEyZ7mz$!)fPO3>dJZSW)EKID0&V7C-8z>CgIPD?du$tSCf&rJx+7{Y1^ZVNaUX!jZi=QW_E^YBW~fg~5czkK6CT=e)48 zsMmBfCQ6HIh+TplMK40;dDl}6mV6x&l8|In$jxvx+*?JP&7N_w7B0@r4RiWI~)eq4juO1r+gYO-f+M{fbi7F*eN{VILd|gE%rQm78Q)c$biKk8iO<9>-^h=s_ zqOJeskjo>(b|M~!x?=Pw9qsag)b=Z>_g!e(v`Rv`f!?*SAamYiZm9@W0+Q%zRO+x; zgJqY`*s7FTYgR=aGDWT3?xtZsri586z*I#w9%;VCu|6j(9?jc!bVraivQu)FUXZ?3TsP6jz4~Qm0=Mt7BCLT@1uwMR75?cqX}8Mz=3~J;Gn+4c5Dq{f!-7M z&gv$GN0`9NoHUt&I=-z)QN5$H93I&M_W zhHbKjrD@fyi6tyhnCSFTW+F@of&wZAq81XOP*E*X!2wXa5Df!5en~ diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/deep_linking.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/deep_linking.cpython-39.pyc deleted file mode 100644 index c4ba3bce760cac88d1e57f288a62816eeaaa883f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3905 zcmd^C&2JmW72gkvqE;W49miFQBAwa?iG@hz;JPqTHMV0XF_5T6>edLOgdXjTq>Yxl ziBb53HrR>~>xJ`mxvdyMDjct+|emkN4m$eqJH9b8{&$blXIf+wI}98@NA|Vh@VU-^I`#%d9ebH#jjnlBragSFnPZ$ zE@*vW5IT4t1#{Nc_OUnAm(`z?n^AK)_wcsKN$Am3FEohhr|P!klZj$ z5*ZrHmusn3H5(fe@DSn?ytCU!SX~iFiL@`7`~vEcu2^^&g|Zz4AE!ABv5S&iznZlj+XJMwlwuHkA+CsoL8hKVBmTwkAG)BrC@XQEHHz zD7OCDlV<8{&H9iA)}!|4a|O;l<(;M zu1foiM=6E1ZMSNZKD|mG7WK1K8HT-kHYoOml}xLNi)}Lggh%Ij)>e1ZbhSC%=^7lS z^VoFQ>ewNs-Ip654(_DpZ7Y0}mIT4Qgj5zko;ly&o^>Xza+?oTE}N5e-^aFY|K=f# zyDP~!27m4F@L(D(a_0{eEMd3kWqc5)TuhWa6KXTaP&!p~Ka^VYJvoilEs-HKme`{d zi=|qticfETa@7Xw>ZeotxgI1Tl5^K4Bym@(JFJr3>`e3^OS#(9NSunRP3c9XwW&zr zsw@EGS(Da?_bh9ff@66+(NCbn?p4$(A&+%LhyAG<9bH9Uz69_(TTQRHn5$UxUD?~Y zalPE<45>)mb*-)h}#eflmW%vN%Xx{@YWNl47&i^em!U*Oi4 z@i4&pkuw6`|INSe2>*Qtcv~BOXC3q&ihR}jcXe9q>`4Sb8=SHQB~K2zze`k>NK^|T ztWlk~GZr_Fp5@-*THd%0PnQcyKXq)0TS_rw#Xa|nIRcd)<)^B{TSdJTyY<{H7J4B- z*GLOO&prEI&4cN=qb}g*)g#f_&Ia2GDVz4Ub-16V@pg0|c@N;sGl<-7AIju#`-5m_ zTSrE=G87?FUvF0!xM4AH<1_}gvq7=RMc{eWxyh_P+$4doB)Iism%- zdn(Pd|E~n-1~vh#)@zfpR z9o5Y2sP@$TvuhgkUib$!)fKfVUCfO9&*#2!M1ADoIXiN{a{gII!8e94Y|!7a89lA_ zsJ&a z0ugFpstPWbj7yeEgVeIrt>Nw?l_q;*)?cvSCGmjWZgtlgZw=QOFmj#s(3A<*0*0WA zqmEFDHhVzO^te>P9;eo{ay}Nv(C+0}F=)TMg)j}94@xL!{aoV!l`PLl&O~xzt?N{z*Gbk2&lso9VdejOQL4=+Zj!i;Y`0!Y!_9T;5YERfQkRq-c=91pRDtMiDej(W&sUUol%9PGuewT-jt+ zix_>3TmKXfXKuj@+=f@fz2JHO_GB-uos_c**}y~D^sT+!#hrnXdhEXLJbXHyoHzUp2>SxJZs6f~4R^t9xQeJ}%p9Me z6EjElTd6cwcvqYi=d$x_r!>1V8OE1p-YvVWGe^;XGxH@m6L!3bA4R*WYeXoI89Lgj zdp&1Fv2?aG`4THML5t(9kTt6qg)|*s6hM;w0(aF79J>e*Lif2>LJ&0fhAVU!gt<}@ zUni7VEZwEAqxKdwB>d{mQzBO!g@?3r6$Aa8g6axrf5ENEI`XomG~IWr|K(z~*Ar>j z>nTdWqFx5Sbbt>^DV4S?X3+y?_}WoFBf8B9I`tIctj$jwJ!`bx<&-Xyd@mZm>8B!( b46SRP3JLL^15O8b~Tdp#`RBhxMk7jzMF|#x4 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 Cw`~3Z diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/exceptions.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/exceptions.cpython-39.pyc deleted file mode 100644 index b4be5ac2efd2799a18a1d6822f63420254539518..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23455 zcmb_kX>c6Jb>7A9;vxy+;C&9Mi?9S91eEzFxl`dEL792!8%0cAtEpKN9&30sl_|;3$5L{^m$TL^2T( z6-|X`COR7tvCl^{O(HH5&qp$`;}Ov;TAq)H7A1Z;mPr7&iZ z)K=iNVjb{0r4_ghxI?T5UeCB4xKnficPR;^uL15BJ-|ImLTSDn&#Xnv2C)$_8cst`x;2mNo@J_~Ez`Mk5;N6V7fhDmAcn{+q z;JxA|;F}n40KQq=0(=YOjlj2x+kkIlya{-p=mqX&yczgC;&$NM8E*l;L-YanG2RNi zUmO5Fz<3+*L2(H95aaE@hsB-1cXEAq0N*9<2ELo|PT+gQy}@ zIx)8+W>QQcW{T^02XI=P0zSpK5BM>08u&Eh{lJflGr(sU9{|pXCxD+|d=U7ocoO(Y z#)p8P5?SCZint1VmGKnt=fxL*zrZ*R{6+B=@LP;e0e?w+8TiYL z9|Qi1xCVU98MRI$=Bwgsi20gw8Z~+x_>aWbfxqtLID?pPh;Jh1o5~sF$N>Mb_!jWD z7(W60ZSfu8?>JAKMa-Xw?;_^A%2_<|B=Gmd_kq99_$lB&6+Zy}0pl$2pNY4D-)8(Y z@Slqx0{@V)4Ez`3N5DVgv3DBy$KofzKVh5${;BvG@Xr_v;Gc_M0RMuq0{oZam%zVd zJR_Q>BE7$or!mpA_ep7`pv>xWF*%VM)^$y9m+;dkJti0OLN@c7>W@v&>6&R46yf9= zkj12OzN{D~N7#>!DuyA?D%IyGntu8uCuvMGM>Ub3$vZEylYJS|+A&REkadBa$F#C) zm$xEYN~F{aMAR$2rkJ!ggvyyp_)F5-L|zTgk`jt)5?vknrb60e3 zLZMy*Q@qV>%G64w70f98glr@Wx+06k!GdPg&0;w3fY{MIdj5iJDuZ*fS*2h%G`(&r zZ`IMYYWir|Fi*%Alu=Dr#!IBpwQs5Bq(WDh({NriqNuaxTw2pcG2pfX9KHyRhq5LOR+Uj%pD&lZH}^>?wUAeplgi?>h92wY_GO@!b6GBn9#V{)p66C! zRx5@DdOde>h(=#b4f&pT5+)QyuNQwJot`+Q7X~%egc|vt8z`Hmrkk{k|dDlvk!5%NLZC0RZXE7NnDHt*%Pwa1C2(KxRwRQIW6IjWCNXnIv1_T$yWq!4;aozViH z9@8ib#`vURXt_LkrXW=$xv6qd@t*6GRqlMMFV^p6+Bg&9c)a=n~5Q83G?t2xbPom4~`J6eW z6lQ!$kk7EHm1pN{E;LTt`Fwd;U_<$$q8c^B8WdTTU2>yJaT=oXJ(gZ9DdRIF;nBQN zl+E0nFOgMqk~!N7x^lk5xF#>6P;)}pF60He-?CX46))?$qUILUnkg5OMNHvlolK}b z`jnxdoB9}>QjKz{1RYfb5>SSz<73)1m{#c^{^(T^+UsS*}OHH8wPWeMB_WhlCi>B+Ba z1JHX?-eqwE1#Ma6DMQig4+2zNN=3~<1H><&b$O-ct14wl%Y}LBnJCeg5PFDWE@=9E zwU&L-q+;re$r)2|SAL^;EC)>`tx=D0#6!A=0Wh!5y356OEFF`n@#7c~Ps_TB6envM z>Zp}XH}V}aUX1l7tQLhr4CEelDv7m$GMIj0ry_Zn3*r5RfK^-H-Z zy~O!x!vAsn4&v81iolEvMV{PsDY_K75?zX3jq35Gh}pChy&M&h7n-(4E=A5GMntzp zuEefJ@K=)^zd3Rxel>!naBNJc0^XsZH&JQJPD~CTOFce3RcYs18#J$0Vg*I5B%qjz zUP(|-EcG^3;wDymmFAMJ%;Ya#i|Ay#dH0m)KU-QntIOCs7S9?vjMjy-`FTaoVy=_v z1!wnPP}B=&NAlBW4J-ruN^))r zXfLmGD9UI>5Q(-%+oRo4eJ%c`*qR>_75x~y5GauhghDo=7b7#U8;RKSZJF4MkY^?i zK_n`jZu7dkfw3IP+x>B6A47z(1%VkcA@|EoSDMTiN&IRw8WE7`wdh!H9AYY?vidq? zth8pc7+%e6mT8jc42*Y`7N<7XqL4c(C>sW{kQntf6m%k($FIROqSn^s1oyk|?TwCI zOHeU131zdD_H4GOiE@GdUYpIHFUtixh2L3O=aiOH3I(@BF1E)jn|Pmd%WjQwJ%Z(X z3^_gdMl&(dl!?zqG6|M+OvImW%`_`5N~=h`5oOC<{BktYrnJ~rIsDzu?XU*z&|c}x zj?%Eq{d6>cF|Sr4V=H~Pt^hcXE#0i4vxuv0yb~`fUpA-}OR}y=B~(b!Rf!kSjz+e7 zqiH|#$VJJC@0aAlg1l%*MJ(v0X+_GbQbAi#^qg!|C!2noS-&)m&hNbmf=KXuTS@RE zy-oTaFx0y#V1am2sU&i9N^brcss-zQtF>u`OgKwT?Wt#aqvHU;QuIpXYJ^6|b5V?w zw_a*mYFdK0^&RIsme6l`#Kd1nkChHmAAT;16g)?NQD4?ch`n+B7W}90rr=fzXz1yU zG5^XMQC-GYV(9YAE7L5n4bPb`;2Ca{NE3}&t6@uQ8gKNQ zDWIZlCZsx*HLRLNUR74&BygKyFJ;?GK~=QX-c9psOmCzn#t=iev0`hd+cCWl zZ}8Q(TGW0dyoz79D8daD)pcxY6q|Y-6O}W$hm>{zZ-32K8sUaYTffWz6;jqgy!#Db zS%ibjqUNr)9gWjyzgVRmJ0NG%kjC7#tno74*=o8oP}Y_5A-w$xeqAXOZkWs3QJ)2^ z9-9qWe~vIdhf)3)eS8Q9^VxvZTG?dcA_n=yE8R|s*p|3^bZdeKw$pjo5ikzwavsJU zX<<%LrA4hQVOc4enq(-Zq$&#%t(2s^Az`&A7Ys_t@gBkCl>PiFYqK-RQbt+;Vg_eZ z8>aSUEmFaJCA1u-ZXOcqb*?*6o3Bva;|S2hV>-p$Q0=!kwO?VEv>soL3}$R&ri7LH zqNEjsr0J4i(_I!Qt?mWI@A*hab&9zm(wn`us1$}S4nD*s;sRpBXnD8D*u2Js6R;%_*Wkx!VMGhraUs*)2WWt<8r~8#MCrw z_SD%Bu?(Qp-}+b(4rURu;_9e9e6uE3GuRo}Ze!3Ad0FD!ytAdn(U)YxkS!fLD8b-V zG@LcYEvO_mvbi~TpyP!ZzeF}9$0-#-f&iJmjK5pI~=ruqk5)|NaUd`a`p$(KhkgwQYu{Fjdq z;f4vd(a{~-hU#q&y0Tt!*v^3LRsZ8-LbzcjT~w4koH*yb*2WT@D|#b|VIKpBh~zj5 z{+*8q;f9H9AtKd-Y3B zXayc-TQ?Io!zV1v=(JKP*(csoj*h%TIHtg<#mA9w!yMNUNAD25oG826+%UVXB)7Wm2G%Z?oWsL2U8Ki(FD}nc0Ud{L*;pa1AGl3FZ{A@LNlV%&yd}4w~@%A_-jU zpF&~x`80rV!-cP-!eQI8z4fe4Djh~Fwo+baRD2BOJ?JZ+aB%q{8o16esL^SEN@UiT z@xRZIX03M(Zj=CP+e%BQy|r%zfx5fu(@04A8Y-$&Ofc7ghT1{03i8&nc%=d}lIP6j znj|~}Zt%AM4Coy5iIQ-`^g0|dIbLGc5atuuTAeK$nOt!ik6nXNg8Lu#Lbj6vt=P#G zi0rY>1Kj$q6*HK01|%QxktQ5WdKK+&d$DEKPYe%FW>Z7i)YxOmk0WH1J5oN9aoVDv1oSh&l3|zA?=~F7X%SrIrApg3M(fTY{ zO!;I*IG9z4tU8x_?q#|MPNmc1V_6XKB-U-`Vsc(X1`6#-kU3o=G>QqP7a+8bTF*hN zi$pUAm$=moCQqTnvpxY44rUM{psp2eikY6NbaFDCok&h5M?Desa6TM+)4BHbWt0V< zr)y+HF*n9=g|lR)$7#c%WI9=8=rkfct>jfOd>VX|8io`T%rKx8*Rsc(0!=?As@d~x}Es(3IG{aOpi|+xi`&Dhe!GqN_*r+~sgd1kpx!fz& z+Qu>V(7%BFwWxZmhKvSOF!@`#`)b0$WI~jEOOU&$HN2|D8wN36Zj{LDRGQJXqAlgr zkYgO%#|22noL0vCffG)+6l$`-7--wZJU`WtWs*ScE>LZ~r5nZEP<`E_H=plorh6)# z8az2XIW?U2y3S@d10TI&2E2X;SHS6#k7ZP+m|&Ix-KTq{1Fp4~oF=&!skGu{w_RHA zBii-+3sIIC(0Ib3xk!oEKm9(I(t5 z?Ty%2uk<6gwqhfV<1E3>+V)_Uvt7(X2o*r!H6J0u!GuD(R40*gozls9-RiOVV3o}d z?HGR$xy|lTb&~dn=wlJA-l)+>iV5Z!ppRQu=%Y*6x~r}>y4(+xRrgO@utoNw50R@1 zeph{RB^=B*M6T``kGtc0b|^JEJT{dYADgnaI7@ZOp2LK96Cgyg8hE`` zBUy?GW*Q*b?v*zTti9Flfey{L4kU7~ELSfhgb1(%8ejDZkZ|L)R^Dx}Hk!EaAZau9 z^p0_zT`)tKoJYyu@G&9WFq3V;7b&b=_M%R=JFc^~lUB2o(?R9iK5B%6sfB3SrutVn zplr!A&@b#5CdVI34bf)Q*@tYTqdfZq3Nl#OC;i14=HDBI&ldQ}aPF!as%S*=Q70HsFybAgz$i7`epJIaP2lN&4Ep+Z@)jM8c-$Exn>}-X6 zq<`#dd%`QY&_U->{IYv~tuLPv+YCQ{$DgmK&V@1SR=zhTm38Nk1#4cXu?0_m3-;Bs zclq9i1NxgKBtThvt7NZp)6cq}$l4|$ zril|dGI{jFf{TSI-x0)C$-N|KyCP5qs#wVIYk}e4P(?_W;S^1{;cBd<)d^n`!yPhf zy}kT^!2`xWm}Wvse+H%fov(Dl4VS*D{v9@JOSyWtjSW=jUVOVPgwPTQ{DY4W;f4uy zdE#*I%vl@!G9gzox=9zp;}XjKCm#>O!8}5yp03H|cl0tn&>vjeBg40FFYZ}Ac0L$A zB`-3h)BXYY{D$~BTkWV$F*n4p6IbSjw4$6>ods5=ds;K$Z%k3%wBl~aamNFTa83)M z_g;|sZ4Et&38oj&J>gPDJDA!_jMhFo_WHY)koJ8a=={5{eF+EC3u#~8t)T6A6F~d! z@dZ`Ut;1}UnItc9!}by7uLv69cp@k9#muhN=#pPMh z{tus=V>-p$P(^m}p^TAKc?;v-4IZCK^Q~ZW^)=#MI#=Jincm6mgl%ul<{b-ER|Fx| zdk&TP@0#jSOmOuA)Tk93BmS^Py#+~U)=dptj$B5$zau8jFip5&9v$9>oG*i0ozC`~ zHfMbMGelvZM}aXE?h+u}FoAV7H-GC%V`H`^OPEMr0D~4EBf`OqLb}lQkbB40t+=b^ zTuPRvai0KMqtls;b1#{#Rp?dL>FP_u^4%|u%JT|L8@7)i`X3J85hy&a81(uW5e{aw7OB;E=E z$Zfxm;?X`|L4;Qn6hkEa7&{QS1@TR6+3(f}G7x9DL6)i30o@zX14zjRuLSNja^#Tg3PU+l+K z+Vyz1{xJ$@SiBb1yXfy83fd`HLjffncB>zWTH9B$cdtrk^^M-M`~rRzzlBOUDISS645_R!DlFVoq{(gcoRV-R?*{sCrgEI8B2HNCTI&9BbB<1M4K$QfpKVbm=EWPP-2zp!Xk#8?W zgqG=ZgYpK)LCD4E#-ov_6z#xwQ98VTR=3yep3>E{KMnPy1B3WAZbrc0&WO+`Mc+@r z|1o@7246}L@yks>i8otFoyM%4lQfYR@20N!xS8&;5Y>*C`eK82nE!w^$`k2DHx+*oPr4o9;INCf;0uED0qwl z@|V=lP>`YE2@1|q@FWFKQIMtJX$oWtrYXo#ASh5Mn4y4N0`xou=O~z`pg;kgZt5xp z8U-Z^&Qm}KJUShk=q3eZ^Vi9Su3w~pEWB(V)yYh$lW9;VyBwRobTTmM@1x*Z3ZA3j zG6m05@B#(2J=1Cbqtm8Cr=`FCAqrlifR>dyt>koCW!Y( z%R3KIe=>fBAbzH`xi!|>(wXSk(;2t_b<_VX_?O_Y#f^9VUyhxpoM&6Q?eqj=3hiGT f(|c>Nn}gnx@Y3AeZXDPUEBrQd=r1#YxaR)@8?}qS diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/executor.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/executor.cpython-39.pyc deleted file mode 100644 index 96dabe3c2e6597734c11bcbb101755716e088d9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11631 zcmd5?*^e7Xdhd&5^O$=yBgvB7I&6tPM)I*fX0=|+(v0o3O*x|xylzYBv{=moti2r`29+M(~VwMlz*j%^sj`6w{Zo(uPO>tnCdIGysNeX5#@-&7SZ+)Te_FEpAxO85O>#)^h>Rs$oQ}xgk?1{ z?zp^#yMD*Jg_@ZysSs_?_AwD z-&@;oK3MxSn!mEPe(Cy$o6g47>ziv%<{<+%8@E z_+w}7r)!t5Z(iMq%(XAPYBy|iyvFq6d{w8l#6QZ@bs1N14oM%->8gCbuk0beuc}HP zAVSF*l&F1;N|wFG_@dZj2kvvfNA>6*Z z##V21c5ZM?x81xERIvpAM*X(uIzg4YosP$Eto+Pt{p`kv^;NG8Ak8f_59aZzz(k^`rdq(omyuuJ{FbKjZ-4%0 z^!vvjm-CU~x7(el6x^rJoS4WkVAeD{mUsJTHH z&ETc&J02VKf1q*;Z>fSQ#V?Pvh%1Ln>@s*+36(zf6??6Iqwf|%wO{BP{mfk*yIp8# zeZ8OU=lW(p&$Mqc*l!&WG~6tPELiwmqaC+ywL`1kvix>y>%~sn_v@`KtJ!8=L9|)z zxY#UX`7t^vw3er0;QZcd_BQ-Zp-pfW znC45AJA>p1E`dE|ZdxsAhN=zz{#(?S&D496S41XQzk1uLgN3*k@*T&mg&vOz99Z+5 zmfQ5A9MI^1J<0|C3|G6SG$hk2TD5|Zrz-_st%0Qd%nf#0)p~p7 z(k--etKk|%M))BxebYL}yqeqf!&R%&Zh7VOAR`#Z4BP(WTBqPWeDOf|KlVK-Ik@^g zyAF`BIzGL1*AGTllY&a>EkY-KhFy69vLU>A)4Jw))^-?ng4OfqLo7L1se55fBBV{P6u9w{%_Pj zCLOF11NQz)a$i~@4A}5Vb-{pYBuYj^?~^Nu6tAQiF3kw(@&x7S!W6F3#kXNcZ3XeX zM(~jTUPP@xXAqI19PhS-DE)q*h_Z4flW;LmE%8on5H(3DD03+lAXUMCX7l_!YJg^f zuY`1>3KDP_s3U-6a0#P<)QbRz4s(o*hAfPRY+^KI_h3xylclQlel507T7I6j-USPJ zD+dbWdJAf?RrRcP?Et}C6C5Nz@~m)AK|b#l8bww_ZHZ0YGwc%DQwg=7W;3Gw6noQ~ zW^*W+XAAJ4X4q={yvPpWd6q4)<$H=f#}2b2xX&{UKGGu7Y6d&Xp292+4NJTwZyBD^ zVQ(3^B7CD`@OF-~6T&kiuSc_yxyw!+Tiev(~aFX4WQU1Tq_S1{6P_9ONx`vG!i*lX-{)IB4F*IU9i z>m3(J_{fDRJFw}ks_zDYD6gzn1wCQ{kmaJ|5lGVllTIR?|)F}Enqi?krpqDV`O`c5&O8RYryW}CCSIT+>Hy}7>Hm>2F) zj`9OHsGO;MOD5(zCwm_rk^W9Q>(S2iOf@ci1O#Yh%QI!mKin8zdpu@0x+s)vsA6`leM33+8% zEvt$@t(3}Vp-W3@Z%#_DHeVU^g#(+F+@CmBVjv`mj3hdcjAUx4?rHnVU2>bW3V#*l z@T_xNUg(A)k8-j37)_(Z@yK=*go5Yx7MhODU##x0P#y^LS?f(DlOyUrG9AK!fG6R$ zuQcE*bMi;aD!+&uze35V^AKfgyxsF!e~qfaTV|5C$U1C55m*?+5E4y+E(%SIF7a9l z8VNqYJ_vpAsbD1X8!y8!+wx!-4n;mlPuAfIpth2-$E3QTKCvH}dbQNWR9C^8UdQWT zgo%w?M}B;113Qd>{I{r=>&x~Qll8@h8Z~%iGm}*vrd44x!R^@25RUU*^-J(GZ7*ot zJ2SR`b7iX@SS`57)pn~^-+~TgCoxZ&ZdBUng2kHN8s}|3i6FvV`g@u!5mC`7gwUH! zW*qb7CPh^SF^4Lt?7@#9Nj(KYTF6i|WnY0H(Ss9xEjU372(`PKwBtg(uZ9p(VYa5< z)%Z{P>J{bY{4PY-UJe2bqHG^7*XJ*j*z9ZE#oz8c>~Xd!E4-z-&6jOcBVMy}0B9-sZ$mJ^ID9*fd>Q)1Y+N(id;N*o4jnAZKPFijp0~~ z^ABhp5E2#B6oDlJ;>uKKRRg|$Nj22oLV}T@#QuMVjK52E{;|l2b;$oIH26=j)xZEJ z|42}te@MBHD5+3#m6DGsp~xQpAtk>@$topeh>z2e+WiZz$J22rol-u`!P1H3JINwG zJ&;TkA|<($0D{DkgfNMrHJaIbluS?uV!6MfISQEqHQ8HAa5cgWziUQP=rCaw#WUK( z+r@SssElTv4)+i}^ai1_Uk|4OF?eJ+m9chJ5_^LmS!%?qII>)$Y?q<-d2qAlT7o#;wdsE@`-V8b1 z`y#;o`7cCUljYGCZ)wc#P4)2>6>seu;hcE;JaP*cm2k1KxOZqDt6w-uQHtpO&z&(kXL&3zlS?#^_D2ZdqxN^~NLn#Dr zt&H}b2t+YKVhu@pIX!uL5Kl3hOHK?1#wtvTpQ6k7Y)fgwwv?Ld`6rociiz!f%t7@| zc{#-iWEgM)EvJCJEU#y8W0BoTWV8?AtM zDX5y(JJE$Y(H8F--Dv3N zDMj2QN<|3P7zx4t^AMts55ta)TDom;&CWGQlCQEV-YsqF&#@4lNm<`!fB&a zu5gkX<;e(`wB;1re0Br@L(@gzYJe(Eb~L9GGky}uNR)@{h5|0(KK&Az#C-xZcC)=k z?=?hZQt|>%aF!Yw*ak`PoX)UBye7MsBiHK_rL|-zp&90D+RhCXC93kN($X%VCLXOI zrB7JgLmY_uwvHZDb0I#I?QJESd@W7=15RaA5SVbVnyMW+Ev0gP8vF2_`EI+-ZtZyR zjHdW?l*rgi4Y?HK4kA27gqWaPoX`z!ONB$Q#wjDX9*1;@eDG-Q18?V6+vV*27Mw)h z?SxU`+72AX=GqtaFs-2DQF)QZ$kFEw@V*dj6^_(FN3e2!qu~xtvv`$2LcPeB%EEt| z#$WcKiEt1pCWK!fPN(f&37&WkBlZvpj|44$f`OjURAcNd*ZD&&=gK4{nv`ge9D3Sfm7$y0=0@GuZ98hxs4nJ%_qxV&U5^1iC z#pQ{>8{(|XBDY+|?9T=kFoL7Z7c3m8a<>jwyB-FJl2$$O$w?g4r_QnDh(qy-GEG?5_S7b1E|;R``?PSJ6w4?*vjsFZqASdJz+E_*Ma z?t_HJdC)kaGW=!GSW+0lzUjn*6Eq%C4j4dq5dVaGKtqC>_zZ<&xdU@jlpxwScqacr za<8zzb=cphuFFq5pockv9{AX!<1s7fRw?LF>-zrA3Pjv97+!u#AY!!ybFt)DFg&f2ZDzk3RU1Fl?kXJ;|y@y;W=5Fim}5eoSB@Xv4{^fO87pa?(vunN3wS{yN%LQ6}9X76~S{t<%F%EYSHk&y%=0Zh3D7-dMRxWpJMff!G> zqP0qYL7wc`CBo&vIkj_m;`l%)%2fS!;6=qdE`rS>&*V-Z)*b{1E=?q4KJh?&S|@n` z3O*T{$6s$gL1xluWU;hR9hX?_JIF}MGe9Dir}9%MOQ92GI{ePXT@V&|oD2eE7cNFL}?kWhZ&YDn(%hN}Tdv}ve`-qA;i z^1r>DRhskYa`-NljS<8~+1)2xLhK@p;0s+vTwmbpSv>r1d<`+Ak7MY{gc)w3?2l-M zS!4hiiZ!JIJOjAIlPepQ^$I@w+e8ovSEe#F;x=&>uulKa(s>UF7srVTj)RX7x<2Jg zj`Mlf_2ZhHxw8DIW|JDiv(ntS9FSy~Zms7$%&@6scAAubxkekvnFzx+2z?~(=fC1WkWR{;&|a&|7a(@&hDMHr(mJ5aT3_IPtGop@@_mEI5 zgZ_@;yuKta#4-$hHiy`Ts{Pi`3coEK*I;tcpY|IH*i*A6O6@LHoYsYr}OMzD?iKj7>(pGITj%(L(($K^Su|e(B(bMz1YkTT9^CtH` zC-G>^q7HO{SXDx*#3J4iA+cnK#164xgM`Fe!m4X_u;DxB&AgehlNR3S-nsuj=YHS0 z=N^A-tf=AphxvW~voo6ZPs$8`HZltc>gR|8t)>NfV1#33-+`H2sXlTqZk{JA6@e5!~tLTYE5~`KFwv5`!+Yx)JPBp`yiOd3mdJ&P(YC5oK z1bWRBR$v6?W9>k%*?|SL*ol*#UZT|jo9wfYB6Keys1-z8+P)rZUG%)F-J9Dty2caz zP*X45FULk#>lz2fz8RZcGqw&4Ip5Wv*j+Qw&ufReuH7%E`FxkD%~r6ryywxnJTEDF9%!^1Qo8JU_jmoUS7Q;qk`fcK zDdO!YkTf`NVJMoUGD5>?1mz&g>y}~YTy_jLbm$Aza0AgWYyv1Rs53yO<^*;v7dW-N zC5v(nHReP$hRBZVITF9?aL==)=r|27qD!MFFnxK+KEMk)V>j;V}HPh02 zzyEZ`)3c==()rd6YS8;=JtT7`*&QT66YWrwpvx+*l6@oAyO10R_u4w>wQqGTuAc|B zj2#O!1DU(lS?w)t-?)FSYoOjZ%yN*h)$uastO3$$Gm=d=7LQ^#j@)O7xtO(|ZTq+? zxN)l4iK~55X00S`fJvF?Ud5Dzv7{hcyG3Yo$u`CDW<#pjV>HgXoN-g|xy@Y_yBosgx_7eapAGeE(uHIg z@M~X?Qdt4$U!tOKQ8bOHk{cXStu!<*1HV>m2@#|VkuOu9?@%X&<3p zk;>8vebhUK1>~1?2P`>@rey}orcq`R4|-)5 z%C7dyp4epP9vZzm2X!ByE;rOZkFr);7MRpBF2F|60QNfCrzK~OFtvIDYf3Kl`JfG~+rGW7CUSP0a* zjxh2Oh!zkOjWc2)6avutu?{=I4xGmtYz4LsU@zeCE5*bjW32Otk2~GI3)`ug9`TJ$ z*LT?pa~sNSMX?Lx_CX^M!3=k3#O}ieEJTph-;JZDA2;Y&_S`Me;%g>wH~Q+A29gar zv5OcAB;pZPj@5Ia0NanAE# z@Os{_(6~Quxi>FY9GjMA<7wYU0=7HM3^ft!0l4@Hn?ULfSnpsptoJu!3)Z_4J8Aw9 zdcreEHWhQF^U4ZD>Jme@d#^`qH&daFR;oqG{CbH23}r}jCk5)aEM+9+_b8v+_7z#| zj5EoYrTYggBMHbiDH^9}fMk|A%wUDBr)KcyXu#*EF|i!btTWk@!=P0K7G3TLxe|yl zi0YmvU#CglqG)z>x&d)6qv96`Dvt=n$ra7KDXFxMF!B)y77!FgBLv}h7wEzM0MLUy z0X0WhmR8Flt5G{P3Z_hrjfN#PuIWyRb)a z3QD*aX56leXN-Hvjqq&o<47t#xp>=;tK9tgte~ypU8kST07~+BYNPu`EKNTM zeuGvSB>Ri6qT(1NM+ity%a8eDU;@I0yml6;2 zG4U)C?UA`~7Zcm4#`Auc&1rN_jn0`iSgDL1ftvgQt^Xa07-ow|vFd6w-GLpPy=*U_X2V`2j|S z4Jz5_9tf3ZzraTWgiBn68CWj6g-dD+!s74Al4Uupvh=v==-S~00w&*21=i+ zs2U%oN$N`oiZmLmBJhe9)$Mbug8L@jtfWWI&@uCrgq=SkD6-!)QgVFBq>}+pvz?RknhP%CU46?ND=hxA^33Wyv1|`jdT!Q9wi#?Jw&l~K+iL}u8ppF zXzkl@OF3kWKE`8$o@`fB2i5p~4i6Etn`4*LG;m3G-WXB{qTzl*Y zJ9X#o?K`X9`^z7$dW&mocfFOxTgw%Qzgbu5>TEKZR8pX;RKbTO5@+Y3FSiuixwYcJ zzgR0!n(ti6m>4LZA7j!#BczTGeaf(mGkV!58=dpd-4mPvC(&id(xp)(y;+BZH2~io zRQw5n8J9OC<&VLRaI-*-E+87dc!ecw;hfh3%ocG}gDY1Cx9-3>LtJU7^5dYyvWG!?|D$xk4w>JmV5+titGAVEsv| z?Rw7@$~q;rhzAbQ)b(jgQg!kJiWqvV$LR1S@nlGX%-kuI{T+c-k7kq8B=b9t(l2#C z=8v8Yze4!2L7GhdkRlp%Xrcie)=}{{gke`Bl|iTlxG8;Br*uWqotQZBUK`q7^1!?y zB4TP0l6A#|N~{nbT-G&kAMHVN)A>sp^;t_u@^g3)!eu&77rvsES|`eeWsaYo@W;wpyhgca!+w4-DCbqL1S1RJj z35oyEN?h_U_#HmNiNC;!89S(mK5p!4W?wU(zj;`;+aZDR-MK5DIE4Jb!`~x-!y1VF z21*e{$3)aC6;v_7lp`F)1=mct+R^+S+aPbZgr{8X9W{>0647+z9}u%PUH;I~gO^&8N#65ciq+tUT5DL_|yZDuA_}-hmemFJDzy z->7D7kzTDhh9Xq0g-?57LHnfJ`3X^wsN^G?r6MpgPgJ#ai)!&Vdj0i>+na+SMZ?9w zJqLLNVmqK_WJEtgE)@I1`eg1zTU}bVbZQHu2ht9cWX=o&!_rm7B)4-~awTVSP7LPr z*N(au=ZCS8smdm?9lp=9ah&XHIj}?Elxq{O9O(2Q-cEL7o6PjBTn_i;p0=?}vOOaw ztHmrC+f^jJk{=omP?ta~ew5Jae0~U*z@`oXG*c9V=(4CwMKdiXyV?vUnbKWn5yCi= z%8DR*I*8U^^j>Y62KZNj)CwEOG(lYh`NIIurx-wk)k#E`899O^9z$8?G+N}Vf;kue z`U(Ci=nLv&@UzB6bry5X-Hrc-eDeb2bJAg2NVSdXEWVi8l@ru%rwo!wo|)M=*)3US z1%KS%iA3;x{aJ6L+PW`sDLGbE_}DW8v~>&Yw6Xz>mY6Ip+cgXpzZmPf_|0Agy=hEl zs;;UlgkAhk2bBK(+VKJYE*2U3)MuQ+bU1C%%ak!jJFpAk)?@I>L#NW*cYOXE-B{LE diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/markdown.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/markdown.cpython-39.pyc deleted file mode 100644 index add5475c301d352c5bcdcb0876699e25d0784204..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5506 zcmcIoOLH4V5Z;$$S+;D)cH%hCiIXT+Vq19-NNk}>2!Q~0f>BZwia@M2V`<}kh}l(w zRlZQjd$>k$Lt8eHxlvLsQ7%BEz=dD&9(iY!qjuQHXY<5EyAD{z;D1f`HP zAwk)cXk=8P(J{E7E#N4R!Bg5pW3-pXmt%R2_R)TtpaXPpUCT#U%J|1(-AuQIGXPbVf*O;z~TW$$LPVwO1`fljnhLQ^@rLYrbnQCB7_~K#{e4$VaF)} zY%qkKpc8-%g|L(K6kz*8*lC&sY?ww{bU#BU0UHTnDS8&L(a^i+=oDc4L)bK(0qj5s zOVjg!jfJoa^devfSqx8lX(^G zQi?xV@hr1QS;^tLXE?S$V(EN^I*;rYu&$jgetG`|ydk|%uu!4!<#sk|l`@>6+3 z2F{8;42|Oijzt)Rkz02c=83y%Ejgwe7x;D4B$+9aogzu1+muW+9}};ldqn4q*bdxD zRp%aYmZ9e9W#Vx0wr&SqGTSq}Rbtg#k1R35S=H1_jFLx&SAmWg0b_IKRvnufcDdyp zgSn!k$xP4|?L)GSI#>y`5`Cbp8u|q?8Z9*waF_+%bPL9?Jy2v;blAYaf(3)R&E2NO9~!7WuB$1E5tOfR}6 zu2-v!7iJzZ`(a_;SSq-N$EK@#X+PY<@>#ySMdPOk5>6Y{=Bh7(`$G-LgJKdZq&yZz@lbXx8ty^IGR$Kjl`>CKQAH-q^ zi+xz2xq`p8!; zy$XxNW0X3*^fNb%^FK-94CaY;Rv0l1wRT6ufgTwCMLx+dH8REbwzS< zSCY8rbw!XL1{HxEE>EFkXKsF^f(BTC)~)Q0f!r0lPq*0_o^BeYy>w!eqi|p}=)W^f zejEtp+ejkT70KL7Nbao@QO(Zm{GLi+gmN20(k;XL+YBwocBUU06u*(M;P+@fhFqy( zAkvvCKLM1yHkyca<;a%Vx`XE4Iuljx%n(*2n&F!^juYK-)L-t(CDSRbybgz|5Jz@q z%TEHYr)^vj>&l;>|0~zM^(rddnWwK+z!u-N5ydE@E21syvu4BEF%266+1Ir`d$-2u zOqQPpUO%*PMXW2XEsJzZk0#f>btkIYnV}!AZ0Yc08_{I9M1z1%gg+2ALfr0ExKk^? zzI`_l8m2RIeg^3M)J7Sxu6&!{Ua%ou8dG_1-HY0GCg~4ULTdcn#&;5A2=F72N1Du6 zYuw}*nwK!>Y93g}!2JeXjifgSde@{48N=QuiU{BD2z?3 z-6dUwq!2@FUxU411=2V`E34R*f zGAIk&f*goro2w~7?*{x%fWHTjol=pe>QwwK0MxJ`l_s7;;O_%QN|3s`fP~VP-F;W@ z&FG}U+49>H^~6LrdGgA|^Oxo_X+0}^m6CV!o8Maj9gE2QPhipXUK;ARQ%CYcs6)%o zA~#44ka>P^{)61z;=;Sd+-D2#+?mhi<1O_;BwSp)cjxZSTyf$0$G*10R^7Z-ytSC) zhWYn1V1t|xn4o~FZzt5@-5R- zOjMDf$1;{fYbML0_uMQLLyD#j$ao%;mEinK>l;vF>geETVn7?{8%^wf4)+cB{R2fd BljQ&a diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/mixins.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/mixins.cpython-39.pyc deleted file mode 100644 index 99ba88ef7f6dd4af84be90326e74819e0b03d038..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2295 zcmZ`)U2o$=6rCB{iSyCYh3>M2g0f;MM2PMi5@ZnYL~nJB*#O zjj}Ja{{mLpKK3v95uW%9JaO(gNz*p#$T#CVGxy`1J9omBl_taUxASG_dW`);AB&HJ zk0*HZXAp`hp0I%aMZyOn5CbQ0I8#pG{=k&0ymO|!GZA=NsM;A1YS7k|53LVvUGW{( zZTt&Mtk)G~efM;zpNFP&X#hpzSy+U>#4qBsTz{ISg?>@|nC3;8M%rp4+PV15qx%+G z%>u4iAhe^n66Xy5UF9hEoCTipR1N>NDjG!6P)&UMYE`w>$~g}js)g9zGA;~7e8Gpn zn3PZP=AS|oYyub*J9A$03I0dSJdD{(UU1S+_!$71P@v3t z+*~L7rAsR=nQ6iFf4{1)`oq({2~(8~`gwGiWl29i)}hQJ6Ap*k^tVrRdeZ+n-s|Ua zp+6sn(Q$a7^L`j-2PPam8WnMpKN=8-`S$SC5WPOdZh01M?sJ#7`FM4X^)^KiQJ%Ah z#`M~pY2Sn$A*T(t!!CL6l3Sx)VH%h!U4${P;a8$f%9fPKm}aD0gCe))`S|XY*M$`k z@i=>EOs{pmiorxw?jNJ>c9>a#%8;!epeEgaN#(Fy6tIrD4ohycq+^ zsS4uj8$n!FD407G6>)eS1f`S8`@J`LpRahccgp~(>xi9P1Hi1${aMcz`L>i1j!p>r zrQBHXdT$Z>t0lc#;Loewf)B5+QPmT1A*SGic#5cW!0?m%CaftAXB4+#z^M3QJ73;{GrKk1d6Jt4b_z)R?S@!gs^qB z;C>E^J=b-t$SEnG3*M~zPW7{MCEtxObL~MtWKZzs-$Ts0OVwKfN4u(}Jzd*ix~AN} zgzYdMdQM%tbA26pUp3BM=zY~hQ)nBqy0pXmM6T{b6hIuEgdK@L*(-5@k#r_t9vvlU zfLGfPW!EiRL?fEyNoex2IqjHesD^kiKao?-wH{iP2R6x>CA1Y1 z-~j}?Kr^kz7qjw*tqxXMx~FynKh2~zCNnn^XrahtG%`k~1vT)z2El~wf}N$oFKoE1 zqBd`1%dL>fkZn_6V1Ro8Or42*tC+DTlqekB2pmj`S15u%h*kHsH{ll?*Cui5^v0Xd zsdshq!)%nO&YtefnCWEuow3(Rv!c_jmCZPxO_U9~F~76fTCUv!-xib7K|eEF2hK|!R52gRO TY9rs!Z9a9gCR}HA!*~7%yM^qs diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/parts.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/parts.cpython-39.pyc deleted file mode 100644 index 7b1e85a620def38780ae1a8f0036acce8f9f2787..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1744 zcmbVMy>A;g6eoFivZPpX;2Lg|Cc&YbhRRucFpLI`krr@_0xJ5UDp1ZxO1b!ScP1$# zGEQBbA|5iddxm(-zr?YfJa@~~_eiOh-A?6!PZZzx^9-vTaWuZcop;lL3wS+ESLSmUwP~EI&T2K z#&5#y3h1Kt3cmrIRo((lozpI9uU&vIvY(P$gtR^5Yw=Q>S|;+5er{?~=!wh|hBEVo z=K!_`TZKSglh<^}IOXhBT|;P^p3zf!Mozs)Q%PEa$_w zJnEOzzKnBTjQc8iUKCkBJrwakB{D8cA^V+UkstT>(u2NAwfMY@lf!rtp-q9QUXYn_*IQakga~Qo= ziaGvlhd7+>Uto1EusZEPw%`XkD9yQeX`0{1*+lG0Sx8euT;v?O3^1CO?b>C%C3GR_ zHMAI)_OVT1anWly-({gJ>>ROgxu)Ww7&tb)7}uz|sU+I!^V!pBaJ#7$V3R8EE4Uii_LBIuXXr0b79xu^BIEHqcES0 z55Se35+ku>#rWp3IC!$#?LK_GJJ{RZ zfBfCo#si!g4{|m>jz-()767Kc2+5jU@@*%E1z3H1T<}RIcF>!`POmfHySp0R`x`Kr Bs_y^* diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/payload.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/__pycache__/payload.cpython-39.pyc deleted file mode 100644 index dc22d252d7666e178473b35401322a7cb0d51d24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2506 zcmZ`)&u<$=6rR~1-u1?I)3l{kk%~c~txM}v&;vwi1)>dV6-B6NC1hNzjc4qvv))~1 z#%XOi7ZO1^A}$=AWB;W&!l`F&NJzXlYbSAlmFCUNdv9mneD9k#VYwU-_Z#Qg;Iy-jyZo`GK!`!&g_Zl9I3(V_U4WBJB zpA`>jqsRiba7Y>fE3q>43#`J^$^kMz=`q!duvnY}TkQZiJ)Z*CKs2go&$$ z8JBM<*kI=LWSVG4^0=ezb}ZYdpM4e#F!}{(@&gdBA^HIkr7roI{6spGS!af+~Dp@q~*|@oE+h<1}P}(LR@9m#@xr)%(@%)U7pjyLszYoVLSQ-mKlO z@>lJ6!1(=dZ*al|^l3oHpkUhX-?^ zUBJWL0}+uid2zdG?bCg0OkWd4E|WbfoUz5o0DC&2j2=-5qp|g?^}PefwKg?v)hu0k z_-Or$=Nr#j>yI~{J$kAGsY0RT%Si3iY;D!=YI~OtwYwL_1OA3;Z+f;j~3pu!A z5hkL7;ykJs&n{L1tt@~bflnPOF2QIHcw`uY|0Oi}1cUPJcopqiZKWpUTj&<6KlTHk+vMsv0(5owE6u!4RW$Ky&WCp_}3z@T}Q+ zV02g0y)%J{C2+V2OKM@^MO&3+#%7$tuO=<-lL^4X?8YFG59gJE#=qd2RX>TW# zp;AIzgBftm2Ds1eeHlz>mdG~Z1++o~x&+Oq0&Q~u%+g|5^&?n;AEs6zFLH({s{?G3 z%gP2D^6F#dOk7nML*+Vx+GV`Fo)4C9l-Khn#Ulb~4dA*%DVQuAnF=@c^1v%oC1Bra zeHpYrs0yw)Wu!gYHH_R+B1*bZXP7f`#jw%vvYjS-T&OC8YN?_=UqQimtiq~FtAiwZ zbq6(b%r#|Xp1V2kb3D(9_W%J=Me#lgWQ4$Kr(HJaXVT!O{n?g~xY?fCPSTg!juMqC zA%Xo&yCNMVOd!bGmP!Db%edqX6o$qpTwcfohZ4btemso*_hsEFuq_6}DTm*?d zB=R=c+IXL4AC8a915ytFw@rDtIEKWHtu>M?j%`zumq7!ycnzM;Eh63pX9&z3{UaPZ z+MCuy?RKJ=OM%5nJ2*ZYb!iqg8V!lCW)cX}gn1Xnb73Nw$6;>6Btm5zDZ{Yp%Eh z?gA5M(8~W_L{wV&60Icc{|mmQ8GI+(U}=|FKXMQ;-xYj-AoBv>+Zx@hRm6ud5}$x* zl()le9@pg{%Tl2X*BajRg)?W8jGZQ?6H86d28k=Hb{*%^#I%#hDN0eGSDckhX?gMN z(uo)<50%>{MU56{QJ{!}$^{BUK!E~93KS?%pg@8Chkb0H0`#Fk-(0lrcV3Lu zspObHVAX1M&+;nunw!t5zIO3jm;6C%!S#ey_Numbv(9rdKRx^1YnMxxUb%efwO8{m z`-zwBnk_7^E`0sQJaf@h^J z9nw9hMQVpaIiKK9O5Jcscbey2%qR##^5^c7ODR5g6gKfB*lvGGx^_Zu6 zT3c$?)i#FVE?e*B&{tGZL|$E7Yb(n}TctEN?$Uc@ITqyZ)D}bDpVK6usk5dr#ba#^ z`4j8vnvUE_5vXO49_Zd1N)mlkrJJ-cV z!&%L`mD-YHXM>)|di5;zMY5OaT*DGpwe$L1R84t9%Af-uDQ1W}3aQ4;dd)7?n$-nc z6b2URUa4HKR;?N@#H)mhsiHN7GeaHi>kD;f(u`q)JM}=zp9aBDK*8$p&eISM`qErkBDqC zTuZ)ntV^47#G-Rsm~wtTr^$x;rUb2^lg5C!W#Z8!OyHIi?`b4B+rVVmV7TGj_gPyN zk7L3~#zQ>N@2WL*Nx2`mxzYM@&sDG2;KHt*tp;ozxH2%e`8ajXxva3>38p}InuKQn zik-_|6vA4~))%wkR#An$6480!D`oP%?nP<3-y%|pA%STNVUy)InIEe!F1j|w7aapx zl@1U*a>(hM(~ebL;MUAEq<`a9TBjo;(F__qIqlTTmgCMK5fnk4+KRoJ(|vupUa9#b zrB2ph@X-W+sAO?oa+^Zbmn;v8m|GW~%`sw60xR&(rzk~^8L}(hsp?s%UAdqzb*8i9 z57mdQ@%{$-#=@*D`@>1-a158bT4wK6z)^h@&7{N11w^iib!$xq0-hH;~w~XovrEMTy>qjsLX#-RM(8PSUa{1 zM;k-_6-7LMD;tt^u?Uw0^Ka;F_JPuU^L_P@avyH`Hb%OuTZ?y7_&2D&gUW}B7xUsj zR2CUW*uG;THW=JE2)n3;by%@xqHePt@pg9j#rU4b_C_Uh77*{`GBaqM%%?{o@fp>nUBH|U3Qr33?371q#+=T0=)L}NrRNPrG=9sFoqYrgWhlVDG`A~nT{?AO9td;$|F4|<$ z!?%qWairu&nr|3*j28v@O*P+2G`+>M&pdb5u`xzi=1@2lmys6EaL7$KNf}FHl~}J4Dd3J_7554IWzlh-AYBOLK%{ZON^9RR*gz_`Lom@kBxl$+2(7YOA&^X@Em)FuJ%!e2`|}i8 zLuABGqSp6A21M6F;WgpDTYCsV-wT0FL|WTh8}A$GFi?IFLOL2j+OqWCHyRQ5k3wi; z5wu`+%&>RQ=X0aJSt`}6s$DAi$x^9W=S_#wsZ!}y({h400lzquGd_qKhxjlwW-rGG&p=M}WO*b|NcLoTAW#_K2eBxa5VWF_ zTO;u*QrlMXv;dQoOsfixh1EwmH)=CHwT}%{pd(sMTiKh!UOa#DfqHVLrB6>;GeMt! zo9d3tKH5e76nDUvtTnpz*kzJY48r*y(?~Pny7fD6`!7xiJ+7FwV7tdFGJ|j z?(R$JyJ8#DAjp|kY8J9aEZIGRiEjyO$oH$g!rk?WBipU)9T4o*Bb(AUn!EH75!J6l=o1n2ouk99L!?c+ z658Dbn&|O2A?TwK=-tBwvD_tMIpR@IS;lMxzo>Mcg^k8bIVPDG2ey|AX zboBF3qUcXThKxlFk&z^yONpz(U6jhRzV70;e;zqdB|Sg|;tYo$7;<+NR&_s6eXeDk#zuYMI9e`w0&k(0!H^bHE6!*ope-qd?caPV~28Z}i{o`j%GOZNQ26 z{}RGJ+6Q}Yx2y*x@hdo7Bl=hGc9vp#u~>Wt-)G{D z?k6{4HxL7;;@T2kr~)VcIFAu;!;~Fk!rwx6PV}*}6BmY~alt}4KaOt{jf!JS2%L+S zLf;chrTxbaqR`)xfwYH6vW&VddQgtsIBjHfq*FSx_98TN*!x z4-V)bK|L&D^q}vA!lVZseFh&fPEksJ1&gCmj)Q6`1P9A_!W2XF7^cUgmA6dMz6U4J i!R~8@jyqi9os?=alMS;hz8IubJu&>=@Uh_&G4_9_$8LxK diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/auth_widget.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/auth_widget.py deleted file mode 100644 index a39a0eed..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/auth_widget.py +++ /dev/null @@ -1,69 +0,0 @@ -""" -Implementation of Telegram site authorization checking mechanism -for more information https://core.telegram.org/widgets/login#checking-authorization - -Source: https://gist.github.com/JrooTJunior/887791de7273c9df5277d2b1ecadc839 -""" -import collections -import hashlib -import hmac - -from aiogram.utils.deprecated import deprecated - - -@deprecated('`generate_hash` is outdated, please use `check_signature` or `check_integrity`', stacklevel=3) -def generate_hash(data: dict, token: str) -> str: - """ - Generate secret hash - - :param data: - :param token: - :return: - """ - secret = hashlib.sha256() - secret.update(token.encode('utf-8')) - sorted_params = collections.OrderedDict(sorted(data.items())) - msg = '\n'.join("{}={}".format(k, v) for k, v in sorted_params.items() if k != 'hash') - return hmac.new(secret.digest(), msg.encode('utf-8'), digestmod=hashlib.sha256).hexdigest() - - -@deprecated('`check_token` helper was renamed to `check_integrity`', stacklevel=3) -def check_token(data: dict, token: str) -> bool: - """ - Validate auth token - - :param data: - :param token: - :return: - """ - param_hash = data.get('hash', '') or '' - return param_hash == generate_hash(data, token) - - -def check_signature(token: str, hash: str, **kwargs) -> bool: - """ - Generate hexadecimal representation - of the HMAC-SHA-256 signature of the data-check-string - with the SHA256 hash of the bot's token used as a secret key - - :param token: - :param hash: - :param kwargs: all params received on auth - :return: - """ - secret = hashlib.sha256(token.encode('utf-8')) - check_string = '\n'.join(map(lambda k: f'{k}={kwargs[k]}', sorted(kwargs))) - hmac_string = hmac.new(secret.digest(), check_string.encode('utf-8'), digestmod=hashlib.sha256).hexdigest() - return hmac_string == hash - - -def check_integrity(token: str, data: dict) -> bool: - """ - Verify the authentication and the integrity - of the data received on user's auth - - :param token: Bot's token - :param data: all data that came on auth - :return: - """ - return check_signature(token, **data) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/callback_data.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/callback_data.py deleted file mode 100644 index e24ad7b1..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/callback_data.py +++ /dev/null @@ -1,136 +0,0 @@ -""" -Callback data factory - -Usage: - Create instance of factory with prefix and element names: - >>> posts_query = CallbackData('post', 'post_id', 'action') - - Then you can generate callback data: - >>> posts_query.new('32feff9b-92fa-48d9-9d29-621dc713743a', action='view') - <<< post:32feff9b-92fa-48d9-9d29-621dc713743a:view - - Also you can generate filters: - >>> posts_query.filter(action='delete') - This filter can handle callback data by pattern: post:*:delete -""" -from __future__ import annotations - -import typing - -from aiogram import types -from aiogram.dispatcher.filters import Filter - - -class CallbackData: - """ - Callback data factory - """ - - def __init__(self, prefix, *parts, sep=':'): - if not isinstance(prefix, str): - raise TypeError(f'Prefix must be instance of str not {type(prefix).__name__}') - if not prefix: - raise ValueError("Prefix can't be empty") - if sep in prefix: - raise ValueError(f"Separator {sep!r} can't be used in prefix") - if not parts: - raise TypeError('Parts were not passed!') - - self.prefix = prefix - self.sep = sep - - self._part_names = parts - - def new(self, *args, **kwargs) -> str: - """ - Generate callback data - - :param args: - :param kwargs: - :return: - """ - args = list(args) - - data = [self.prefix] - - for part in self._part_names: - value = kwargs.pop(part, None) - if value is None: - if args: - value = args.pop(0) - else: - raise ValueError(f'Value for {part!r} was not passed!') - - if value is not None and not isinstance(value, str): - value = str(value) - - if not value: - raise ValueError(f"Value for part {part!r} can't be empty!'") - if self.sep in value: - raise ValueError(f"Symbol {self.sep!r} is defined as the separator and can't be used in parts' values") - - data.append(value) - - if args or kwargs: - raise TypeError('Too many arguments were passed!') - - callback_data = self.sep.join(data) - if len(callback_data.encode()) > 64: - raise ValueError('Resulted callback data is too long!') - - return callback_data - - def parse(self, callback_data: str) -> typing.Dict[str, str]: - """ - Parse data from the callback data - - :param callback_data: - :return: - """ - prefix, *parts = callback_data.split(self.sep) - if prefix != self.prefix: - raise ValueError("Passed callback data can't be parsed with that prefix.") - elif len(parts) != len(self._part_names): - raise ValueError('Invalid parts count!') - - result = {'@': prefix} - result.update(zip(self._part_names, parts)) - return result - - def filter(self, **config) -> CallbackDataFilter: - """ - Generate filter - - :param config: - :return: - """ - for key in config.keys(): - if key not in self._part_names: - raise ValueError(f'Invalid field name {key!r}') - return CallbackDataFilter(self, config) - - -class CallbackDataFilter(Filter): - - def __init__(self, factory: CallbackData, config: typing.Dict[str, str]): - self.config = config - self.factory = factory - - @classmethod - def validate(cls, full_config: typing.Dict[str, typing.Any]): - raise ValueError("That filter can't be used in filters factory!") - - async def check(self, query: types.CallbackQuery): - try: - data = self.factory.parse(query.data) - except ValueError: - return False - - for key, value in self.config.items(): - if isinstance(value, (list, tuple, set, frozenset)): - if data.get(key) not in value: - return False - else: - if data.get(key) != value: - return False - return {'callback_data': data} diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/deep_linking.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/deep_linking.py deleted file mode 100644 index e8035d9a..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/deep_linking.py +++ /dev/null @@ -1,138 +0,0 @@ -""" -Deep linking - -Telegram bots have a deep linking mechanism, that allows for passing -additional parameters to the bot on startup. It could be a command that -launches the bot — or an auth token to connect the user's Telegram -account to their account on some external service. - -You can read detailed description in the source: -https://core.telegram.org/bots#deep-linking - -We have add some utils to get deep links more handy. - -Basic link example: - - .. code-block:: python - - from aiogram.utils.deep_linking import get_start_link - link = await get_start_link('foo') - - # result: 'https://t.me/MyBot?start=foo' - -Encoded link example: - - .. code-block:: python - - from aiogram.utils.deep_linking import get_start_link - - link = await get_start_link('foo', encode=True) - # result: 'https://t.me/MyBot?start=Zm9v' - -Decode it back example: - .. code-block:: python - - from aiogram.utils.deep_linking import decode_payload - from aiogram.types import Message - - @dp.message_handler(commands=["start"]) - async def handler(message: Message): - args = message.get_args() - payload = decode_payload(args) - await message.answer(f"Your payload: {payload}") - -""" -import re -from base64 import urlsafe_b64decode, urlsafe_b64encode - -from ..bot import Bot - -BAD_PATTERN = re.compile(r"[^_A-z0-9-]") - - -async def get_start_link(payload: str, encode=False) -> str: - """ - Get 'start' deep link with your payload. - - If you need to encode payload or pass special characters - - set encode as True - - :param payload: args passed with /start - :param encode: encode payload with base64url - :return: link - """ - return await _create_link( - link_type="start", - payload=payload, - encode=encode, - ) - - -async def get_startgroup_link(payload: str, encode=False) -> str: - """ - Get 'startgroup' deep link with your payload. - - If you need to encode payload or pass special characters - - set encode as True - - :param payload: args passed with /start - :param encode: encode payload with base64url - :return: link - """ - return await _create_link( - link_type="startgroup", - payload=payload, - encode=encode, - ) - - -async def _create_link(link_type, payload: str, encode=False): - """ - Create deep link. - - :param link_type: `start` or `startgroup` - :param payload: any string-convertible data - :param encode: pass True to encode the payload - :return: deeplink - """ - bot = await _get_bot_user() - - if not isinstance(payload, str): - payload = str(payload) - - if encode: - payload = encode_payload(payload) - - if re.search(BAD_PATTERN, payload): - message = ( - "Wrong payload! Only A-Z, a-z, 0-9, _ and - are allowed. " - "Pass `encode=True` or encode payload manually." - ) - raise ValueError(message) - - if len(payload) > 64: - message = "Payload must be up to 64 characters long." - raise ValueError(message) - - return f"https://t.me/{bot.username}?{link_type}={payload}" - - -def encode_payload(payload: str) -> str: - """Encode payload with URL-safe base64url.""" - payload = str(payload) - bytes_payload: bytes = urlsafe_b64encode(payload.encode()) - str_payload = bytes_payload.decode() - return str_payload.replace("=", "") - - -def decode_payload(payload: str) -> str: - """Decode payload with URL-safe base64url.""" - payload += "=" * (4 - len(payload) % 4) - result: bytes = urlsafe_b64decode(payload) - return result.decode() - - -async def _get_bot_user(): - """Get current user of bot.""" - bot = Bot.get_current() - return await bot.me diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/deprecated.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/deprecated.py deleted file mode 100644 index 6d0d7ee3..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/deprecated.py +++ /dev/null @@ -1,164 +0,0 @@ -import asyncio -import inspect -import warnings -import functools -from typing import Callable, Generic, TypeVar, Type, Optional - - -def deprecated(reason, stacklevel=2) -> Callable: - """ - This is a decorator which can be used to mark functions - as deprecated. It will result in a warning being emitted - when the function is used. - - Source: https://stackoverflow.com/questions/2536307/decorators-in-the-python-standard-lib-deprecated-specifically - """ - - if isinstance(reason, str): - - # The @deprecated is used with a 'reason'. - # - # .. code-block:: python - # - # @deprecated("please, use another function") - # def old_function(x, y): - # pass - - def decorator(func): - - if inspect.isclass(func): - msg = "Call to deprecated class {name} ({reason})." - else: - msg = "Call to deprecated function {name} ({reason})." - - @functools.wraps(func) - def wrapper(*args, **kwargs): - warn_deprecated(msg.format(name=func.__name__, reason=reason), stacklevel=stacklevel) - warnings.simplefilter('default', DeprecationWarning) - return func(*args, **kwargs) - - return wrapper - - return decorator - - if inspect.isclass(reason) or inspect.isfunction(reason): - - # The @deprecated is used without any 'reason'. - # - # .. code-block:: python - # - # @deprecated - # def old_function(x, y): - # pass - - func1 = reason - - if inspect.isclass(func1): - msg1 = "Call to deprecated class {name}." - else: - msg1 = "Call to deprecated function {name}." - - @functools.wraps(func1) - def wrapper1(*args, **kwargs): - warn_deprecated(msg1.format(name=func1.__name__), stacklevel=stacklevel) - return func1(*args, **kwargs) - - return wrapper1 - - raise TypeError(repr(type(reason))) - - -def warn_deprecated(message, warning=DeprecationWarning, stacklevel=2): - warnings.simplefilter('always', warning) - warnings.warn(message, category=warning, stacklevel=stacklevel) - warnings.simplefilter('default', warning) - - -def renamed_argument(old_name: str, new_name: str, until_version: str, stacklevel: int = 3): - """ - A meta-decorator to mark an argument as deprecated. - - .. code-block:: python3 - - @renamed_argument("chat", "chat_id", "3.0") # stacklevel=3 by default - @renamed_argument("user", "user_id", "3.0", stacklevel=4) - def some_function(user_id, chat_id=None): - print(f"user_id={user_id}, chat_id={chat_id}") - - some_function(user=123) # prints 'user_id=123, chat_id=None' with warning - some_function(123) # prints 'user_id=123, chat_id=None' without warning - some_function(user_id=123) # prints 'user_id=123, chat_id=None' without warning - - - :param old_name: - :param new_name: - :param until_version: the version in which the argument is scheduled to be removed - :param stacklevel: leave it to default if it's the first decorator used. - Increment with any new decorator used. - :return: decorator - """ - - def decorator(func): - is_coroutine = asyncio.iscoroutinefunction(func) - - def _handling(kwargs): - """ - Returns updated version of kwargs. - """ - routine_type = 'coroutine' if is_coroutine else 'function' - if old_name in kwargs: - warn_deprecated(f"In {routine_type} '{func.__name__}' argument '{old_name}' " - f"is renamed to '{new_name}' " - f"and will be removed in aiogram {until_version}", - stacklevel=stacklevel) - kwargs = kwargs.copy() - kwargs.update({new_name: kwargs.pop(old_name)}) - return kwargs - - if is_coroutine: - @functools.wraps(func) - async def wrapped(*args, **kwargs): - kwargs = _handling(kwargs) - return await func(*args, **kwargs) - else: - @functools.wraps(func) - def wrapped(*args, **kwargs): - kwargs = _handling(kwargs) - return func(*args, **kwargs) - - return wrapped - - return decorator - - -_VT = TypeVar("_VT") -_OwnerCls = TypeVar("_OwnerCls") - - -class DeprecatedReadOnlyClassVar(Generic[_OwnerCls, _VT]): - """ - DeprecatedReadOnlyClassVar[Owner, ValueType] - - :param warning_message: Warning message when getter gets called - :param new_value_getter: Any callable with (owner_class: Type[Owner]) -> ValueType - signature that will be executed - - Usage example: - - >>> class MyClass: - ... some_attribute: DeprecatedReadOnlyClassVar[MyClass, int] = \ - ... DeprecatedReadOnlyClassVar( - ... "Warning message.", lambda owner: 15) - ... - >>> MyClass.some_attribute # does warning.warn with `Warning message` and returns 15 in the current case - """ - - __slots__ = "_new_value_getter", "_warning_message" - - def __init__(self, warning_message: str, new_value_getter: Callable[[_OwnerCls], _VT]): - self._warning_message = warning_message - self._new_value_getter = new_value_getter - - def __get__(self, instance: Optional[_OwnerCls], owner: Type[_OwnerCls]): - warn_deprecated(self._warning_message, stacklevel=3) - return self._new_value_getter(owner) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/emoji.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/emoji.py deleted file mode 100644 index 07faff56..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/emoji.py +++ /dev/null @@ -1,12 +0,0 @@ -try: - import emoji -except ImportError: - raise ImportError('Need install "emoji" module.') - - -def emojize(text): - return emoji.emojize(text, use_aliases=True) - - -def demojize(text): - return emoji.demojize(text) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/exceptions.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/exceptions.py deleted file mode 100644 index e3a1f313..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/exceptions.py +++ /dev/null @@ -1,593 +0,0 @@ -""" -- TelegramAPIError - - ValidationError - - Throttled - - BadRequest - - MessageError - - MessageNotModified - - MessageToForwardNotFound - - MessageIdInvalid - - MessageToDeleteNotFound - - MessageToPinNotFound - - MessageIdentifierNotSpecified - - MessageTextIsEmpty - - MessageCantBeEdited - - MessageCantBeDeleted - - MessageCantBeForwarded - - MessageToEditNotFound - - MessageToReplyNotFound - - ToMuchMessages - - PollError - - PollCantBeStopped - - PollHasAlreadyClosed - - PollsCantBeSentToPrivateChats - - PollSizeError - - PollMustHaveMoreOptions - - PollCantHaveMoreOptions - - PollsOptionsLengthTooLong - - PollOptionsMustBeNonEmpty - - PollQuestionMustBeNonEmpty - - MessageWithPollNotFound (with MessageError) - - MessageIsNotAPoll (with MessageError) - - ObjectExpectedAsReplyMarkup - - InlineKeyboardExpected - - ChatNotFound - - ChatDescriptionIsNotModified - - InvalidQueryID - - InvalidPeerID - - InvalidHTTPUrlContent - - ButtonURLInvalid - - URLHostIsEmpty - - StartParamInvalid - - ButtonDataInvalid - - FileIsTooBig - - WrongFileIdentifier - - GroupDeactivated - - BadWebhook - - WebhookRequireHTTPS - - BadWebhookPort - - BadWebhookAddrInfo - - BadWebhookNoAddressAssociatedWithHostname - - NotFound - - MethodNotKnown - - PhotoAsInputFileRequired - - InvalidStickersSet - - NoStickerInRequest - - ChatAdminRequired - - NeedAdministratorRightsInTheChannel - - MethodNotAvailableInPrivateChats - - CantDemoteChatCreator - - CantRestrictSelf - - NotEnoughRightsToRestrict - - PhotoDimensions - - UnavailableMembers - - TypeOfFileMismatch - - WrongRemoteFileIdSpecified - - PaymentProviderInvalid - - CurrencyTotalAmountInvalid - - CantParseUrl - - UnsupportedUrlProtocol - - CantParseEntities - - ResultIdDuplicate - - MethodIsNotAvailable - - ConflictError - - TerminatedByOtherGetUpdates - - CantGetUpdates - - Unauthorized - - BotKicked - - BotBlocked - - UserDeactivated - - CantInitiateConversation - - CantTalkWithBots - - NetworkError - - RetryAfter - - MigrateToChat - - RestartingTelegram - -- AIOGramWarning - - TimeoutWarning -""" -import time - -# TODO: Use exceptions detector from `aiograph`. -# TODO: aiogram.utils.exceptions.BadRequest: Bad request: can't parse entities: unsupported start tag "function" at byte offset 0 -# TODO: aiogram.utils.exceptions.TelegramAPIError: Gateway Timeout - -_PREFIXES = ['error: ', '[error]: ', 'bad request: ', 'conflict: ', 'not found: '] - - -def _clean_message(text): - for prefix in _PREFIXES: - if text.startswith(prefix): - text = text[len(prefix):] - return (text[0].upper() + text[1:]).strip() - - -class TelegramAPIError(Exception): - def __init__(self, message=None): - super(TelegramAPIError, self).__init__(_clean_message(message)) - - -class _MatchErrorMixin: - match = '' - text = None - - __subclasses = [] - - def __init_subclass__(cls, **kwargs): - super(_MatchErrorMixin, cls).__init_subclass__(**kwargs) - # cls.match = cls.match.lower() if cls.match else '' - if not hasattr(cls, f"_{cls.__name__}__group"): - cls.__subclasses.append(cls) - - @classmethod - def check(cls, message) -> bool: - """ - Compare pattern with message - - :param message: always must be in lowercase - :return: bool - """ - return cls.match.lower() in message - - @classmethod - def detect(cls, description): - description = description.lower() - for err in cls.__subclasses: - if err is cls: - continue - if err.check(description): - raise err(cls.text or description) - raise cls(description) - - -class AIOGramWarning(Warning): - pass - - -class TimeoutWarning(AIOGramWarning): - pass - - -class FSMStorageWarning(AIOGramWarning): - pass - - -class ValidationError(TelegramAPIError): - pass - - -class BadRequest(TelegramAPIError, _MatchErrorMixin): - __group = True - - -class MessageError(BadRequest): - __group = True - - -class MessageNotModified(MessageError): - """ - Will be raised when you try to set new text is equals to current text. - """ - match = 'message is not modified' - - -class MessageToForwardNotFound(MessageError): - """ - Will be raised when you try to forward very old or deleted or unknown message. - """ - match = 'message to forward not found' - - -class MessageIdInvalid(MessageError): - text = 'Invalid message id' - match = 'message_id_invalid' - - -class MessageToDeleteNotFound(MessageError): - """ - Will be raised when you try to delete very old or deleted or unknown message. - """ - match = 'message to delete not found' - - -class MessageToPinNotFound(MessageError): - """ - Will be raised when you try to pin deleted or unknown message. - """ - match = 'message to pin not found' - - -class MessageToReplyNotFound(MessageError): - """ - Will be raised when you try to reply to very old or deleted or unknown message. - """ - match = 'Reply message not found' - - -class MessageIdentifierNotSpecified(MessageError): - match = 'message identifier is not specified' - - -class MessageTextIsEmpty(MessageError): - match = 'Message text is empty' - - -class MessageCantBeEdited(MessageError): - match = 'message can\'t be edited' - - -class MessageCantBeDeleted(MessageError): - match = 'message can\'t be deleted' - - -class MessageCantBeForwarded(MessageError): - match = 'message can\'t be forwarded' - - -class MessageToEditNotFound(MessageError): - match = 'message to edit not found' - - -class MessageIsTooLong(MessageError): - match = 'message is too long' - - -class ToMuchMessages(MessageError): - """ - Will be raised when you try to send media group with more than 10 items. - """ - match = 'Too much messages to send as an album' - - -class ObjectExpectedAsReplyMarkup(BadRequest): - match = 'object expected as reply markup' - - -class InlineKeyboardExpected(BadRequest): - match = 'inline keyboard expected' - - -class PollError(BadRequest): - __group = True - - -class PollCantBeStopped(PollError): - match = "poll can't be stopped" - - -class PollHasAlreadyBeenClosed(PollError): - match = 'poll has already been closed' - - -class PollsCantBeSentToPrivateChats(PollError): - match = "polls can't be sent to private chats" - - -class PollSizeError(PollError): - __group = True - - -class PollMustHaveMoreOptions(PollSizeError): - match = "poll must have at least 2 option" - - -class PollCantHaveMoreOptions(PollSizeError): - match = "poll can't have more than 10 options" - - -class PollOptionsMustBeNonEmpty(PollSizeError): - match = "poll options must be non-empty" - - -class PollQuestionMustBeNonEmpty(PollSizeError): - match = "poll question must be non-empty" - - -class PollOptionsLengthTooLong(PollSizeError): - match = "poll options length must not exceed 100" - - -class PollQuestionLengthTooLong(PollSizeError): - match = "poll question length must not exceed 255" - - -class PollCanBeRequestedInPrivateChatsOnly(PollError): - match = "Poll can be requested in private chats only" - - -class MessageWithPollNotFound(PollError, MessageError): - """ - Will be raised when you try to stop poll with message without poll - """ - match = 'message with poll to stop not found' - - -class MessageIsNotAPoll(PollError, MessageError): - """ - Will be raised when you try to stop poll with message without poll - """ - match = 'message is not a poll' - - -class ChatNotFound(BadRequest): - match = 'chat not found' - - -class ChatIdIsEmpty(BadRequest): - match = 'chat_id is empty' - - -class InvalidUserId(BadRequest): - match = 'user_id_invalid' - text = 'Invalid user id' - - -class ChatDescriptionIsNotModified(BadRequest): - match = 'chat description is not modified' - - -class InvalidQueryID(BadRequest): - match = 'query is too old and response timeout expired or query id is invalid' - - -class InvalidPeerID(BadRequest): - match = 'PEER_ID_INVALID' - text = 'Invalid peer ID' - - -class InvalidHTTPUrlContent(BadRequest): - match = 'Failed to get HTTP URL content' - - -class ButtonURLInvalid(BadRequest): - match = 'BUTTON_URL_INVALID' - text = 'Button URL invalid' - - -class URLHostIsEmpty(BadRequest): - match = 'URL host is empty' - - -class StartParamInvalid(BadRequest): - match = 'START_PARAM_INVALID' - text = 'Start param invalid' - - -class ButtonDataInvalid(BadRequest): - match = 'BUTTON_DATA_INVALID' - text = 'Button data invalid' - - -class FileIsTooBig(BadRequest): - match = 'File is too big' - - -class WrongFileIdentifier(BadRequest): - match = 'wrong file identifier/HTTP URL specified' - - -class GroupDeactivated(BadRequest): - match = 'Group chat was deactivated' - - -class PhotoAsInputFileRequired(BadRequest): - """ - Will be raised when you try to set chat photo from file ID. - """ - match = 'Photo should be uploaded as an InputFile' - - -class InvalidStickersSet(BadRequest): - match = 'STICKERSET_INVALID' - text = 'Stickers set is invalid' - - -class NoStickerInRequest(BadRequest): - match = 'there is no sticker in the request' - - -class ChatAdminRequired(BadRequest): - match = 'CHAT_ADMIN_REQUIRED' - text = 'Admin permissions is required!' - - -class NeedAdministratorRightsInTheChannel(BadRequest): - match = 'need administrator rights in the channel chat' - text = 'Admin permissions is required!' - - -class NotEnoughRightsToPinMessage(BadRequest): - match = 'not enough rights to pin a message' - - -class MethodNotAvailableInPrivateChats(BadRequest): - match = 'method is available only for supergroups and channel' - - -class CantDemoteChatCreator(BadRequest): - match = 'can\'t demote chat creator' - - -class CantRestrictSelf(BadRequest): - match = "can't restrict self" - text = "Admin can't restrict self." - - -class NotEnoughRightsToRestrict(BadRequest): - match = 'not enough rights to restrict/unrestrict chat member' - - -class PhotoDimensions(BadRequest): - match = 'PHOTO_INVALID_DIMENSIONS' - text = 'Invalid photo dimensions' - - -class UnavailableMembers(BadRequest): - match = 'supergroup members are unavailable' - - -class TypeOfFileMismatch(BadRequest): - match = 'type of file mismatch' - - -class WrongRemoteFileIdSpecified(BadRequest): - match = 'wrong remote file id specified' - - -class PaymentProviderInvalid(BadRequest): - match = 'PAYMENT_PROVIDER_INVALID' - text = 'payment provider invalid' - - -class CurrencyTotalAmountInvalid(BadRequest): - match = 'currency_total_amount_invalid' - text = 'currency total amount invalid' - - -class BadWebhook(BadRequest): - __group = True - - -class WebhookRequireHTTPS(BadWebhook): - match = 'HTTPS url must be provided for webhook' - text = 'bad webhook: ' + match - - -class BadWebhookPort(BadWebhook): - match = 'Webhook can be set up only on ports 80, 88, 443 or 8443' - text = 'bad webhook: ' + match - - -class BadWebhookAddrInfo(BadWebhook): - match = 'getaddrinfo: Temporary failure in name resolution' - text = 'bad webhook: ' + match - - -class BadWebhookNoAddressAssociatedWithHostname(BadWebhook): - match = 'failed to resolve host: no address associated with hostname' - - -class CantParseUrl(BadRequest): - match = 'can\'t parse URL' - - -class UnsupportedUrlProtocol(BadRequest): - match = 'unsupported URL protocol' - - -class CantParseEntities(BadRequest): - match = 'can\'t parse entities' - - -class ResultIdDuplicate(BadRequest): - match = 'result_id_duplicate' - text = 'Result ID duplicate' - - -class BotDomainInvalid(BadRequest): - match = 'bot_domain_invalid' - text = 'Invalid bot domain' - - -class MethodIsNotAvailable(BadRequest): - match = "Method is available only for supergroups" - - -class CantRestrictChatOwner(BadRequest): - """ - Raises when bot restricts the chat owner - """ - match = 'Can\'t remove chat owner' - - -class UserIsAnAdministratorOfTheChat(BadRequest): - """ - Raises when bot restricts the chat admin - """ - match = 'User is an administrator of the chat' - - -class NotFound(TelegramAPIError, _MatchErrorMixin): - __group = True - - -class MethodNotKnown(NotFound): - match = 'method not found' - - -class ConflictError(TelegramAPIError, _MatchErrorMixin): - __group = True - - -class TerminatedByOtherGetUpdates(ConflictError): - match = 'terminated by other getUpdates request' - text = 'Terminated by other getUpdates request; ' \ - 'Make sure that only one bot instance is running' - - -class CantGetUpdates(ConflictError): - match = 'can\'t use getUpdates method while webhook is active' - - -class Unauthorized(TelegramAPIError, _MatchErrorMixin): - __group = True - - -class BotKicked(Unauthorized): - match = 'bot was kicked from' - - -class BotBlocked(Unauthorized): - match = 'bot was blocked by the user' - - -class UserDeactivated(Unauthorized): - match = 'user is deactivated' - - -class CantInitiateConversation(Unauthorized): - match = 'bot can\'t initiate conversation with a user' - - -class CantTalkWithBots(Unauthorized): - match = 'bot can\'t send messages to bots' - - -class NetworkError(TelegramAPIError): - pass - - -class RestartingTelegram(TelegramAPIError): - def __init__(self): - super(RestartingTelegram, self).__init__('The Telegram Bot API service is restarting. Wait few second.') - - -class RetryAfter(TelegramAPIError): - def __init__(self, retry_after): - super(RetryAfter, self).__init__(f"Flood control exceeded. Retry in {retry_after} seconds.") - self.timeout = retry_after - - -class MigrateToChat(TelegramAPIError): - def __init__(self, chat_id): - super(MigrateToChat, self).__init__(f"The group has been migrated to a supergroup. New id: {chat_id}.") - self.migrate_to_chat_id = chat_id - - -class Throttled(TelegramAPIError): - def __init__(self, **kwargs): - from ..dispatcher.storage import DELTA, EXCEEDED_COUNT, KEY, LAST_CALL, RATE_LIMIT, RESULT - self.key = kwargs.pop(KEY, '') - self.called_at = kwargs.pop(LAST_CALL, time.time()) - self.rate = kwargs.pop(RATE_LIMIT, None) - self.result = kwargs.pop(RESULT, False) - self.exceeded_count = kwargs.pop(EXCEEDED_COUNT, 0) - self.delta = kwargs.pop(DELTA, 0) - self.user = kwargs.pop('user', None) - self.chat = kwargs.pop('chat', None) - - def __str__(self): - return f"Rate limit exceeded! (Limit: {self.rate} s, " \ - f"exceeded: {self.exceeded_count}, " \ - f"time delta: {round(self.delta, 3)} s)" diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/executor.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/executor.py deleted file mode 100644 index c74827b0..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/executor.py +++ /dev/null @@ -1,399 +0,0 @@ -import asyncio -import datetime -import functools -import secrets -from typing import Callable, Union, Optional, Any, List -from warnings import warn - -from aiohttp import web -from aiohttp.web_app import Application - -from ..bot.api import log -from ..dispatcher.dispatcher import Dispatcher -from ..dispatcher.webhook import BOT_DISPATCHER_KEY, DEFAULT_ROUTE_NAME, WebhookRequestHandler - -APP_EXECUTOR_KEY = 'APP_EXECUTOR' - - -def _setup_callbacks(executor: 'Executor', on_startup=None, on_shutdown=None): - if on_startup is not None: - executor.on_startup(on_startup) - if on_shutdown is not None: - executor.on_shutdown(on_shutdown) - - -def start_polling(dispatcher, *, loop=None, skip_updates=False, reset_webhook=True, - on_startup=None, on_shutdown=None, timeout=20, relax=0.1, fast=True, - allowed_updates: Optional[List[str]] = None): - """ - Start bot in long-polling mode - - :param dispatcher: - :param loop: - :param skip_updates: - :param reset_webhook: - :param on_startup: - :param on_shutdown: - :param timeout: - :param relax: - :param fast: - :param allowed_updates: - """ - executor = Executor(dispatcher, skip_updates=skip_updates, loop=loop) - _setup_callbacks(executor, on_startup, on_shutdown) - - executor.start_polling( - reset_webhook=reset_webhook, - timeout=timeout, - relax=relax, - fast=fast, - allowed_updates=allowed_updates - ) - - -def set_webhook(dispatcher: Dispatcher, webhook_path: str, *, loop: Optional[asyncio.AbstractEventLoop] = None, - skip_updates: bool = None, on_startup: Optional[Callable] = None, - on_shutdown: Optional[Callable] = None, check_ip: bool = False, - retry_after: Optional[Union[str, int]] = None, route_name: str = DEFAULT_ROUTE_NAME, - web_app: Optional[Application] = None): - """ - Set webhook for bot - - :param dispatcher: Dispatcher - :param webhook_path: str - :param loop: Optional[asyncio.AbstractEventLoop] (default: None) - :param skip_updates: bool (default: None) - :param on_startup: Optional[Callable] (default: None) - :param on_shutdown: Optional[Callable] (default: None) - :param check_ip: bool (default: False) - :param retry_after: Optional[Union[str, int]] See https://tools.ietf.org/html/rfc7231#section-7.1.3 (default: None) - :param route_name: str (default: 'webhook_handler') - :param web_app: Optional[Application] (default: None) - :return: - """ - executor = Executor(dispatcher, skip_updates=skip_updates, check_ip=check_ip, retry_after=retry_after, - loop=loop) - _setup_callbacks(executor, on_startup, on_shutdown) - - executor.set_webhook(webhook_path, route_name=route_name, web_app=web_app) - return executor - - -def start_webhook(dispatcher, webhook_path, *, loop=None, skip_updates=None, - on_startup=None, on_shutdown=None, check_ip=False, retry_after=None, route_name=DEFAULT_ROUTE_NAME, - **kwargs): - """ - Start bot in webhook mode - - :param dispatcher: - :param webhook_path: - :param loop: - :param skip_updates: - :param on_startup: - :param on_shutdown: - :param check_ip: - :param route_name: - :param kwargs: - :return: - """ - executor = set_webhook(dispatcher=dispatcher, - webhook_path=webhook_path, - loop=loop, - skip_updates=skip_updates, - on_startup=on_startup, - on_shutdown=on_shutdown, - check_ip=check_ip, - retry_after=retry_after, - route_name=route_name) - executor.run_app(**kwargs) - - -def start(dispatcher, future, *, loop=None, skip_updates=None, - on_startup=None, on_shutdown=None): - """ - Execute Future. - - :param dispatcher: instance of Dispatcher - :param future: future - :param loop: instance of AbstractEventLoop - :param skip_updates: - :param on_startup: - :param on_shutdown: - :return: - """ - executor = Executor(dispatcher, skip_updates=skip_updates, loop=loop) - _setup_callbacks(executor, on_startup, on_shutdown) - - return executor.start(future) - - -class Executor: - """ - Main executor class - """ - - def __init__(self, dispatcher, skip_updates=None, check_ip=False, retry_after=None, loop=None): - if loop is not None: - self._loop = loop - - self.dispatcher = dispatcher - self.skip_updates = skip_updates - self.check_ip = check_ip - self.retry_after = retry_after - - self._identity = secrets.token_urlsafe(16) - self._web_app = None - - self._on_startup_webhook = [] - self._on_startup_polling = [] - self._on_shutdown_webhook = [] - self._on_shutdown_polling = [] - - self._freeze = False - - from aiogram import Bot, Dispatcher - Bot.set_current(dispatcher.bot) - Dispatcher.set_current(dispatcher) - - @property - def loop(self) -> asyncio.AbstractEventLoop: - return getattr(self, "_loop", asyncio.get_event_loop()) - - @property - def frozen(self): - return self._freeze - - def set_web_app(self, application: web.Application): - """ - Change instance of aiohttp.web.Application - - :param application: - """ - self._web_app = application - - @property - def web_app(self) -> web.Application: - if self._web_app is None: - raise RuntimeError('web.Application() is not configured!') - return self._web_app - - def on_startup(self, callback: callable, polling=True, webhook=True): - """ - Register a callback for the startup process - - :param callback: - :param polling: use with polling - :param webhook: use with webhook - """ - self._check_frozen() - if not webhook and not polling: - warn('This action has no effect!', UserWarning) - return - - if isinstance(callback, (list, tuple, set)): - for cb in callback: - self.on_startup(cb, polling, webhook) - return - - if polling: - self._on_startup_polling.append(callback) - if webhook: - self._on_startup_webhook.append(callback) - - def on_shutdown(self, callback: callable, polling=True, webhook=True): - """ - Register a callback for the shutdown process - - :param callback: - :param polling: use with polling - :param webhook: use with webhook - """ - self._check_frozen() - if not webhook and not polling: - warn('This action has no effect!', UserWarning) - return - - if isinstance(callback, (list, tuple, set)): - for cb in callback: - self.on_shutdown(cb, polling, webhook) - return - - if polling: - self._on_shutdown_polling.append(callback) - if webhook: - self._on_shutdown_webhook.append(callback) - - def _check_frozen(self): - if self.frozen: - raise RuntimeError('Executor is frozen!') - - def _prepare_polling(self): - self._check_frozen() - self._freeze = True - - # self.loop.set_task_factory(context.task_factory) - - def _prepare_webhook(self, path=None, handler=WebhookRequestHandler, route_name=DEFAULT_ROUTE_NAME, app=None): - self._check_frozen() - self._freeze = True - - # self.loop.set_task_factory(context.task_factory) - - if app is not None: - self._web_app = app - elif self._web_app is None: - self._web_app = app = web.Application() - else: - raise RuntimeError("web.Application() is already configured!") - - if self.retry_after: - app['RETRY_AFTER'] = self.retry_after - - if self._identity == app.get(self._identity): - # App is already configured - return - - if path is not None: - app.router.add_route('*', path, handler, name=route_name) - - async def _wrap_callback(cb, _): - return await cb(self.dispatcher) - - for callback in self._on_startup_webhook: - app.on_startup.append(functools.partial(_wrap_callback, callback)) - - # for callback in self._on_shutdown_webhook: - # app.on_shutdown.append(functools.partial(_wrap_callback, callback)) - - async def _on_shutdown(_): - await self._shutdown_webhook() - - app.on_shutdown.append(_on_shutdown) - app[APP_EXECUTOR_KEY] = self - app[BOT_DISPATCHER_KEY] = self.dispatcher - app[self._identity] = datetime.datetime.now() - app['_check_ip'] = self.check_ip - - def set_webhook(self, webhook_path: Optional[str] = None, request_handler: Any = WebhookRequestHandler, - route_name: str = DEFAULT_ROUTE_NAME, web_app: Optional[Application] = None): - """ - Set webhook for bot - - :param webhook_path: Optional[str] (default: None) - :param request_handler: Any (default: WebhookRequestHandler) - :param route_name: str Name of webhook handler route (default: 'webhook_handler') - :param web_app: Optional[Application] (default: None) - :return: - """ - self._prepare_webhook(webhook_path, request_handler, route_name, web_app) - self.loop.run_until_complete(self._startup_webhook()) - - def run_app(self, **kwargs): - web.run_app(self._web_app, **kwargs) - - def start_webhook(self, webhook_path=None, request_handler=WebhookRequestHandler, route_name=DEFAULT_ROUTE_NAME, - **kwargs): - """ - Start bot in webhook mode - - :param webhook_path: - :param request_handler: - :param route_name: Name of webhook handler route - :param kwargs: - :return: - """ - self.set_webhook(webhook_path=webhook_path, request_handler=request_handler, route_name=route_name) - self.run_app(**kwargs) - - def start_polling(self, reset_webhook=None, timeout=20, relax=0.1, fast=True, - allowed_updates: Optional[List[str]] = None): - """ - Start bot in long-polling mode - - :param reset_webhook: - :param timeout: - """ - self._prepare_polling() - loop: asyncio.AbstractEventLoop = self.loop - - try: - loop.run_until_complete(self._startup_polling()) - loop.create_task(self.dispatcher.start_polling(reset_webhook=reset_webhook, timeout=timeout, - relax=relax, fast=fast, allowed_updates=allowed_updates)) - loop.run_forever() - except (KeyboardInterrupt, SystemExit): - # loop.stop() - pass - finally: - loop.run_until_complete(self._shutdown_polling()) - log.warning("Goodbye!") - - def start(self, future): - """ - Execute Future. - - Return the Future's result, or raise its exception. - - :param future: - :return: - """ - self._check_frozen() - self._freeze = True - loop: asyncio.AbstractEventLoop = self.loop - - try: - loop.run_until_complete(self._startup_polling()) - result = loop.run_until_complete(future) - except (KeyboardInterrupt, SystemExit): - result = None - loop.stop() - finally: - loop.run_until_complete(self._shutdown_polling()) - log.warning("Goodbye!") - return result - - async def _skip_updates(self): - await self.dispatcher.reset_webhook(True) - await self.dispatcher.skip_updates() - log.warning(f'Updates were skipped successfully.') - - async def _welcome(self): - user = await self.dispatcher.bot.me - log.info(f"Bot: {user.full_name} [@{user.username}]") - - async def _shutdown(self): - self.dispatcher.stop_polling() - await self.dispatcher.storage.close() - await self.dispatcher.storage.wait_closed() - await self.dispatcher.bot.session.close() - - async def _startup_polling(self): - await self._welcome() - - if self.skip_updates: - await self._skip_updates() - for callback in self._on_startup_polling: - await callback(self.dispatcher) - - async def _shutdown_polling(self, wait_closed=False): - for callback in self._on_shutdown_polling: - await callback(self.dispatcher) - - await self._shutdown() - - if wait_closed: - await self.dispatcher.wait_closed() - - async def _shutdown_webhook(self, wait_closed=False): - for callback in self._on_shutdown_webhook: - await callback(self.dispatcher) - - await self._shutdown() - - if wait_closed: - await self.dispatcher.wait_closed() - - async def _startup_webhook(self): - await self._welcome() - if self.skip_updates: - await self._skip_updates() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/helper.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/helper.py deleted file mode 100644 index 735afe5d..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/helper.py +++ /dev/null @@ -1,229 +0,0 @@ -""" -Example: - >>> from aiogram.utils.helper import Helper, ListItem, HelperMode, Item - >>> class MyHelper(Helper): - ... mode = HelperMode.lowerCamelCase - ... FOO_ITEM = ListItem() - ... BAR_ITEM = ListItem() - ... BAZ_ITEM = ListItem() - ... LOREM = Item() - ... - >>> print(MyHelper.FOO_ITEM & MyHelper.BAR_ITEM) - <<< ['fooItem', 'barItem'] - >>> print(MyHelper.all()) - <<< ['barItem', 'bazItem', 'fooItem', 'lorem'] -""" -from typing import List - -PROPS_KEYS_ATTR_NAME = '_props_keys' - - -class Helper: - mode = '' - - @classmethod - def all(cls): - """ - Get all consts - :return: list - """ - result = [] - for name in dir(cls): - if not name.isupper(): - continue - value = getattr(cls, name) - if isinstance(value, ItemsList): - result.append(value[0]) - else: - result.append(value) - return result - - -class HelperMode(Helper): - mode = 'original' - - SCREAMING_SNAKE_CASE = 'SCREAMING_SNAKE_CASE' - lowerCamelCase = 'lowerCamelCase' - CamelCase = 'CamelCase' - snake_case = 'snake_case' - lowercase = 'lowercase' - - @classmethod - def all(cls): - return [ - cls.SCREAMING_SNAKE_CASE, - cls.lowerCamelCase, - cls.CamelCase, - cls.snake_case, - cls.lowercase, - ] - - @classmethod - def _screaming_snake_case(cls, text): - """ - Transform text to SCREAMING_SNAKE_CASE - - :param text: - :return: - """ - if text.isupper(): - return text - result = '' - for pos, symbol in enumerate(text): - if symbol.isupper() and pos > 0: - result += '_' + symbol - else: - result += symbol.upper() - return result - - @classmethod - def _snake_case(cls, text): - """ - Transform text to snake cale (Based on SCREAMING_SNAKE_CASE) - - :param text: - :return: - """ - if text.islower(): - return text - return cls._screaming_snake_case(text).lower() - - @classmethod - def _camel_case(cls, text, first_upper=False): - """ - Transform text to camelCase or CamelCase - - :param text: - :param first_upper: first symbol must be upper? - :return: - """ - result = '' - need_upper = False - for pos, symbol in enumerate(text): - if symbol == '_' and pos > 0: - need_upper = True - else: - if need_upper: - result += symbol.upper() - else: - result += symbol.lower() - need_upper = False - if first_upper: - result = result[0].upper() + result[1:] - return result - - @classmethod - def apply(cls, text, mode): - """ - Apply mode for text - - :param text: - :param mode: - :return: - """ - if mode == cls.SCREAMING_SNAKE_CASE: - return cls._screaming_snake_case(text) - if mode == cls.snake_case: - return cls._snake_case(text) - if mode == cls.lowercase: - return cls._snake_case(text).replace('_', '') - if mode == cls.lowerCamelCase: - return cls._camel_case(text) - if mode == cls.CamelCase: - return cls._camel_case(text, True) - if callable(mode): - return mode(text) - return text - - -class Item: - """ - Helper item - - If a value is not provided, - it will be automatically generated based on a variable's name - """ - - def __init__(self, value=None): - self._value = value - - def __get__(self, instance, owner): - return self._value - - def __set_name__(self, owner, name): - if not name.isupper(): - raise NameError('Name for helper item must be in uppercase!') - if not self._value: - if hasattr(owner, 'mode'): - self._value = HelperMode.apply(name, getattr(owner, 'mode')) - - -class ListItem(Item): - """ - This item is always a list - - You can use &, | and + operators for that. - """ - - def add(self, other): - return self + other - - def __get__(self, instance, owner): - return ItemsList(self._value) - - def __getitem__(self, item): - # Only for IDE. This method is never be called. - return self._value - - # Need only for IDE - __iadd__ = __add__ = __rand__ = __and__ = __ror__ = __or__ = add - - -class ItemsList(list): - """ - Patch for default list - - This class provides +, &, |, +=, &=, |= operators for extending the list - """ - - def __init__(self, *seq): - super(ItemsList, self).__init__(map(str, seq)) - - def add(self, other): - self.extend(other) - return self - - __iadd__ = __add__ = __rand__ = __and__ = __ror__ = __or__ = add - - -class OrderedHelperMeta(type): - - def __new__(mcs, name, bases, namespace, **kwargs): - cls = super().__new__(mcs, name, bases, namespace) - - props_keys = [] - - for prop_name in (name for name, prop in namespace.items() if isinstance(prop, (Item, ListItem))): - props_keys.append(prop_name) - - setattr(cls, PROPS_KEYS_ATTR_NAME, props_keys) - - return cls - - -class OrderedHelper(metaclass=OrderedHelperMeta): - mode = '' - - @classmethod - def all(cls) -> List[str]: - """ - Get all Items values - """ - result = [] - for name in getattr(cls, PROPS_KEYS_ATTR_NAME, []): - value = getattr(cls, name) - if isinstance(value, ItemsList): - result.append(value[0]) - else: - result.append(value) - return result diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/json.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/json.py deleted file mode 100644 index 56f122e4..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/json.py +++ /dev/null @@ -1,47 +0,0 @@ -import importlib -import os - -JSON = 'json' -RAPIDJSON = 'rapidjson' -UJSON = 'ujson' - -# Detect mode -mode = JSON -for json_lib in (RAPIDJSON, UJSON): - if 'DISABLE_' + json_lib.upper() in os.environ: - continue - - try: - json = importlib.import_module(json_lib) - except ImportError: - continue - else: - mode = json_lib - break - -if mode == RAPIDJSON: - def dumps(data): - return json.dumps(data, ensure_ascii=False) - - - def loads(data): - return json.loads(data, number_mode=json.NM_NATIVE) - -elif mode == UJSON: - def loads(data): - return json.loads(data) - - - def dumps(data): - return json.dumps(data, ensure_ascii=False) - -else: - import json - - - def dumps(data): - return json.dumps(data, ensure_ascii=False) - - - def loads(data): - return json.loads(data) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/markdown.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/markdown.py deleted file mode 100644 index da27bc39..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/markdown.py +++ /dev/null @@ -1,250 +0,0 @@ -from .text_decorations import html_decoration, markdown_decoration - -LIST_MD_SYMBOLS = "*_`[" - -MD_SYMBOLS = ( - (LIST_MD_SYMBOLS[0], LIST_MD_SYMBOLS[0]), - (LIST_MD_SYMBOLS[1], LIST_MD_SYMBOLS[1]), - (LIST_MD_SYMBOLS[2], LIST_MD_SYMBOLS[2]), - (LIST_MD_SYMBOLS[2] * 3 + "\n", "\n" + LIST_MD_SYMBOLS[2] * 3), - ("", ""), - ("", ""), - ("", ""), - ("

", "
"), -) - -HTML_QUOTES_MAP = {"<": "<", ">": ">", "&": "&", '"': """} - -_HQS = HTML_QUOTES_MAP.keys() # HQS for HTML QUOTES SYMBOLS - - -def quote_html(*content, sep=" ") -> str: - """ - Quote HTML symbols - - All <, >, & and " symbols that are not a part of a tag or - an HTML entity must be replaced with the corresponding HTML entities - (< with < > with > & with & and " with "). - - :param content: - :param sep: - :return: - """ - return html_decoration.quote(_join(*content, sep=sep)) - - -def escape_md(*content, sep=" ") -> str: - """ - Escape markdown text - - E.g. for usernames - - :param content: - :param sep: - :return: - """ - return markdown_decoration.quote(_join(*content, sep=sep)) - - -def _join(*content, sep=" "): - return sep.join(map(str, content)) - - -def text(*content, sep=" "): - """ - Join all elements with a separator - - :param content: - :param sep: - :return: - """ - return _join(*content, sep=sep) - - -def bold(*content, sep=" ") -> str: - """ - Make bold text (Markdown) - - :param content: - :param sep: - :return: - """ - return markdown_decoration.bold( - value=markdown_decoration.quote(_join(*content, sep=sep)) - ) - - -def hbold(*content, sep=" ") -> str: - """ - Make bold text (HTML) - - :param content: - :param sep: - :return: - """ - return html_decoration.bold( - value=html_decoration.quote(_join(*content, sep=sep)) - ) - - -def italic(*content, sep=" ") -> str: - """ - Make italic text (Markdown) - - :param content: - :param sep: - :return: - """ - return markdown_decoration.italic( - value=markdown_decoration.quote(_join(*content, sep=sep)) - ) - - -def hitalic(*content, sep=" ") -> str: - """ - Make italic text (HTML) - - :param content: - :param sep: - :return: - """ - return html_decoration.italic( - value=html_decoration.quote(_join(*content, sep=sep)) - ) - - -def code(*content, sep=" ") -> str: - """ - Make mono-width text (Markdown) - - :param content: - :param sep: - :return: - """ - return markdown_decoration.code( - value=markdown_decoration.quote(_join(*content, sep=sep)) - ) - - -def hcode(*content, sep=" ") -> str: - """ - Make mono-width text (HTML) - - :param content: - :param sep: - :return: - """ - return html_decoration.code( - value=html_decoration.quote(_join(*content, sep=sep)) - ) - - -def pre(*content, sep="\n") -> str: - """ - Make mono-width text block (Markdown) - - :param content: - :param sep: - :return: - """ - return markdown_decoration.pre( - value=markdown_decoration.quote(_join(*content, sep=sep)) - ) - - -def hpre(*content, sep="\n") -> str: - """ - Make mono-width text block (HTML) - - :param content: - :param sep: - :return: - """ - return html_decoration.pre( - value=html_decoration.quote(_join(*content, sep=sep)) - ) - - -def underline(*content, sep=" ") -> str: - """ - Make underlined text (Markdown) - - :param content: - :param sep: - :return: - """ - return markdown_decoration.underline( - value=markdown_decoration.quote(_join(*content, sep=sep)) - ) - - -def hunderline(*content, sep=" ") -> str: - """ - Make underlined text (HTML) - - :param content: - :param sep: - :return: - """ - return html_decoration.underline( - value=html_decoration.quote(_join(*content, sep=sep)) - ) - - -def strikethrough(*content, sep=" ") -> str: - """ - Make strikethrough text (Markdown) - - :param content: - :param sep: - :return: - """ - return markdown_decoration.strikethrough( - value=markdown_decoration.quote(_join(*content, sep=sep)) - ) - - -def hstrikethrough(*content, sep=" ") -> str: - """ - Make strikethrough text (HTML) - - :param content: - :param sep: - :return: - """ - return html_decoration.strikethrough( - value=html_decoration.quote(_join(*content, sep=sep)) - ) - - -def link(title: str, url: str) -> str: - """ - Format URL (Markdown) - - :param title: - :param url: - :return: - """ - return markdown_decoration.link(value=markdown_decoration.quote(title), link=url) - - -def hlink(title: str, url: str) -> str: - """ - Format URL (HTML) - - :param title: - :param url: - :return: - """ - return html_decoration.link(value=html_decoration.quote(title), link=url) - - -def hide_link(url: str) -> str: - """ - Hide URL (HTML only) - Can be used for adding an image to a text message - - :param url: - :return: - """ - return f'' diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/mixins.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/mixins.py deleted file mode 100644 index 90ef4edb..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/mixins.py +++ /dev/null @@ -1,50 +0,0 @@ -import contextvars -from typing import TypeVar, Type - -__all__ = ('DataMixin', 'ContextInstanceMixin') - - -class DataMixin: - @property - def data(self): - data = getattr(self, '_data', None) - if data is None: - data = {} - setattr(self, '_data', data) - return data - - def __getitem__(self, item): - return self.data[item] - - def __setitem__(self, key, value): - self.data[key] = value - - def __delitem__(self, key): - del self.data[key] - - def __contains__(self, key): - return key in self.data - - def get(self, key, default=None): - return self.data.get(key, default) - - -T = TypeVar('T') - - -class ContextInstanceMixin: - def __init_subclass__(cls, **kwargs): - cls.__context_instance = contextvars.ContextVar(f'instance_{cls.__name__}') - return cls - - @classmethod - def get_current(cls: Type[T], no_error=True) -> T: - if no_error: - return cls.__context_instance.get(None) - return cls.__context_instance.get() - - @classmethod - def set_current(cls: Type[T], value: T): - if not isinstance(value, cls): - raise TypeError(f'Value should be instance of {cls.__name__!r} not {type(value).__name__!r}') - cls.__context_instance.set(value) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/parts.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/parts.py deleted file mode 100644 index b4bb9d67..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/parts.py +++ /dev/null @@ -1,60 +0,0 @@ -import typing - -MAX_MESSAGE_LENGTH = 4096 - - -def split_text(text: str, length: int = MAX_MESSAGE_LENGTH) -> typing.List[str]: - """ - Split long text - - :param text: - :param length: - :return: list of parts - :rtype: :obj:`typing.List[str]` - """ - return [text[i:i + length] for i in range(0, len(text), length)] - - -def safe_split_text(text: str, length: int = MAX_MESSAGE_LENGTH, split_separator: str = ' ') -> typing.List[str]: - """ - Split long text - - :param text: - :param length: - :param split_separator - :return: - """ - # TODO: More informative description - - temp_text = text - parts = [] - while temp_text: - if len(temp_text) > length: - try: - split_pos = temp_text[:length].rindex(split_separator) - except ValueError: - split_pos = length - if split_pos < length // 4 * 3: - split_pos = length - parts.append(temp_text[:split_pos]) - temp_text = temp_text[split_pos:].lstrip() - else: - parts.append(temp_text) - break - return parts - - -def paginate(data: typing.Iterable, page: int = 0, limit: int = 10) -> typing.Iterable: - """ - Slice data over pages - - :param data: any iterable object - :type data: :obj:`typing.Iterable` - :param page: number of page - :type page: :obj:`int` - :param limit: items per page - :type limit: :obj:`int` - :return: sliced object - :rtype: :obj:`typing.Iterable` - """ - return data[page * limit:page * limit + limit] diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/payload.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/payload.py deleted file mode 100644 index 0c5e8ae9..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/payload.py +++ /dev/null @@ -1,83 +0,0 @@ -import datetime -import secrets - -from babel.support import LazyProxy - -from aiogram import types -from . import json - -DEFAULT_FILTER = ['self', 'cls'] - - -def generate_payload(exclude=None, **kwargs): - """ - Generate payload - - Usage: payload = generate_payload(**locals(), exclude=['foo']) - - :param exclude: - :param kwargs: - :return: dict - """ - if exclude is None: - exclude = [] - return {key: value for key, value in kwargs.items() if - key not in exclude + DEFAULT_FILTER - and value is not None - and not key.startswith('_')} - - -def _normalize(obj): - """ - Normalize dicts and lists - - :param obj: - :return: normalized object - """ - if isinstance(obj, list): - return [_normalize(item) for item in obj] - elif isinstance(obj, dict): - return {k: _normalize(v) for k, v in obj.items() if v is not None} - elif hasattr(obj, 'to_python'): - return obj.to_python() - return obj - - -def prepare_arg(value): - """ - Stringify dicts/lists and convert datetime/timedelta to unix-time - - :param value: - :return: - """ - if value is None: - return value - if isinstance(value, (list, dict)) or hasattr(value, 'to_python'): - return json.dumps(_normalize(value)) - if isinstance(value, datetime.timedelta): - now = datetime.datetime.now() - return int((now + value).timestamp()) - if isinstance(value, datetime.datetime): - return round(value.timestamp()) - if isinstance(value, LazyProxy): - return str(value) - return value - - -def prepare_file(payload, files, key, file): - if isinstance(file, str): - payload[key] = file - elif file is not None: - files[key] = file - - -def prepare_attachment(payload, files, key, file): - if isinstance(file, str): - payload[key] = file - elif isinstance(file, types.InputFile): - payload[key] = file.attach - files[file.attachment_key] = file.file - elif file is not None: - file_attach_name = secrets.token_urlsafe(16) - payload[key] = "attach://" + file_attach_name - files[file_attach_name] = file diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/text_decorations.py b/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/text_decorations.py deleted file mode 100644 index 40fe296b..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiogram/utils/text_decorations.py +++ /dev/null @@ -1,204 +0,0 @@ -from __future__ import annotations - -import html -import re -from abc import ABC, abstractmethod -from typing import TYPE_CHECKING, Generator, List, Optional, Pattern, cast - -if TYPE_CHECKING: # pragma: no cover - from aiogram.types import MessageEntity - -__all__ = ( - 'HtmlDecoration', - 'MarkdownDecoration', - 'TextDecoration', - 'html_decoration', - 'markdown_decoration', -) - - -class TextDecoration(ABC): - def apply_entity(self, entity: MessageEntity, text: str) -> str: - """ - Apply single entity to text - - :param entity: - :param text: - :return: - """ - if entity.type in {"bot_command", "url", "mention", "phone_number"}: - # This entities should not be changed - return text - if entity.type in {"bold", "italic", "code", "underline", "strikethrough"}: - return cast(str, getattr(self, entity.type)(value=text)) - if entity.type == "pre": - return ( - self.pre_language(value=text, language=entity.language) - if entity.language - else self.pre(value=text) - ) - if entity.type == "text_mention": - from aiogram.types import User - - user = cast(User, entity.user) - return self.link(value=text, link=f"tg://user?id={user.id}") - if entity.type == "text_link": - return self.link(value=text, link=cast(str, entity.url)) - - return self.quote(text) - - def unparse(self, text: str, entities: Optional[List[MessageEntity]] = None) -> str: - """ - Unparse message entities - - :param text: raw text - :param entities: Array of MessageEntities - :return: - """ - return "".join( - self._unparse_entities( - self._add_surrogates(text), sorted(entities, key=lambda item: item.offset) if entities else [] - ) - ) - - def _unparse_entities( - self, - text: bytes, - entities: List[MessageEntity], - offset: Optional[int] = None, - length: Optional[int] = None, - ) -> Generator[str, None, None]: - if offset is None: - offset = 0 - length = length or len(text) - - for index, entity in enumerate(entities): - if entity.offset * 2 < offset: - continue - if entity.offset * 2 > offset: - yield self.quote(self._remove_surrogates(text[offset : entity.offset * 2])) - start = entity.offset * 2 - offset = entity.offset * 2 + entity.length * 2 - - sub_entities = list( - filter(lambda e: e.offset * 2 < (offset or 0), entities[index + 1 :]) - ) - yield self.apply_entity( - entity, - "".join( - self._unparse_entities( - text, sub_entities, offset=start, length=offset - ) - ), - ) - - if offset < length: - yield self.quote(self._remove_surrogates(text[offset:length])) - - @staticmethod - def _add_surrogates(text: str): - return text.encode('utf-16-le') - - @staticmethod - def _remove_surrogates(text: bytes): - return text.decode('utf-16-le') - - @abstractmethod - def link(self, value: str, link: str) -> str: # pragma: no cover - pass - - @abstractmethod - def bold(self, value: str) -> str: # pragma: no cover - pass - - @abstractmethod - def italic(self, value: str) -> str: # pragma: no cover - pass - - @abstractmethod - def code(self, value: str) -> str: # pragma: no cover - pass - - @abstractmethod - def pre(self, value: str) -> str: # pragma: no cover - pass - - @abstractmethod - def pre_language(self, value: str, language: str) -> str: # pragma: no cover - pass - - @abstractmethod - def underline(self, value: str) -> str: # pragma: no cover - pass - - @abstractmethod - def strikethrough(self, value: str) -> str: # pragma: no cover - pass - - @abstractmethod - def quote(self, value: str) -> str: # pragma: no cover - pass - - -class HtmlDecoration(TextDecoration): - def link(self, value: str, link: str) -> str: - return f'{value}' - - def bold(self, value: str) -> str: - return f"{value}" - - def italic(self, value: str) -> str: - return f"{value}" - - def code(self, value: str) -> str: - return f"{value}" - - def pre(self, value: str) -> str: - return f"
{value}
" - - def pre_language(self, value: str, language: str) -> str: - return f'
{value}
' - - def underline(self, value: str) -> str: - return f"{value}" - - def strikethrough(self, value: str) -> str: - return f"{value}" - - def quote(self, value: str) -> str: - return html.escape(value, quote=False) - - -class MarkdownDecoration(TextDecoration): - MARKDOWN_QUOTE_PATTERN: Pattern[str] = re.compile(r"([_*\[\]()~`>#+\-=|{}.!\\])") - - def link(self, value: str, link: str) -> str: - return f"[{value}]({link})" - - def bold(self, value: str) -> str: - return f"*{value}*" - - def italic(self, value: str) -> str: - return f"_\r{value}_\r" - - def code(self, value: str) -> str: - return f"`{value}`" - - def pre(self, value: str) -> str: - return f"```\n{value}\n```" - - def pre_language(self, value: str, language: str) -> str: - return f"```{language}\n{value}\n```" - - def underline(self, value: str) -> str: - return f"__\r{value}__\r" - - def strikethrough(self, value: str) -> str: - return f"~{value}~" - - def quote(self, value: str) -> str: - return re.sub(pattern=self.MARKDOWN_QUOTE_PATTERN, repl=r"\\\1", string=value) - - -html_decoration = HtmlDecoration() -markdown_decoration = MarkdownDecoration() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp-3.7.4.post0.dist-info/INSTALLER b/IKEA_scraper/.venv/Lib/site-packages/aiohttp-3.7.4.post0.dist-info/INSTALLER deleted file mode 100644 index a1b589e3..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp-3.7.4.post0.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp-3.7.4.post0.dist-info/LICENSE.txt b/IKEA_scraper/.venv/Lib/site-packages/aiohttp-3.7.4.post0.dist-info/LICENSE.txt deleted file mode 100644 index 90c9d01b..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp-3.7.4.post0.dist-info/LICENSE.txt +++ /dev/null @@ -1,201 +0,0 @@ -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2013-2020 aiohttp maintainers - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp-3.7.4.post0.dist-info/METADATA b/IKEA_scraper/.venv/Lib/site-packages/aiohttp-3.7.4.post0.dist-info/METADATA deleted file mode 100644 index 2f38b9a4..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp-3.7.4.post0.dist-info/METADATA +++ /dev/null @@ -1,978 +0,0 @@ -Metadata-Version: 2.1 -Name: aiohttp -Version: 3.7.4.post0 -Summary: Async http client/server framework (asyncio) -Home-page: https://github.com/aio-libs/aiohttp -Author: Nikolay Kim -Author-email: fafhrd91@gmail.com -Maintainer: Nikolay Kim , Andrew Svetlov -Maintainer-email: aio-libs@googlegroups.com -License: Apache 2 -Project-URL: Chat: Gitter, https://gitter.im/aio-libs/Lobby -Project-URL: CI: Azure Pipelines, https://dev.azure.com/aio-libs/aiohttp/_build -Project-URL: Coverage: codecov, https://codecov.io/github/aio-libs/aiohttp -Project-URL: Docs: RTD, https://docs.aiohttp.org -Project-URL: GitHub: issues, https://github.com/aio-libs/aiohttp/issues -Project-URL: GitHub: repo, https://github.com/aio-libs/aiohttp -Platform: UNKNOWN -Classifier: License :: OSI Approved :: Apache Software License -Classifier: Intended Audience :: Developers -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: 3.7 -Classifier: Programming Language :: Python :: 3.8 -Classifier: Programming Language :: Python :: 3.9 -Classifier: Development Status :: 5 - Production/Stable -Classifier: Operating System :: POSIX -Classifier: Operating System :: MacOS :: MacOS X -Classifier: Operating System :: Microsoft :: Windows -Classifier: Topic :: Internet :: WWW/HTTP -Classifier: Framework :: AsyncIO -Requires-Python: >=3.6 -Requires-Dist: attrs (>=17.3.0) -Requires-Dist: chardet (<5.0,>=2.0) -Requires-Dist: multidict (<7.0,>=4.5) -Requires-Dist: async-timeout (<4.0,>=3.0) -Requires-Dist: yarl (<2.0,>=1.0) -Requires-Dist: typing-extensions (>=3.6.5) -Requires-Dist: idna-ssl (>=1.0) ; python_version < "3.7" -Provides-Extra: speedups -Requires-Dist: aiodns ; extra == 'speedups' -Requires-Dist: brotlipy ; extra == 'speedups' -Requires-Dist: cchardet ; extra == 'speedups' - -================================== -Async http client/server framework -================================== - -.. image:: https://raw.githubusercontent.com/aio-libs/aiohttp/master/docs/_static/aiohttp-icon-128x128.png - :height: 64px - :width: 64px - :alt: aiohttp logo - -| - -.. image:: https://github.com/aio-libs/aiohttp/workflows/CI/badge.svg - :target: https://github.com/aio-libs/aiohttp/actions?query=workflow%3ACI - :alt: GitHub Actions status for master branch - -.. image:: https://codecov.io/gh/aio-libs/aiohttp/branch/master/graph/badge.svg - :target: https://codecov.io/gh/aio-libs/aiohttp - :alt: codecov.io status for master branch - -.. image:: https://badge.fury.io/py/aiohttp.svg - :target: https://pypi.org/project/aiohttp - :alt: Latest PyPI package version - -.. image:: https://readthedocs.org/projects/aiohttp/badge/?version=latest - :target: https://docs.aiohttp.org/ - :alt: Latest Read The Docs - -.. image:: https://img.shields.io/discourse/status?server=https%3A%2F%2Faio-libs.discourse.group - :target: https://aio-libs.discourse.group - :alt: Discourse status - -.. image:: https://badges.gitter.im/Join%20Chat.svg - :target: https://gitter.im/aio-libs/Lobby - :alt: Chat on Gitter - - -Key Features -============ - -- Supports both client and server side of HTTP protocol. -- Supports both client and server Web-Sockets out-of-the-box and avoids - Callback Hell. -- Provides Web-server with middlewares and plugable routing. - - -Getting started -=============== - -Client ------- - -To get something from the web: - -.. code-block:: python - - import aiohttp - import asyncio - - async def main(): - - async with aiohttp.ClientSession() as session: - async with session.get('http://python.org') as response: - - print("Status:", response.status) - print("Content-type:", response.headers['content-type']) - - html = await response.text() - print("Body:", html[:15], "...") - - loop = asyncio.get_event_loop() - loop.run_until_complete(main()) - -This prints: - -.. code-block:: - - Status: 200 - Content-type: text/html; charset=utf-8 - Body: ... - -Coming from `requests `_ ? Read `why we need so many lines `_. - -Server ------- - -An example using a simple server: - -.. code-block:: python - - # examples/server_simple.py - from aiohttp import web - - async def handle(request): - name = request.match_info.get('name', "Anonymous") - text = "Hello, " + name - return web.Response(text=text) - - async def wshandle(request): - ws = web.WebSocketResponse() - await ws.prepare(request) - - async for msg in ws: - if msg.type == web.WSMsgType.text: - await ws.send_str("Hello, {}".format(msg.data)) - elif msg.type == web.WSMsgType.binary: - await ws.send_bytes(msg.data) - elif msg.type == web.WSMsgType.close: - break - - return ws - - - app = web.Application() - app.add_routes([web.get('/', handle), - web.get('/echo', wshandle), - web.get('/{name}', handle)]) - - if __name__ == '__main__': - web.run_app(app) - - -Documentation -============= - -https://aiohttp.readthedocs.io/ - - -Demos -===== - -https://github.com/aio-libs/aiohttp-demos - - -External links -============== - -* `Third party libraries - `_ -* `Built with aiohttp - `_ -* `Powered by aiohttp - `_ - -Feel free to make a Pull Request for adding your link to these pages! - - -Communication channels -====================== - -*aio-libs discourse group*: https://aio-libs.discourse.group - -*gitter chat* https://gitter.im/aio-libs/Lobby - -We support `Stack Overflow -`_. -Please add *aiohttp* tag to your question there. - -Requirements -============ - -- Python >= 3.6 -- async-timeout_ -- attrs_ -- chardet_ -- multidict_ -- yarl_ - -Optionally you may install the cChardet_ and aiodns_ libraries (highly -recommended for sake of speed). - -.. _chardet: https://pypi.python.org/pypi/chardet -.. _aiodns: https://pypi.python.org/pypi/aiodns -.. _attrs: https://github.com/python-attrs/attrs -.. _multidict: https://pypi.python.org/pypi/multidict -.. _yarl: https://pypi.python.org/pypi/yarl -.. _async-timeout: https://pypi.python.org/pypi/async_timeout -.. _cChardet: https://pypi.python.org/pypi/cchardet - -License -======= - -``aiohttp`` is offered under the Apache 2 license. - - -Keepsafe -======== - -The aiohttp community would like to thank Keepsafe -(https://www.getkeepsafe.com) for its support in the early days of -the project. - - -Source code -=========== - -The latest developer version is available in a GitHub repository: -https://github.com/aio-libs/aiohttp - -Benchmarks -========== - -If you are interested in efficiency, the AsyncIO community maintains a -list of benchmarks on the official wiki: -https://github.com/python/asyncio/wiki/Benchmarks - -========= -Changelog -========= - -.. - You should *NOT* be adding new change log entries to this file, this - file is managed by towncrier. You *may* edit previous change logs to - fix problems like typo corrections or such. - To add a new change log entry, please see - https://pip.pypa.io/en/latest/development/#adding-a-news-entry - we named the news folder "changes". - - WARNING: Don't drop the next directive! - -.. towncrier release notes start - -3.7.4.post0 (2021-03-06) -======================== - -Misc ----- - -- Bumped upper bound of the ``chardet`` runtime dependency - to allow their v4.0 version stream. - `#5366 `_ - - ----- - - -3.7.4 (2021-02-25) -================== - -Bugfixes --------- - -- **(SECURITY BUG)** Started preventing open redirects in the - ``aiohttp.web.normalize_path_middleware`` middleware. For - more details, see - https://github.com/aio-libs/aiohttp/security/advisories/GHSA-v6wp-4m6f-gcjg. - - Thanks to `Beast Glatisant `__ for - finding the first instance of this issue and `Jelmer Vernooij - `__ for reporting and tracking it down - in aiohttp. - `#5497 `_ -- Fix interpretation difference of the pure-Python and the Cython-based - HTTP parsers construct a ``yarl.URL`` object for HTTP request-target. - - Before this fix, the Python parser would turn the URI's absolute-path - for ``//some-path`` into ``/`` while the Cython code preserved it as - ``//some-path``. Now, both do the latter. - `#5498 `_ - - ----- - - -3.7.3 (2020-11-18) -================== - -Features --------- - -- Use Brotli instead of brotlipy - `#3803 `_ -- Made exceptions pickleable. Also changed the repr of some exceptions. - `#4077 `_ - - -Bugfixes --------- - -- Raise a ClientResponseError instead of an AssertionError for a blank - HTTP Reason Phrase. - `#3532 `_ -- Fix ``web_middlewares.normalize_path_middleware`` behavior for patch without slash. - `#3669 `_ -- Fix overshadowing of overlapped sub-applications prefixes. - `#3701 `_ -- Make `BaseConnector.close()` a coroutine and wait until the client closes all connections. Drop deprecated "with Connector():" syntax. - `#3736 `_ -- Reset the ``sock_read`` timeout each time data is received for a ``aiohttp.client`` response. - `#3808 `_ -- Fixed type annotation for add_view method of UrlDispatcher to accept any subclass of View - `#3880 `_ -- Fixed querying the address families from DNS that the current host supports. - `#5156 `_ -- Change return type of MultipartReader.__aiter__() and BodyPartReader.__aiter__() to AsyncIterator. - `#5163 `_ -- Provide x86 Windows wheels. - `#5230 `_ - - -Improved Documentation ----------------------- - -- Add documentation for ``aiohttp.web.FileResponse``. - `#3958 `_ -- Removed deprecation warning in tracing example docs - `#3964 `_ -- Fixed wrong "Usage" docstring of ``aiohttp.client.request``. - `#4603 `_ -- Add aiohttp-pydantic to third party libraries - `#5228 `_ - - -Misc ----- - -- `#4102 `_ - - ----- - - -3.7.2 (2020-10-27) -================== - -Bugfixes --------- - -- Fixed static files handling for loops without ``.sendfile()`` support - `#5149 `_ - - ----- - - -3.7.1 (2020-10-25) -================== - -Bugfixes --------- - -- Fixed a type error caused by the conditional import of `Protocol`. - `#5111 `_ -- Server doesn't send Content-Length for 1xx or 204 - `#4901 `_ -- Fix run_app typing - `#4957 `_ -- Always require ``typing_extensions`` library. - `#5107 `_ -- Fix a variable-shadowing bug causing `ThreadedResolver.resolve` to - return the resolved IP as the ``hostname`` in each record, which prevented - validation of HTTPS connections. - `#5110 `_ -- Added annotations to all public attributes. - `#5115 `_ -- Fix flaky test_when_timeout_smaller_second - `#5116 `_ -- Ensure sending a zero byte file does not throw an exception - `#5124 `_ -- Fix a bug in ``web.run_app()`` about Python version checking on Windows - `#5127 `_ - - ----- - - -3.7.0 (2020-10-24) -================== - -Features --------- - -- Response headers are now prepared prior to running ``on_response_prepare`` hooks, directly before headers are sent to the client. - `#1958 `_ -- Add a ``quote_cookie`` option to ``CookieJar``, a way to skip quotation wrapping of cookies containing special characters. - `#2571 `_ -- Call ``AccessLogger.log`` with the current exception available from ``sys.exc_info()``. - `#3557 `_ -- `web.UrlDispatcher.add_routes` and `web.Application.add_routes` return a list - of registered `AbstractRoute` instances. `AbstractRouteDef.register` (and all - subclasses) return a list of registered resources registered resource. - `#3866 `_ -- Added properties of default ClientSession params to ClientSession class so it is available for introspection - `#3882 `_ -- Don't cancel web handler on peer disconnection, raise `OSError` on reading/writing instead. - `#4080 `_ -- Implement BaseRequest.get_extra_info() to access a protocol transports' extra info. - `#4189 `_ -- Added `ClientSession.timeout` property. - `#4191 `_ -- allow use of SameSite in cookies. - `#4224 `_ -- Use ``loop.sendfile()`` instead of custom implementation if available. - `#4269 `_ -- Apply SO_REUSEADDR to test server's socket. - `#4393 `_ -- Use .raw_host instead of slower .host in client API - `#4402 `_ -- Allow configuring the buffer size of input stream by passing ``read_bufsize`` argument. - `#4453 `_ -- Pass tests on Python 3.8 for Windows. - `#4513 `_ -- Add `method` and `url` attributes to `TraceRequestChunkSentParams` and `TraceResponseChunkReceivedParams`. - `#4674 `_ -- Add ClientResponse.ok property for checking status code under 400. - `#4711 `_ -- Don't ceil timeouts that are smaller than 5 seconds. - `#4850 `_ -- TCPSite now listens by default on all interfaces instead of just IPv4 when `None` is passed in as the host. - `#4894 `_ -- Bump ``http_parser`` to 2.9.4 - `#5070 `_ - - -Bugfixes --------- - -- Fix keepalive connections not being closed in time - `#3296 `_ -- Fix failed websocket handshake leaving connection hanging. - `#3380 `_ -- Fix tasks cancellation order on exit. The run_app task needs to be cancelled first for cleanup hooks to run with all tasks intact. - `#3805 `_ -- Don't start heartbeat until _writer is set - `#4062 `_ -- Fix handling of multipart file uploads without a content type. - `#4089 `_ -- Preserve view handler function attributes across middlewares - `#4174 `_ -- Fix the string representation of ``ServerDisconnectedError``. - `#4175 `_ -- Raising RuntimeError when trying to get encoding from not read body - `#4214 `_ -- Remove warning messages from noop. - `#4282 `_ -- Raise ClientPayloadError if FormData re-processed. - `#4345 `_ -- Fix a warning about unfinished task in ``web_protocol.py`` - `#4408 `_ -- Fixed 'deflate' compression. According to RFC 2616 now. - `#4506 `_ -- Fixed OverflowError on platforms with 32-bit time_t - `#4515 `_ -- Fixed request.body_exists returns wrong value for methods without body. - `#4528 `_ -- Fix connecting to link-local IPv6 addresses. - `#4554 `_ -- Fix a problem with connection waiters that are never awaited. - `#4562 `_ -- Always make sure transport is not closing before reuse a connection. - - Reuse a protocol based on keepalive in headers is unreliable. - For example, uWSGI will not support keepalive even it serves a - HTTP 1.1 request, except explicitly configure uWSGI with a - ``--http-keepalive`` option. - - Servers designed like uWSGI could cause aiohttp intermittently - raise a ConnectionResetException when the protocol poll runs - out and some protocol is reused. - `#4587 `_ -- Handle the last CRLF correctly even if it is received via separate TCP segment. - `#4630 `_ -- Fix the register_resource function to validate route name before splitting it so that route name can include python keywords. - `#4691 `_ -- Improve typing annotations for ``web.Request``, ``aiohttp.ClientResponse`` and - ``multipart`` module. - `#4736 `_ -- Fix resolver task is not awaited when connector is cancelled - `#4795 `_ -- Fix a bug "Aiohttp doesn't return any error on invalid request methods" - `#4798 `_ -- Fix HEAD requests for static content. - `#4809 `_ -- Fix incorrect size calculation for memoryview - `#4890 `_ -- Add HTTPMove to _all__. - `#4897 `_ -- Fixed the type annotations in the ``tracing`` module. - `#4912 `_ -- Fix typing for multipart ``__aiter__``. - `#4931 `_ -- Fix for race condition on connections in BaseConnector that leads to exceeding the connection limit. - `#4936 `_ -- Add forced UTF-8 encoding for ``application/rdap+json`` responses. - `#4938 `_ -- Fix inconsistency between Python and C http request parsers in parsing pct-encoded URL. - `#4972 `_ -- Fix connection closing issue in HEAD request. - `#5012 `_ -- Fix type hint on BaseRunner.addresses (from ``List[str]`` to ``List[Any]``) - `#5086 `_ -- Make `web.run_app()` more responsive to Ctrl+C on Windows for Python < 3.8. It slightly - increases CPU load as a side effect. - `#5098 `_ - - -Improved Documentation ----------------------- - -- Fix example code in client quick-start - `#3376 `_ -- Updated the docs so there is no contradiction in ``ttl_dns_cache`` default value - `#3512 `_ -- Add 'Deploy with SSL' to docs. - `#4201 `_ -- Change typing of the secure argument on StreamResponse.set_cookie from ``Optional[str]`` to ``Optional[bool]`` - `#4204 `_ -- Changes ``ttl_dns_cache`` type from int to Optional[int]. - `#4270 `_ -- Simplify README hello word example and add a documentation page for people coming from requests. - `#4272 `_ -- Improve some code examples in the documentation involving websockets and starting a simple HTTP site with an AppRunner. - `#4285 `_ -- Fix typo in code example in Multipart docs - `#4312 `_ -- Fix code example in Multipart section. - `#4314 `_ -- Update contributing guide so new contributors read the most recent version of that guide. Update command used to create test coverage reporting. - `#4810 `_ -- Spelling: Change "canonize" to "canonicalize". - `#4986 `_ -- Add ``aiohttp-sse-client`` library to third party usage list. - `#5084 `_ - - -Misc ----- - -- `#2856 `_, `#4218 `_, `#4250 `_ - - ----- - - -3.6.3 (2020-10-12) -================== - -Bugfixes --------- - -- Pin yarl to ``<1.6.0`` to avoid buggy behavior that will be fixed by the next aiohttp - release. - -3.6.2 (2019-10-09) -================== - -Features --------- - -- Made exceptions pickleable. Also changed the repr of some exceptions. - `#4077 `_ -- Use ``Iterable`` type hint instead of ``Sequence`` for ``Application`` *middleware* - parameter. `#4125 `_ - - -Bugfixes --------- - -- Reset the ``sock_read`` timeout each time data is received for a - ``aiohttp.ClientResponse``. `#3808 - `_ -- Fix handling of expired cookies so they are not stored in CookieJar. - `#4063 `_ -- Fix misleading message in the string representation of ``ClientConnectorError``; - ``self.ssl == None`` means default SSL context, not SSL disabled `#4097 - `_ -- Don't clobber HTTP status when using FileResponse. - `#4106 `_ - - -Improved Documentation ----------------------- - -- Added minimal required logging configuration to logging documentation. - `#2469 `_ -- Update docs to reflect proxy support. - `#4100 `_ -- Fix typo in code example in testing docs. - `#4108 `_ - - -Misc ----- - -- `#4102 `_ - - ----- - - -3.6.1 (2019-09-19) -================== - -Features --------- - -- Compatibility with Python 3.8. - `#4056 `_ - - -Bugfixes --------- - -- correct some exception string format - `#4068 `_ -- Emit a warning when ``ssl.OP_NO_COMPRESSION`` is - unavailable because the runtime is built against - an outdated OpenSSL. - `#4052 `_ -- Update multidict requirement to >= 4.5 - `#4057 `_ - - -Improved Documentation ----------------------- - -- Provide pytest-aiohttp namespace for pytest fixtures in docs. - `#3723 `_ - - ----- - - -3.6.0 (2019-09-06) -================== - -Features --------- - -- Add support for Named Pipes (Site and Connector) under Windows. This feature requires - Proactor event loop to work. `#3629 - `_ -- Removed ``Transfer-Encoding: chunked`` header from websocket responses to be - compatible with more http proxy servers. `#3798 - `_ -- Accept non-GET request for starting websocket handshake on server side. - `#3980 `_ - - -Bugfixes --------- - -- Raise a ClientResponseError instead of an AssertionError for a blank - HTTP Reason Phrase. - `#3532 `_ -- Fix an issue where cookies would sometimes not be set during a redirect. - `#3576 `_ -- Change normalize_path_middleware to use 308 redirect instead of 301. - - This behavior should prevent clients from being unable to use PUT/POST - methods on endpoints that are redirected because of a trailing slash. - `#3579 `_ -- Drop the processed task from ``all_tasks()`` list early. It prevents logging about a - task with unhandled exception when the server is used in conjunction with - ``asyncio.run()``. `#3587 `_ -- ``Signal`` type annotation changed from ``Signal[Callable[['TraceConfig'], - Awaitable[None]]]`` to ``Signal[Callable[ClientSession, SimpleNamespace, ...]``. - `#3595 `_ -- Use sanitized URL as Location header in redirects - `#3614 `_ -- Improve typing annotations for multipart.py along with changes required - by mypy in files that references multipart.py. - `#3621 `_ -- Close session created inside ``aiohttp.request`` when unhandled exception occurs - `#3628 `_ -- Cleanup per-chunk data in generic data read. Memory leak fixed. - `#3631 `_ -- Use correct type for add_view and family - `#3633 `_ -- Fix _keepalive field in __slots__ of ``RequestHandler``. - `#3644 `_ -- Properly handle ConnectionResetError, to silence the "Cannot write to closing - transport" exception when clients disconnect uncleanly. - `#3648 `_ -- Suppress pytest warnings due to ``test_utils`` classes - `#3660 `_ -- Fix overshadowing of overlapped sub-application prefixes. - `#3701 `_ -- Fixed return type annotation for WSMessage.json() - `#3720 `_ -- Properly expose TooManyRedirects publicly as documented. - `#3818 `_ -- Fix missing brackets for IPv6 in proxy CONNECT request - `#3841 `_ -- Make the signature of ``aiohttp.test_utils.TestClient.request`` match - ``asyncio.ClientSession.request`` according to the docs `#3852 - `_ -- Use correct style for re-exported imports, makes mypy ``--strict`` mode happy. - `#3868 `_ -- Fixed type annotation for add_view method of UrlDispatcher to accept any subclass of - View `#3880 `_ -- Made cython HTTP parser set Reason-Phrase of the response to an empty string if it is - missing. `#3906 `_ -- Add URL to the string representation of ClientResponseError. - `#3959 `_ -- Accept ``istr`` keys in ``LooseHeaders`` type hints. - `#3976 `_ -- Fixed race conditions in _resolve_host caching and throttling when tracing is enabled. - `#4013 `_ -- For URLs like "unix://localhost/..." set Host HTTP header to "localhost" instead of - "localhost:None". `#4039 `_ - - -Improved Documentation ----------------------- - -- Modify documentation for Background Tasks to remove deprecated usage of event loop. - `#3526 `_ -- use ``if __name__ == '__main__':`` in server examples. - `#3775 `_ -- Update documentation reference to the default access logger. - `#3783 `_ -- Improve documentation for ``web.BaseRequest.path`` and ``web.BaseRequest.raw_path``. - `#3791 `_ -- Removed deprecation warning in tracing example docs - `#3964 `_ - - ----- - - -3.5.4 (2019-01-12) -================== - -Bugfixes --------- - -- Fix stream ``.read()`` / ``.readany()`` / ``.iter_any()`` which used to return a - partial content only in case of compressed content - `#3525 `_ - - -3.5.3 (2019-01-10) -================== - -Bugfixes --------- - -- Fix type stubs for ``aiohttp.web.run_app(access_log=True)`` and fix edge case of - ``access_log=True`` and the event loop being in debug mode. `#3504 - `_ -- Fix ``aiohttp.ClientTimeout`` type annotations to accept ``None`` for fields - `#3511 `_ -- Send custom per-request cookies even if session jar is empty - `#3515 `_ -- Restore Linux binary wheels publishing on PyPI - ----- - - -3.5.2 (2019-01-08) -================== - -Features --------- - -- ``FileResponse`` from ``web_fileresponse.py`` uses a ``ThreadPoolExecutor`` to work - with files asynchronously. I/O based payloads from ``payload.py`` uses a - ``ThreadPoolExecutor`` to work with I/O objects asynchronously. `#3313 - `_ -- Internal Server Errors in plain text if the browser does not support HTML. - `#3483 `_ - - -Bugfixes --------- - -- Preserve MultipartWriter parts headers on write. Refactor the way how - ``Payload.headers`` are handled. Payload instances now always have headers and - Content-Type defined. Fix Payload Content-Disposition header reset after initial - creation. `#3035 `_ -- Log suppressed exceptions in ``GunicornWebWorker``. - `#3464 `_ -- Remove wildcard imports. - `#3468 `_ -- Use the same task for app initialization and web server handling in gunicorn workers. - It allows to use Python3.7 context vars smoothly. - `#3471 `_ -- Fix handling of chunked+gzipped response when first chunk does not give uncompressed - data `#3477 `_ -- Replace ``collections.MutableMapping`` with ``collections.abc.MutableMapping`` to - avoid a deprecation warning. `#3480 - `_ -- ``Payload.size`` type annotation changed from ``Optional[float]`` to - ``Optional[int]``. `#3484 `_ -- Ignore done tasks when cancels pending activities on ``web.run_app`` finalization. - `#3497 `_ - - -Improved Documentation ----------------------- - -- Add documentation for ``aiohttp.web.HTTPException``. - `#3490 `_ - - -Misc ----- - -- `#3487 `_ - - ----- - - -3.5.1 (2018-12-24) -==================== - -- Fix a regression about ``ClientSession._requote_redirect_url`` modification in debug - mode. - -3.5.0 (2018-12-22) -==================== - -Features --------- - -- The library type annotations are checked in strict mode now. -- Add support for setting cookies for individual request (`#2387 - `_) -- Application.add_domain implementation (`#2809 - `_) -- The default ``app`` in the request returned by ``test_utils.make_mocked_request`` can - now have objects assigned to it and retrieved using the ``[]`` operator. (`#3174 - `_) -- Make ``request.url`` accessible when transport is closed. (`#3177 - `_) -- Add ``zlib_executor_size`` argument to ``Response`` constructor to allow compression - to run in a background executor to avoid blocking the main thread and potentially - triggering health check failures. (`#3205 - `_) -- Enable users to set ``ClientTimeout`` in ``aiohttp.request`` (`#3213 - `_) -- Don't raise a warning if ``NETRC`` environment variable is not set and ``~/.netrc`` - file doesn't exist. (`#3267 `_) -- Add default logging handler to web.run_app If the ``Application.debug``` flag is set - and the default logger ``aiohttp.access`` is used, access logs will now be output - using a *stderr* ``StreamHandler`` if no handlers are attached. Furthermore, if the - default logger has no log level set, the log level will be set to ``DEBUG``. (`#3324 - `_) -- Add method argument to ``session.ws_connect()``. Sometimes server API requires a - different HTTP method for WebSocket connection establishment. For example, ``Docker - exec`` needs POST. (`#3378 `_) -- Create a task per request handling. (`#3406 - `_) - - -Bugfixes --------- - -- Enable passing ``access_log_class`` via ``handler_args`` (`#3158 - `_) -- Return empty bytes with end-of-chunk marker in empty stream reader. (`#3186 - `_) -- Accept ``CIMultiDictProxy`` instances for ``headers`` argument in ``web.Response`` - constructor. (`#3207 `_) -- Don't uppercase HTTP method in parser (`#3233 - `_) -- Make method match regexp RFC-7230 compliant (`#3235 - `_) -- Add ``app.pre_frozen`` state to properly handle startup signals in - sub-applications. (`#3237 `_) -- Enhanced parsing and validation of helpers.BasicAuth.decode. (`#3239 - `_) -- Change imports from collections module in preparation for 3.8. (`#3258 - `_) -- Ensure Host header is added first to ClientRequest to better replicate browser (`#3265 - `_) -- Fix forward compatibility with Python 3.8: importing ABCs directly from the - collections module will not be supported anymore. (`#3273 - `_) -- Keep the query string by ``normalize_path_middleware``. (`#3278 - `_) -- Fix missing parameter ``raise_for_status`` for aiohttp.request() (`#3290 - `_) -- Bracket IPv6 addresses in the HOST header (`#3304 - `_) -- Fix default message for server ping and pong frames. (`#3308 - `_) -- Fix tests/test_connector.py typo and tests/autobahn/server.py duplicate loop - def. (`#3337 `_) -- Fix false-negative indicator end_of_HTTP_chunk in StreamReader.readchunk function - (`#3361 `_) -- Release HTTP response before raising status exception (`#3364 - `_) -- Fix task cancellation when ``sendfile()`` syscall is used by static file - handling. (`#3383 `_) -- Fix stack trace for ``asyncio.TimeoutError`` which was not logged, when it is caught - in the handler. (`#3414 `_) - - -Improved Documentation ----------------------- - -- Improve documentation of ``Application.make_handler`` parameters. (`#3152 - `_) -- Fix BaseRequest.raw_headers doc. (`#3215 - `_) -- Fix typo in TypeError exception reason in ``web.Application._handle`` (`#3229 - `_) -- Make server access log format placeholder %b documentation reflect - behavior and docstring. (`#3307 `_) - - -Deprecations and Removals -------------------------- - -- Deprecate modification of ``session.requote_redirect_url`` (`#2278 - `_) -- Deprecate ``stream.unread_data()`` (`#3260 - `_) -- Deprecated use of boolean in ``resp.enable_compression()`` (`#3318 - `_) -- Encourage creation of aiohttp public objects inside a coroutine (`#3331 - `_) -- Drop dead ``Connection.detach()`` and ``Connection.writer``. Both methods were broken - for more than 2 years. (`#3358 `_) -- Deprecate ``app.loop``, ``request.loop``, ``client.loop`` and ``connector.loop`` - properties. (`#3374 `_) -- Deprecate explicit debug argument. Use asyncio debug mode instead. (`#3381 - `_) -- Deprecate body parameter in HTTPException (and derived classes) constructor. (`#3385 - `_) -- Deprecate bare connector close, use ``async with connector:`` and ``await - connector.close()`` instead. (`#3417 - `_) -- Deprecate obsolete ``read_timeout`` and ``conn_timeout`` in ``ClientSession`` - constructor. (`#3438 `_) - - -Misc ----- - -- #3341, #3351 - diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp-3.7.4.post0.dist-info/RECORD b/IKEA_scraper/.venv/Lib/site-packages/aiohttp-3.7.4.post0.dist-info/RECORD deleted file mode 100644 index e3647230..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp-3.7.4.post0.dist-info/RECORD +++ /dev/null @@ -1,135 +0,0 @@ -aiohttp-3.7.4.post0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -aiohttp-3.7.4.post0.dist-info/LICENSE.txt,sha256=gAD9PvGacMFN9xr1XVlZnYpL_ucI6iguio_9zKsMv88,11522 -aiohttp-3.7.4.post0.dist-info/METADATA,sha256=ZF35_2WGQmQSkWbZ9iHwYLbq61rWAzpVTk0FNlVNy84,38836 -aiohttp-3.7.4.post0.dist-info/RECORD,, -aiohttp-3.7.4.post0.dist-info/WHEEL,sha256=jr7ubY0Lkz_yXH9FfFe9PTtLhGOsf62dZkNvTYrJINE,100 -aiohttp-3.7.4.post0.dist-info/top_level.txt,sha256=iv-JIaacmTl-hSho3QmphcKnbRRYx1st47yjz_178Ro,8 -aiohttp/.hash/_cparser.pxd.hash,sha256=IrReMM-DHmX3hUqt6ZkWbHjAmBEFqWvWTpe0X5gwSXo,108 -aiohttp/.hash/_find_header.pxd.hash,sha256=TxG5w4etbVd6sfm5JWbdf5PW6LnuXRQnlMoFBVGKN2E,112 -aiohttp/.hash/_frozenlist.pyx.hash,sha256=UBmgbFYXCyTd4DwRcYZY1SBqTU3_IUK2Rmlw56PvtnI,111 -aiohttp/.hash/_helpers.pyi.hash,sha256=D1pTrCkUaJ3by1XeGH_nE-amt7XdjfRHcm9oRtoGhHQ,108 -aiohttp/.hash/_helpers.pyx.hash,sha256=MA4zlNd5xukP4VDAbnoId0Azv8HxCpwLWie2gSMPLsw,108 -aiohttp/.hash/_http_parser.pyx.hash,sha256=LAHg2wAi0_2KUaH9DV1UJQr2jxgZVrHIJk2TIDro9bo,112 -aiohttp/.hash/_http_writer.pyx.hash,sha256=S68YR2hVoBRgQzI7YCAM1SnlUWr4fOSr16FkcS1-H1k,112 -aiohttp/.hash/_websocket.pyx.hash,sha256=8AcsJ5Tb8lZ9_QVXor_1Xbtl5igK1iP5rtEZZ0iA2AE,110 -aiohttp/.hash/frozenlist.pyi.hash,sha256=9Xim5smJMiLGey1D0-BUiLxHs1XaV2_aYKAv7eQ7M_4,110 -aiohttp/.hash/hdrs.py.hash,sha256=yDL4bbjH3uQidHSTCQkAArTdZgQgLidoaXB0HkaWhS0,103 -aiohttp/.hash/signals.pyi.hash,sha256=kHUKGkyP9XjurohZ39KYUw2W2FEmUuTDp7MCF9AZPus,107 -aiohttp/__init__.py,sha256=UmLziO7Qi_M22n8tfE4cL-qMCbN5ZodS3ADxSg5ri-M,7157 -aiohttp/__pycache__/__init__.cpython-39.pyc,, -aiohttp/__pycache__/abc.cpython-39.pyc,, -aiohttp/__pycache__/base_protocol.cpython-39.pyc,, -aiohttp/__pycache__/client.cpython-39.pyc,, -aiohttp/__pycache__/client_exceptions.cpython-39.pyc,, -aiohttp/__pycache__/client_proto.cpython-39.pyc,, -aiohttp/__pycache__/client_reqrep.cpython-39.pyc,, -aiohttp/__pycache__/client_ws.cpython-39.pyc,, -aiohttp/__pycache__/connector.cpython-39.pyc,, -aiohttp/__pycache__/cookiejar.cpython-39.pyc,, -aiohttp/__pycache__/formdata.cpython-39.pyc,, -aiohttp/__pycache__/frozenlist.cpython-39.pyc,, -aiohttp/__pycache__/hdrs.cpython-39.pyc,, -aiohttp/__pycache__/helpers.cpython-39.pyc,, -aiohttp/__pycache__/http.cpython-39.pyc,, -aiohttp/__pycache__/http_exceptions.cpython-39.pyc,, -aiohttp/__pycache__/http_parser.cpython-39.pyc,, -aiohttp/__pycache__/http_websocket.cpython-39.pyc,, -aiohttp/__pycache__/http_writer.cpython-39.pyc,, -aiohttp/__pycache__/locks.cpython-39.pyc,, -aiohttp/__pycache__/log.cpython-39.pyc,, -aiohttp/__pycache__/multipart.cpython-39.pyc,, -aiohttp/__pycache__/payload.cpython-39.pyc,, -aiohttp/__pycache__/payload_streamer.cpython-39.pyc,, -aiohttp/__pycache__/pytest_plugin.cpython-39.pyc,, -aiohttp/__pycache__/resolver.cpython-39.pyc,, -aiohttp/__pycache__/signals.cpython-39.pyc,, -aiohttp/__pycache__/streams.cpython-39.pyc,, -aiohttp/__pycache__/tcp_helpers.cpython-39.pyc,, -aiohttp/__pycache__/test_utils.cpython-39.pyc,, -aiohttp/__pycache__/tracing.cpython-39.pyc,, -aiohttp/__pycache__/typedefs.cpython-39.pyc,, -aiohttp/__pycache__/web.cpython-39.pyc,, -aiohttp/__pycache__/web_app.cpython-39.pyc,, -aiohttp/__pycache__/web_exceptions.cpython-39.pyc,, -aiohttp/__pycache__/web_fileresponse.cpython-39.pyc,, -aiohttp/__pycache__/web_log.cpython-39.pyc,, -aiohttp/__pycache__/web_middlewares.cpython-39.pyc,, -aiohttp/__pycache__/web_protocol.cpython-39.pyc,, -aiohttp/__pycache__/web_request.cpython-39.pyc,, -aiohttp/__pycache__/web_response.cpython-39.pyc,, -aiohttp/__pycache__/web_routedef.cpython-39.pyc,, -aiohttp/__pycache__/web_runner.cpython-39.pyc,, -aiohttp/__pycache__/web_server.cpython-39.pyc,, -aiohttp/__pycache__/web_urldispatcher.cpython-39.pyc,, -aiohttp/__pycache__/web_ws.cpython-39.pyc,, -aiohttp/__pycache__/worker.cpython-39.pyc,, -aiohttp/_cparser.pxd,sha256=xvsLl13ZXXyHGyb2Us7WsLncndQrxhyGB4KXnvbsRtQ,4099 -aiohttp/_find_header.c,sha256=-d1A3pkkpirVX5CDQaTSSTjdjXekmOjt-bqYcEQWbXc,197440 -aiohttp/_find_header.h,sha256=HistyxY7K3xEJ53Y5xEfwrDVDkfcV0zQ9mkzMgzi_jo,184 -aiohttp/_find_header.pxd,sha256=BFUSmxhemBtblqxzjzH3x03FfxaWlTyuAIOz8YZ5_nM,70 -aiohttp/_frozenlist.c,sha256=Ea69NSVskCydZGMWM-nZK7ejOITPd1_4RKima-Al9ng,294194 -aiohttp/_frozenlist.cp39-win_amd64.pyd,sha256=alY6TdwjPtXwH4Y11ZA2a1oHisc6KKgtg38kvsI90U8,64512 -aiohttp/_frozenlist.pyx,sha256=SB851KmtWpiJ2ZB05Tpo4855VkCyRtgMs843Wz8kFeg,2713 -aiohttp/_headers.pxi,sha256=1MhCe6Un_KI1tpO85HnDfzVO94BhcirLanAOys5FIHA,2090 -aiohttp/_helpers.c,sha256=JzeMvzUU5gUPfsUMoaeetvhME5i45bzOEC1bVUDAYn4,211990 -aiohttp/_helpers.cp39-win_amd64.pyd,sha256=OZ3-7povjGoTLC1NKJMfTGwPHROU3lSxgqZFfZFDpBg,48128 -aiohttp/_helpers.pyi,sha256=2Hd5IC0Zf4YTEJ412suyyhsh1kVyVDv5g4stgyo2Ksc,208 -aiohttp/_helpers.pyx,sha256=tgl7fZh0QMT6cjf4jSJ8iaO6DdQD3GON2-SH4N5_ETg,1084 -aiohttp/_http_parser.c,sha256=cxhXBsnSqgk8XgURzub_XFLbJSKJJO248-2vWvkT0wM,1011527 -aiohttp/_http_parser.cp39-win_amd64.pyd,sha256=Y2qSXrMcOn3jnLlJVhOxNXBgagZy0-aZy2mDKH4MAeM,235520 -aiohttp/_http_parser.pyx,sha256=g8BRhSJK1X8TP3_V1WwzH0-eEBzVL5EjfntlaLVFnhw,29897 -aiohttp/_http_writer.c,sha256=-xrk3WfKaYIGAwywdKrAQL1zYcVKV8L196WgulT04Cw,213022 -aiohttp/_http_writer.cp39-win_amd64.pyd,sha256=hOizfW_QFiYQ3rPB1Ih_cOZEeFAyHuqEb4YO_ChicEs,41984 -aiohttp/_http_writer.pyx,sha256=rBzbk-xrIWO2hD0kKo5ILKSKsW_U8Xf15IAPnqSH23Q,4351 -aiohttp/_websocket.c,sha256=t8Re9DbCbALSyrRrpnlXcSF39NxIebH4aYzysWDBQns,137429 -aiohttp/_websocket.cp39-win_amd64.pyd,sha256=0cRjtceoeO9TWKY7sOqehzEf4fQW92K9GLSIjBcMZH8,27648 -aiohttp/_websocket.pyx,sha256=o9J7yi9c2-jTBjE3dUkXxhDWKvRWJz5GZfyLsgJQa38,1617 -aiohttp/abc.py,sha256=m5MSBBYS0fs4Kb0yROJrqufmupgnRMeLoJOcVylt_gQ,5447 -aiohttp/base_protocol.py,sha256=BqQYyyTSwLjYtWe8pOCpvsjrlbovITd9rrZ5MMu8P8Q,2788 -aiohttp/client.py,sha256=SY6_RXgfbeHDb63bccs-03a0Jj5f5RCBl5qpnYbsD6I,45191 -aiohttp/client_exceptions.py,sha256=P0gmFGv4FAGiKeDCX6qtL_C-DlqsjwQ3HPI32oxFg34,8846 -aiohttp/client_proto.py,sha256=3U2TI6gfoTRIzWZpknV4jGqO-fUQ_hJM-tKKQHWkATQ,8414 -aiohttp/client_reqrep.py,sha256=1IlPotOVSIVqD_G2qALE1ChtB963nZICD8-CFqB00UY,37566 -aiohttp/client_ws.py,sha256=pBTFy5Ss8iECE_4Cq5m86VZpDFOEZhlVeCtc7SeMopo,10588 -aiohttp/connector.py,sha256=rMYFC4kaobHUSHmatR5GZyoJZ64R5uJx22QpGIWdOpA,44230 -aiohttp/cookiejar.py,sha256=LluB0A_imJ19d7phW6cVuQMyZVz_Rq4RZ1_N09L3_ws,12545 -aiohttp/formdata.py,sha256=akyeuVTAdPvtUpiFeX759uerv69PQB4mchq3ZOdTaNo,6250 -aiohttp/frozenlist.py,sha256=nJaNj0CP5QRHw7U8Fqq2bYzrLWlQhWqNN_XNvlWlHeY,1790 -aiohttp/frozenlist.pyi,sha256=kBG9J61ymCqiUvBkrjsRGVmfakmkzk6KHmZbdgRLCZY,1480 -aiohttp/hdrs.py,sha256=XyvcUDaIZe-HUoro_WggyLNWdyCcVDC2aciFer7bnpQ,3554 -aiohttp/helpers.py,sha256=LW6EL9AtwvGVAxPWPAL1pbIt3PMaOy9OJoW4TewRc-M,23698 -aiohttp/http.py,sha256=NKlSh1UEf-ZoYBYI0IoAUq0jy_-wKyJQ-aT0GjQCy7k,1896 -aiohttp/http_exceptions.py,sha256=rLwhCbFrOpQ_ntr3GnxaxD3oRnTTNM1utmDDBUbdVTU,2691 -aiohttp/http_parser.py,sha256=IleNVZ3FGYmk3hKXz1RGwCcsUl5oUjDbikuwMcoyZ-I,31682 -aiohttp/http_websocket.py,sha256=unIzhQEnAGpeXESvvtmP7k59EiTTmoG1_rd5BPoYrqk,25796 -aiohttp/http_writer.py,sha256=z2K59frCgLJGwKADU3q-VRgHLKLXNzq6MW1Geg9pea8,5523 -aiohttp/locks.py,sha256=-ySdj_OPys4s1LvpSeFRl6XHgmcpVGbrNtuoKsZ-lXQ,1265 -aiohttp/log.py,sha256=zYUTvXsMQ9Sz1yNN8kXwd5Qxu49a1FzjZ_wQqriEc8M,333 -aiohttp/multipart.py,sha256=P1erLT4m3Cj6j_6fO_dJhppntg4EocRRBGYCgptnCxc,33208 -aiohttp/payload.py,sha256=m6RIJyZXIumdRpvGGJovdjsVcL--6GybxjpUyjKXGo4,13781 -aiohttp/payload_streamer.py,sha256=avZCRjdpQU2t0HL5YeWs7JQaaUHe81YcyYxQzrECVLA,2176 -aiohttp/py.typed,sha256=3VVwXUAWVEVX7sDwyYDnW5ZdBC9_Z9AJAFfLCleUW0k,8 -aiohttp/pytest_plugin.py,sha256=rJ8PLNtR6UhMwfD-BeLMeHdNQSWUhEpVh3nhdsAHghQ,11389 -aiohttp/resolver.py,sha256=TyLUEe8QyxLCYy8jETJa-8MotQxmKfcEfg85wjv8_hs,4757 -aiohttp/signals.py,sha256=HdX5hKj-w-jIVrYTKADRzXZh-2x26CwF4UKSQy9zMsg,886 -aiohttp/signals.pyi,sha256=EnNobON7azFQ1fHSiklvbrvQfQUnOZPi3n_6pKEzXoM,331 -aiohttp/streams.py,sha256=ZEEnFyTIecfzeJGcsxpD7LXo4bS93IpeQvep5NAXQsA,21177 -aiohttp/tcp_helpers.py,sha256=jPHZyIHbIAqyWS0QShT_ZgKLMiDW7s_124IPc4irTU8,1000 -aiohttp/test_utils.py,sha256=UgC_8I0WVE0LgFtKKHfLIBceySkVE7oCatuyj5-dQeg,20929 -aiohttp/tracing.py,sha256=_oTwN_h8sj8seL0QfeTlWAaUhTe1yv8glc8Wutuitds,14805 -aiohttp/typedefs.py,sha256=Am4eWH_C4lE_m3pl3IlfuB-KpqkjStTRMYcoS8cJMC4,1420 -aiohttp/web.py,sha256=Zd6dGInVzbHlzIoYGwe86fdIFP3hDA_-FPevp_B356M,18462 -aiohttp/web_app.py,sha256=IKHRp1PrRHJQYI-km_dhxJlchc89gWfI19pmC5rTK-o,17605 -aiohttp/web_exceptions.py,sha256=ydzJJKwJWHOKzjzh0XtZNzZ5NCb0Me8DKmlKy2qvijw,10547 -aiohttp/web_fileresponse.py,sha256=rFpMfXUcbfVjQkVAt_xtA6tbgrUVj7BJQCGZHBBtNI8,9268 -aiohttp/web_log.py,sha256=B-gy5ixLtq6TVXvBzXuCLGf96GM4qeWjjNIiczVllLM,7706 -aiohttp/web_middlewares.py,sha256=fP2Fp113O5keX-h4VD4rJTQUM_5Si4vXu1m-1fFNIpU,4314 -aiohttp/web_protocol.py,sha256=6B0cUAuPTF6JTtRmLCKStqjdD8_rsKNKNeYeSOL5hD0,23918 -aiohttp/web_request.py,sha256=7U-Rizv5L_srCVVjQaG4Mer3kbyifTt2LAgOnzFfQ6A,27278 -aiohttp/web_response.py,sha256=8hzlkbHWHp7HXpVXV9jZF_Cq2aKl6X-0pkl_IfcZ7jg,26983 -aiohttp/web_routedef.py,sha256=7gnG-KLvQPLDXxGUJXwOC3_k2ufqFWMAP8qofprQ79c,6324 -aiohttp/web_runner.py,sha256=E4asEULIN8umMWCpmYhJ4eAH2SbjAStk0FMolhu-cZk,11575 -aiohttp/web_server.py,sha256=iKc9a4fQS14-3ivqzBiBp742m8vEexRZiSzeKTW7NCo,2120 -aiohttp/web_urldispatcher.py,sha256=ydsygCAoYnBvOL7qW4cspYKaTr0bEJjQVnUEQAZsb8g,40765 -aiohttp/web_ws.py,sha256=5edpQhp6h135RZaHkVTDNFbr_qU9lcZf6iUefmBXcmg,17264 -aiohttp/worker.py,sha256=YKvDyIcNrRROfhH-huN1EMoB31WbNnDTAh60Tu7hOxQ,8274 diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp-3.7.4.post0.dist-info/WHEEL b/IKEA_scraper/.venv/Lib/site-packages/aiohttp-3.7.4.post0.dist-info/WHEEL deleted file mode 100644 index d1267fcc..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp-3.7.4.post0.dist-info/WHEEL +++ /dev/null @@ -1,5 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.36.2) -Root-Is-Purelib: false -Tag: cp39-cp39-win_amd64 - diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp-3.7.4.post0.dist-info/top_level.txt b/IKEA_scraper/.venv/Lib/site-packages/aiohttp-3.7.4.post0.dist-info/top_level.txt deleted file mode 100644 index ee4ba4f3..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp-3.7.4.post0.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -aiohttp diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_cparser.pxd.hash b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_cparser.pxd.hash deleted file mode 100644 index 5d764977..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_cparser.pxd.hash +++ /dev/null @@ -1 +0,0 @@ -c6fb0b975dd95d7c871b26f652ced6b0b9dc9dd42bc61c860782979ef6ec46d4 *D:/a/aiohttp/aiohttp/aiohttp/_cparser.pxd diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_find_header.pxd.hash b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_find_header.pxd.hash deleted file mode 100644 index 8af9f81d..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_find_header.pxd.hash +++ /dev/null @@ -1 +0,0 @@ -0455129b185e981b5b96ac738f31f7c74dc57f1696953cae0083b3f18679fe73 *D:/a/aiohttp/aiohttp/aiohttp/_find_header.pxd diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_frozenlist.pyx.hash b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_frozenlist.pyx.hash deleted file mode 100644 index 01fdf2b1..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_frozenlist.pyx.hash +++ /dev/null @@ -1 +0,0 @@ -481f39d4a9ad5a9889d99074e53a68e3ce795640b246d80cb3ce375b3f2415e8 *D:/a/aiohttp/aiohttp/aiohttp/_frozenlist.pyx diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_helpers.pyi.hash b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_helpers.pyi.hash deleted file mode 100644 index 82a670d9..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_helpers.pyi.hash +++ /dev/null @@ -1 +0,0 @@ -d87779202d197f8613109e35dacbb2ca1b21d64572543bf9838b2d832a362ac7 *D:/a/aiohttp/aiohttp/aiohttp/_helpers.pyi diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_helpers.pyx.hash b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_helpers.pyx.hash deleted file mode 100644 index 251b846c..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_helpers.pyx.hash +++ /dev/null @@ -1 +0,0 @@ -b6097b7d987440c4fa7237f88d227c89a3ba0dd403dc638ddbe487e0de7f1138 *D:/a/aiohttp/aiohttp/aiohttp/_helpers.pyx diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_http_parser.pyx.hash b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_http_parser.pyx.hash deleted file mode 100644 index 5c431a9e..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_http_parser.pyx.hash +++ /dev/null @@ -1 +0,0 @@ -83c05185224ad57f133f7fd5d56c331f4f9e101cd52f91237e7b6568b5459e1c *D:/a/aiohttp/aiohttp/aiohttp/_http_parser.pyx diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_http_writer.pyx.hash b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_http_writer.pyx.hash deleted file mode 100644 index e2a14a87..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_http_writer.pyx.hash +++ /dev/null @@ -1 +0,0 @@ -ac1cdb93ec6b2163b6843d242a8e482ca48ab16fd4f177f5e4800f9ea487db74 *D:/a/aiohttp/aiohttp/aiohttp/_http_writer.pyx diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_websocket.pyx.hash b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_websocket.pyx.hash deleted file mode 100644 index 1a3346e3..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/_websocket.pyx.hash +++ /dev/null @@ -1 +0,0 @@ -a3d27bca2f5cdbe8d3063137754917c610d62af456273e4665fc8bb202506b7f *D:/a/aiohttp/aiohttp/aiohttp/_websocket.pyx diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/frozenlist.pyi.hash b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/frozenlist.pyi.hash deleted file mode 100644 index 918409f9..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/frozenlist.pyi.hash +++ /dev/null @@ -1 +0,0 @@ -9011bd27ad72982aa252f064ae3b1119599f6a49a4ce4e8a1e665b76044b0996 *D:/a/aiohttp/aiohttp/aiohttp/frozenlist.pyi diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/hdrs.py.hash b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/hdrs.py.hash deleted file mode 100644 index b69b16ad..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/hdrs.py.hash +++ /dev/null @@ -1 +0,0 @@ -5f2bdc50368865ef87528ae8fd6820c8b35677209c5430b669c8857abedb9e94 *D:/a/aiohttp/aiohttp/aiohttp/hdrs.py diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/signals.pyi.hash b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/signals.pyi.hash deleted file mode 100644 index fc136a64..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/.hash/signals.pyi.hash +++ /dev/null @@ -1 +0,0 @@ -1273686ce37b6b3150d5f1d28a496f6ebbd07d05273993e2de7ffaa4a1335e83 *D:/a/aiohttp/aiohttp/aiohttp/signals.pyi diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__init__.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__init__.py deleted file mode 100644 index 12c73f4a..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__init__.py +++ /dev/null @@ -1,217 +0,0 @@ -__version__ = "3.7.4.post0" - -from typing import Tuple - -from . import hdrs as hdrs -from .client import ( - BaseConnector as BaseConnector, - ClientConnectionError as ClientConnectionError, - ClientConnectorCertificateError as ClientConnectorCertificateError, - ClientConnectorError as ClientConnectorError, - ClientConnectorSSLError as ClientConnectorSSLError, - ClientError as ClientError, - ClientHttpProxyError as ClientHttpProxyError, - ClientOSError as ClientOSError, - ClientPayloadError as ClientPayloadError, - ClientProxyConnectionError as ClientProxyConnectionError, - ClientRequest as ClientRequest, - ClientResponse as ClientResponse, - ClientResponseError as ClientResponseError, - ClientSession as ClientSession, - ClientSSLError as ClientSSLError, - ClientTimeout as ClientTimeout, - ClientWebSocketResponse as ClientWebSocketResponse, - ContentTypeError as ContentTypeError, - Fingerprint as Fingerprint, - InvalidURL as InvalidURL, - NamedPipeConnector as NamedPipeConnector, - RequestInfo as RequestInfo, - ServerConnectionError as ServerConnectionError, - ServerDisconnectedError as ServerDisconnectedError, - ServerFingerprintMismatch as ServerFingerprintMismatch, - ServerTimeoutError as ServerTimeoutError, - TCPConnector as TCPConnector, - TooManyRedirects as TooManyRedirects, - UnixConnector as UnixConnector, - WSServerHandshakeError as WSServerHandshakeError, - request as request, -) -from .cookiejar import CookieJar as CookieJar, DummyCookieJar as DummyCookieJar -from .formdata import FormData as FormData -from .helpers import BasicAuth as BasicAuth, ChainMapProxy as ChainMapProxy -from .http import ( - HttpVersion as HttpVersion, - HttpVersion10 as HttpVersion10, - HttpVersion11 as HttpVersion11, - WebSocketError as WebSocketError, - WSCloseCode as WSCloseCode, - WSMessage as WSMessage, - WSMsgType as WSMsgType, -) -from .multipart import ( - BadContentDispositionHeader as BadContentDispositionHeader, - BadContentDispositionParam as BadContentDispositionParam, - BodyPartReader as BodyPartReader, - MultipartReader as MultipartReader, - MultipartWriter as MultipartWriter, - content_disposition_filename as content_disposition_filename, - parse_content_disposition as parse_content_disposition, -) -from .payload import ( - PAYLOAD_REGISTRY as PAYLOAD_REGISTRY, - AsyncIterablePayload as AsyncIterablePayload, - BufferedReaderPayload as BufferedReaderPayload, - BytesIOPayload as BytesIOPayload, - BytesPayload as BytesPayload, - IOBasePayload as IOBasePayload, - JsonPayload as JsonPayload, - Payload as Payload, - StringIOPayload as StringIOPayload, - StringPayload as StringPayload, - TextIOPayload as TextIOPayload, - get_payload as get_payload, - payload_type as payload_type, -) -from .payload_streamer import streamer as streamer -from .resolver import ( - AsyncResolver as AsyncResolver, - DefaultResolver as DefaultResolver, - ThreadedResolver as ThreadedResolver, -) -from .signals import Signal as Signal -from .streams import ( - EMPTY_PAYLOAD as EMPTY_PAYLOAD, - DataQueue as DataQueue, - EofStream as EofStream, - FlowControlDataQueue as FlowControlDataQueue, - StreamReader as StreamReader, -) -from .tracing import ( - TraceConfig as TraceConfig, - TraceConnectionCreateEndParams as TraceConnectionCreateEndParams, - TraceConnectionCreateStartParams as TraceConnectionCreateStartParams, - TraceConnectionQueuedEndParams as TraceConnectionQueuedEndParams, - TraceConnectionQueuedStartParams as TraceConnectionQueuedStartParams, - TraceConnectionReuseconnParams as TraceConnectionReuseconnParams, - TraceDnsCacheHitParams as TraceDnsCacheHitParams, - TraceDnsCacheMissParams as TraceDnsCacheMissParams, - TraceDnsResolveHostEndParams as TraceDnsResolveHostEndParams, - TraceDnsResolveHostStartParams as TraceDnsResolveHostStartParams, - TraceRequestChunkSentParams as TraceRequestChunkSentParams, - TraceRequestEndParams as TraceRequestEndParams, - TraceRequestExceptionParams as TraceRequestExceptionParams, - TraceRequestRedirectParams as TraceRequestRedirectParams, - TraceRequestStartParams as TraceRequestStartParams, - TraceResponseChunkReceivedParams as TraceResponseChunkReceivedParams, -) - -__all__: Tuple[str, ...] = ( - "hdrs", - # client - "BaseConnector", - "ClientConnectionError", - "ClientConnectorCertificateError", - "ClientConnectorError", - "ClientConnectorSSLError", - "ClientError", - "ClientHttpProxyError", - "ClientOSError", - "ClientPayloadError", - "ClientProxyConnectionError", - "ClientResponse", - "ClientRequest", - "ClientResponseError", - "ClientSSLError", - "ClientSession", - "ClientTimeout", - "ClientWebSocketResponse", - "ContentTypeError", - "Fingerprint", - "InvalidURL", - "RequestInfo", - "ServerConnectionError", - "ServerDisconnectedError", - "ServerFingerprintMismatch", - "ServerTimeoutError", - "TCPConnector", - "TooManyRedirects", - "UnixConnector", - "NamedPipeConnector", - "WSServerHandshakeError", - "request", - # cookiejar - "CookieJar", - "DummyCookieJar", - # formdata - "FormData", - # helpers - "BasicAuth", - "ChainMapProxy", - # http - "HttpVersion", - "HttpVersion10", - "HttpVersion11", - "WSMsgType", - "WSCloseCode", - "WSMessage", - "WebSocketError", - # multipart - "BadContentDispositionHeader", - "BadContentDispositionParam", - "BodyPartReader", - "MultipartReader", - "MultipartWriter", - "content_disposition_filename", - "parse_content_disposition", - # payload - "AsyncIterablePayload", - "BufferedReaderPayload", - "BytesIOPayload", - "BytesPayload", - "IOBasePayload", - "JsonPayload", - "PAYLOAD_REGISTRY", - "Payload", - "StringIOPayload", - "StringPayload", - "TextIOPayload", - "get_payload", - "payload_type", - # payload_streamer - "streamer", - # resolver - "AsyncResolver", - "DefaultResolver", - "ThreadedResolver", - # signals - "Signal", - "DataQueue", - "EMPTY_PAYLOAD", - "EofStream", - "FlowControlDataQueue", - "StreamReader", - # tracing - "TraceConfig", - "TraceConnectionCreateEndParams", - "TraceConnectionCreateStartParams", - "TraceConnectionQueuedEndParams", - "TraceConnectionQueuedStartParams", - "TraceConnectionReuseconnParams", - "TraceDnsCacheHitParams", - "TraceDnsCacheMissParams", - "TraceDnsResolveHostEndParams", - "TraceDnsResolveHostStartParams", - "TraceRequestChunkSentParams", - "TraceRequestEndParams", - "TraceRequestExceptionParams", - "TraceRequestRedirectParams", - "TraceRequestStartParams", - "TraceResponseChunkReceivedParams", -) - -try: - from .worker import GunicornUVLoopWebWorker, GunicornWebWorker - - __all__ += ("GunicornWebWorker", "GunicornUVLoopWebWorker") -except ImportError: # pragma: no cover - pass diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/__init__.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index 5fbff195ece63f3e6d71e1b2900bc28c64d7627e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3708 zcmb`JTUXmi631n8F~%1R7zmeyT$p4$NeCpFkPDLp%*`2Yu?-FtCyKDzSV1LuS~3&Q z^L&8)8vB*{arbFHz`pF$cC}<~CzCU0&zQsSsJgmK-CciGw~_t-ty3%wYF81_LQ#vzXV z(2og7U=os;f)u79jRP=%8OY!u4B`+B;V=wi7P2@3BRC49I0j>Q1+L&YjN=4M;3Q1q z6ine&xQf@{8cxGBUWe;=18(3=xQVym7S6zonnSPs9o~l9cn9t%J7#~6ImoH!KKlo} z3wQAz+*5YkzK^poix1!d&cPhc!#qBOhxiB{;bVBL`t;jB;uCm+3$TDs;VC|YXZReR z;|q9!i?FErBCTyzbl)Z)9u#G#ggS)V++S2x0EJ9H|57;FvLmBsA5BFgoD^S6A@J{(M_5lI_ zzK8c%g(`l45BL#2q7FKKf=_6GfroI2HK?HpCNf}HhdLg?5jLQK7FaUQAbe&~c5DvS zqvIO0&EZAuw<($Btc~b^gD$ucjeRyp7Bu)=(VT3z#+v_#wr@u?`a95^=$vMbmbBd1 zZ;3~<3$u@Bo37{2{XwG2MMO`z)wJ0kk-+M1nB2=vi`25=vApXztmeC1jO1;LIeyq+ zxy~x*vU&PKv&-|0`&Qkm89oa-WG{6HTE{N6mP(s}BM~?*jNS14<}P=?w1d`E&}F9- zm_vcNYqV|GFoU*7>Ju zWeb_x@rpc;GnqzAei`!>={OP~ZxuAFMc8 z&hLh?WtKB#*WEIlc9EGDmwNC-YR|F0oOKwjl!71|hGTjS<2YPjj0fACi;8&Ob&oCf z#^55o(n6Gp32iCCzBQNQis2j7Q3}thEw%iHNaY)b7!%{W19N(}qmBA^V!NqM(Z$-&?Yd9K+7_h}7!V zZuvkDcSpoYP;XnTC6m1B*5wT4YeaUZ$&7wmdB(#WNxJXJTa=~u;O@m zqt;*>R_D!Q7uw}F?}Y=VI*xEFH{_9UHlbj`GTb@u`RPom(P2T#H(JhdNoqL^J#yZ8 z7W2ZG)h{*Hq|FS+Oq?InsWYK3SVQ=-^RoyxUQSWfZZ(Y}t1;_DmQJ-TIpE#$SmQl} zUP6pOHz*z_&`pac2uVVUkS1gZ1B5}sFky(0C5#Y831fsSgb9MYuW5XWaFuY4Fip5l zxIq{v+$7v0%n-gK+$P*1d{4*`ejwZ>JRsaB%o6Sq<_PnIhlEFj$AljVPY6#5&j`;6 zF9?f-p9l+tmxNb@*Mud)G9gb`A*>SC2=1SdZwW<0iBKl& z5%vic!aKqN0SNC2Rl)~}SrOB9!?tx@9u8ycEyt?4+}YdTbls+`@fDXJ%Th7eahx{g zqWlxZ&?UBWzlemc%bG$bhpvlWS$t#x9k(uq=x5{uG_Qp}%< zMTy|AD&|xyB3@I6=4XSS=?41h^6)fety2nuScBP3xzIByiSC9xHZKcGDd10e^ts<`cq02i2^oV?yLLAKQ->ku?qj) zGM`tQ?JAd-Cl{+;t>LwkH{xifs&M M8_`Hc`qPpB0eDMY-v9sr diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/abc.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/abc.cpython-39.pyc deleted file mode 100644 index ef550fba96731580d237a07d22a119bdd89bb84b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8317 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 fbW}<@>eSLx`--mhSNoUy{eGv0x~?sq>RdJ diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/base_protocol.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/base_protocol.cpython-39.pyc deleted file mode 100644 index fa0aea6564e82dd0820e6de74f0a55c0f7e5e0fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2617 zcmbtW+inv_7@nD3uh)+490+IH(n_tc)KbI+YEg?gh_+NHAV8{WSz2v&25?yKZfC~O zMCOKY-6!CJT;@6Y7JJ$DhF9oSzkk-7#Azxny3zcef6m|cpAvVwZHDg;@9X$4^!_B} z;O9fRj%KbxNG5s82J|aZJ{AKp_68nj(vyDbj~jyqXWui~kilyv1I0FiZEw(&{2}W% z-(f#n>x(kHSJ+XW#cAm$v9a$s#{0Znut^bRxm0Pqnb6vUp9keSn)wYvu>qHCAS54n z%HL>6A-y+3`m*ub9|X{XH(WMl2(3BOTCxo-oM{WP1FbdFy0QnYjguBIvWSzGRMnUfkzFXE9^x?GBqJj+x@vNApT8f-tHWY* zh&RZ5JT%GEJWq$CXDW_NqT`}adU)}<%AODJj@E|;puQ;L5ZKEu_ z!%R}UD;$tAsQlM9PvyKao}#E}_7*7~||`mWfN1H&!5z^9x^I($M(YRWoPtaN9wfnZ!A3&vOn7P>!7re(; zfd5F#&MtpHc>VvtI}0BKUt4VU08J*-ACWju;wWSvW8xCpzmXkj*V)N^;n=QXiJZ3n z$a(i1_&gNLEZ-1QzAat~>rIh8wgqQXfgFPD0XKCPY-rk4He<7yC8NA-J*v}{ZeYS) z*7vHgb7mG+AF@%ocpwRmW2wHvMiW3V-k}&gH|M8^79(qU>eu8wfQC4%P6?C{;jY4* zAQ&R&81>92+O!>w| zuRcY+(-38sA{dWVuI$ycd`9zUNzD8194}NHzQr0t=?Uo)Q5L1NMGE zxYNGASle2>wO8NH(+m0)Mdj-L_yYx2TsR-dc&#MP5|yS(>JU#Wy9xZ)s_5|qg->ZB z;V@fuX??0vRHZdSMSN0ep?pUyty2Cw9Qm_~Ty5(wQ+3K>B+sa9N6|Q!la%_MDEeg* zr?Z(>6qz))CW`bYxT0LXv2IYO6MGxA(B4JK*Hn)5NfPHsP#)40vSpXNc|S@%r3tb_ zHF3N44oz80e@e(7R!@8Y diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/client.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/client.cpython-39.pyc deleted file mode 100644 index 668a9f0b5685d64eacff3aea20a80e2ad2c218da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28567 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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/client_exceptions.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/client_exceptions.cpython-39.pyc deleted file mode 100644 index 2aceabae18ac10abb880967188422d30b56aa53c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10265 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 V>*;5a-v{*jIGxOVdxU>;{|`by;!gko diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/client_ws.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/client_ws.cpython-39.pyc deleted file mode 100644 index 95ba31d5aa5da7ddeac8207ace0ef82aaa173167..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8911 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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/connector.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/connector.cpython-39.pyc deleted file mode 100644 index b1f82147b3ca94691e8b6f389eb2ea3db6a94884..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31215 zcmeHwdz4&9THk&2dwP0$Mx)Va^lHnJtd^zG!@IJrm5rp4WO;3mge0%my*5p&?;TB# z`Z20|N76Js#%mdNS=PH|!y6MuWDh|LAq0rS*^rZkB^W*ZLcEqJBuv(`tI1lbkdk<$ zI#f#+(h`qWhijQarZ!R-k#ww@t&J8&B_6Mi)ixA1NIX#;uWc-BtW6XqYMTn1YLkV@ z+UCOM+EihxwxzJ8wzaUewym(Ow!N^uwxh74mMi3H_Z9A|?JVq+`eyb1!u?LtNmX~% zb{BTn_7wIYKj{orAE@mu?3H-Bny>9E?5jOkc(As=u)lVoaG*9_n64cx9IPEG9I72I z9IhQH9Fela)rV^DD7-`Bnd&=hM+--54;LP;JyLi?@NnI*6i!Hdw0g33s&Go;W7V13>B4E#XpYHfo++Gh&n%oRoPExy zZ;cr46R(@gKWZBMb4)xtS2+8;QMV2m&W6I1?#9RArwdO@ ze4_eHZMHCL8c!I`CTH?h!Rx#IxDF6%0A< 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 Y8tVHO1c;1I?6Nb=;|)H~JiIOQ|9H!7%>V!Z diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/frozenlist.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/frozenlist.cpython-39.pyc deleted file mode 100644 index 340614a8d8b4e0ba6461a82fb8df4355801a5e42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2628 zcmbVOTW{Mo6ecNImM^(EZEn5HyQ0Q6ZvzJGg0v_Qq(gz$8JYsy1OtR3GKm{ma!5It z4R;Sq{zWmMee_?_Of8k>C zabfWgh7N%UB4|k3)T0!67P7YGS-@Mu4()c%%TXe&ABe~a=ZpwP(o^e{dX99we18oj z@}b*yyaJrc>1VRwIX{u8ViQ^H?NfrkUr5BhB*NV#wZdCKBsH2YJnbg_UMP3vaaTrx zgje%PocJM+m5{0x9lWL4$+^Z3-~Rdec4PPPPGdJf`N_wE#X}hSHz1ODR1l8|>RI9r zT5v`^Tjny|QEQPG?ium&q9BSeyP_n@Fc-v}n1{J27Q`aVC9xzbFqg%$xB>H=xG7d( zo)@cP4dw;0E;e9Z6t~1}n3n_t>+Yt-M=I{i=t)Z_Lzd?GzFDRYZzZy=8vz3)&mZJ* zY{Af<01d+I-sZYC5`L@@)CI1V}bw*Ydor13S*esApofYur-$2T88^+ z&L9nmnuE80?}+c4onBM3oryfI#(5FLgO@MXiMMGJIZ}G@}l6X_48qzdW|Sets^%FrGii<1i*e zW|9GU0VWM;V@QofFqPo7Q9dK{uuPpyi5tLc<3iS7n!w6-uOMAG7uC$1J96N2wS*`Y zBY`&xj6RU>4TcQrf)7{%8XB-!g(ko z&aX=)g)X><;3j2hzj7&-M(&+Ju?7>VW}v0a3uIBb@3%Wde!|)yk4KTxNwrPtBiy_N6 zrxj_b61V}dQKnWW)~St&KBc0<8|51qlc_)Hk?cEHG9d>dMn|l3Y??2~EBIFcGkwK` z^+yhFAiL3D-WBJlQ5vICjBiHeQN;&Os!`!(9ARq%M^ zx51NXk#lHPUG!=Sd3fCQ!_iKGa~;NshA%I`M^m?>Vz}0lo?1pN@XAoDNU$-gJ4moD z6_$yrBKZi($4Jm+s)l47Zo}avq_CNxWg6vO%VtHF(W2$zF9*MjGb?iz`aX&@YNd1` zh{I3@Nh^+Y-QNoonw}Q+yHSw9jjWXgYcGE&Lr`5SjDeB$%0KqTe)g6}cXEC7zXCh9 vSK1n%NK22~omeGV*S^Mx)ZNVd_yDhAjWI6MGAmn*R=%|v1Kx()yiETETeukt diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/hdrs.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/hdrs.cpython-39.pyc deleted file mode 100644 index 6346c59e1c2f009e168a73222339ee525496ab09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3625 zcmd6p-B#OH7RPNcHrN<2BqV7*O2125lcsIjCQZ{Q(y^@~BuA1loU)ddYMp=)3XRd5wt1J}R?*Z|kTb#MdR z0Iz}9!0X_3a1-1FZ-6(zo8V3G7I+JM4}1^24c-RtfOo*V;9c+@cn^FZd>`Bbx4;j; z55Nz>55bSXkHC+?kHJsCPry&XPr=W?&%n>Y&%teQ8@vzR2fqNn0KWvk1e;(J+yQsM z2jBznEAT7uA@~sd8vGjk2K)y67W@``1U>@41HS{m2fqh@0Dk}{l)9Q>CiC5%nJk#PAd;jk3DpJ(f6XjA2#>wH%$RyTQhcHIP`ySiUD(&7rFK@ zjPJZNB0KqCc=uRz;yYn{`<-*Oz&&=o`0k98yczi+Yvy;pH{;gX-_BVWP5iUdbN_g4 zI*-%Qh4eT{T{y>n0ynlJ*Z1POXb(1#|-z(xsLk{B8#hbCOak@Xw$}KaAo< z`4zMf4Nl?)zk--vxy)%At~Y>&U{ZaLWf44fyx$F6^}Ms`=;|(Gqoy!)Ut^|Xqg3QI zPo*qn!~E_^NpZbXx~Sx-S>|fY_7~FfSRb_94eaAHJ6`Vw{+o*?uOZhY(#hhDx3)=L zlZAA1w4yU)kOgr~XHkHOuObYt8Enw(v)>GVaLS@47Z;wZ>(kbKJj`4no6}}27Wo5z z7~h<>lQ+-`pAg24Y0oaZh}W-}9wudj1+TH2s)0RZwVX2vt)TGk5RS$b1<*=wbR3}1 zB=bF8j;p;8@_@KKlzQI|F6jKeYsa-d+7DFAC6HA5cHr@@u-5PQrxUk&kS7{dM#|&0 z%Z5}Ejmwtw=<4>bNyV}pe_&a3>Fj(MxsE%C0=&cvba9WE9ZOIT>2i9N^*g$hj(F3{ zLeTkWEj5nYUlyPBKw3>*X(P<$@@|;TMN7;A(!Q84swlK9h$88lbY)CS>2 zi7IN6thQ-xPz1Hz6WWB_?ZWz+XtTE(&6Y=m9Co6f3 zLe#d|p>HEJalC3Rk3fgS7P58H^3YrP5cOA$7SXMIsbqQLI_wf!7By{GCbT38c&=&^ z5+bYP`mRh>DM@yYlfN~33!0VYd z_!Y#|l8Iy)vMNGDFsYhKvWP_t$NSyDRZpFXuI>`jwFE`p$4o^)smMN0r7UH`Jf4;m zS=~j4%u}<>)tK$iK!+UbqukYn_MSl3ySjF8Xz?0yO(LCyZoIWk>WU7@wT=!+kU^r; znodj|6I&(**9;d4f*U-t+QU8gv#X-k z`+|Om7AXs~))!LQat)wG3cAYM0&kJinOmJ?8f8Y#>DpyOs)@#BOM3Qy6oM_RoqqjS zcAgxKE{^ancl@)XaB$-L!z1^U*;Y6R?9qq?M>}{mzCKdi-;VGjgEdF?;1s{w!Xw-D zPoik_;KT{SozX?I_!Mv1^C5dy#NESx;j6T;JXb1S`OME1XFh+H>Wjty&(Hq=CQ~Hm diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/helpers.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/helpers.cpython-39.pyc deleted file mode 100644 index 19fd0967337f7ef5a2b5e911cce3862e6b9821ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22940 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 UjjZ(s2L^Wxt(^=(4WEDWKl;Z-P5Y0Mj~@e* z`}mV@5CSdGLk;wF%|Q;=T$twu7`y-lT?_Jo5t_UR#WXI2C0>Sd8k=E-TVU}jRCx_* zybg8VfCis~x%7Q8Z1NVg_&m(>1z6yVu*jESi7&%4Z$q1}zzSc5RlWvmd>z))|CGWT z{3hJw8?eDU(BZe>7V>4d9aLU_#d0TKv*O=5_=f2x-=5q#`3~$rcQxC3i%ztCJEw|! zejJY{N2<_2i$nHSN8Z+z<$32!$Z<6BJWS_zlO*nnXvCyMu_HtzY*W>CnIE96>kG+* zs-&tcZc^N1FVC1vX0KZrCF5u!*^F!U{EL}t5BK(um};d|rkZiKrJ4iR+j(~2I*+_P z$8{e(c2sLdJ=uSJ&6&tOb$(Oz0XuY~(J4#PT28l=I#jaZ!EJjv8=wvCr|Pkh-7)YA!|-n6L+W{f_G1XpN8>tC{P;lp&T7YQ8*l* zGT)OUfwz!};pRD;oDZLk4~G(m@`uc1mdmm3#>1Q4VXCeEAuB)VhDCs4A YE?3p7dZ%=+)-DF7ZO}_1xPcMJhy%#15z8$=2;HtZLvicn zE;BQq^Zj9gFNuS?} z#WNB6eXWPS6mh5p_r+hkVyL4uQCqKI0jp(a-tWzWFwRPk6TErF=sC;k!QD?EjA9*q z9CbDH%lEO+Lz#AkQc<#hPs&twX^r`-4CM}n`V)k(It(_pIqNvw?zr6Pl(^d|bKGH+ zjvY}E-liq0_*>hw@T`37@(TA}lsm8|uO2gFUAI#&G_tMRX>b>(T$Z%k_}}+;cOUwK z;B3`uKCVaoRO;?X`@K~9GK>hWKbxie=aKIF-I3Di!0)D9yz38esBmBSVZ!~s2)U4| zSd89p=U`*7Vaw0w6mRlr#d-_V?&o{>I`y9jUx`HfQ396K5Yzxq z=*N-Le%kYgVI-B=P7*Ph)owYNOQ^C+u}xMfwrIK1!yH*9L4lB!rO+dpbm>#N91My9 z8{;m9`aZ-VSQ;_8e8>*1z&dmw*`W<-a|?E6*fC$1mNbjE+{{%X?w#50#F7n6Io;*k zd&7f032UZn^9cAvujYA=jZa@e1f z2A_8m;bF*3y3{pOdu`-fE@cAf=^L^;RJndrPMX!@|_RNVAojEwD zq+`hy5|>EO;pWhh$4IiD31?!;IHkwjs>|>z*$lt`xK0^=F;46CWyj3zV(!948_}iS zhd7^oxO>b*Nt8texyGUV^M%!8CciItye|+KohmHsWy>FhoOpYXXN6b)fV-S7;i3PT z_hR5oSnpa%jCh;o8UE;q?_wy*%bpGHY)Q|~@kGYCgP{ohd7jA2vt=Rx z*b9rx8<;97TeVxI*CU_7nz_{v@zHNEj7ELKWhbJm-|q^xlp!^Eb?BOqG%Tu6N2+&#T5qiB$L52gGuZkLv$X*0{v1rw&%vbdpiBJ} zV(MvS;n0uU+&OklVnU1bqS3)U5)-BVO188UC1N*CchY1(t2|DgCh7B}P1QKYi>wq! zgGgsfVOJwb2PztiJS&-OVD`+*KV=Yy5c~pyveH)!<;FIp#-UPkNM*-;S^1h#mO?Y& z^r$V!GgYZQUj77D8>CYBx*sO~*z=zpXrcU@EczCV5eU zkhe%|kucd~76eo!9$@6<9VvhPTh|$1nLG9@f!XqBv;v8f^4TymDa_QIcW9E?!H8M9 zBJ1y9D9YrXZGCIX%YP+3KgZd`f{O4@I0IjT=K9`I20;`&)jP^0iY~x15_L?2pa{Z8fg_^|b1+|*e2b#Quzejg(L7-Y0Ld}B(_4S~!_`Z)rpy#b}X34t6zX96y#?tH*CP=OxlP>&S3pse6qD$~Y^O;br* zPAh($ diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/http_parser.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/http_parser.cpython-39.pyc deleted file mode 100644 index fa551b823189538ca043091fc21c937dcdfca5dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15976 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

mO*H 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 W-9AGc34Z-J-II-H-c#OFF8&{r5yUkB diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/http_writer.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/http_writer.cpython-39.pyc deleted file mode 100644 index 3de91c1473ac2ffd04cb652e4d88193932707d4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4988 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 YzHDRu3R7m#MM4w0$r#;)TyF>e0!mt#xBvhE diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/log.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/log.cpython-39.pyc deleted file mode 100644 index 2134d445910800775293a1c220b6bffde2d85113..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 448 zcmYk3ziz@X5XNm1Ake0N9)qFj+^VWNGSDvFB1_2Fr(ngzk?n%W)3jq>iLsq{g-*Q$ zEI7-j-{(8|^T|9-#{}aidf=~=kl$9EM}*=9x0_;;L{d$10_2m*-WSb#9Ysh{M=?^| zQ6H(_(Ew@C(GY1U={uPud%TUjHCJ4jrT2Blg#hPHT4)88Z*D?eRUT}`^{K;wU4v~d zLdOOc&Fz_RMwH+u$!@4kQK+iejSBEHWUzU9@SC@#Rvzqvybf;RAU&7`IYzI*qm4V_ zH?c7e)uq3wd}Q^OSzbxAVoofL(M*-V=T2B&*I-$;hHA}bYQdcHa949t@&X(?&Tx-! Z%j)eed0H9yq2U>Shqy~jNpDQU`UgN}iIe~U diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/multipart.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/multipart.cpython-39.pyc deleted file mode 100644 index 3d22e3362f0366a82255ecf2dffd77dfefa6b1a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26137 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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/payload.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/payload.cpython-39.pyc deleted file mode 100644 index c10d9d5e0705d8b58740a9007159e617e8948500..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13180 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 y52uF@XFr!cls%A5WGAx6vjf?|>=cnEwUb0PcVQ diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/payload_streamer.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/payload_streamer.cpython-39.pyc deleted file mode 100644 index 5c471d550808f3279bedb2958e6e041979810df9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3245 zcmbtXTW{P%6rS;Iz0PiKExl2YRRmdA=|-&tf{0X!QUR5!fM`)AYbD3=%x2wqZ8PId zNVE?~snjR<1$}4{FZmt)7k-4N{sj;c=Ztr=+ax?Ot2v(QnKR${&Y2`^HXQ=x5B-bq zXPb~eu`^vv=&VDPuRt*36GoYqP@k%==4f3 zj_;_pmCW=Texu*?o6xWMvtJWtv-)$w>c^Tt2R(<)KyL|(0kl$gkSm31Lsw*dw;LyXb=7fP*If_e ztXC9yTNZ+ceJ*e?l!s~LGTv1y1Ibf3qIDqRf{W#9EQPgeTUpAzRonsPATD}tmh-fQ z>H}P`>@JC&B@eCbj+f!ms5eOW+%>n`hBH~~-tF6WKl4Uvl&T(Rs8&sH!>RBfj0?9i zrL8_KrOi{f!4;!&@fpsO9#1F0NbYVcYpW}6yGgvq-J%!E3Y`%W>S~fp37%-@nJijM zh}r7O3VwFtw4I6F6`WXFp1Q`^l*t!eur_tz1gf>A-e8vpIJe{}!~~c5!b^no7`elwQAhv7Pgqi^p^%k z=ySuba|im?OO4f-4gDDvP4#jvsE!Q|M40CgBU_$P8W=>S0T{^A+B>Mef)@jkM#hw7 z*w&$LLX|f`6yy~h(${oI0&S>))Q37qgOSJNgd&J0-d2|N(=ZiH*e7OD%z?nuB~Q9% zhEIri4`%=RfvtA(!;T13mi0R_>SbBd0Xl|(jH(NC+WS1+?>vfkIub(hP98>k;Vze* zQ4Ft)VIRZY&JRmF2;wv@g5V=KL|Pz-)u0wVx^@e zG&=$g2EiTZNoB%?CRdBR25!KV69lCb1pSN+AO{6yBM5#Rgh@3c&~kxZ6^MgCtpXWX z>VTNIid}d{hVMHGxCj}GuJDYlqfghz z3~^(4NO&%I6c(HlfV;*YCTa{IMWz|IG8Pkvo=)Exorwtl$uP!h@h!0SF zh+;xBMJYuyyxD*A3f+4bs>H1}y=g0lpW_qWZXK85fzy0q8e~768Ib)9M#0HudHL}u zIjh_^%FJ8h8tgn5(Wv(g>O~I?$t$4C>+|t@LQ5;y50e2GNU^B^Q4wpZoUx8-@WzB5 z-MGkv>e2Shv!JQKYr(!Ly_3NE7$)vRRjO@GVE-IE7y(%1=O8BVa2+2MfXH}3y6^`d zz|`;!Zo-%euvx4IuvssFH+~JEv&&{>_ZTxExmjI%!jf|lh>pXGiC(%O3UaK7cT6BT zYNOPsV`7|6iCSsO0lZBr`FKV}#@n!cLUMq;4#_YHr3`{ehEzMg!qY}*UwOys(|Gwm z9v7J5FLJg(M?IW6{L;IJD=K*QSs$xNn50=$QZ`3-i#TTcDd#Wa*(yDF(0YJ}sp!zI z=>kW*OJywxSQf#qMO=FeL}|ez4B4p4?a1pY8j%_*>6d!A6R9j;)<(~zsN*F5CxHsp xqf;daj7r5cb>5U|r@SofFRQ2KJ|-cF!DU>vDMYZ=p!1rc&(6&@ExKr0^j}E!&hr2O diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/pytest_plugin.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/pytest_plugin.cpython-39.pyc deleted file mode 100644 index 9dc9b069233e6ba5957171a009a5cdddfde037a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9533 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 O9FB4wv-r1ci~j};rA7k) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/resolver.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/resolver.cpython-39.pyc deleted file mode 100644 index 067c4479ae202df73b77d51c9b0a3db70ba95935..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3780 zcmai1Uz6NM5!XngKdaU4?b*b2CZSlU6nKl|;sgjd1jyNUwh!z*xN|U39VoJ9_HOsI z(t1W~=eD$Yh|LRCP(>BI`QcoZ2mG3cd;z}2Ji?Q|f>RaKJ=)#-V^e5rS~H{8sHcD3 zzn+a37JLJ)e_NO0f1ELl|KQ;G<-y9p{+Q1Ke=sRJ39OzYoFt}}G=cvIK4!Xp^A0uJ#k&&4f4d#Z8YXd0&c^0Qn38=J*YOdaqg@}`4i_1K{#|6&q@*)zWEbC>vQJUw&wxyc4_5_a^XEQyu zuqqF-WIkM6m_?FR&7SMirjC(mE>765`t&N zN_SL@1eYt7Lw=Lz>Ffh5TD8+Q6-BQpM{rQh67!fBu#fEuG}!=A7$tc?N+SYyY#UDq zye`mF%C1}wi%Fh#MF4Y846y{aXE)hU zEulk)DsL~BMHUaZqQhJi%IU^~UV0!FV3mY|m|b<~U~c^jnmhzi8hxWrN>ZAI*|$my zBxU3;_6FqBbz?$zjfq{-HRBIr$DUXdXW~Nhw4S|hihk)a2m;YB%tNR2;B6P0ciDJs z?wFI>#4l>4|A0))tO=TsgMR{T{lqNoLm$3dE6vg>@vSPt_A0xZ#=G*V1^uV!pC^v^2F_D-fp`VFQ@x?cA<~v%qP-v%QKfz?%9JDX zWSe|}YmCer8jcdwVy&7$F)^EM5Uq%07fT~7kBkFv3 zbA4;$%Jt3dTgS)S>s!B5Rxbkx5d4g(1}u3(`Dl#F?Yd~9&A5l-*5ikyvT;*Vkw|(mP1VVQEXoY9wleU8A?g;+_QYMNvMfW ztDpajK6mQlTnU~(4a z=U(`zR%t^TE@57v`=dztQ8dWeD8+sdMR!MWI(_0s5zCV(5;m*~zCwQK=tSkr~@jaZ!EeH%Rf#D@qP`r)eXa~B7-qzHH&`I2*M<`vU&U2GE zr15p|x_+9#gA>=Bd;bj6C%AWU#=YF-uI67lGWl_9N?5?ZtwFrcTiUTR;$G`)w}4^y zM?(o!PE(_zvDlT$*}sqXDqu8|P2GSF#Vs{frdml!vXt=+n|< zFz%7k`ked~+1V}}U@eKprGZaVBqyq^<@)|UWYKG$x&-BSTGcd>JP89dk)UT=F zh&Wzkd@R0m#{VY_#>>e0hsgQXV{^vyaPH|)0~pxqQ#|`jY+{VxDeMvs0}lX~eOs(y zpON!$8e-v*2Jw`z3YUURX*!yhhD8^ddxR-LK%bs`@9s;%h5^mys6h8-{Y>vn& z4_?w3Dl6rg_PcU7r&F~lk8&x#k1rw>hzls%AlkJGFl5jp&ngO-50%9~Nt88^yW$7< z_)Qe2phVDbLz74+hGmjvVBFV83mDjc3ENVDdi=^skf-65V4BP>1aS`JmoR`L45b^2 zaFdY<%_x9EHMr)X1+J!ZaP29$v=0Cti~(FY4g48z_E- z0)bSf5T|imh55VCe{K%{LV=|J_J)(hS;A9s5mZiF{5H(}4ce@vo;_*Dyq=yBcrXw@MDZgOKSqIN zQ@o4fCn(UEqe>}$io;7NPE|==AkkOF*~YaZ^d^K;leO<_jn3NMOhu(;Ya{~CE!S)siD3xz!Q_E zg|JZ(el-1ip=-7NsK7JwG0*DkMvhkA`_;+g7l@nuCJ3NuvTOz<(2)^X0r5?0H7_=Q F`(I=4U335d diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/signals.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/signals.cpython-39.pyc deleted file mode 100644 index ac998412422ebb78b7738c19a5bcc86ec5402cc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1303 zcmZ8h&2HQ_5GEz=THdUkHfV|>hk_}3r~rH0LoX@PAb|Um0)`KDPQn%hEpm4iOXP;+ z+VEz5sRQKJXGnlv@(z86+;vP(eT81y8A@s065x=dA!ojs`6#)wGa@kFruXDoO33f1 zTptXShcNx8AQVxwCJikpB`PVB?}{u@DDgia@vl*b9SxGVdVp8 z!{cghWL={1`hcKu_%C76q@aoviK5^vDcB1#qcKEQ4AejkpOa#!wp0e|)(gT&kwL(1 zhd$Q79av{qp)z{^M0%~bj{$krENk6p6J)5YnT$pp#$(G%Ym6=fm%Nm9eIm+%AEks#M?}d0x{ybD)O_vu_Cylbr)Rzlu>uGhW zrSPSbOYk?HoN045J*-Zqz6yGO31yOV?WeM`ix8Hdch&Nf<%JtU!1oa-MkaJb*EhRL zP2OQDDO&o0d%SW0(|-s;(U)XHo|EQB(;``0zxo&7(! zF}nfGH!%GdAOJ7%yMZctMSlkL-;kd^x=c6ehE`;g{7QeJKfr5w1U-9tOC^v|y1o~i zjzl~LzId)=kdb|L&7GbDWR0|Py42N~c0Eb({QBbqX^ah#Xxvz{-zD19c5;*_ZWlnc z;~!ThRE_@DIqPy33(zv4oo|Py=eQQxJOBSL3~5-uc=F;9ca2dk_3NWOTdJGqTim4c32qw2eow zQSp6adp!QDGRiWRj9E5_-;Z)u-0Iml>1u&3clc~t2oG-?yy648<~j!HIB>s1{s8G1 JnLAEc`Zs#eNx1+3 diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/streams.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/streams.cpython-39.pyc deleted file mode 100644 index 64eeada33bff566e58d88e8dde27c9af669cdf39..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18310 zcmbtcTWlQHd7j%|Nv>8DMUk{FW68SEk!ksUsjNuWC9)&aj>OvaM(KLFGo+SU?viJQ zmbsuB*HYp%ZCtcK+?(1`MUh5;+w`eG(Z0D4MbY;H^U#MDeK7i%6lmQh?)Uv?cJ{)h z>>w28?40{K|NZ~Z8C6C`@&^9?&3>-(x0em$-$yrX7Qp@R5dO1_dEN4sE%DlG3P z?N~0Bic*%Y?_3@&jhaTQh!HawaaU=VX}n=H_B)0@w*H}M@SoJ})^%?h4eNyAWlQ6J z-pk!GOMAXzczJK=w&4x=6SwTrB=W=F2=XI-+TSy2plk|d1#bt+cHFW`4TSn;sO2@rDDBY8c>Y{AIn?%{9@5VDd=$TiH z>8Vc$(b?%tlsj{yQVT2dbwA3Ut<>xCmida`@KvoEIhSfd7-e5w32V(pr5>f`)>hCm zGq=9tzg|(F00YLf84bT!3H;YoGi+9y^=UgQGCx;a_SM;DBlO=1qmjT5%l)*?M#q(8^J68!SUt9Cn{Alb#y?KKZt7g4ZYL(}z+;sOJmwy^hP(_VYu?BUQsZ!vM$Ty*nx#4Yf660ULDk(W}|aR z+I#iwMZyAaXxb2kEUdl_~F};kJMK0s(T+YiQmlYx!iguj|)*Drg zhnIlDO4wAh(^ixNg1qv=TB91Jl^?FDMwLrz|M8vASv&!meZ$-^%HX0a#yxX(+En{c zhGCq*uP;cZ13L8p>InE+qZXFS2RMX`ZMOCfSj|kkVQbHT+OL=AzH!e~`!PtBw9x+J zJ0Dpf0k?srDb6JeK^M3Eu2&|D%9YDtC0~`x2T|Kz)xH7qVpVa=o@u!cO1F>M{dpv< z(G6qMxNE!w*jzMjnvgr=juD#c$F$rDt@lhVZ#GQNyl$zdS+W5Rzh}+<7z2=q2}~i0 zX!J_hT#@ByWPyzDS+bSLQg8RenA>T9cgy9&7$GQdIMXsm&0#ZdW=+RzZMQYuYdWXK zIrSbU6HII-+@#vgj+X+}+Mdxx(V%(=%8bxG>AX$ZCm;hEW>Hh<=P!9XTI~>L2IEDk`Ss8bB4-|gdV6yH5}H1WCnnb- z$(3bQJUxFla;NbGFmMub^=;pw5C$=VY(cOjP+jJLh#`PQ5O-Q>(VX>j(nk|8EDaFw za5UaUwpvBLQhTS?7)%*N&{-~r!Z;*~%v%s5no=#{xF}1RUa!F}ID|(1;3ut|;s_kd zFk9~6={th&o)wvm!F)r3O8^Drve0v#ST~p0Q zb1iTweyN1q@LDBw*K2;=3tXX`z@-+iwS2cRlh3>H-)rmPwPxdyCuW{vCG zjjmMd&=;6-i#*weYNpNB-Jc6TusVS+zk`7U*dA;;AlMC>O(GiTb!&mE{HkAj+xLDE zG(zYSSW$-PsWjFH5p|RmaG~~M0;+WD!2Ljlw%db=l8MYEL~K?@Ad`PCICbcla7lm! zxBz9y2;M>akmh`l3a+iH@lJ^U-76_Qaav&;(I+Po{mS7{(I(R>9Xn@U55A_=& zM7^S374svq;eROFTk0eeS;Px`>*yGH6GihlDp)CsCTot`W0}#cV(AvqK+SQQO@9bf zcZ?Fc7bOQ~HVo}MmNrBD?4;pm{M=F=8o>5acOdP(%O7oZc;VzjVy z$Qy=E*nyr!^kd10S3t>5zlc$GKx@#CbV{TCu0@P1{cLX(<-5Ewl#ihmd+qkdk=yN$ zOKy)hf!v-rH|b3wHxajdz}t)5q(6oHK8&;9JAnKH-bsJTPovDeV|x#J2XCiJd*dF5 zyob zgMh-6Kb}D0aqkI~9!mN=={<$~L*A*R`cS;8`mn0s=w?vLTZo-wN0%#)58T?5M5bYS!pUV)>e%KOPl;d^?6+DBNs{r z+?8mZ=b!J0GZ{eC5Iex>1QXK9eLi7Ss;`-unIzxop}8^XGSlH3-#hl$iN~Lu{vx9U z^;)%SVm%6k+pz(?Wf2O{5{oz$((R9&db7C#_dUB3M+Kr(y|!En)tAvuktww9r}pF@ zbxA7zJ&WJqZ6w+)+_2yrnj5eH#vnY))`sI5YtWRTz3JRFZaNzdN>d(Nr6tXHY?lpl zoB6wZ80ME-oNOYG2*r)^jS9?+ zXsCRxwsXqirYS+G?OR_e7dh=ve6 zsY5h_Sb`|!F#v)N^J@zWn5_`Ml$#3+2%bbv8DR-jGkPP7LAIUAcSTy#WsQ&m+m~T6 z)aMaN2&Plo4mrb(zR0A5n2yvFf%hP4m+%A!kr>&unHK*qi(maOpS&^O+TFt&ZU1|# z;n_yHp!>TRnx4UuxoF-*G++r%(T2Hcd-6UGlgebhqfSVv73Wi)ece{CNg2psDTN2p zF=?Ms3sT4OOj4Rv8&aA^X;zmq%(0ob zB+;vsZULJIuC*=SL>A^D3`V3c^R9F(hTb~JoPnX)OjXi@X-NKb8O%& zHERvnC9Y&@4Va<5m|)aH`74Mo+(wgtF0}zvq~YukC3$l^elKoCg6_AyZ8D6p01ZAc zwmYVOXQ7ACqJKf-BzDTCHgO7%2fvG^ZAaix4>b&KzhzkzCPEhJcv>JO>VMei%SUFXp%KdSC>UcX2 zMNTD8zKNO>Mq?Q5oy`>aiP3S1M}0bZz8(LiN&{25?FCGyg)I=>ZMRSiH>tOn5J;+o zr0v-(vY?MO(#-}1+z(I{5H19V1(p~#N3GVb9x&*ZJv2v*=kUmO$y^jWWnl&gBSeLP z>xTrJW(Z7sMvQAaseLh~gzj4Bobiq0H!T3oih*_!KufJdvG8A*-pqI+$N;p9C-4Z+ zvZON6L-y>Pg4}^L(n3QhWCR65AsQ|e%w4dmvUyB8KHej%I^Pef?1Jxm1lEtxAYgP2 z!0Mx%yp`{OuUDYAd-nj43_E~n;R+tnE{;2=)?iR9xbD&R07u;$Fn~w`@Mgi;A{Y;0 zp#BA?YXO)052(^or5~fZe)|QHmPo)&lBGFJ0dKZm=vx>)P_1j}WBSW0AzZ44x7~Uz zz1~;3-hqp*zzk?E{NuKZ*7aK!O|JWxoh~BbqE(*6z=hN72_{}P5aES>+_c5GF*2`-RQGx7sY?{R5K}q{K zCW6yU3c684fMcG{`EnCs3kp9Cag;#x2Y%olJM_fkPoJ1pgbG5#`5=UmR)-l`pA|C{ zMg=gT8dw5?kbH|q&&9LATzo@UDJm=_Bq=6`UH2R6t0;@|+W4sZ3n7lDfX;HYxyD1c z*xpcU?Aa$%hq^ZQFQ^abHXD{>T9##6|CdfXAcV9z1yMUH#{#X19zomH9qNoT;6w*j zaIfXhF`f7kqWCs4KpDi^%aFsjOde^yod{{wVj_U2 zqKbyXW{A^FF(0*J7qKk{-#IqeAyyNxSzf8E1-=)J$Zxy!o};zDVC9<}o5H*wKe=RS z|B2ez9xMPqj>SWo(L|y4@Nbrz6+gxaK!HtVOY3sgq~c0ZkA3>JoSNE|O^YGRP7hJ60CYJ z+K244TBxZY{NywIY0;6^;QbahAutwOsza5rxe(ba&0rvzO>ik)-fA*a3K~E0LIl|P zF)N>ja+B)0=`t8PnvdHnQSkBV7Y7C+w(TeYOP+_WZqGAIcTZ|6TiH-pv!+2|5 z0^l9>7SrFJf?lz@b)*BCa|_yLb?Gr9m^&c`8Ld~-Xuw?SZppD?ZE9$3iW92V#lrz) zy*6Gz-nBZy*NrA@2<29r3P_T`O^42@7>P2TEz}y-<}x#sDsaTbt`qc7E31IXFC%Fi za^GdaAOVmPhyM`KK+$caXtWU#p!-x2Z$!hx*09yW$uIbA`LcwOW~5sWxieBpA^b6( z;BSx!S<~z-^6foy5vR|dc@tWi0#$v4Qd50^w-4}UAqXQ{d=li2FpF~+N3MH}o6xlo z&MEc!Mry;EAd95#nm3`V;TfdGgSVik(-hahSxU7$ifdqRDFdPGhFLE|%&xj9$*B)l zKf-)_F=pP&-c2l?)xBPBbBHPc43yXEa_+}8M)Qg`y?P(Xg;w!WjFGU}bnDH=qI!ar zN0300i&rV~n<_MN7I4u6F&fe9jiy*N!e*LxMA}oBNBP$)^|e@7iT(PU9Q5lPG$SG$ zfiTQl$}ufd`IYh@ld_M~s>N$jS_gAVsao|KT)+WJSXTKgG5jzF6?dNk9wOcm*MHm^ z7cYk;2mwIkTd0B0(`&SIBV2+2Lp_O+dM;$N^{=4+Bh&)ml>7<$iC%R9sTEuZA<=jm zcMGWAgO+6?-|-xv>_V7Yl6xaw=6m#p&0yBc!jwbn>xQ}wA_8(ZGs)pENGWKnwl*x7 zXEq69wIpE}$V)K*t>Di%GgBZv*M;=kDCt7_2G%UnPEh_y3fb2AS8%(ihVu=#Qmy&{ zPDz?>HygB_P}o`_qO!|~>4Y@X5P9L<5+793T$!0m%rV?J0r!$%)YC}XR3m67=|mYs zH!5MMl&prfa+HaUHuX#FM%zG$Ly=5ih;`A|bgc59VoiD;hkMr%1eD)Cy)U!B-a`@@ zXnT->SY|)fc3Cz>BON8Yu8|TqcxU(S_0bL4r2WTt%32|UXYm5iZy|zUMu-5Z_W0Y9 zausr7)1f;HF0^O$e#v=|Zyo09u*ip~8l>K(m!Sp~aLHno119QWyiHy$V)qY^ldV+IeA-7YmdJ>$Lst4SXg zz-b6^S1dpvI0^at&>|kS2pkTYkORhGRYgwnd>oXw@2;`Sf}9Rw(quR+g&wdNy3k;_ zo43+z;P4zw!*Vp0;}7@Z+}vyN3C3|(6yA+m0H)!|Y%*A-extG;xEF9f?RO3-v}{Hc zhdeYl*E)aYdTnKeTj&~;6L|;~VBUBwjbIJVxSXK)>sV7f`#c;NucFqqd{;9VQ$30V zr+q?jv?*!StcVAsgy6`N>ibMY){{uI5l?<>yF%Y#DfOvNBnHlbe~VP<;>F0ox`d?V zJt#`yF|yfb=~UW;;bS{ipRr9Q7v<3-aw($t2)C`^MX0q)L>LlO?C>CDgQlc&3$6ATcX!!T`wW31OZ^@bMkAxlN(H_$4E$agMneRI|4yYE z*4IBGEXUEhtpkIiFFoF@Hmow7$R?~V@w&m4UUC~QfgaK zJB@$>Y`N!RlUti{;-~c3aNF8$Gi~8U3l0H~CKT+q@T!UJIlc{oL0MZAe@7UQB5Aj! zE!u0a+nfP=k3012J&k^pcCz<>#f$9SoD>ziWP(PhbZvDJ0ZR*XVNXE5ftD`9z5@M_ zP8dz0~0iM8m_Qo5uakAV}O zf_3-z8z~R#L+=!f0pt+=l=$%KpP-CJL>A={e&LGiU+s!-Fj@nhBGf86WmxmCggZ!% zpt&ZfbRksYjeiwI+Ufa2zMW@sj>)ehi3+@Tj7z(uDhMCMo?X_Fic7=dJjJIO>UUVa zCgt4+b$v)x6eIscWIlu!eIhdfaxRLAHf(0?Jp6HZ!?tP?tPP4AIqc;_bAa zb;;i@OjCEc$$KF<^mchMMii3+ER&x8+k*kdQT1yTeQ1CLOzS1%j=XQ8ST-6vxKi2K^Mv)uw4&zG5 z4wQ}EvE?#Ls#Np~(n4Qm+36kecc5enbMXpG3Rhxu{XTC$M%d+#VT8P_h~pmcT$Juk z`tVANgHJkiAAO}|kA#trMmx{*u%MeJw;pzrD*1@GCPyb>d5yb6DC)wZAn+}e{TJDQ zdJcCgAJ{U_49+n17ZtOrf;K&JgT3xEW!v1DN3;H!Nxc8vHS>Y3Gxr=Os)a$5GiW3G zJ&u>o(P3jRPQi@zBRm7cDHx4$Q3LUZGd!-ih7O2+Ea9i?aO*m=9ZDA%k-7etE9GRo zp3Wn`*2LEJ4mkBAaP9-3f$jU0CBP_eloB{CX!TTz9L>iSWt{1(`OQqOe8`y(gsj}#AFause<=* z&A)H(ZewR>AaKuO2+cLUNF20XD*FSUKV9r5^w~fY{lb@SOzzjo}%^GmcWlmQ_4Ge~G#A*C=kA z8~k9;cb0Gku6CfioElU1at8>68K_*Ic;X(hOIvWLxd&T)F}8P7^`!8c89mu zFJe60nuU46Z!c4&oyf5Vzq#c7+M?w6wWT&DcpsPbQ{DqKB;aLj!Wj&#YzF@r7QqETL_%)h)Cb=n@cfvUK=I+BrA}jFE4qBa+N{dNO9PN6!(uAwha-{y30H+Op1qfLCf5%+z!xzk;|NDj){0yukdY_ z3C;Yr32~YQ9c+tYeo*RxXwnyNi_smkeJ!_In;EJ{{PpBqm8!(aB^G|k7QtV9fdFr_k&(XP;qQ5a*-EJ-_ z>SqSebsq&SFznw?dAm8@LdEl4bL{HuC$ToS8k;tH@sYV^@FGN~36McnD>?amSQ8?g z)A-Juh+P^e2!VeMKbqWx@I*FwEbF5#R=mJPCe$S!4Q`+A=`6R`M5U@xzlNm8grG9u zBkMkm7YT>8Ab`YPSc0qrzDS}=dz#l^<20Rv?Tu$3^b*%$(yNk_vN1@HqKHmFR zN!#~Tu9E!Nxii+y&;xB>(gjcAKE@N!T_s-yuM@VCT53GL)Fd~$DW+Nsv3DKAHV*RU z+)^43g6->b+IP^D^d63F`N=&;#l>C*r*Mbvs&x~`m4eOOh9$u%Ts{Rgl#oazYDgb;-WJ7==A38KPTeh$DpYZ48OhWVL0&UP2Sm zMD|{M9Z#&#Z?e7*`E>8!AXsVN8WL6J-Krwu${+#|LIMAHx|g+Dg${KOG}}lGLdt_h zCNJ=aNjOlFJ%rlpTnI;jzu855$@j`_<6^wus*sQhA*BAC3B|vTtK8$;V@&AK=*Y() z6J$4Q$p|`DB0PGH?Gl8C{7%I~vT<Fqnt`^Ey!e!SG}VSMmD;^*)Qyya!?*ixSLa<@lHc~}zpJEoM- zniwt(y$^X(8iqbCs4)!RS{(Gh5kQwS28rVtoM*_@AHKRc(ePD$ow^@kCLGwu-&4IL z-@R3Eu`IwX0{Q<3lqN|)u@cl!jhcMb-i8fM!VHZH*t$l-l)G-gZ_N}s;yJ+tyIDrgz!+I%V z(&*9mZM3Y;sK4a!x0#5M^H+T1&Lm!}-s9UxOn$_qvk~^#NH&6F3*58XKX4<7=vD{O zXN%Fn*u^b8LXWM-^)}jv0>5U*-s5hd2^+v834Y#Ys<+z3X>K5I1K;z8{cMaO? zT`WTjhrZ3S$9vrDC|($7DKeD(Q_I5pXW01Uz>QN#wME9rK#@T~r3FQw@aV_`P92TJ z-&9cc;xmYj43%|?JRrL@xkMTTkO!%(Y5lC2ok$BKP9M}xotUsUIAl6p=jo&V9|=fI ziqxbi9dtA}!#5(QG%}9}Z}J(CM2$+_&Bo!yZA(^$T!M9*;W@M63UFS zC-r|ua*B*2tdT|JJZnB=4MVF8BLZB6o*A{AY}PJ1V>=6l!oK1+4gT9#d^By3z4ZS( CCtTwI diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/tcp_helpers.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/tcp_helpers.cpython-39.pyc deleted file mode 100644 index 92bce26f29000dcab01b599405bd28151f7db039..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1133 zcmY*YQE$^Q5RRQRP1AOa36OZJ5E4{^0WU}(gqTJV)2gu^@_<*qdBZT< zx@HSkHnfN;_*KtbUgLG}t8v5RBxNSwlhQIZ`>8){+DL*_MKu z%4qk{>xZLmz~WDjzZ~WB5k$@9WTfM3fq4~U=E0a2s}|FNjgPPO;Q9}=qs@a z9>pcMLD9&fLz?a?ozje@Q=tN|#l;Tp!f*j-ES^xHTyaeo6u5TO9ei{_kFWSXq%)!( zq1BWYWC>L*5wlf?ZLMMJ==WdX#Ny(!tXPnNQicdQZ%co z3ISOEkWG?wzA8_7=UuedX$@?!R-Rk$0N7WUge`abEv2MVHC$Eqdc6qy2;7h;+-=rvIf}T9qsW$-o@a3) z*9`=IzM1DqcBGJ6JjBuz4~>~-#wc4E{A>QARtk$%JaH|kB0P-62CpWP aPgC(4`#^7jfS{mRYNSRzH>9_ME$=Vpv;W=z diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/test_utils.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/test_utils.cpython-39.pyc deleted file mode 100644 index fce0f700b5afcb570260f6198e645322aad21154..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21124 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

ViosB|ugWV(a4+V`90g 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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/tracing.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/tracing.cpython-39.pyc deleted file mode 100644 index b9108f129f046034ae957f9cbbca007a11e19e41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14274 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 Tcp-2Nf%h&QeDume=3oC09qK(5 diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/typedefs.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/typedefs.cpython-39.pyc deleted file mode 100644 index afa2aaf2b0b29706ff4aedec32bf1226a01bde53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1318 zcmZWpTXWk)6xQlu$#us&Si3W=++&NVx1&Pv|7)uoT5DN z3wY??;DsNwkMNYgzysy%Drr1aJ38ll=cYZEQCP26EPVcQz72o(EbDI#79StMkNC>B z#IhnQB8f!{PADm{GC zHM+(g&bLZEYOBicaJK~ys6A$pea?ZA@8 zg%7O2eG~ZwRPe0By0%3{#Fxf<*+hSZu^o*gKMHh&(RLxgs1Nk`?MLX_g-4NZvVRTE z**8)7+ z&<~R&JW4~s{LgK_OXQSO=Ksj|6L{tQh?e54$iOI6BpU5l_WQ0NrG)dct05;~dC z+baSjxPiL32#XVCt<+mDs+!a^sUx9o9*RUXP*h$tXERCLgW*q44@U=+7yCQgli_xM zXE5ATUc$rZ|Hi?vFgjQstxXmhNS79o=^3p|-ZzmpZ{?z)wbLw{^`@qUQZ)7bTINzm zc?MFIH4B9Zb5&u$xX3SJctibXsE*~Ss_M%Q(sk@Xd`J z>}O&}-~egc_!RS#*UKX5-9_!qGRf=G&2?zJW$cThIRZV-LeNE?0b5u3E% RxsHt-&%gFN*RPR={U4=$Ymfi{ diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web.cpython-39.pyc deleted file mode 100644 index 706b4f1eb75d01b65ac2ca4c4dbd69f302299694..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9787 zcmeHMS#TWJb?xrySuq$47J`c?azriUNF+oprX`A^1#yK0f-n|RdZIjPOg{h(^y?nJ z?jbPafh3#sZp!o)%NA_|S)3@9%13^(SE}NVq$>GK%5n9FE0y>os!CPjN5_MO+Xzo*L9zX4R9!#B8OYMQOt zx~sAHS7*Aa8_ZC@36{XG;hG}Jk~)n^xG9llX;n7ejL5RADkt5X=wUq~&+?*|^`o#bn5QA(`46z}MPuXdAhZttVs+@6mid}4%Dreo@Vh`J+$~pHQv6t-? z_p*Ccy~o`r_Otz>#7g2mcAq%F4v72N{o(=kfOwESC>~-DiG%E*IK&Q#GAoOR*~8)y z_J}yl4vQn~h!|lb;!*afILeNS$Jk@yarU@)f;}OgWKW9svG<8%?3j2zd%t*!JtdxI zPmAO1xOj#=BTldr;#u~rILS_m53mo2=h$;%l#Pn#+4JHQJ0(uD)8Y&}BhIq3;v73C z&a?AkjE#vG*bCxC_M#YPr(F0o7E zGP|tSns;9kFSD0bxz}al750iM7u+l2Rrad*5c`m-_qi4E8hcGx%o1~KPPG-?s<4?Y zIOAfT&8xP4cR?(&Md2_;nm_1%ShQG6tg$umI(uEb!QK#WvNy#?*hj=i*+<27c3s?H zH`Lf6_haJY?BlAu!~KN#B>SZJ6#JC;H2bvp4Ev1uEc>ju$!?0b*jwUr>~rE4yCpu) zKCi|PyI&ArWM33tVqX$pW?x3zPWDU9A~bTB`xWsvdt28oYu+wX<6pgHG`_EE^x-}1 z?UyyrII8gi|JrViy<_X`&u&}ix9vUr75>W7*ZCg%9@W10c7YG_y*$tN?$+jw-5M{V z{x$v%l~wH<3PB4!#uAPACQ5JPx7WTG_zgb5hw=M0wCYRiC~cs$fnSAq%D&r0d%s<} zkz&8h`|bPCqb>ak+7H}L*!SBH+%Va%wt3X;|648}v>yVOzsCDWcHrsYZNolfm%-t; z_^;a!FB`W^ImN%l6HC8=6Rm#?(zvc;XY^^U{K$J`aVE-oR2Y>Db-}%G(vks}XvvI) zTv~H3N4eJ#HD87m;oEgIgXh-e|v?;d?aNm(ZusxyHx5c^^+wV(pIyDCMZd>ZbM!jGtKr2^*ZN?MA~E z38FS8z!@nuMs%iJ@NH+_K|_kjUR;jF4XqCy%kA)_mNscMXl|EpwY^;dOz~JsvCt+V zFyFHsVz|BSyNLeQ_AVi{;z{YRHhzwT6tA5JkY?>BTJ7C91Br%>8Q&kbB(_}UJ zmd)i^hr4#r9k6f9+$qaj;1J9-Bpb{->gX!lNeBF&t&I~6bW64Hm<*|n0;TJ3q zjq0cdF%uvbt4k9*saCj!JWka(U$ERMZUw#<#7Ab&ER1 z*i%bcDWw3jwFL=*(v#JpQHz}oxZ1jSPcB)~u{<20z@Oj?K6EI=Ay8-Z5|;t?j-=h8 z4=a{G3!5;-gBlnk%bMS2@{A}aU=LgvDaoVV9-RT#Y4S?V3KuJzUFAeH0QGcz%Z}&A zC%w=X(s|1R4H*r#>+PXx5T^D#Zv|>qWcsqikW!f_-5y>xqu%xgpTcRu#%DSlM}_GS zc2IQdy-N^rMRpcch>9IsJ_WnQPxE<9?v#2}X@+)yIEi| zQQB8lHHeZ}e04E0Yd+Xb)L;#hk|;*0K+TWLYYty2XW@@(wW+%2VdXis#JHTH^0b2q z`EzhG913@4)d{2C2}{7DIkk3Ythj9gnQ6betR|&rPED#p2A*q`O4znkJQ$vEbG$1wD-fa?y`c5}IOE^`CtldB9T8`JPl5E=@ostq0iJHXIX^eVjrF+^5lr(5_QN3W* zYS^C(Bp@=Gk$H(kk%$VH`5di)!+cqGBkJE$k99A~UY@=XEReRBJxP}hIY=->u!CTj zU?;&Yg53mr2<{=+OK>m2K7#!OC4&114iMZ=@BqPs1P>7$BsfG+CU}_O5rV@6M+im; z9wj(R@EF141Wyn=N$@^`V+8Lfc#7a@g5w0w5S$=*mf$482MC@c7$ta~;1t1Wf-?kX z3C;F&3-SD1lA)8RwmbrZf zXqt-VV0Xme_7R}zwTc)sv^LZlS}$%&89iTUrSYWig#C8XPTkO2eM?e(M358TdrC(355Yuoj&oZOzEl9+y`}u5s_$m2qe8N&ugFq=u7^YfNy( za{R?GtUbEI=SFI{WS&^y9$&4=li$Gk`WFz_n)g)N)@bB}>sN8yPmXj)HIF^p{wt9y zhj%RbUg^VYrA~A15Q6d`D4m*_8h_+eDfCMS@4|A^I9!U7D~|WX<7MMLlEQl#fTY9h z6oKVEQQ8U`Ue)oV9w(^!6ofbkHt3kg4wUS2ltg%3uSGd0a6AMkUX{x)srI=B#fDk> zv82Q;G$*+5WrL!ZC`Cf?>@CKdSWpHX6hmB35bmfT6;;S9h*E7UXfFAVhrMV7QKsfv zAvH&N-2N!~tT+@EBm4{-YNaiyp!t9 z{G6Ule%H_T{F`~l%;)r>?L9vRo!nh?(3Z*N^!$HsWELD6DbO`AK6A&oV`g^gDZ@+* z8}fItwq}1@e@14I(|83blvfd|WkbJGB{gv))AjwD{33={=_q#oNE6cdp29aEXW!C- z3?0Lk1}m0dGg`*Fwn2w8-_qCh&{%?3fv3=IWV>@Blkz;}bd+k#Vt|f#9d}&{66hX}#Kt#?iPQq33dFzJ zcpx$?@{g!}7>2;zWUUgjCCdr{ zre3^bni=SyL7D*FOzFl?%{%hj7}d3(WGDLZ9mH2{R0)*G>2GMtnHv!Mc&mrLO9@+F zHdM(BlS?U-kF|Q%(u~UmC7n z1r7)xVwc~yp|6okDYS|-6DikWQw#gT;=Iv-6{Sy{aJ{UB2nZJSR^N34&a6KiK&ew3 zTpF?y%Srjyic;VDj+hVBhDq7HlmGQxxI$0_A3rl2F3yA>Nj3*yrArq6YqgRx=5C`| zX#0SXIKY$FAyeq!*YWdS3NQf+rgWiz>tcn&k%UMK`n4!ab(_!C7vz^QE=s!SbfYxo z4Cx-5nz%SKeP$-gz($X&uH@-6&(EHVdKRsqeQQRrh^Vn$iF)JvZl~H)Raro#E9y+k zKf!ZU1RnLj$QyIMCG9c9v{Ke4sGhO2 zcFyjx^Eb_QORrt9`$EGm+Wj~2%1ezJum|lSdq+HL9VT!?zhbNzYcOm}=6cdb5OyW8 zX09dIQmvG1w#?v$GJHFgfi&0C_AZ3yZ>zT5>cr*4Ov^;*m&OS?juVt^d{5WbGB}F| z)F_0e?`ZZtt;{>x*Uk8(y$qAOmU%tn<>KF?+EJ}p2y?A;D}_Km3rY`zQqL{Dfmdnt zQIz(Al40N5O1)#ml;ZOV&huoVagI)ey-Q8Yv3Vq^s3pgF5(!qYXEDD705N0tuD4MHwT zbgkY>9YRy0YAB~0cdt0ETdG>P18=Sq!FWk=hI6Uj^#nu(lE$6c$6JAsvaUG!k$${+ z_@LTWCDMZ>&kt!6e%=N|`bhJBi3pEU_oaB3N-FSEGrRfKW`EtIlUnxqDo~_JIjJ?!+_HG%_$gtFGl&+#-X8WgGkAf5*xSxw#2?a#VM)PPl!q6nbR-oeke*=08oeB=EPIs4 zKvy8YLnE_jMoyj*^+_0hAL&OGu?H(oxF}5;(t}qK(1|!rn}(O71>&V!XPK%)B_X0T zM4);R?^6O#{<$JBX9Z3bX_t9tLH-3=l#z`x9VJ%RzR2WAY?gcEUts{tfkPyY>2;nm z#R1D9)gmq8{2C*fSLgz#S6GG)j;f^Morny+8ky7@d!+5YBQnXWq#>o?H9Sb8c=t{U z@seQ}3FAkpOgBpZNh;MX>&A~$>2~d>sZ=2`0B3_}A0LXV3i@IE7Vz1dP%%4Vt^(q( zVO{Ys-45Q^s$X?n>dt6T1(+Oboq5&`s#J zN6_mC_=8_edY9!CNAaziQVMscdIhz41l#ky@x<71tF$lcCrWkc+TGU%|MN^ROA(Qk z;Ab+zl?q+BDo8y9uKWnG^L+wJcCh?;xXNh~D&;>Yk;-!87tdABUYxoxIwSuU4N-C) z@2`;77*{X!BXbTpA{A3d{hc=`XDGBEr%N&2wUo*0S_ASgm5MTTTds7=F5ps_0&Th+;(DmQ-P%9p-_Ulz%>8@*-v1??XNI25>Hh&{wBLLH diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_app.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_app.cpython-39.pyc deleted file mode 100644 index 227f9ab4168a853443eada54f548e6e728bce915..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15159 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 V@g!`u;~6r0yPxBx?f%uC{~rWs>RJE* diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_fileresponse.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_fileresponse.cpython-39.pyc deleted file mode 100644 index 2f98017eefbc2729f16b7b0ca32206a3bf01ca81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4618 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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_middlewares.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_middlewares.cpython-39.pyc deleted file mode 100644 index f2503dd5d80b7cb54f5eb04155f5de8811c62263..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3884 zcmZ`+OLH5?5#HGc0D>SyQWRgZm5ozL3T2s;>>M1GOR*wbmYj%DBvxGBVzONB42YHX z0naQ*lLcNvrNm1rsmdW29;l=KgKzm4drW+={(^EyzMjR4jI*enoo7$?H{H`8f|;4R zf#;vr&x2ytF#bi2$)}3O$9R>=41*h-#fC>;GiHhDnTh3DiS5~m<2gyit0Yyg$_#FC zJFX>D-c(Ze>bmX3(@Dc?=z1ldNt#|$*Q@cRWY(KSz2?mcQ+Ba-DxOa+dzYCZs=R*8 zyamw^SA-)LMWb!57<~HF;tf9Y-1e5lf>_|qQS zbE0pR&+&OaC#Lx2QyWt0R}u9UL#*T5!0 zqg5$pHotuIsekwWr+0t#VB@o5>dt-;<-txYirU>Ej&;r1>~+y$Zyt0-QKj;CfqV@l zjh0zlxxcyj=#h{~kcu>aEO;bEm={w%^*_w^M2i*G$KtD=P&um2C%F_s@>r;DmMR*Y zesZ94kvz_Nxq!TS5^)}j{XmLhCCwl=jt+(24f2jZ9-?)3y4^SmgFMR8!tw9*(y(O} zRatIT*tDXkNRjts8k%J9;IZ+w@csj@`WQvucxv<+XMbi#ChF{|d1m#^m+S#tK8^=)+8ZtAVdvQI$$0Y~V0FScOGRM?-L6-WWSS(^ zR2J_EZ`x0SJnZ;U+RnUYC(paS_&O9_vZQ6pd8i~WqwuDKIQNGJ)yIoo8FB^VZ#Ma@ zt?t2=3{svYTPo~iS-cfJ6M?TniLHg)TH6!p-qx?9oh=pR;=OJVJ_~k*+6tnKHeTNs zI}@;~weCT&eVUXz%yjJDj_j#2SJNi*p%7G0oOEx_O2TOW|u1t3Jtk zxFpIsq@Wa#(2avoaChgxh4ZhKn`~n7gz{xPVu5m1mZkKCR_!R|WTiGi+c$JNy=9n5 zx>VwWHJ8L?k_+iZZFeVw#rkAjgn(O~|N77ps3cOlz_=TgD3QT8TZ0waJTV@4zjZ-? zo-i``gVyABgT>#otsW_nde9z02XM+Da`z+Xj022CpmM^Ajx6tFO1NQ`@`x@0b)7)j zkK$NwKXlgNS)^iLBQ-$yH)*T^CqdhjF|e)G+nx-BZ8r>3cV~pmnhPZfM!gZ8;`XNO ziEXX;$QhxC3$K8RSd4fPlC*S%l$k6~8B#869jQrC6COZj4Uoo(Yq;R&Z~y_*^dFBREM7-vt+?vnL-NxV;t>W(nMqX5;b&nj=JqTLa*rmuI+Ckwap* z*4U8qfQ<~fe$m9FhZ6*r+xLQ4iS0G_3z#wVIjse0bBV`3#7%ysMA*wC#P`r~qm(w#a&^!}DFR(bEd|NpkM0I( zn!!4Xuwg)rLadbX%F?N-sCJ-w3}?{y&V8Ky@cB}t#h>-D94Ccizg zh)DufO|-t-t;co@o!O6H&7VnEVEgi&9k~`gICyW zfz7fe-g#DI%Xph?-lTE?^JdM%pN_KMMP9h}QJf*1)$KLf0eTQ$kkcrNnty-br^I1e zmG4XW-jzYB@ewoaXtyUdy_BS7NkZ1CrkThkl7d$=8{@}ykRp>^yC$h$;!g-Tj$EYr z|L`IT5eKh@R}nHJ!oY|yv=IQ@(o})M9TQE1&p18!uTu@kuRU#>CG z*|8ga0TRXy8^2?VfqUHq>NgCge_x{H#K+hM)YblTNr~JKd&szH?!#TsuNf)1!z)&r zG&)I*OpcL~kC{z&_!GY!eLW(N6N1j4jl79fLx{%set_Q6N0$Ge97Wp^6*HL0mTmbn z)LL)LckwAI`9T-lMG`!c@Rh{dB%v*7iKHvZYZB`nQEnxtXoLu=H%%jhJfhvkYm`0Z z-xW!&h3W23BDtBqM_o-H^g;KA?THvE!) K6=uF^eEwe|ix-Ii diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_protocol.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_protocol.cpython-39.pyc deleted file mode 100644 index b9122c5cdb9f683bd465e1e9f5fb3df4200c5ea1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16454 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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_request.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_request.cpython-39.pyc deleted file mode 100644 index 5217aadb09fd96d908f1c1c55b950c09e98ff0bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22594 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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_response.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_response.cpython-39.pyc deleted file mode 100644 index a53bc432db14c6579baa1be24a79e2ca72de86e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20234 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 bBLkrS2e*Hw>shLq{_lJ*;OaMuy3hD8Z_oQ+ diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_runner.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_runner.cpython-39.pyc deleted file mode 100644 index 1722bd11dbea72dda4510a4096fae45e02489fdf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11670 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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_server.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_server.cpython-39.pyc deleted file mode 100644 index 757e8d4d20eab541f898b63ff74fe0c8567c4bdd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2760 zcmaJ@&2Jk;6rb5IukE#+4<~8LS48=8p(#Q_qA0Ce+CmT^MNK56#no!FGfAB6hdZ-Q z>c~AM5}Yc*Ifqu_(kp+?9O1;7Q$Z@cH@j{Us91a7zIpR@=J!5l!$zY<;QH0P5-z)h z{Dy7Fya$NnGsW;!qbe6#PrR?@~y=7?Zok&q~cc+*LNvl7PI4OQuAw? zcj9{D`JU!0aU*H^P0hP;E1B>oG+&J;lPP~Hnf9lXw%^vWT0E1?`m?~-{kbm)^H}4E zu*RX`pJT=v=`;^!SF-(unD6m;VR?Q1n+3_m9v6$h175P)ag=!@9jfY${jisZ8!=bz z%`lENXWi;Wxw2MzGFR@Me%{N{F#eswdmXCUH#TH0!YE(M1rL*NMK9+9Lcjstv!5kO_E3Y`nCz!Fimj<)iGC`(fwVYWzB2?`K? zvji?-dXVP+3qwlWsu3jNE)PmIZAQmdmgMoKXv6v^hKU&%J|*H+c>H;XecJ60y8^7w zlCF%lvn=lRc6k`cNQC`97v04@p6+#5dK+B{IeMudM!S%KvK#iY?L6;a-sc-ZSrq-D za)Y3k_VOT@faRqJgt#^8l)r;kkz$Kutqv8lpc0`c#uxI~7jD8Wn?S(1WQRUBo{&Qb z=To{0>2AePR^lAYDr=VyA@@Jrp41h*PbP1Z*8WFe!AVFBLoCc(w{}u@T4Xt&uH^h$d3!qcLGY@9} z15c}rA)5R_^m1@$-c4Kxy^4vqL-ru{1<0!>AjR7-e+J^aAoxFsaVGQkaAgY!F>CZ? zAW`XHDwM-C>Sc@Tq1^p$HB0$D=#!PCXkDt(4~KCUGUfI~mS<5GD`#J~KV{|cMq!wP zyObC5*n_lT=ub!p3Z6Hi%4|%HL#On8#}JrzVh%{hDFV~9< z2Y2Q6AZOWr3OJ3$50!;E1__CFotUa>OISTomh`V(ftf$xCI=Tvd&f&GF2z|C#_}34 zW9^Prlw73@v2wP;d>c+1JBoP-$57#N+|IY7Ok}dy6`dilAjM@MpTI43fN7gf&=*Z% zyz?0kU^l>&)4|8W!ft?W#lZKF8b8xV*yf?3qMHCj10FgD#5{6uA~_pv>{DP|90XTk zvIzMJknvmxS`GZqqjnl5JP1@R2$GBqV&uIbxIYNvVn(!Z7fe%uJxhEHL`{xQ`Pr=He4~JC1vM2}&lbw9nhi{j{POJuj(Gz%L7IvbGlo@VB8o6KD<}r9d z>Qm6Ke*n4EfNB5$ diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_urldispatcher.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_urldispatcher.cpython-39.pyc deleted file mode 100644 index 24c0b19ebab617caa7276382919c50903b88ba9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42098 zcmbuo3w&JHc_%ja&U-Kz3_%d!TSJN>35oNJTQC${slv;nqGx{R}%v`N$cw#n{#)nwCb;`OHKroB$Lt<(Lvj+3;z z+hh|tvHJgi=RRfz1M1`xf!{G}0j z7?<qdg#1sIlkz`RPRajtIW7M)kpP6l=}^}u%EOKtV~;@tA=G*V?T(eH_RJG`6)ZSa@N|s zYLq`NcUy3G4tM9Rt+=~jZ?Ye{WY{D2BU@rp;?qHjW%w!2*t_f<_Mt5?`!@TupZ4ry zF>9N({q>l&-QH{Muy($YD1QQJw^=2mmF$we#oC1yB+Abrb+@$(sk`jhLit9#{5(=_ zxAq`qkA22Iggh6Ka)-4SDSPdU$nk>x5c;t1P1D+MjlZ5Ke-h6RSa;(2o%VBhUP1hz zbqMi8b_MYl5udOQBYs%oRm6{2M-e|N`DYNn%eou!yX_g|pGEv0>t4j~mAHlYeb)Vm z-|x54M#@L52axiBZR3qO#E)4YMf{`o9O9P{pR^uC{6X77{4(Olt%neQ$bKI2dBh*K zP9T0l;tPmBVof1FWgo`#D~O-8P9c7ZV`V>w(H&)YBU!HD*`wBDc=nh)dtRO)#Irh{ zowm;4*%^Dn-VQi;jXaVf-oUEaF!!<9uxVU_giUgG5Ztm|bT zvk|GfP32|IxVV%2a>um96Z4MirTr?s%u|c*e6vxld1Vx8lr7k~QP6W&0j@{+9_WU5rYZD0V{$;*~<#^c_G z6Elvhs1BdsuW;T~cC{YF zk*yf?L;7{no*U13gHNm4$$4jyokv$UBI-{;G#=4=w$ofvvzTU-s_zER)-cIobm-)@ zMzuaa8zu~P)#(ie52OifBL*YNo$yC^;Kbr$ZGKh;$}=XuZDP(^dp`O6kwXuhI8?44 zYVErH;+{M9?z?#4;++={U7Wc1$;yit+poTG=bqMq{THu4UqKdReBt>|USEFU!2XAh zAx&;CF6;l}2QDs;zhfMp<#Oo!fdFb!xPTiwM)FrSpN`paJ7F1<`oD?)Njr{Zny})y zPvL*Uf0o4mv>mrnT&74*PsXea{%8H?Im8DL&m+$CLBtDKm_uH+Lg167lE8Fa_Of$L zRTtRz(nydskhSI&AgHOXd8tKZ&&|K0?mLZNAv24AR)vRM?ypeDMmTI=l zDOR+XP>6Yj%YfgC9l+@Hc-G5QDwsgKQt@(?O1)_z8}9R!%GIT6&3_Wdg7Jnbm1?8W z)WGaiDry*2s|150gFOgt#?+I%XYkH5*0GC=*Dk7R11-Dg%wBFbYZtLpsugDzh-cAO z7bjk_8!ugaVt(eLGw<4m7OS&YfSa6))%hk{diZ5~rn01JRtT>Xi`Ud73V#llGlC#z zWXz0_$CWXPChqYkIUWW4CtWnRwr0wcc<*5r@HGU%l!G3bZyKETE#QZ&IPh%3O1_>d zCo$bRHT9-prLD~C2~gcMQZox#Oej;qSuhppIh|?`SOX{_Zw*TByrd4=1*?G6A*(2< zLw*T{wE?Na)<#J!O6mqFcf{HxX~Sp{>lwAifY~?tb&Ob>@!l3|tK``v_jfo)FO+%eWmarL;pYPz3W~6Y_jxC@G>H==n z(+Kd=CwL!1mQ*dxSwy<7)og8AQ!58x{i+DLGGu1!*;B79HXYk3xtHyd@*BO+Da}?J z%?7Yit;F>?k;|3*AMkg{ex+ImNh<9-JlAX-8NPp_p~2TR~YNIffcA*aqb`ZTZn9$_H}5WR@H*7S%| zj{1Ip?O3-*ekK%jf@KIC_v?+oamOTl;)G?DswIuQOKuZ)%~{)VY^wxT#p!@55_MpE zOD4)$ngNasXrfbcmKGPA%I(Omrz+@}G^%@vcsa~(MOXZpj=pVMGh0!<_g*hI&DKZ# zX{eSgFkNdvX&z*)wB*=xOB&|p8?I_PWQ4#5-C|8-F4->7$z1ctIvTqcnFP7sqp2Yd zkwNLV22*p℘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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_ws.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/web_ws.cpython-39.pyc deleted file mode 100644 index 06bec39a4251d91010146f19862532654f2131dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13205 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 DH#!~@ diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/worker.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/__pycache__/worker.cpython-39.pyc deleted file mode 100644 index aac92e9fe292a810b99c498bd6ffbea4b27a455a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6879 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] field_data - - void http_parser_url_init(http_parser_url *u) - - int http_parser_parse_url(const char *buf, - size_t buflen, - int is_connect, - http_parser_url *u) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_find_header.c b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_find_header.c deleted file mode 100644 index 012cba33..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_find_header.c +++ /dev/null @@ -1,9870 +0,0 @@ -/* The file is autogenerated from aiohttp/hdrs.py -Run ./tools/gen.py to update it after the origin changing. */ - -#include "_find_header.h" - -#define NEXT_CHAR() \ -{ \ - count++; \ - if (count == size) { \ - /* end of search */ \ - return -1; \ - } \ - pchar++; \ - ch = *pchar; \ - last = (count == size -1); \ -} while(0); - -int -find_header(const char *str, int size) -{ - char *pchar = str; - int last; - char ch; - int count = -1; - pchar--; - - - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto A; - case 'a': - if (last) { - return -1; - } - goto A; - case 'C': - if (last) { - return -1; - } - goto C; - case 'c': - if (last) { - return -1; - } - goto C; - case 'D': - if (last) { - return -1; - } - goto D; - case 'd': - if (last) { - return -1; - } - goto D; - case 'E': - if (last) { - return -1; - } - goto E; - case 'e': - if (last) { - return -1; - } - goto E; - case 'F': - if (last) { - return -1; - } - goto F; - case 'f': - if (last) { - return -1; - } - goto F; - case 'H': - if (last) { - return -1; - } - goto H; - case 'h': - if (last) { - return -1; - } - goto H; - case 'I': - if (last) { - return -1; - } - goto I; - case 'i': - if (last) { - return -1; - } - goto I; - case 'K': - if (last) { - return -1; - } - goto K; - case 'k': - if (last) { - return -1; - } - goto K; - case 'L': - if (last) { - return -1; - } - goto L; - case 'l': - if (last) { - return -1; - } - goto L; - case 'M': - if (last) { - return -1; - } - goto M; - case 'm': - if (last) { - return -1; - } - goto M; - case 'O': - if (last) { - return -1; - } - goto O; - case 'o': - if (last) { - return -1; - } - goto O; - case 'P': - if (last) { - return -1; - } - goto P; - case 'p': - if (last) { - return -1; - } - goto P; - case 'R': - if (last) { - return -1; - } - goto R; - case 'r': - if (last) { - return -1; - } - goto R; - case 'S': - if (last) { - return -1; - } - goto S; - case 's': - if (last) { - return -1; - } - goto S; - case 'T': - if (last) { - return -1; - } - goto T; - case 't': - if (last) { - return -1; - } - goto T; - case 'U': - if (last) { - return -1; - } - goto U; - case 'u': - if (last) { - return -1; - } - goto U; - case 'V': - if (last) { - return -1; - } - goto V; - case 'v': - if (last) { - return -1; - } - goto V; - case 'W': - if (last) { - return -1; - } - goto W; - case 'w': - if (last) { - return -1; - } - goto W; - case 'X': - if (last) { - return -1; - } - goto X; - case 'x': - if (last) { - return -1; - } - goto X; - default: - return -1; - } - -A: - NEXT_CHAR(); - switch (ch) { - case 'C': - if (last) { - return -1; - } - goto AC; - case 'c': - if (last) { - return -1; - } - goto AC; - case 'G': - if (last) { - return -1; - } - goto AG; - case 'g': - if (last) { - return -1; - } - goto AG; - case 'L': - if (last) { - return -1; - } - goto AL; - case 'l': - if (last) { - return -1; - } - goto AL; - case 'U': - if (last) { - return -1; - } - goto AU; - case 'u': - if (last) { - return -1; - } - goto AU; - default: - return -1; - } - -AC: - NEXT_CHAR(); - switch (ch) { - case 'C': - if (last) { - return -1; - } - goto ACC; - case 'c': - if (last) { - return -1; - } - goto ACC; - default: - return -1; - } - -ACC: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto ACCE; - case 'e': - if (last) { - return -1; - } - goto ACCE; - default: - return -1; - } - -ACCE: - NEXT_CHAR(); - switch (ch) { - case 'P': - if (last) { - return -1; - } - goto ACCEP; - case 'p': - if (last) { - return -1; - } - goto ACCEP; - case 'S': - if (last) { - return -1; - } - goto ACCES; - case 's': - if (last) { - return -1; - } - goto ACCES; - default: - return -1; - } - -ACCEP: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return 0; - } - goto ACCEPT; - case 't': - if (last) { - return 0; - } - goto ACCEPT; - default: - return -1; - } - -ACCEPT: - NEXT_CHAR(); - switch (ch) { - case '-': - if (last) { - return -1; - } - goto ACCEPT_; - default: - return -1; - } - -ACCEPT_: - NEXT_CHAR(); - switch (ch) { - case 'C': - if (last) { - return -1; - } - goto ACCEPT_C; - case 'c': - if (last) { - return -1; - } - goto ACCEPT_C; - case 'E': - if (last) { - return -1; - } - goto ACCEPT_E; - case 'e': - if (last) { - return -1; - } - goto ACCEPT_E; - case 'L': - if (last) { - return -1; - } - goto ACCEPT_L; - case 'l': - if (last) { - return -1; - } - goto ACCEPT_L; - case 'R': - if (last) { - return -1; - } - goto ACCEPT_R; - case 'r': - if (last) { - return -1; - } - goto ACCEPT_R; - default: - return -1; - } - -ACCEPT_C: - NEXT_CHAR(); - switch (ch) { - case 'H': - if (last) { - return -1; - } - goto ACCEPT_CH; - case 'h': - if (last) { - return -1; - } - goto ACCEPT_CH; - default: - return -1; - } - -ACCEPT_CH: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto ACCEPT_CHA; - case 'a': - if (last) { - return -1; - } - goto ACCEPT_CHA; - default: - return -1; - } - -ACCEPT_CHA: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto ACCEPT_CHAR; - case 'r': - if (last) { - return -1; - } - goto ACCEPT_CHAR; - default: - return -1; - } - -ACCEPT_CHAR: - NEXT_CHAR(); - switch (ch) { - case 'S': - if (last) { - return -1; - } - goto ACCEPT_CHARS; - case 's': - if (last) { - return -1; - } - goto ACCEPT_CHARS; - default: - return -1; - } - -ACCEPT_CHARS: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto ACCEPT_CHARSE; - case 'e': - if (last) { - return -1; - } - goto ACCEPT_CHARSE; - default: - return -1; - } - -ACCEPT_CHARSE: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return 1; - } - goto ACCEPT_CHARSET; - case 't': - if (last) { - return 1; - } - goto ACCEPT_CHARSET; - default: - return -1; - } - -ACCEPT_E: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto ACCEPT_EN; - case 'n': - if (last) { - return -1; - } - goto ACCEPT_EN; - default: - return -1; - } - -ACCEPT_EN: - NEXT_CHAR(); - switch (ch) { - case 'C': - if (last) { - return -1; - } - goto ACCEPT_ENC; - case 'c': - if (last) { - return -1; - } - goto ACCEPT_ENC; - default: - return -1; - } - -ACCEPT_ENC: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto ACCEPT_ENCO; - case 'o': - if (last) { - return -1; - } - goto ACCEPT_ENCO; - default: - return -1; - } - -ACCEPT_ENCO: - NEXT_CHAR(); - switch (ch) { - case 'D': - if (last) { - return -1; - } - goto ACCEPT_ENCOD; - case 'd': - if (last) { - return -1; - } - goto ACCEPT_ENCOD; - default: - return -1; - } - -ACCEPT_ENCOD: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto ACCEPT_ENCODI; - case 'i': - if (last) { - return -1; - } - goto ACCEPT_ENCODI; - default: - return -1; - } - -ACCEPT_ENCODI: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto ACCEPT_ENCODIN; - case 'n': - if (last) { - return -1; - } - goto ACCEPT_ENCODIN; - default: - return -1; - } - -ACCEPT_ENCODIN: - NEXT_CHAR(); - switch (ch) { - case 'G': - if (last) { - return 2; - } - goto ACCEPT_ENCODING; - case 'g': - if (last) { - return 2; - } - goto ACCEPT_ENCODING; - default: - return -1; - } - -ACCEPT_L: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto ACCEPT_LA; - case 'a': - if (last) { - return -1; - } - goto ACCEPT_LA; - default: - return -1; - } - -ACCEPT_LA: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto ACCEPT_LAN; - case 'n': - if (last) { - return -1; - } - goto ACCEPT_LAN; - default: - return -1; - } - -ACCEPT_LAN: - NEXT_CHAR(); - switch (ch) { - case 'G': - if (last) { - return -1; - } - goto ACCEPT_LANG; - case 'g': - if (last) { - return -1; - } - goto ACCEPT_LANG; - default: - return -1; - } - -ACCEPT_LANG: - NEXT_CHAR(); - switch (ch) { - case 'U': - if (last) { - return -1; - } - goto ACCEPT_LANGU; - case 'u': - if (last) { - return -1; - } - goto ACCEPT_LANGU; - default: - return -1; - } - -ACCEPT_LANGU: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto ACCEPT_LANGUA; - case 'a': - if (last) { - return -1; - } - goto ACCEPT_LANGUA; - default: - return -1; - } - -ACCEPT_LANGUA: - NEXT_CHAR(); - switch (ch) { - case 'G': - if (last) { - return -1; - } - goto ACCEPT_LANGUAG; - case 'g': - if (last) { - return -1; - } - goto ACCEPT_LANGUAG; - default: - return -1; - } - -ACCEPT_LANGUAG: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return 3; - } - goto ACCEPT_LANGUAGE; - case 'e': - if (last) { - return 3; - } - goto ACCEPT_LANGUAGE; - default: - return -1; - } - -ACCEPT_R: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto ACCEPT_RA; - case 'a': - if (last) { - return -1; - } - goto ACCEPT_RA; - default: - return -1; - } - -ACCEPT_RA: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto ACCEPT_RAN; - case 'n': - if (last) { - return -1; - } - goto ACCEPT_RAN; - default: - return -1; - } - -ACCEPT_RAN: - NEXT_CHAR(); - switch (ch) { - case 'G': - if (last) { - return -1; - } - goto ACCEPT_RANG; - case 'g': - if (last) { - return -1; - } - goto ACCEPT_RANG; - default: - return -1; - } - -ACCEPT_RANG: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto ACCEPT_RANGE; - case 'e': - if (last) { - return -1; - } - goto ACCEPT_RANGE; - default: - return -1; - } - -ACCEPT_RANGE: - NEXT_CHAR(); - switch (ch) { - case 'S': - if (last) { - return 4; - } - goto ACCEPT_RANGES; - case 's': - if (last) { - return 4; - } - goto ACCEPT_RANGES; - default: - return -1; - } - -ACCES: - NEXT_CHAR(); - switch (ch) { - case 'S': - if (last) { - return -1; - } - goto ACCESS; - case 's': - if (last) { - return -1; - } - goto ACCESS; - default: - return -1; - } - -ACCESS: - NEXT_CHAR(); - switch (ch) { - case '-': - if (last) { - return -1; - } - goto ACCESS_; - default: - return -1; - } - -ACCESS_: - NEXT_CHAR(); - switch (ch) { - case 'C': - if (last) { - return -1; - } - goto ACCESS_C; - case 'c': - if (last) { - return -1; - } - goto ACCESS_C; - default: - return -1; - } - -ACCESS_C: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto ACCESS_CO; - case 'o': - if (last) { - return -1; - } - goto ACCESS_CO; - default: - return -1; - } - -ACCESS_CO: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto ACCESS_CON; - case 'n': - if (last) { - return -1; - } - goto ACCESS_CON; - default: - return -1; - } - -ACCESS_CON: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto ACCESS_CONT; - case 't': - if (last) { - return -1; - } - goto ACCESS_CONT; - default: - return -1; - } - -ACCESS_CONT: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto ACCESS_CONTR; - case 'r': - if (last) { - return -1; - } - goto ACCESS_CONTR; - default: - return -1; - } - -ACCESS_CONTR: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto ACCESS_CONTRO; - case 'o': - if (last) { - return -1; - } - goto ACCESS_CONTRO; - default: - return -1; - } - -ACCESS_CONTRO: - NEXT_CHAR(); - switch (ch) { - case 'L': - if (last) { - return -1; - } - goto ACCESS_CONTROL; - case 'l': - if (last) { - return -1; - } - goto ACCESS_CONTROL; - default: - return -1; - } - -ACCESS_CONTROL: - NEXT_CHAR(); - switch (ch) { - case '-': - if (last) { - return -1; - } - goto ACCESS_CONTROL_; - default: - return -1; - } - -ACCESS_CONTROL_: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto ACCESS_CONTROL_A; - case 'a': - if (last) { - return -1; - } - goto ACCESS_CONTROL_A; - case 'E': - if (last) { - return -1; - } - goto ACCESS_CONTROL_E; - case 'e': - if (last) { - return -1; - } - goto ACCESS_CONTROL_E; - case 'M': - if (last) { - return -1; - } - goto ACCESS_CONTROL_M; - case 'm': - if (last) { - return -1; - } - goto ACCESS_CONTROL_M; - case 'R': - if (last) { - return -1; - } - goto ACCESS_CONTROL_R; - case 'r': - if (last) { - return -1; - } - goto ACCESS_CONTROL_R; - default: - return -1; - } - -ACCESS_CONTROL_A: - NEXT_CHAR(); - switch (ch) { - case 'L': - if (last) { - return -1; - } - goto ACCESS_CONTROL_AL; - case 'l': - if (last) { - return -1; - } - goto ACCESS_CONTROL_AL; - default: - return -1; - } - -ACCESS_CONTROL_AL: - NEXT_CHAR(); - switch (ch) { - case 'L': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALL; - case 'l': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALL; - default: - return -1; - } - -ACCESS_CONTROL_ALL: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLO; - case 'o': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLO; - default: - return -1; - } - -ACCESS_CONTROL_ALLO: - NEXT_CHAR(); - switch (ch) { - case 'W': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW; - case 'w': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW; - default: - return -1; - } - -ACCESS_CONTROL_ALLOW: - NEXT_CHAR(); - switch (ch) { - case '-': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_; - default: - return -1; - } - -ACCESS_CONTROL_ALLOW_: - NEXT_CHAR(); - switch (ch) { - case 'C': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_C; - case 'c': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_C; - case 'H': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_H; - case 'h': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_H; - case 'M': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_M; - case 'm': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_M; - case 'O': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_O; - case 'o': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_O; - default: - return -1; - } - -ACCESS_CONTROL_ALLOW_C: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_CR; - case 'r': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_CR; - default: - return -1; - } - -ACCESS_CONTROL_ALLOW_CR: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_CRE; - case 'e': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_CRE; - default: - return -1; - } - -ACCESS_CONTROL_ALLOW_CRE: - NEXT_CHAR(); - switch (ch) { - case 'D': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_CRED; - case 'd': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_CRED; - default: - return -1; - } - -ACCESS_CONTROL_ALLOW_CRED: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_CREDE; - case 'e': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_CREDE; - default: - return -1; - } - -ACCESS_CONTROL_ALLOW_CREDE: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_CREDEN; - case 'n': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_CREDEN; - default: - return -1; - } - -ACCESS_CONTROL_ALLOW_CREDEN: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_CREDENT; - case 't': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_CREDENT; - default: - return -1; - } - -ACCESS_CONTROL_ALLOW_CREDENT: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_CREDENTI; - case 'i': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_CREDENTI; - default: - return -1; - } - -ACCESS_CONTROL_ALLOW_CREDENTI: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_CREDENTIA; - case 'a': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_CREDENTIA; - default: - return -1; - } - -ACCESS_CONTROL_ALLOW_CREDENTIA: - NEXT_CHAR(); - switch (ch) { - case 'L': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_CREDENTIAL; - case 'l': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_CREDENTIAL; - default: - return -1; - } - -ACCESS_CONTROL_ALLOW_CREDENTIAL: - NEXT_CHAR(); - switch (ch) { - case 'S': - if (last) { - return 5; - } - goto ACCESS_CONTROL_ALLOW_CREDENTIALS; - case 's': - if (last) { - return 5; - } - goto ACCESS_CONTROL_ALLOW_CREDENTIALS; - default: - return -1; - } - -ACCESS_CONTROL_ALLOW_H: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_HE; - case 'e': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_HE; - default: - return -1; - } - -ACCESS_CONTROL_ALLOW_HE: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_HEA; - case 'a': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_HEA; - default: - return -1; - } - -ACCESS_CONTROL_ALLOW_HEA: - NEXT_CHAR(); - switch (ch) { - case 'D': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_HEAD; - case 'd': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_HEAD; - default: - return -1; - } - -ACCESS_CONTROL_ALLOW_HEAD: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_HEADE; - case 'e': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_HEADE; - default: - return -1; - } - -ACCESS_CONTROL_ALLOW_HEADE: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_HEADER; - case 'r': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_HEADER; - default: - return -1; - } - -ACCESS_CONTROL_ALLOW_HEADER: - NEXT_CHAR(); - switch (ch) { - case 'S': - if (last) { - return 6; - } - goto ACCESS_CONTROL_ALLOW_HEADERS; - case 's': - if (last) { - return 6; - } - goto ACCESS_CONTROL_ALLOW_HEADERS; - default: - return -1; - } - -ACCESS_CONTROL_ALLOW_M: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_ME; - case 'e': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_ME; - default: - return -1; - } - -ACCESS_CONTROL_ALLOW_ME: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_MET; - case 't': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_MET; - default: - return -1; - } - -ACCESS_CONTROL_ALLOW_MET: - NEXT_CHAR(); - switch (ch) { - case 'H': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_METH; - case 'h': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_METH; - default: - return -1; - } - -ACCESS_CONTROL_ALLOW_METH: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_METHO; - case 'o': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_METHO; - default: - return -1; - } - -ACCESS_CONTROL_ALLOW_METHO: - NEXT_CHAR(); - switch (ch) { - case 'D': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_METHOD; - case 'd': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_METHOD; - default: - return -1; - } - -ACCESS_CONTROL_ALLOW_METHOD: - NEXT_CHAR(); - switch (ch) { - case 'S': - if (last) { - return 7; - } - goto ACCESS_CONTROL_ALLOW_METHODS; - case 's': - if (last) { - return 7; - } - goto ACCESS_CONTROL_ALLOW_METHODS; - default: - return -1; - } - -ACCESS_CONTROL_ALLOW_O: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_OR; - case 'r': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_OR; - default: - return -1; - } - -ACCESS_CONTROL_ALLOW_OR: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_ORI; - case 'i': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_ORI; - default: - return -1; - } - -ACCESS_CONTROL_ALLOW_ORI: - NEXT_CHAR(); - switch (ch) { - case 'G': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_ORIG; - case 'g': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_ORIG; - default: - return -1; - } - -ACCESS_CONTROL_ALLOW_ORIG: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_ORIGI; - case 'i': - if (last) { - return -1; - } - goto ACCESS_CONTROL_ALLOW_ORIGI; - default: - return -1; - } - -ACCESS_CONTROL_ALLOW_ORIGI: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return 8; - } - goto ACCESS_CONTROL_ALLOW_ORIGIN; - case 'n': - if (last) { - return 8; - } - goto ACCESS_CONTROL_ALLOW_ORIGIN; - default: - return -1; - } - -ACCESS_CONTROL_E: - NEXT_CHAR(); - switch (ch) { - case 'X': - if (last) { - return -1; - } - goto ACCESS_CONTROL_EX; - case 'x': - if (last) { - return -1; - } - goto ACCESS_CONTROL_EX; - default: - return -1; - } - -ACCESS_CONTROL_EX: - NEXT_CHAR(); - switch (ch) { - case 'P': - if (last) { - return -1; - } - goto ACCESS_CONTROL_EXP; - case 'p': - if (last) { - return -1; - } - goto ACCESS_CONTROL_EXP; - default: - return -1; - } - -ACCESS_CONTROL_EXP: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto ACCESS_CONTROL_EXPO; - case 'o': - if (last) { - return -1; - } - goto ACCESS_CONTROL_EXPO; - default: - return -1; - } - -ACCESS_CONTROL_EXPO: - NEXT_CHAR(); - switch (ch) { - case 'S': - if (last) { - return -1; - } - goto ACCESS_CONTROL_EXPOS; - case 's': - if (last) { - return -1; - } - goto ACCESS_CONTROL_EXPOS; - default: - return -1; - } - -ACCESS_CONTROL_EXPOS: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto ACCESS_CONTROL_EXPOSE; - case 'e': - if (last) { - return -1; - } - goto ACCESS_CONTROL_EXPOSE; - default: - return -1; - } - -ACCESS_CONTROL_EXPOSE: - NEXT_CHAR(); - switch (ch) { - case '-': - if (last) { - return -1; - } - goto ACCESS_CONTROL_EXPOSE_; - default: - return -1; - } - -ACCESS_CONTROL_EXPOSE_: - NEXT_CHAR(); - switch (ch) { - case 'H': - if (last) { - return -1; - } - goto ACCESS_CONTROL_EXPOSE_H; - case 'h': - if (last) { - return -1; - } - goto ACCESS_CONTROL_EXPOSE_H; - default: - return -1; - } - -ACCESS_CONTROL_EXPOSE_H: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto ACCESS_CONTROL_EXPOSE_HE; - case 'e': - if (last) { - return -1; - } - goto ACCESS_CONTROL_EXPOSE_HE; - default: - return -1; - } - -ACCESS_CONTROL_EXPOSE_HE: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto ACCESS_CONTROL_EXPOSE_HEA; - case 'a': - if (last) { - return -1; - } - goto ACCESS_CONTROL_EXPOSE_HEA; - default: - return -1; - } - -ACCESS_CONTROL_EXPOSE_HEA: - NEXT_CHAR(); - switch (ch) { - case 'D': - if (last) { - return -1; - } - goto ACCESS_CONTROL_EXPOSE_HEAD; - case 'd': - if (last) { - return -1; - } - goto ACCESS_CONTROL_EXPOSE_HEAD; - default: - return -1; - } - -ACCESS_CONTROL_EXPOSE_HEAD: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto ACCESS_CONTROL_EXPOSE_HEADE; - case 'e': - if (last) { - return -1; - } - goto ACCESS_CONTROL_EXPOSE_HEADE; - default: - return -1; - } - -ACCESS_CONTROL_EXPOSE_HEADE: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto ACCESS_CONTROL_EXPOSE_HEADER; - case 'r': - if (last) { - return -1; - } - goto ACCESS_CONTROL_EXPOSE_HEADER; - default: - return -1; - } - -ACCESS_CONTROL_EXPOSE_HEADER: - NEXT_CHAR(); - switch (ch) { - case 'S': - if (last) { - return 9; - } - goto ACCESS_CONTROL_EXPOSE_HEADERS; - case 's': - if (last) { - return 9; - } - goto ACCESS_CONTROL_EXPOSE_HEADERS; - default: - return -1; - } - -ACCESS_CONTROL_M: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto ACCESS_CONTROL_MA; - case 'a': - if (last) { - return -1; - } - goto ACCESS_CONTROL_MA; - default: - return -1; - } - -ACCESS_CONTROL_MA: - NEXT_CHAR(); - switch (ch) { - case 'X': - if (last) { - return -1; - } - goto ACCESS_CONTROL_MAX; - case 'x': - if (last) { - return -1; - } - goto ACCESS_CONTROL_MAX; - default: - return -1; - } - -ACCESS_CONTROL_MAX: - NEXT_CHAR(); - switch (ch) { - case '-': - if (last) { - return -1; - } - goto ACCESS_CONTROL_MAX_; - default: - return -1; - } - -ACCESS_CONTROL_MAX_: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto ACCESS_CONTROL_MAX_A; - case 'a': - if (last) { - return -1; - } - goto ACCESS_CONTROL_MAX_A; - default: - return -1; - } - -ACCESS_CONTROL_MAX_A: - NEXT_CHAR(); - switch (ch) { - case 'G': - if (last) { - return -1; - } - goto ACCESS_CONTROL_MAX_AG; - case 'g': - if (last) { - return -1; - } - goto ACCESS_CONTROL_MAX_AG; - default: - return -1; - } - -ACCESS_CONTROL_MAX_AG: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return 10; - } - goto ACCESS_CONTROL_MAX_AGE; - case 'e': - if (last) { - return 10; - } - goto ACCESS_CONTROL_MAX_AGE; - default: - return -1; - } - -ACCESS_CONTROL_R: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto ACCESS_CONTROL_RE; - case 'e': - if (last) { - return -1; - } - goto ACCESS_CONTROL_RE; - default: - return -1; - } - -ACCESS_CONTROL_RE: - NEXT_CHAR(); - switch (ch) { - case 'Q': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQ; - case 'q': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQ; - default: - return -1; - } - -ACCESS_CONTROL_REQ: - NEXT_CHAR(); - switch (ch) { - case 'U': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQU; - case 'u': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQU; - default: - return -1; - } - -ACCESS_CONTROL_REQU: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQUE; - case 'e': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQUE; - default: - return -1; - } - -ACCESS_CONTROL_REQUE: - NEXT_CHAR(); - switch (ch) { - case 'S': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQUES; - case 's': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQUES; - default: - return -1; - } - -ACCESS_CONTROL_REQUES: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQUEST; - case 't': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQUEST; - default: - return -1; - } - -ACCESS_CONTROL_REQUEST: - NEXT_CHAR(); - switch (ch) { - case '-': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQUEST_; - default: - return -1; - } - -ACCESS_CONTROL_REQUEST_: - NEXT_CHAR(); - switch (ch) { - case 'H': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQUEST_H; - case 'h': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQUEST_H; - case 'M': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQUEST_M; - case 'm': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQUEST_M; - default: - return -1; - } - -ACCESS_CONTROL_REQUEST_H: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQUEST_HE; - case 'e': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQUEST_HE; - default: - return -1; - } - -ACCESS_CONTROL_REQUEST_HE: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQUEST_HEA; - case 'a': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQUEST_HEA; - default: - return -1; - } - -ACCESS_CONTROL_REQUEST_HEA: - NEXT_CHAR(); - switch (ch) { - case 'D': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQUEST_HEAD; - case 'd': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQUEST_HEAD; - default: - return -1; - } - -ACCESS_CONTROL_REQUEST_HEAD: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQUEST_HEADE; - case 'e': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQUEST_HEADE; - default: - return -1; - } - -ACCESS_CONTROL_REQUEST_HEADE: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQUEST_HEADER; - case 'r': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQUEST_HEADER; - default: - return -1; - } - -ACCESS_CONTROL_REQUEST_HEADER: - NEXT_CHAR(); - switch (ch) { - case 'S': - if (last) { - return 11; - } - goto ACCESS_CONTROL_REQUEST_HEADERS; - case 's': - if (last) { - return 11; - } - goto ACCESS_CONTROL_REQUEST_HEADERS; - default: - return -1; - } - -ACCESS_CONTROL_REQUEST_M: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQUEST_ME; - case 'e': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQUEST_ME; - default: - return -1; - } - -ACCESS_CONTROL_REQUEST_ME: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQUEST_MET; - case 't': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQUEST_MET; - default: - return -1; - } - -ACCESS_CONTROL_REQUEST_MET: - NEXT_CHAR(); - switch (ch) { - case 'H': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQUEST_METH; - case 'h': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQUEST_METH; - default: - return -1; - } - -ACCESS_CONTROL_REQUEST_METH: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQUEST_METHO; - case 'o': - if (last) { - return -1; - } - goto ACCESS_CONTROL_REQUEST_METHO; - default: - return -1; - } - -ACCESS_CONTROL_REQUEST_METHO: - NEXT_CHAR(); - switch (ch) { - case 'D': - if (last) { - return 12; - } - goto ACCESS_CONTROL_REQUEST_METHOD; - case 'd': - if (last) { - return 12; - } - goto ACCESS_CONTROL_REQUEST_METHOD; - default: - return -1; - } - -AG: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return 13; - } - goto AGE; - case 'e': - if (last) { - return 13; - } - goto AGE; - default: - return -1; - } - -AL: - NEXT_CHAR(); - switch (ch) { - case 'L': - if (last) { - return -1; - } - goto ALL; - case 'l': - if (last) { - return -1; - } - goto ALL; - default: - return -1; - } - -ALL: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto ALLO; - case 'o': - if (last) { - return -1; - } - goto ALLO; - default: - return -1; - } - -ALLO: - NEXT_CHAR(); - switch (ch) { - case 'W': - if (last) { - return 14; - } - goto ALLOW; - case 'w': - if (last) { - return 14; - } - goto ALLOW; - default: - return -1; - } - -AU: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto AUT; - case 't': - if (last) { - return -1; - } - goto AUT; - default: - return -1; - } - -AUT: - NEXT_CHAR(); - switch (ch) { - case 'H': - if (last) { - return -1; - } - goto AUTH; - case 'h': - if (last) { - return -1; - } - goto AUTH; - default: - return -1; - } - -AUTH: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto AUTHO; - case 'o': - if (last) { - return -1; - } - goto AUTHO; - default: - return -1; - } - -AUTHO: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto AUTHOR; - case 'r': - if (last) { - return -1; - } - goto AUTHOR; - default: - return -1; - } - -AUTHOR: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto AUTHORI; - case 'i': - if (last) { - return -1; - } - goto AUTHORI; - default: - return -1; - } - -AUTHORI: - NEXT_CHAR(); - switch (ch) { - case 'Z': - if (last) { - return -1; - } - goto AUTHORIZ; - case 'z': - if (last) { - return -1; - } - goto AUTHORIZ; - default: - return -1; - } - -AUTHORIZ: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto AUTHORIZA; - case 'a': - if (last) { - return -1; - } - goto AUTHORIZA; - default: - return -1; - } - -AUTHORIZA: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto AUTHORIZAT; - case 't': - if (last) { - return -1; - } - goto AUTHORIZAT; - default: - return -1; - } - -AUTHORIZAT: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto AUTHORIZATI; - case 'i': - if (last) { - return -1; - } - goto AUTHORIZATI; - default: - return -1; - } - -AUTHORIZATI: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto AUTHORIZATIO; - case 'o': - if (last) { - return -1; - } - goto AUTHORIZATIO; - default: - return -1; - } - -AUTHORIZATIO: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return 15; - } - goto AUTHORIZATION; - case 'n': - if (last) { - return 15; - } - goto AUTHORIZATION; - default: - return -1; - } - -C: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto CA; - case 'a': - if (last) { - return -1; - } - goto CA; - case 'O': - if (last) { - return -1; - } - goto CO; - case 'o': - if (last) { - return -1; - } - goto CO; - default: - return -1; - } - -CA: - NEXT_CHAR(); - switch (ch) { - case 'C': - if (last) { - return -1; - } - goto CAC; - case 'c': - if (last) { - return -1; - } - goto CAC; - default: - return -1; - } - -CAC: - NEXT_CHAR(); - switch (ch) { - case 'H': - if (last) { - return -1; - } - goto CACH; - case 'h': - if (last) { - return -1; - } - goto CACH; - default: - return -1; - } - -CACH: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto CACHE; - case 'e': - if (last) { - return -1; - } - goto CACHE; - default: - return -1; - } - -CACHE: - NEXT_CHAR(); - switch (ch) { - case '-': - if (last) { - return -1; - } - goto CACHE_; - default: - return -1; - } - -CACHE_: - NEXT_CHAR(); - switch (ch) { - case 'C': - if (last) { - return -1; - } - goto CACHE_C; - case 'c': - if (last) { - return -1; - } - goto CACHE_C; - default: - return -1; - } - -CACHE_C: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto CACHE_CO; - case 'o': - if (last) { - return -1; - } - goto CACHE_CO; - default: - return -1; - } - -CACHE_CO: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto CACHE_CON; - case 'n': - if (last) { - return -1; - } - goto CACHE_CON; - default: - return -1; - } - -CACHE_CON: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto CACHE_CONT; - case 't': - if (last) { - return -1; - } - goto CACHE_CONT; - default: - return -1; - } - -CACHE_CONT: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto CACHE_CONTR; - case 'r': - if (last) { - return -1; - } - goto CACHE_CONTR; - default: - return -1; - } - -CACHE_CONTR: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto CACHE_CONTRO; - case 'o': - if (last) { - return -1; - } - goto CACHE_CONTRO; - default: - return -1; - } - -CACHE_CONTRO: - NEXT_CHAR(); - switch (ch) { - case 'L': - if (last) { - return 16; - } - goto CACHE_CONTROL; - case 'l': - if (last) { - return 16; - } - goto CACHE_CONTROL; - default: - return -1; - } - -CO: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto CON; - case 'n': - if (last) { - return -1; - } - goto CON; - case 'O': - if (last) { - return -1; - } - goto COO; - case 'o': - if (last) { - return -1; - } - goto COO; - default: - return -1; - } - -CON: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto CONN; - case 'n': - if (last) { - return -1; - } - goto CONN; - case 'T': - if (last) { - return -1; - } - goto CONT; - case 't': - if (last) { - return -1; - } - goto CONT; - default: - return -1; - } - -CONN: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto CONNE; - case 'e': - if (last) { - return -1; - } - goto CONNE; - default: - return -1; - } - -CONNE: - NEXT_CHAR(); - switch (ch) { - case 'C': - if (last) { - return -1; - } - goto CONNEC; - case 'c': - if (last) { - return -1; - } - goto CONNEC; - default: - return -1; - } - -CONNEC: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto CONNECT; - case 't': - if (last) { - return -1; - } - goto CONNECT; - default: - return -1; - } - -CONNECT: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto CONNECTI; - case 'i': - if (last) { - return -1; - } - goto CONNECTI; - default: - return -1; - } - -CONNECTI: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto CONNECTIO; - case 'o': - if (last) { - return -1; - } - goto CONNECTIO; - default: - return -1; - } - -CONNECTIO: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return 17; - } - goto CONNECTION; - case 'n': - if (last) { - return 17; - } - goto CONNECTION; - default: - return -1; - } - -CONT: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto CONTE; - case 'e': - if (last) { - return -1; - } - goto CONTE; - default: - return -1; - } - -CONTE: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto CONTEN; - case 'n': - if (last) { - return -1; - } - goto CONTEN; - default: - return -1; - } - -CONTEN: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto CONTENT; - case 't': - if (last) { - return -1; - } - goto CONTENT; - default: - return -1; - } - -CONTENT: - NEXT_CHAR(); - switch (ch) { - case '-': - if (last) { - return -1; - } - goto CONTENT_; - default: - return -1; - } - -CONTENT_: - NEXT_CHAR(); - switch (ch) { - case 'D': - if (last) { - return -1; - } - goto CONTENT_D; - case 'd': - if (last) { - return -1; - } - goto CONTENT_D; - case 'E': - if (last) { - return -1; - } - goto CONTENT_E; - case 'e': - if (last) { - return -1; - } - goto CONTENT_E; - case 'L': - if (last) { - return -1; - } - goto CONTENT_L; - case 'l': - if (last) { - return -1; - } - goto CONTENT_L; - case 'M': - if (last) { - return -1; - } - goto CONTENT_M; - case 'm': - if (last) { - return -1; - } - goto CONTENT_M; - case 'R': - if (last) { - return -1; - } - goto CONTENT_R; - case 'r': - if (last) { - return -1; - } - goto CONTENT_R; - case 'T': - if (last) { - return -1; - } - goto CONTENT_T; - case 't': - if (last) { - return -1; - } - goto CONTENT_T; - default: - return -1; - } - -CONTENT_D: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto CONTENT_DI; - case 'i': - if (last) { - return -1; - } - goto CONTENT_DI; - default: - return -1; - } - -CONTENT_DI: - NEXT_CHAR(); - switch (ch) { - case 'S': - if (last) { - return -1; - } - goto CONTENT_DIS; - case 's': - if (last) { - return -1; - } - goto CONTENT_DIS; - default: - return -1; - } - -CONTENT_DIS: - NEXT_CHAR(); - switch (ch) { - case 'P': - if (last) { - return -1; - } - goto CONTENT_DISP; - case 'p': - if (last) { - return -1; - } - goto CONTENT_DISP; - default: - return -1; - } - -CONTENT_DISP: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto CONTENT_DISPO; - case 'o': - if (last) { - return -1; - } - goto CONTENT_DISPO; - default: - return -1; - } - -CONTENT_DISPO: - NEXT_CHAR(); - switch (ch) { - case 'S': - if (last) { - return -1; - } - goto CONTENT_DISPOS; - case 's': - if (last) { - return -1; - } - goto CONTENT_DISPOS; - default: - return -1; - } - -CONTENT_DISPOS: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto CONTENT_DISPOSI; - case 'i': - if (last) { - return -1; - } - goto CONTENT_DISPOSI; - default: - return -1; - } - -CONTENT_DISPOSI: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto CONTENT_DISPOSIT; - case 't': - if (last) { - return -1; - } - goto CONTENT_DISPOSIT; - default: - return -1; - } - -CONTENT_DISPOSIT: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto CONTENT_DISPOSITI; - case 'i': - if (last) { - return -1; - } - goto CONTENT_DISPOSITI; - default: - return -1; - } - -CONTENT_DISPOSITI: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto CONTENT_DISPOSITIO; - case 'o': - if (last) { - return -1; - } - goto CONTENT_DISPOSITIO; - default: - return -1; - } - -CONTENT_DISPOSITIO: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return 18; - } - goto CONTENT_DISPOSITION; - case 'n': - if (last) { - return 18; - } - goto CONTENT_DISPOSITION; - default: - return -1; - } - -CONTENT_E: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto CONTENT_EN; - case 'n': - if (last) { - return -1; - } - goto CONTENT_EN; - default: - return -1; - } - -CONTENT_EN: - NEXT_CHAR(); - switch (ch) { - case 'C': - if (last) { - return -1; - } - goto CONTENT_ENC; - case 'c': - if (last) { - return -1; - } - goto CONTENT_ENC; - default: - return -1; - } - -CONTENT_ENC: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto CONTENT_ENCO; - case 'o': - if (last) { - return -1; - } - goto CONTENT_ENCO; - default: - return -1; - } - -CONTENT_ENCO: - NEXT_CHAR(); - switch (ch) { - case 'D': - if (last) { - return -1; - } - goto CONTENT_ENCOD; - case 'd': - if (last) { - return -1; - } - goto CONTENT_ENCOD; - default: - return -1; - } - -CONTENT_ENCOD: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto CONTENT_ENCODI; - case 'i': - if (last) { - return -1; - } - goto CONTENT_ENCODI; - default: - return -1; - } - -CONTENT_ENCODI: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto CONTENT_ENCODIN; - case 'n': - if (last) { - return -1; - } - goto CONTENT_ENCODIN; - default: - return -1; - } - -CONTENT_ENCODIN: - NEXT_CHAR(); - switch (ch) { - case 'G': - if (last) { - return 19; - } - goto CONTENT_ENCODING; - case 'g': - if (last) { - return 19; - } - goto CONTENT_ENCODING; - default: - return -1; - } - -CONTENT_L: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto CONTENT_LA; - case 'a': - if (last) { - return -1; - } - goto CONTENT_LA; - case 'E': - if (last) { - return -1; - } - goto CONTENT_LE; - case 'e': - if (last) { - return -1; - } - goto CONTENT_LE; - case 'O': - if (last) { - return -1; - } - goto CONTENT_LO; - case 'o': - if (last) { - return -1; - } - goto CONTENT_LO; - default: - return -1; - } - -CONTENT_LA: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto CONTENT_LAN; - case 'n': - if (last) { - return -1; - } - goto CONTENT_LAN; - default: - return -1; - } - -CONTENT_LAN: - NEXT_CHAR(); - switch (ch) { - case 'G': - if (last) { - return -1; - } - goto CONTENT_LANG; - case 'g': - if (last) { - return -1; - } - goto CONTENT_LANG; - default: - return -1; - } - -CONTENT_LANG: - NEXT_CHAR(); - switch (ch) { - case 'U': - if (last) { - return -1; - } - goto CONTENT_LANGU; - case 'u': - if (last) { - return -1; - } - goto CONTENT_LANGU; - default: - return -1; - } - -CONTENT_LANGU: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto CONTENT_LANGUA; - case 'a': - if (last) { - return -1; - } - goto CONTENT_LANGUA; - default: - return -1; - } - -CONTENT_LANGUA: - NEXT_CHAR(); - switch (ch) { - case 'G': - if (last) { - return -1; - } - goto CONTENT_LANGUAG; - case 'g': - if (last) { - return -1; - } - goto CONTENT_LANGUAG; - default: - return -1; - } - -CONTENT_LANGUAG: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return 20; - } - goto CONTENT_LANGUAGE; - case 'e': - if (last) { - return 20; - } - goto CONTENT_LANGUAGE; - default: - return -1; - } - -CONTENT_LE: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto CONTENT_LEN; - case 'n': - if (last) { - return -1; - } - goto CONTENT_LEN; - default: - return -1; - } - -CONTENT_LEN: - NEXT_CHAR(); - switch (ch) { - case 'G': - if (last) { - return -1; - } - goto CONTENT_LENG; - case 'g': - if (last) { - return -1; - } - goto CONTENT_LENG; - default: - return -1; - } - -CONTENT_LENG: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto CONTENT_LENGT; - case 't': - if (last) { - return -1; - } - goto CONTENT_LENGT; - default: - return -1; - } - -CONTENT_LENGT: - NEXT_CHAR(); - switch (ch) { - case 'H': - if (last) { - return 21; - } - goto CONTENT_LENGTH; - case 'h': - if (last) { - return 21; - } - goto CONTENT_LENGTH; - default: - return -1; - } - -CONTENT_LO: - NEXT_CHAR(); - switch (ch) { - case 'C': - if (last) { - return -1; - } - goto CONTENT_LOC; - case 'c': - if (last) { - return -1; - } - goto CONTENT_LOC; - default: - return -1; - } - -CONTENT_LOC: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto CONTENT_LOCA; - case 'a': - if (last) { - return -1; - } - goto CONTENT_LOCA; - default: - return -1; - } - -CONTENT_LOCA: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto CONTENT_LOCAT; - case 't': - if (last) { - return -1; - } - goto CONTENT_LOCAT; - default: - return -1; - } - -CONTENT_LOCAT: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto CONTENT_LOCATI; - case 'i': - if (last) { - return -1; - } - goto CONTENT_LOCATI; - default: - return -1; - } - -CONTENT_LOCATI: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto CONTENT_LOCATIO; - case 'o': - if (last) { - return -1; - } - goto CONTENT_LOCATIO; - default: - return -1; - } - -CONTENT_LOCATIO: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return 22; - } - goto CONTENT_LOCATION; - case 'n': - if (last) { - return 22; - } - goto CONTENT_LOCATION; - default: - return -1; - } - -CONTENT_M: - NEXT_CHAR(); - switch (ch) { - case 'D': - if (last) { - return -1; - } - goto CONTENT_MD; - case 'd': - if (last) { - return -1; - } - goto CONTENT_MD; - default: - return -1; - } - -CONTENT_MD: - NEXT_CHAR(); - switch (ch) { - case '5': - if (last) { - return 23; - } - goto CONTENT_MD5; - default: - return -1; - } - -CONTENT_R: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto CONTENT_RA; - case 'a': - if (last) { - return -1; - } - goto CONTENT_RA; - default: - return -1; - } - -CONTENT_RA: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto CONTENT_RAN; - case 'n': - if (last) { - return -1; - } - goto CONTENT_RAN; - default: - return -1; - } - -CONTENT_RAN: - NEXT_CHAR(); - switch (ch) { - case 'G': - if (last) { - return -1; - } - goto CONTENT_RANG; - case 'g': - if (last) { - return -1; - } - goto CONTENT_RANG; - default: - return -1; - } - -CONTENT_RANG: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return 24; - } - goto CONTENT_RANGE; - case 'e': - if (last) { - return 24; - } - goto CONTENT_RANGE; - default: - return -1; - } - -CONTENT_T: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto CONTENT_TR; - case 'r': - if (last) { - return -1; - } - goto CONTENT_TR; - case 'Y': - if (last) { - return -1; - } - goto CONTENT_TY; - case 'y': - if (last) { - return -1; - } - goto CONTENT_TY; - default: - return -1; - } - -CONTENT_TR: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto CONTENT_TRA; - case 'a': - if (last) { - return -1; - } - goto CONTENT_TRA; - default: - return -1; - } - -CONTENT_TRA: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto CONTENT_TRAN; - case 'n': - if (last) { - return -1; - } - goto CONTENT_TRAN; - default: - return -1; - } - -CONTENT_TRAN: - NEXT_CHAR(); - switch (ch) { - case 'S': - if (last) { - return -1; - } - goto CONTENT_TRANS; - case 's': - if (last) { - return -1; - } - goto CONTENT_TRANS; - default: - return -1; - } - -CONTENT_TRANS: - NEXT_CHAR(); - switch (ch) { - case 'F': - if (last) { - return -1; - } - goto CONTENT_TRANSF; - case 'f': - if (last) { - return -1; - } - goto CONTENT_TRANSF; - default: - return -1; - } - -CONTENT_TRANSF: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto CONTENT_TRANSFE; - case 'e': - if (last) { - return -1; - } - goto CONTENT_TRANSFE; - default: - return -1; - } - -CONTENT_TRANSFE: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto CONTENT_TRANSFER; - case 'r': - if (last) { - return -1; - } - goto CONTENT_TRANSFER; - default: - return -1; - } - -CONTENT_TRANSFER: - NEXT_CHAR(); - switch (ch) { - case '-': - if (last) { - return -1; - } - goto CONTENT_TRANSFER_; - default: - return -1; - } - -CONTENT_TRANSFER_: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto CONTENT_TRANSFER_E; - case 'e': - if (last) { - return -1; - } - goto CONTENT_TRANSFER_E; - default: - return -1; - } - -CONTENT_TRANSFER_E: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto CONTENT_TRANSFER_EN; - case 'n': - if (last) { - return -1; - } - goto CONTENT_TRANSFER_EN; - default: - return -1; - } - -CONTENT_TRANSFER_EN: - NEXT_CHAR(); - switch (ch) { - case 'C': - if (last) { - return -1; - } - goto CONTENT_TRANSFER_ENC; - case 'c': - if (last) { - return -1; - } - goto CONTENT_TRANSFER_ENC; - default: - return -1; - } - -CONTENT_TRANSFER_ENC: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto CONTENT_TRANSFER_ENCO; - case 'o': - if (last) { - return -1; - } - goto CONTENT_TRANSFER_ENCO; - default: - return -1; - } - -CONTENT_TRANSFER_ENCO: - NEXT_CHAR(); - switch (ch) { - case 'D': - if (last) { - return -1; - } - goto CONTENT_TRANSFER_ENCOD; - case 'd': - if (last) { - return -1; - } - goto CONTENT_TRANSFER_ENCOD; - default: - return -1; - } - -CONTENT_TRANSFER_ENCOD: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto CONTENT_TRANSFER_ENCODI; - case 'i': - if (last) { - return -1; - } - goto CONTENT_TRANSFER_ENCODI; - default: - return -1; - } - -CONTENT_TRANSFER_ENCODI: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto CONTENT_TRANSFER_ENCODIN; - case 'n': - if (last) { - return -1; - } - goto CONTENT_TRANSFER_ENCODIN; - default: - return -1; - } - -CONTENT_TRANSFER_ENCODIN: - NEXT_CHAR(); - switch (ch) { - case 'G': - if (last) { - return 25; - } - goto CONTENT_TRANSFER_ENCODING; - case 'g': - if (last) { - return 25; - } - goto CONTENT_TRANSFER_ENCODING; - default: - return -1; - } - -CONTENT_TY: - NEXT_CHAR(); - switch (ch) { - case 'P': - if (last) { - return -1; - } - goto CONTENT_TYP; - case 'p': - if (last) { - return -1; - } - goto CONTENT_TYP; - default: - return -1; - } - -CONTENT_TYP: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return 26; - } - goto CONTENT_TYPE; - case 'e': - if (last) { - return 26; - } - goto CONTENT_TYPE; - default: - return -1; - } - -COO: - NEXT_CHAR(); - switch (ch) { - case 'K': - if (last) { - return -1; - } - goto COOK; - case 'k': - if (last) { - return -1; - } - goto COOK; - default: - return -1; - } - -COOK: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto COOKI; - case 'i': - if (last) { - return -1; - } - goto COOKI; - default: - return -1; - } - -COOKI: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return 27; - } - goto COOKIE; - case 'e': - if (last) { - return 27; - } - goto COOKIE; - default: - return -1; - } - -D: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto DA; - case 'a': - if (last) { - return -1; - } - goto DA; - case 'E': - if (last) { - return -1; - } - goto DE; - case 'e': - if (last) { - return -1; - } - goto DE; - case 'I': - if (last) { - return -1; - } - goto DI; - case 'i': - if (last) { - return -1; - } - goto DI; - default: - return -1; - } - -DA: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto DAT; - case 't': - if (last) { - return -1; - } - goto DAT; - default: - return -1; - } - -DAT: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return 28; - } - goto DATE; - case 'e': - if (last) { - return 28; - } - goto DATE; - default: - return -1; - } - -DE: - NEXT_CHAR(); - switch (ch) { - case 'S': - if (last) { - return -1; - } - goto DES; - case 's': - if (last) { - return -1; - } - goto DES; - default: - return -1; - } - -DES: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto DEST; - case 't': - if (last) { - return -1; - } - goto DEST; - default: - return -1; - } - -DEST: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto DESTI; - case 'i': - if (last) { - return -1; - } - goto DESTI; - default: - return -1; - } - -DESTI: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto DESTIN; - case 'n': - if (last) { - return -1; - } - goto DESTIN; - default: - return -1; - } - -DESTIN: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto DESTINA; - case 'a': - if (last) { - return -1; - } - goto DESTINA; - default: - return -1; - } - -DESTINA: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto DESTINAT; - case 't': - if (last) { - return -1; - } - goto DESTINAT; - default: - return -1; - } - -DESTINAT: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto DESTINATI; - case 'i': - if (last) { - return -1; - } - goto DESTINATI; - default: - return -1; - } - -DESTINATI: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto DESTINATIO; - case 'o': - if (last) { - return -1; - } - goto DESTINATIO; - default: - return -1; - } - -DESTINATIO: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return 29; - } - goto DESTINATION; - case 'n': - if (last) { - return 29; - } - goto DESTINATION; - default: - return -1; - } - -DI: - NEXT_CHAR(); - switch (ch) { - case 'G': - if (last) { - return -1; - } - goto DIG; - case 'g': - if (last) { - return -1; - } - goto DIG; - default: - return -1; - } - -DIG: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto DIGE; - case 'e': - if (last) { - return -1; - } - goto DIGE; - default: - return -1; - } - -DIGE: - NEXT_CHAR(); - switch (ch) { - case 'S': - if (last) { - return -1; - } - goto DIGES; - case 's': - if (last) { - return -1; - } - goto DIGES; - default: - return -1; - } - -DIGES: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return 30; - } - goto DIGEST; - case 't': - if (last) { - return 30; - } - goto DIGEST; - default: - return -1; - } - -E: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto ET; - case 't': - if (last) { - return -1; - } - goto ET; - case 'X': - if (last) { - return -1; - } - goto EX; - case 'x': - if (last) { - return -1; - } - goto EX; - default: - return -1; - } - -ET: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto ETA; - case 'a': - if (last) { - return -1; - } - goto ETA; - default: - return -1; - } - -ETA: - NEXT_CHAR(); - switch (ch) { - case 'G': - if (last) { - return 31; - } - goto ETAG; - case 'g': - if (last) { - return 31; - } - goto ETAG; - default: - return -1; - } - -EX: - NEXT_CHAR(); - switch (ch) { - case 'P': - if (last) { - return -1; - } - goto EXP; - case 'p': - if (last) { - return -1; - } - goto EXP; - default: - return -1; - } - -EXP: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto EXPE; - case 'e': - if (last) { - return -1; - } - goto EXPE; - case 'I': - if (last) { - return -1; - } - goto EXPI; - case 'i': - if (last) { - return -1; - } - goto EXPI; - default: - return -1; - } - -EXPE: - NEXT_CHAR(); - switch (ch) { - case 'C': - if (last) { - return -1; - } - goto EXPEC; - case 'c': - if (last) { - return -1; - } - goto EXPEC; - default: - return -1; - } - -EXPEC: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return 32; - } - goto EXPECT; - case 't': - if (last) { - return 32; - } - goto EXPECT; - default: - return -1; - } - -EXPI: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto EXPIR; - case 'r': - if (last) { - return -1; - } - goto EXPIR; - default: - return -1; - } - -EXPIR: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto EXPIRE; - case 'e': - if (last) { - return -1; - } - goto EXPIRE; - default: - return -1; - } - -EXPIRE: - NEXT_CHAR(); - switch (ch) { - case 'S': - if (last) { - return 33; - } - goto EXPIRES; - case 's': - if (last) { - return 33; - } - goto EXPIRES; - default: - return -1; - } - -F: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto FO; - case 'o': - if (last) { - return -1; - } - goto FO; - case 'R': - if (last) { - return -1; - } - goto FR; - case 'r': - if (last) { - return -1; - } - goto FR; - default: - return -1; - } - -FO: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto FOR; - case 'r': - if (last) { - return -1; - } - goto FOR; - default: - return -1; - } - -FOR: - NEXT_CHAR(); - switch (ch) { - case 'W': - if (last) { - return -1; - } - goto FORW; - case 'w': - if (last) { - return -1; - } - goto FORW; - default: - return -1; - } - -FORW: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto FORWA; - case 'a': - if (last) { - return -1; - } - goto FORWA; - default: - return -1; - } - -FORWA: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto FORWAR; - case 'r': - if (last) { - return -1; - } - goto FORWAR; - default: - return -1; - } - -FORWAR: - NEXT_CHAR(); - switch (ch) { - case 'D': - if (last) { - return -1; - } - goto FORWARD; - case 'd': - if (last) { - return -1; - } - goto FORWARD; - default: - return -1; - } - -FORWARD: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto FORWARDE; - case 'e': - if (last) { - return -1; - } - goto FORWARDE; - default: - return -1; - } - -FORWARDE: - NEXT_CHAR(); - switch (ch) { - case 'D': - if (last) { - return 34; - } - goto FORWARDED; - case 'd': - if (last) { - return 34; - } - goto FORWARDED; - default: - return -1; - } - -FR: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto FRO; - case 'o': - if (last) { - return -1; - } - goto FRO; - default: - return -1; - } - -FRO: - NEXT_CHAR(); - switch (ch) { - case 'M': - if (last) { - return 35; - } - goto FROM; - case 'm': - if (last) { - return 35; - } - goto FROM; - default: - return -1; - } - -H: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto HO; - case 'o': - if (last) { - return -1; - } - goto HO; - default: - return -1; - } - -HO: - NEXT_CHAR(); - switch (ch) { - case 'S': - if (last) { - return -1; - } - goto HOS; - case 's': - if (last) { - return -1; - } - goto HOS; - default: - return -1; - } - -HOS: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return 36; - } - goto HOST; - case 't': - if (last) { - return 36; - } - goto HOST; - default: - return -1; - } - -I: - NEXT_CHAR(); - switch (ch) { - case 'F': - if (last) { - return -1; - } - goto IF; - case 'f': - if (last) { - return -1; - } - goto IF; - default: - return -1; - } - -IF: - NEXT_CHAR(); - switch (ch) { - case '-': - if (last) { - return -1; - } - goto IF_; - default: - return -1; - } - -IF_: - NEXT_CHAR(); - switch (ch) { - case 'M': - if (last) { - return -1; - } - goto IF_M; - case 'm': - if (last) { - return -1; - } - goto IF_M; - case 'N': - if (last) { - return -1; - } - goto IF_N; - case 'n': - if (last) { - return -1; - } - goto IF_N; - case 'R': - if (last) { - return -1; - } - goto IF_R; - case 'r': - if (last) { - return -1; - } - goto IF_R; - case 'U': - if (last) { - return -1; - } - goto IF_U; - case 'u': - if (last) { - return -1; - } - goto IF_U; - default: - return -1; - } - -IF_M: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto IF_MA; - case 'a': - if (last) { - return -1; - } - goto IF_MA; - case 'O': - if (last) { - return -1; - } - goto IF_MO; - case 'o': - if (last) { - return -1; - } - goto IF_MO; - default: - return -1; - } - -IF_MA: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto IF_MAT; - case 't': - if (last) { - return -1; - } - goto IF_MAT; - default: - return -1; - } - -IF_MAT: - NEXT_CHAR(); - switch (ch) { - case 'C': - if (last) { - return -1; - } - goto IF_MATC; - case 'c': - if (last) { - return -1; - } - goto IF_MATC; - default: - return -1; - } - -IF_MATC: - NEXT_CHAR(); - switch (ch) { - case 'H': - if (last) { - return 37; - } - goto IF_MATCH; - case 'h': - if (last) { - return 37; - } - goto IF_MATCH; - default: - return -1; - } - -IF_MO: - NEXT_CHAR(); - switch (ch) { - case 'D': - if (last) { - return -1; - } - goto IF_MOD; - case 'd': - if (last) { - return -1; - } - goto IF_MOD; - default: - return -1; - } - -IF_MOD: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto IF_MODI; - case 'i': - if (last) { - return -1; - } - goto IF_MODI; - default: - return -1; - } - -IF_MODI: - NEXT_CHAR(); - switch (ch) { - case 'F': - if (last) { - return -1; - } - goto IF_MODIF; - case 'f': - if (last) { - return -1; - } - goto IF_MODIF; - default: - return -1; - } - -IF_MODIF: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto IF_MODIFI; - case 'i': - if (last) { - return -1; - } - goto IF_MODIFI; - default: - return -1; - } - -IF_MODIFI: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto IF_MODIFIE; - case 'e': - if (last) { - return -1; - } - goto IF_MODIFIE; - default: - return -1; - } - -IF_MODIFIE: - NEXT_CHAR(); - switch (ch) { - case 'D': - if (last) { - return -1; - } - goto IF_MODIFIED; - case 'd': - if (last) { - return -1; - } - goto IF_MODIFIED; - default: - return -1; - } - -IF_MODIFIED: - NEXT_CHAR(); - switch (ch) { - case '-': - if (last) { - return -1; - } - goto IF_MODIFIED_; - default: - return -1; - } - -IF_MODIFIED_: - NEXT_CHAR(); - switch (ch) { - case 'S': - if (last) { - return -1; - } - goto IF_MODIFIED_S; - case 's': - if (last) { - return -1; - } - goto IF_MODIFIED_S; - default: - return -1; - } - -IF_MODIFIED_S: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto IF_MODIFIED_SI; - case 'i': - if (last) { - return -1; - } - goto IF_MODIFIED_SI; - default: - return -1; - } - -IF_MODIFIED_SI: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto IF_MODIFIED_SIN; - case 'n': - if (last) { - return -1; - } - goto IF_MODIFIED_SIN; - default: - return -1; - } - -IF_MODIFIED_SIN: - NEXT_CHAR(); - switch (ch) { - case 'C': - if (last) { - return -1; - } - goto IF_MODIFIED_SINC; - case 'c': - if (last) { - return -1; - } - goto IF_MODIFIED_SINC; - default: - return -1; - } - -IF_MODIFIED_SINC: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return 38; - } - goto IF_MODIFIED_SINCE; - case 'e': - if (last) { - return 38; - } - goto IF_MODIFIED_SINCE; - default: - return -1; - } - -IF_N: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto IF_NO; - case 'o': - if (last) { - return -1; - } - goto IF_NO; - default: - return -1; - } - -IF_NO: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto IF_NON; - case 'n': - if (last) { - return -1; - } - goto IF_NON; - default: - return -1; - } - -IF_NON: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto IF_NONE; - case 'e': - if (last) { - return -1; - } - goto IF_NONE; - default: - return -1; - } - -IF_NONE: - NEXT_CHAR(); - switch (ch) { - case '-': - if (last) { - return -1; - } - goto IF_NONE_; - default: - return -1; - } - -IF_NONE_: - NEXT_CHAR(); - switch (ch) { - case 'M': - if (last) { - return -1; - } - goto IF_NONE_M; - case 'm': - if (last) { - return -1; - } - goto IF_NONE_M; - default: - return -1; - } - -IF_NONE_M: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto IF_NONE_MA; - case 'a': - if (last) { - return -1; - } - goto IF_NONE_MA; - default: - return -1; - } - -IF_NONE_MA: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto IF_NONE_MAT; - case 't': - if (last) { - return -1; - } - goto IF_NONE_MAT; - default: - return -1; - } - -IF_NONE_MAT: - NEXT_CHAR(); - switch (ch) { - case 'C': - if (last) { - return -1; - } - goto IF_NONE_MATC; - case 'c': - if (last) { - return -1; - } - goto IF_NONE_MATC; - default: - return -1; - } - -IF_NONE_MATC: - NEXT_CHAR(); - switch (ch) { - case 'H': - if (last) { - return 39; - } - goto IF_NONE_MATCH; - case 'h': - if (last) { - return 39; - } - goto IF_NONE_MATCH; - default: - return -1; - } - -IF_R: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto IF_RA; - case 'a': - if (last) { - return -1; - } - goto IF_RA; - default: - return -1; - } - -IF_RA: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto IF_RAN; - case 'n': - if (last) { - return -1; - } - goto IF_RAN; - default: - return -1; - } - -IF_RAN: - NEXT_CHAR(); - switch (ch) { - case 'G': - if (last) { - return -1; - } - goto IF_RANG; - case 'g': - if (last) { - return -1; - } - goto IF_RANG; - default: - return -1; - } - -IF_RANG: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return 40; - } - goto IF_RANGE; - case 'e': - if (last) { - return 40; - } - goto IF_RANGE; - default: - return -1; - } - -IF_U: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto IF_UN; - case 'n': - if (last) { - return -1; - } - goto IF_UN; - default: - return -1; - } - -IF_UN: - NEXT_CHAR(); - switch (ch) { - case 'M': - if (last) { - return -1; - } - goto IF_UNM; - case 'm': - if (last) { - return -1; - } - goto IF_UNM; - default: - return -1; - } - -IF_UNM: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto IF_UNMO; - case 'o': - if (last) { - return -1; - } - goto IF_UNMO; - default: - return -1; - } - -IF_UNMO: - NEXT_CHAR(); - switch (ch) { - case 'D': - if (last) { - return -1; - } - goto IF_UNMOD; - case 'd': - if (last) { - return -1; - } - goto IF_UNMOD; - default: - return -1; - } - -IF_UNMOD: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto IF_UNMODI; - case 'i': - if (last) { - return -1; - } - goto IF_UNMODI; - default: - return -1; - } - -IF_UNMODI: - NEXT_CHAR(); - switch (ch) { - case 'F': - if (last) { - return -1; - } - goto IF_UNMODIF; - case 'f': - if (last) { - return -1; - } - goto IF_UNMODIF; - default: - return -1; - } - -IF_UNMODIF: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto IF_UNMODIFI; - case 'i': - if (last) { - return -1; - } - goto IF_UNMODIFI; - default: - return -1; - } - -IF_UNMODIFI: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto IF_UNMODIFIE; - case 'e': - if (last) { - return -1; - } - goto IF_UNMODIFIE; - default: - return -1; - } - -IF_UNMODIFIE: - NEXT_CHAR(); - switch (ch) { - case 'D': - if (last) { - return -1; - } - goto IF_UNMODIFIED; - case 'd': - if (last) { - return -1; - } - goto IF_UNMODIFIED; - default: - return -1; - } - -IF_UNMODIFIED: - NEXT_CHAR(); - switch (ch) { - case '-': - if (last) { - return -1; - } - goto IF_UNMODIFIED_; - default: - return -1; - } - -IF_UNMODIFIED_: - NEXT_CHAR(); - switch (ch) { - case 'S': - if (last) { - return -1; - } - goto IF_UNMODIFIED_S; - case 's': - if (last) { - return -1; - } - goto IF_UNMODIFIED_S; - default: - return -1; - } - -IF_UNMODIFIED_S: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto IF_UNMODIFIED_SI; - case 'i': - if (last) { - return -1; - } - goto IF_UNMODIFIED_SI; - default: - return -1; - } - -IF_UNMODIFIED_SI: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto IF_UNMODIFIED_SIN; - case 'n': - if (last) { - return -1; - } - goto IF_UNMODIFIED_SIN; - default: - return -1; - } - -IF_UNMODIFIED_SIN: - NEXT_CHAR(); - switch (ch) { - case 'C': - if (last) { - return -1; - } - goto IF_UNMODIFIED_SINC; - case 'c': - if (last) { - return -1; - } - goto IF_UNMODIFIED_SINC; - default: - return -1; - } - -IF_UNMODIFIED_SINC: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return 41; - } - goto IF_UNMODIFIED_SINCE; - case 'e': - if (last) { - return 41; - } - goto IF_UNMODIFIED_SINCE; - default: - return -1; - } - -K: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto KE; - case 'e': - if (last) { - return -1; - } - goto KE; - default: - return -1; - } - -KE: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto KEE; - case 'e': - if (last) { - return -1; - } - goto KEE; - default: - return -1; - } - -KEE: - NEXT_CHAR(); - switch (ch) { - case 'P': - if (last) { - return -1; - } - goto KEEP; - case 'p': - if (last) { - return -1; - } - goto KEEP; - default: - return -1; - } - -KEEP: - NEXT_CHAR(); - switch (ch) { - case '-': - if (last) { - return -1; - } - goto KEEP_; - default: - return -1; - } - -KEEP_: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto KEEP_A; - case 'a': - if (last) { - return -1; - } - goto KEEP_A; - default: - return -1; - } - -KEEP_A: - NEXT_CHAR(); - switch (ch) { - case 'L': - if (last) { - return -1; - } - goto KEEP_AL; - case 'l': - if (last) { - return -1; - } - goto KEEP_AL; - default: - return -1; - } - -KEEP_AL: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto KEEP_ALI; - case 'i': - if (last) { - return -1; - } - goto KEEP_ALI; - default: - return -1; - } - -KEEP_ALI: - NEXT_CHAR(); - switch (ch) { - case 'V': - if (last) { - return -1; - } - goto KEEP_ALIV; - case 'v': - if (last) { - return -1; - } - goto KEEP_ALIV; - default: - return -1; - } - -KEEP_ALIV: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return 42; - } - goto KEEP_ALIVE; - case 'e': - if (last) { - return 42; - } - goto KEEP_ALIVE; - default: - return -1; - } - -L: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto LA; - case 'a': - if (last) { - return -1; - } - goto LA; - case 'I': - if (last) { - return -1; - } - goto LI; - case 'i': - if (last) { - return -1; - } - goto LI; - case 'O': - if (last) { - return -1; - } - goto LO; - case 'o': - if (last) { - return -1; - } - goto LO; - default: - return -1; - } - -LA: - NEXT_CHAR(); - switch (ch) { - case 'S': - if (last) { - return -1; - } - goto LAS; - case 's': - if (last) { - return -1; - } - goto LAS; - default: - return -1; - } - -LAS: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto LAST; - case 't': - if (last) { - return -1; - } - goto LAST; - default: - return -1; - } - -LAST: - NEXT_CHAR(); - switch (ch) { - case '-': - if (last) { - return -1; - } - goto LAST_; - default: - return -1; - } - -LAST_: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto LAST_E; - case 'e': - if (last) { - return -1; - } - goto LAST_E; - case 'M': - if (last) { - return -1; - } - goto LAST_M; - case 'm': - if (last) { - return -1; - } - goto LAST_M; - default: - return -1; - } - -LAST_E: - NEXT_CHAR(); - switch (ch) { - case 'V': - if (last) { - return -1; - } - goto LAST_EV; - case 'v': - if (last) { - return -1; - } - goto LAST_EV; - default: - return -1; - } - -LAST_EV: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto LAST_EVE; - case 'e': - if (last) { - return -1; - } - goto LAST_EVE; - default: - return -1; - } - -LAST_EVE: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto LAST_EVEN; - case 'n': - if (last) { - return -1; - } - goto LAST_EVEN; - default: - return -1; - } - -LAST_EVEN: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto LAST_EVENT; - case 't': - if (last) { - return -1; - } - goto LAST_EVENT; - default: - return -1; - } - -LAST_EVENT: - NEXT_CHAR(); - switch (ch) { - case '-': - if (last) { - return -1; - } - goto LAST_EVENT_; - default: - return -1; - } - -LAST_EVENT_: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto LAST_EVENT_I; - case 'i': - if (last) { - return -1; - } - goto LAST_EVENT_I; - default: - return -1; - } - -LAST_EVENT_I: - NEXT_CHAR(); - switch (ch) { - case 'D': - if (last) { - return 43; - } - goto LAST_EVENT_ID; - case 'd': - if (last) { - return 43; - } - goto LAST_EVENT_ID; - default: - return -1; - } - -LAST_M: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto LAST_MO; - case 'o': - if (last) { - return -1; - } - goto LAST_MO; - default: - return -1; - } - -LAST_MO: - NEXT_CHAR(); - switch (ch) { - case 'D': - if (last) { - return -1; - } - goto LAST_MOD; - case 'd': - if (last) { - return -1; - } - goto LAST_MOD; - default: - return -1; - } - -LAST_MOD: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto LAST_MODI; - case 'i': - if (last) { - return -1; - } - goto LAST_MODI; - default: - return -1; - } - -LAST_MODI: - NEXT_CHAR(); - switch (ch) { - case 'F': - if (last) { - return -1; - } - goto LAST_MODIF; - case 'f': - if (last) { - return -1; - } - goto LAST_MODIF; - default: - return -1; - } - -LAST_MODIF: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto LAST_MODIFI; - case 'i': - if (last) { - return -1; - } - goto LAST_MODIFI; - default: - return -1; - } - -LAST_MODIFI: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto LAST_MODIFIE; - case 'e': - if (last) { - return -1; - } - goto LAST_MODIFIE; - default: - return -1; - } - -LAST_MODIFIE: - NEXT_CHAR(); - switch (ch) { - case 'D': - if (last) { - return 44; - } - goto LAST_MODIFIED; - case 'd': - if (last) { - return 44; - } - goto LAST_MODIFIED; - default: - return -1; - } - -LI: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto LIN; - case 'n': - if (last) { - return -1; - } - goto LIN; - default: - return -1; - } - -LIN: - NEXT_CHAR(); - switch (ch) { - case 'K': - if (last) { - return 45; - } - goto LINK; - case 'k': - if (last) { - return 45; - } - goto LINK; - default: - return -1; - } - -LO: - NEXT_CHAR(); - switch (ch) { - case 'C': - if (last) { - return -1; - } - goto LOC; - case 'c': - if (last) { - return -1; - } - goto LOC; - default: - return -1; - } - -LOC: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto LOCA; - case 'a': - if (last) { - return -1; - } - goto LOCA; - default: - return -1; - } - -LOCA: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto LOCAT; - case 't': - if (last) { - return -1; - } - goto LOCAT; - default: - return -1; - } - -LOCAT: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto LOCATI; - case 'i': - if (last) { - return -1; - } - goto LOCATI; - default: - return -1; - } - -LOCATI: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto LOCATIO; - case 'o': - if (last) { - return -1; - } - goto LOCATIO; - default: - return -1; - } - -LOCATIO: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return 46; - } - goto LOCATION; - case 'n': - if (last) { - return 46; - } - goto LOCATION; - default: - return -1; - } - -M: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto MA; - case 'a': - if (last) { - return -1; - } - goto MA; - default: - return -1; - } - -MA: - NEXT_CHAR(); - switch (ch) { - case 'X': - if (last) { - return -1; - } - goto MAX; - case 'x': - if (last) { - return -1; - } - goto MAX; - default: - return -1; - } - -MAX: - NEXT_CHAR(); - switch (ch) { - case '-': - if (last) { - return -1; - } - goto MAX_; - default: - return -1; - } - -MAX_: - NEXT_CHAR(); - switch (ch) { - case 'F': - if (last) { - return -1; - } - goto MAX_F; - case 'f': - if (last) { - return -1; - } - goto MAX_F; - default: - return -1; - } - -MAX_F: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto MAX_FO; - case 'o': - if (last) { - return -1; - } - goto MAX_FO; - default: - return -1; - } - -MAX_FO: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto MAX_FOR; - case 'r': - if (last) { - return -1; - } - goto MAX_FOR; - default: - return -1; - } - -MAX_FOR: - NEXT_CHAR(); - switch (ch) { - case 'W': - if (last) { - return -1; - } - goto MAX_FORW; - case 'w': - if (last) { - return -1; - } - goto MAX_FORW; - default: - return -1; - } - -MAX_FORW: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto MAX_FORWA; - case 'a': - if (last) { - return -1; - } - goto MAX_FORWA; - default: - return -1; - } - -MAX_FORWA: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto MAX_FORWAR; - case 'r': - if (last) { - return -1; - } - goto MAX_FORWAR; - default: - return -1; - } - -MAX_FORWAR: - NEXT_CHAR(); - switch (ch) { - case 'D': - if (last) { - return -1; - } - goto MAX_FORWARD; - case 'd': - if (last) { - return -1; - } - goto MAX_FORWARD; - default: - return -1; - } - -MAX_FORWARD: - NEXT_CHAR(); - switch (ch) { - case 'S': - if (last) { - return 47; - } - goto MAX_FORWARDS; - case 's': - if (last) { - return 47; - } - goto MAX_FORWARDS; - default: - return -1; - } - -O: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto OR; - case 'r': - if (last) { - return -1; - } - goto OR; - default: - return -1; - } - -OR: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto ORI; - case 'i': - if (last) { - return -1; - } - goto ORI; - default: - return -1; - } - -ORI: - NEXT_CHAR(); - switch (ch) { - case 'G': - if (last) { - return -1; - } - goto ORIG; - case 'g': - if (last) { - return -1; - } - goto ORIG; - default: - return -1; - } - -ORIG: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto ORIGI; - case 'i': - if (last) { - return -1; - } - goto ORIGI; - default: - return -1; - } - -ORIGI: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return 48; - } - goto ORIGIN; - case 'n': - if (last) { - return 48; - } - goto ORIGIN; - default: - return -1; - } - -P: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto PR; - case 'r': - if (last) { - return -1; - } - goto PR; - default: - return -1; - } - -PR: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto PRA; - case 'a': - if (last) { - return -1; - } - goto PRA; - case 'O': - if (last) { - return -1; - } - goto PRO; - case 'o': - if (last) { - return -1; - } - goto PRO; - default: - return -1; - } - -PRA: - NEXT_CHAR(); - switch (ch) { - case 'G': - if (last) { - return -1; - } - goto PRAG; - case 'g': - if (last) { - return -1; - } - goto PRAG; - default: - return -1; - } - -PRAG: - NEXT_CHAR(); - switch (ch) { - case 'M': - if (last) { - return -1; - } - goto PRAGM; - case 'm': - if (last) { - return -1; - } - goto PRAGM; - default: - return -1; - } - -PRAGM: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return 49; - } - goto PRAGMA; - case 'a': - if (last) { - return 49; - } - goto PRAGMA; - default: - return -1; - } - -PRO: - NEXT_CHAR(); - switch (ch) { - case 'X': - if (last) { - return -1; - } - goto PROX; - case 'x': - if (last) { - return -1; - } - goto PROX; - default: - return -1; - } - -PROX: - NEXT_CHAR(); - switch (ch) { - case 'Y': - if (last) { - return -1; - } - goto PROXY; - case 'y': - if (last) { - return -1; - } - goto PROXY; - default: - return -1; - } - -PROXY: - NEXT_CHAR(); - switch (ch) { - case '-': - if (last) { - return -1; - } - goto PROXY_; - default: - return -1; - } - -PROXY_: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto PROXY_A; - case 'a': - if (last) { - return -1; - } - goto PROXY_A; - default: - return -1; - } - -PROXY_A: - NEXT_CHAR(); - switch (ch) { - case 'U': - if (last) { - return -1; - } - goto PROXY_AU; - case 'u': - if (last) { - return -1; - } - goto PROXY_AU; - default: - return -1; - } - -PROXY_AU: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto PROXY_AUT; - case 't': - if (last) { - return -1; - } - goto PROXY_AUT; - default: - return -1; - } - -PROXY_AUT: - NEXT_CHAR(); - switch (ch) { - case 'H': - if (last) { - return -1; - } - goto PROXY_AUTH; - case 'h': - if (last) { - return -1; - } - goto PROXY_AUTH; - default: - return -1; - } - -PROXY_AUTH: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto PROXY_AUTHE; - case 'e': - if (last) { - return -1; - } - goto PROXY_AUTHE; - case 'O': - if (last) { - return -1; - } - goto PROXY_AUTHO; - case 'o': - if (last) { - return -1; - } - goto PROXY_AUTHO; - default: - return -1; - } - -PROXY_AUTHE: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto PROXY_AUTHEN; - case 'n': - if (last) { - return -1; - } - goto PROXY_AUTHEN; - default: - return -1; - } - -PROXY_AUTHEN: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto PROXY_AUTHENT; - case 't': - if (last) { - return -1; - } - goto PROXY_AUTHENT; - default: - return -1; - } - -PROXY_AUTHENT: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto PROXY_AUTHENTI; - case 'i': - if (last) { - return -1; - } - goto PROXY_AUTHENTI; - default: - return -1; - } - -PROXY_AUTHENTI: - NEXT_CHAR(); - switch (ch) { - case 'C': - if (last) { - return -1; - } - goto PROXY_AUTHENTIC; - case 'c': - if (last) { - return -1; - } - goto PROXY_AUTHENTIC; - default: - return -1; - } - -PROXY_AUTHENTIC: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto PROXY_AUTHENTICA; - case 'a': - if (last) { - return -1; - } - goto PROXY_AUTHENTICA; - default: - return -1; - } - -PROXY_AUTHENTICA: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto PROXY_AUTHENTICAT; - case 't': - if (last) { - return -1; - } - goto PROXY_AUTHENTICAT; - default: - return -1; - } - -PROXY_AUTHENTICAT: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return 50; - } - goto PROXY_AUTHENTICATE; - case 'e': - if (last) { - return 50; - } - goto PROXY_AUTHENTICATE; - default: - return -1; - } - -PROXY_AUTHO: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto PROXY_AUTHOR; - case 'r': - if (last) { - return -1; - } - goto PROXY_AUTHOR; - default: - return -1; - } - -PROXY_AUTHOR: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto PROXY_AUTHORI; - case 'i': - if (last) { - return -1; - } - goto PROXY_AUTHORI; - default: - return -1; - } - -PROXY_AUTHORI: - NEXT_CHAR(); - switch (ch) { - case 'Z': - if (last) { - return -1; - } - goto PROXY_AUTHORIZ; - case 'z': - if (last) { - return -1; - } - goto PROXY_AUTHORIZ; - default: - return -1; - } - -PROXY_AUTHORIZ: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto PROXY_AUTHORIZA; - case 'a': - if (last) { - return -1; - } - goto PROXY_AUTHORIZA; - default: - return -1; - } - -PROXY_AUTHORIZA: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto PROXY_AUTHORIZAT; - case 't': - if (last) { - return -1; - } - goto PROXY_AUTHORIZAT; - default: - return -1; - } - -PROXY_AUTHORIZAT: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto PROXY_AUTHORIZATI; - case 'i': - if (last) { - return -1; - } - goto PROXY_AUTHORIZATI; - default: - return -1; - } - -PROXY_AUTHORIZATI: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto PROXY_AUTHORIZATIO; - case 'o': - if (last) { - return -1; - } - goto PROXY_AUTHORIZATIO; - default: - return -1; - } - -PROXY_AUTHORIZATIO: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return 51; - } - goto PROXY_AUTHORIZATION; - case 'n': - if (last) { - return 51; - } - goto PROXY_AUTHORIZATION; - default: - return -1; - } - -R: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto RA; - case 'a': - if (last) { - return -1; - } - goto RA; - case 'E': - if (last) { - return -1; - } - goto RE; - case 'e': - if (last) { - return -1; - } - goto RE; - default: - return -1; - } - -RA: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto RAN; - case 'n': - if (last) { - return -1; - } - goto RAN; - default: - return -1; - } - -RAN: - NEXT_CHAR(); - switch (ch) { - case 'G': - if (last) { - return -1; - } - goto RANG; - case 'g': - if (last) { - return -1; - } - goto RANG; - default: - return -1; - } - -RANG: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return 52; - } - goto RANGE; - case 'e': - if (last) { - return 52; - } - goto RANGE; - default: - return -1; - } - -RE: - NEXT_CHAR(); - switch (ch) { - case 'F': - if (last) { - return -1; - } - goto REF; - case 'f': - if (last) { - return -1; - } - goto REF; - case 'T': - if (last) { - return -1; - } - goto RET; - case 't': - if (last) { - return -1; - } - goto RET; - default: - return -1; - } - -REF: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto REFE; - case 'e': - if (last) { - return -1; - } - goto REFE; - default: - return -1; - } - -REFE: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto REFER; - case 'r': - if (last) { - return -1; - } - goto REFER; - default: - return -1; - } - -REFER: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto REFERE; - case 'e': - if (last) { - return -1; - } - goto REFERE; - default: - return -1; - } - -REFERE: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return 53; - } - goto REFERER; - case 'r': - if (last) { - return 53; - } - goto REFERER; - default: - return -1; - } - -RET: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto RETR; - case 'r': - if (last) { - return -1; - } - goto RETR; - default: - return -1; - } - -RETR: - NEXT_CHAR(); - switch (ch) { - case 'Y': - if (last) { - return -1; - } - goto RETRY; - case 'y': - if (last) { - return -1; - } - goto RETRY; - default: - return -1; - } - -RETRY: - NEXT_CHAR(); - switch (ch) { - case '-': - if (last) { - return -1; - } - goto RETRY_; - default: - return -1; - } - -RETRY_: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto RETRY_A; - case 'a': - if (last) { - return -1; - } - goto RETRY_A; - default: - return -1; - } - -RETRY_A: - NEXT_CHAR(); - switch (ch) { - case 'F': - if (last) { - return -1; - } - goto RETRY_AF; - case 'f': - if (last) { - return -1; - } - goto RETRY_AF; - default: - return -1; - } - -RETRY_AF: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto RETRY_AFT; - case 't': - if (last) { - return -1; - } - goto RETRY_AFT; - default: - return -1; - } - -RETRY_AFT: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto RETRY_AFTE; - case 'e': - if (last) { - return -1; - } - goto RETRY_AFTE; - default: - return -1; - } - -RETRY_AFTE: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return 54; - } - goto RETRY_AFTER; - case 'r': - if (last) { - return 54; - } - goto RETRY_AFTER; - default: - return -1; - } - -S: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto SE; - case 'e': - if (last) { - return -1; - } - goto SE; - default: - return -1; - } - -SE: - NEXT_CHAR(); - switch (ch) { - case 'C': - if (last) { - return -1; - } - goto SEC; - case 'c': - if (last) { - return -1; - } - goto SEC; - case 'R': - if (last) { - return -1; - } - goto SER; - case 'r': - if (last) { - return -1; - } - goto SER; - case 'T': - if (last) { - return -1; - } - goto SET; - case 't': - if (last) { - return -1; - } - goto SET; - default: - return -1; - } - -SEC: - NEXT_CHAR(); - switch (ch) { - case '-': - if (last) { - return -1; - } - goto SEC_; - default: - return -1; - } - -SEC_: - NEXT_CHAR(); - switch (ch) { - case 'W': - if (last) { - return -1; - } - goto SEC_W; - case 'w': - if (last) { - return -1; - } - goto SEC_W; - default: - return -1; - } - -SEC_W: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto SEC_WE; - case 'e': - if (last) { - return -1; - } - goto SEC_WE; - default: - return -1; - } - -SEC_WE: - NEXT_CHAR(); - switch (ch) { - case 'B': - if (last) { - return -1; - } - goto SEC_WEB; - case 'b': - if (last) { - return -1; - } - goto SEC_WEB; - default: - return -1; - } - -SEC_WEB: - NEXT_CHAR(); - switch (ch) { - case 'S': - if (last) { - return -1; - } - goto SEC_WEBS; - case 's': - if (last) { - return -1; - } - goto SEC_WEBS; - default: - return -1; - } - -SEC_WEBS: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto SEC_WEBSO; - case 'o': - if (last) { - return -1; - } - goto SEC_WEBSO; - default: - return -1; - } - -SEC_WEBSO: - NEXT_CHAR(); - switch (ch) { - case 'C': - if (last) { - return -1; - } - goto SEC_WEBSOC; - case 'c': - if (last) { - return -1; - } - goto SEC_WEBSOC; - default: - return -1; - } - -SEC_WEBSOC: - NEXT_CHAR(); - switch (ch) { - case 'K': - if (last) { - return -1; - } - goto SEC_WEBSOCK; - case 'k': - if (last) { - return -1; - } - goto SEC_WEBSOCK; - default: - return -1; - } - -SEC_WEBSOCK: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto SEC_WEBSOCKE; - case 'e': - if (last) { - return -1; - } - goto SEC_WEBSOCKE; - default: - return -1; - } - -SEC_WEBSOCKE: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto SEC_WEBSOCKET; - case 't': - if (last) { - return -1; - } - goto SEC_WEBSOCKET; - default: - return -1; - } - -SEC_WEBSOCKET: - NEXT_CHAR(); - switch (ch) { - case '-': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_; - default: - return -1; - } - -SEC_WEBSOCKET_: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_A; - case 'a': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_A; - case 'E': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_E; - case 'e': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_E; - case 'K': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_K; - case 'k': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_K; - case 'P': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_P; - case 'p': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_P; - case 'V': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_V; - case 'v': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_V; - default: - return -1; - } - -SEC_WEBSOCKET_A: - NEXT_CHAR(); - switch (ch) { - case 'C': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_AC; - case 'c': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_AC; - default: - return -1; - } - -SEC_WEBSOCKET_AC: - NEXT_CHAR(); - switch (ch) { - case 'C': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_ACC; - case 'c': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_ACC; - default: - return -1; - } - -SEC_WEBSOCKET_ACC: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_ACCE; - case 'e': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_ACCE; - default: - return -1; - } - -SEC_WEBSOCKET_ACCE: - NEXT_CHAR(); - switch (ch) { - case 'P': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_ACCEP; - case 'p': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_ACCEP; - default: - return -1; - } - -SEC_WEBSOCKET_ACCEP: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return 55; - } - goto SEC_WEBSOCKET_ACCEPT; - case 't': - if (last) { - return 55; - } - goto SEC_WEBSOCKET_ACCEPT; - default: - return -1; - } - -SEC_WEBSOCKET_E: - NEXT_CHAR(); - switch (ch) { - case 'X': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_EX; - case 'x': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_EX; - default: - return -1; - } - -SEC_WEBSOCKET_EX: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_EXT; - case 't': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_EXT; - default: - return -1; - } - -SEC_WEBSOCKET_EXT: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_EXTE; - case 'e': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_EXTE; - default: - return -1; - } - -SEC_WEBSOCKET_EXTE: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_EXTEN; - case 'n': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_EXTEN; - default: - return -1; - } - -SEC_WEBSOCKET_EXTEN: - NEXT_CHAR(); - switch (ch) { - case 'S': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_EXTENS; - case 's': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_EXTENS; - default: - return -1; - } - -SEC_WEBSOCKET_EXTENS: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_EXTENSI; - case 'i': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_EXTENSI; - default: - return -1; - } - -SEC_WEBSOCKET_EXTENSI: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_EXTENSIO; - case 'o': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_EXTENSIO; - default: - return -1; - } - -SEC_WEBSOCKET_EXTENSIO: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_EXTENSION; - case 'n': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_EXTENSION; - default: - return -1; - } - -SEC_WEBSOCKET_EXTENSION: - NEXT_CHAR(); - switch (ch) { - case 'S': - if (last) { - return 56; - } - goto SEC_WEBSOCKET_EXTENSIONS; - case 's': - if (last) { - return 56; - } - goto SEC_WEBSOCKET_EXTENSIONS; - default: - return -1; - } - -SEC_WEBSOCKET_K: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_KE; - case 'e': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_KE; - default: - return -1; - } - -SEC_WEBSOCKET_KE: - NEXT_CHAR(); - switch (ch) { - case 'Y': - if (last) { - return 57; - } - goto SEC_WEBSOCKET_KEY; - case 'y': - if (last) { - return 57; - } - goto SEC_WEBSOCKET_KEY; - default: - return -1; - } - -SEC_WEBSOCKET_KEY: - NEXT_CHAR(); - switch (ch) { - case '1': - if (last) { - return 58; - } - goto SEC_WEBSOCKET_KEY1; - default: - return -1; - } - -SEC_WEBSOCKET_P: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_PR; - case 'r': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_PR; - default: - return -1; - } - -SEC_WEBSOCKET_PR: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_PRO; - case 'o': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_PRO; - default: - return -1; - } - -SEC_WEBSOCKET_PRO: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_PROT; - case 't': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_PROT; - default: - return -1; - } - -SEC_WEBSOCKET_PROT: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_PROTO; - case 'o': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_PROTO; - default: - return -1; - } - -SEC_WEBSOCKET_PROTO: - NEXT_CHAR(); - switch (ch) { - case 'C': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_PROTOC; - case 'c': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_PROTOC; - default: - return -1; - } - -SEC_WEBSOCKET_PROTOC: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_PROTOCO; - case 'o': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_PROTOCO; - default: - return -1; - } - -SEC_WEBSOCKET_PROTOCO: - NEXT_CHAR(); - switch (ch) { - case 'L': - if (last) { - return 59; - } - goto SEC_WEBSOCKET_PROTOCOL; - case 'l': - if (last) { - return 59; - } - goto SEC_WEBSOCKET_PROTOCOL; - default: - return -1; - } - -SEC_WEBSOCKET_V: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_VE; - case 'e': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_VE; - default: - return -1; - } - -SEC_WEBSOCKET_VE: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_VER; - case 'r': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_VER; - default: - return -1; - } - -SEC_WEBSOCKET_VER: - NEXT_CHAR(); - switch (ch) { - case 'S': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_VERS; - case 's': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_VERS; - default: - return -1; - } - -SEC_WEBSOCKET_VERS: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_VERSI; - case 'i': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_VERSI; - default: - return -1; - } - -SEC_WEBSOCKET_VERSI: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_VERSIO; - case 'o': - if (last) { - return -1; - } - goto SEC_WEBSOCKET_VERSIO; - default: - return -1; - } - -SEC_WEBSOCKET_VERSIO: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return 60; - } - goto SEC_WEBSOCKET_VERSION; - case 'n': - if (last) { - return 60; - } - goto SEC_WEBSOCKET_VERSION; - default: - return -1; - } - -SER: - NEXT_CHAR(); - switch (ch) { - case 'V': - if (last) { - return -1; - } - goto SERV; - case 'v': - if (last) { - return -1; - } - goto SERV; - default: - return -1; - } - -SERV: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto SERVE; - case 'e': - if (last) { - return -1; - } - goto SERVE; - default: - return -1; - } - -SERVE: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return 61; - } - goto SERVER; - case 'r': - if (last) { - return 61; - } - goto SERVER; - default: - return -1; - } - -SET: - NEXT_CHAR(); - switch (ch) { - case '-': - if (last) { - return -1; - } - goto SET_; - default: - return -1; - } - -SET_: - NEXT_CHAR(); - switch (ch) { - case 'C': - if (last) { - return -1; - } - goto SET_C; - case 'c': - if (last) { - return -1; - } - goto SET_C; - default: - return -1; - } - -SET_C: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto SET_CO; - case 'o': - if (last) { - return -1; - } - goto SET_CO; - default: - return -1; - } - -SET_CO: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto SET_COO; - case 'o': - if (last) { - return -1; - } - goto SET_COO; - default: - return -1; - } - -SET_COO: - NEXT_CHAR(); - switch (ch) { - case 'K': - if (last) { - return -1; - } - goto SET_COOK; - case 'k': - if (last) { - return -1; - } - goto SET_COOK; - default: - return -1; - } - -SET_COOK: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto SET_COOKI; - case 'i': - if (last) { - return -1; - } - goto SET_COOKI; - default: - return -1; - } - -SET_COOKI: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return 62; - } - goto SET_COOKIE; - case 'e': - if (last) { - return 62; - } - goto SET_COOKIE; - default: - return -1; - } - -T: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return 63; - } - goto TE; - case 'e': - if (last) { - return 63; - } - goto TE; - case 'R': - if (last) { - return -1; - } - goto TR; - case 'r': - if (last) { - return -1; - } - goto TR; - default: - return -1; - } - -TR: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto TRA; - case 'a': - if (last) { - return -1; - } - goto TRA; - default: - return -1; - } - -TRA: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto TRAI; - case 'i': - if (last) { - return -1; - } - goto TRAI; - case 'N': - if (last) { - return -1; - } - goto TRAN; - case 'n': - if (last) { - return -1; - } - goto TRAN; - default: - return -1; - } - -TRAI: - NEXT_CHAR(); - switch (ch) { - case 'L': - if (last) { - return -1; - } - goto TRAIL; - case 'l': - if (last) { - return -1; - } - goto TRAIL; - default: - return -1; - } - -TRAIL: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto TRAILE; - case 'e': - if (last) { - return -1; - } - goto TRAILE; - default: - return -1; - } - -TRAILE: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return 64; - } - goto TRAILER; - case 'r': - if (last) { - return 64; - } - goto TRAILER; - default: - return -1; - } - -TRAN: - NEXT_CHAR(); - switch (ch) { - case 'S': - if (last) { - return -1; - } - goto TRANS; - case 's': - if (last) { - return -1; - } - goto TRANS; - default: - return -1; - } - -TRANS: - NEXT_CHAR(); - switch (ch) { - case 'F': - if (last) { - return -1; - } - goto TRANSF; - case 'f': - if (last) { - return -1; - } - goto TRANSF; - default: - return -1; - } - -TRANSF: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto TRANSFE; - case 'e': - if (last) { - return -1; - } - goto TRANSFE; - default: - return -1; - } - -TRANSFE: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto TRANSFER; - case 'r': - if (last) { - return -1; - } - goto TRANSFER; - default: - return -1; - } - -TRANSFER: - NEXT_CHAR(); - switch (ch) { - case '-': - if (last) { - return -1; - } - goto TRANSFER_; - default: - return -1; - } - -TRANSFER_: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto TRANSFER_E; - case 'e': - if (last) { - return -1; - } - goto TRANSFER_E; - default: - return -1; - } - -TRANSFER_E: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto TRANSFER_EN; - case 'n': - if (last) { - return -1; - } - goto TRANSFER_EN; - default: - return -1; - } - -TRANSFER_EN: - NEXT_CHAR(); - switch (ch) { - case 'C': - if (last) { - return -1; - } - goto TRANSFER_ENC; - case 'c': - if (last) { - return -1; - } - goto TRANSFER_ENC; - default: - return -1; - } - -TRANSFER_ENC: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto TRANSFER_ENCO; - case 'o': - if (last) { - return -1; - } - goto TRANSFER_ENCO; - default: - return -1; - } - -TRANSFER_ENCO: - NEXT_CHAR(); - switch (ch) { - case 'D': - if (last) { - return -1; - } - goto TRANSFER_ENCOD; - case 'd': - if (last) { - return -1; - } - goto TRANSFER_ENCOD; - default: - return -1; - } - -TRANSFER_ENCOD: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto TRANSFER_ENCODI; - case 'i': - if (last) { - return -1; - } - goto TRANSFER_ENCODI; - default: - return -1; - } - -TRANSFER_ENCODI: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto TRANSFER_ENCODIN; - case 'n': - if (last) { - return -1; - } - goto TRANSFER_ENCODIN; - default: - return -1; - } - -TRANSFER_ENCODIN: - NEXT_CHAR(); - switch (ch) { - case 'G': - if (last) { - return 65; - } - goto TRANSFER_ENCODING; - case 'g': - if (last) { - return 65; - } - goto TRANSFER_ENCODING; - default: - return -1; - } - -U: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto UR; - case 'r': - if (last) { - return -1; - } - goto UR; - case 'P': - if (last) { - return -1; - } - goto UP; - case 'p': - if (last) { - return -1; - } - goto UP; - case 'S': - if (last) { - return -1; - } - goto US; - case 's': - if (last) { - return -1; - } - goto US; - default: - return -1; - } - -UR: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return 66; - } - goto URI; - case 'i': - if (last) { - return 66; - } - goto URI; - default: - return -1; - } - -UP: - NEXT_CHAR(); - switch (ch) { - case 'G': - if (last) { - return -1; - } - goto UPG; - case 'g': - if (last) { - return -1; - } - goto UPG; - default: - return -1; - } - -UPG: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto UPGR; - case 'r': - if (last) { - return -1; - } - goto UPGR; - default: - return -1; - } - -UPGR: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto UPGRA; - case 'a': - if (last) { - return -1; - } - goto UPGRA; - default: - return -1; - } - -UPGRA: - NEXT_CHAR(); - switch (ch) { - case 'D': - if (last) { - return -1; - } - goto UPGRAD; - case 'd': - if (last) { - return -1; - } - goto UPGRAD; - default: - return -1; - } - -UPGRAD: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return 67; - } - goto UPGRADE; - case 'e': - if (last) { - return 67; - } - goto UPGRADE; - default: - return -1; - } - -US: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto USE; - case 'e': - if (last) { - return -1; - } - goto USE; - default: - return -1; - } - -USE: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto USER; - case 'r': - if (last) { - return -1; - } - goto USER; - default: - return -1; - } - -USER: - NEXT_CHAR(); - switch (ch) { - case '-': - if (last) { - return -1; - } - goto USER_; - default: - return -1; - } - -USER_: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto USER_A; - case 'a': - if (last) { - return -1; - } - goto USER_A; - default: - return -1; - } - -USER_A: - NEXT_CHAR(); - switch (ch) { - case 'G': - if (last) { - return -1; - } - goto USER_AG; - case 'g': - if (last) { - return -1; - } - goto USER_AG; - default: - return -1; - } - -USER_AG: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto USER_AGE; - case 'e': - if (last) { - return -1; - } - goto USER_AGE; - default: - return -1; - } - -USER_AGE: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto USER_AGEN; - case 'n': - if (last) { - return -1; - } - goto USER_AGEN; - default: - return -1; - } - -USER_AGEN: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return 68; - } - goto USER_AGENT; - case 't': - if (last) { - return 68; - } - goto USER_AGENT; - default: - return -1; - } - -V: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto VA; - case 'a': - if (last) { - return -1; - } - goto VA; - case 'I': - if (last) { - return -1; - } - goto VI; - case 'i': - if (last) { - return -1; - } - goto VI; - default: - return -1; - } - -VA: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto VAR; - case 'r': - if (last) { - return -1; - } - goto VAR; - default: - return -1; - } - -VAR: - NEXT_CHAR(); - switch (ch) { - case 'Y': - if (last) { - return 69; - } - goto VARY; - case 'y': - if (last) { - return 69; - } - goto VARY; - default: - return -1; - } - -VI: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return 70; - } - goto VIA; - case 'a': - if (last) { - return 70; - } - goto VIA; - default: - return -1; - } - -W: - NEXT_CHAR(); - switch (ch) { - case 'W': - if (last) { - return -1; - } - goto WW; - case 'w': - if (last) { - return -1; - } - goto WW; - case 'A': - if (last) { - return -1; - } - goto WA; - case 'a': - if (last) { - return -1; - } - goto WA; - default: - return -1; - } - -WW: - NEXT_CHAR(); - switch (ch) { - case 'W': - if (last) { - return -1; - } - goto WWW; - case 'w': - if (last) { - return -1; - } - goto WWW; - default: - return -1; - } - -WWW: - NEXT_CHAR(); - switch (ch) { - case '-': - if (last) { - return -1; - } - goto WWW_; - default: - return -1; - } - -WWW_: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto WWW_A; - case 'a': - if (last) { - return -1; - } - goto WWW_A; - default: - return -1; - } - -WWW_A: - NEXT_CHAR(); - switch (ch) { - case 'U': - if (last) { - return -1; - } - goto WWW_AU; - case 'u': - if (last) { - return -1; - } - goto WWW_AU; - default: - return -1; - } - -WWW_AU: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto WWW_AUT; - case 't': - if (last) { - return -1; - } - goto WWW_AUT; - default: - return -1; - } - -WWW_AUT: - NEXT_CHAR(); - switch (ch) { - case 'H': - if (last) { - return -1; - } - goto WWW_AUTH; - case 'h': - if (last) { - return -1; - } - goto WWW_AUTH; - default: - return -1; - } - -WWW_AUTH: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto WWW_AUTHE; - case 'e': - if (last) { - return -1; - } - goto WWW_AUTHE; - default: - return -1; - } - -WWW_AUTHE: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto WWW_AUTHEN; - case 'n': - if (last) { - return -1; - } - goto WWW_AUTHEN; - default: - return -1; - } - -WWW_AUTHEN: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto WWW_AUTHENT; - case 't': - if (last) { - return -1; - } - goto WWW_AUTHENT; - default: - return -1; - } - -WWW_AUTHENT: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto WWW_AUTHENTI; - case 'i': - if (last) { - return -1; - } - goto WWW_AUTHENTI; - default: - return -1; - } - -WWW_AUTHENTI: - NEXT_CHAR(); - switch (ch) { - case 'C': - if (last) { - return -1; - } - goto WWW_AUTHENTIC; - case 'c': - if (last) { - return -1; - } - goto WWW_AUTHENTIC; - default: - return -1; - } - -WWW_AUTHENTIC: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto WWW_AUTHENTICA; - case 'a': - if (last) { - return -1; - } - goto WWW_AUTHENTICA; - default: - return -1; - } - -WWW_AUTHENTICA: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto WWW_AUTHENTICAT; - case 't': - if (last) { - return -1; - } - goto WWW_AUTHENTICAT; - default: - return -1; - } - -WWW_AUTHENTICAT: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return 71; - } - goto WWW_AUTHENTICATE; - case 'e': - if (last) { - return 71; - } - goto WWW_AUTHENTICATE; - default: - return -1; - } - -WA: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto WAN; - case 'n': - if (last) { - return -1; - } - goto WAN; - case 'R': - if (last) { - return -1; - } - goto WAR; - case 'r': - if (last) { - return -1; - } - goto WAR; - default: - return -1; - } - -WAN: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto WANT; - case 't': - if (last) { - return -1; - } - goto WANT; - default: - return -1; - } - -WANT: - NEXT_CHAR(); - switch (ch) { - case '-': - if (last) { - return -1; - } - goto WANT_; - default: - return -1; - } - -WANT_: - NEXT_CHAR(); - switch (ch) { - case 'D': - if (last) { - return -1; - } - goto WANT_D; - case 'd': - if (last) { - return -1; - } - goto WANT_D; - default: - return -1; - } - -WANT_D: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto WANT_DI; - case 'i': - if (last) { - return -1; - } - goto WANT_DI; - default: - return -1; - } - -WANT_DI: - NEXT_CHAR(); - switch (ch) { - case 'G': - if (last) { - return -1; - } - goto WANT_DIG; - case 'g': - if (last) { - return -1; - } - goto WANT_DIG; - default: - return -1; - } - -WANT_DIG: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto WANT_DIGE; - case 'e': - if (last) { - return -1; - } - goto WANT_DIGE; - default: - return -1; - } - -WANT_DIGE: - NEXT_CHAR(); - switch (ch) { - case 'S': - if (last) { - return -1; - } - goto WANT_DIGES; - case 's': - if (last) { - return -1; - } - goto WANT_DIGES; - default: - return -1; - } - -WANT_DIGES: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return 72; - } - goto WANT_DIGEST; - case 't': - if (last) { - return 72; - } - goto WANT_DIGEST; - default: - return -1; - } - -WAR: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto WARN; - case 'n': - if (last) { - return -1; - } - goto WARN; - default: - return -1; - } - -WARN: - NEXT_CHAR(); - switch (ch) { - case 'I': - if (last) { - return -1; - } - goto WARNI; - case 'i': - if (last) { - return -1; - } - goto WARNI; - default: - return -1; - } - -WARNI: - NEXT_CHAR(); - switch (ch) { - case 'N': - if (last) { - return -1; - } - goto WARNIN; - case 'n': - if (last) { - return -1; - } - goto WARNIN; - default: - return -1; - } - -WARNIN: - NEXT_CHAR(); - switch (ch) { - case 'G': - if (last) { - return 73; - } - goto WARNING; - case 'g': - if (last) { - return 73; - } - goto WARNING; - default: - return -1; - } - -X: - NEXT_CHAR(); - switch (ch) { - case '-': - if (last) { - return -1; - } - goto X_; - default: - return -1; - } - -X_: - NEXT_CHAR(); - switch (ch) { - case 'F': - if (last) { - return -1; - } - goto X_F; - case 'f': - if (last) { - return -1; - } - goto X_F; - default: - return -1; - } - -X_F: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto X_FO; - case 'o': - if (last) { - return -1; - } - goto X_FO; - default: - return -1; - } - -X_FO: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto X_FOR; - case 'r': - if (last) { - return -1; - } - goto X_FOR; - default: - return -1; - } - -X_FOR: - NEXT_CHAR(); - switch (ch) { - case 'W': - if (last) { - return -1; - } - goto X_FORW; - case 'w': - if (last) { - return -1; - } - goto X_FORW; - default: - return -1; - } - -X_FORW: - NEXT_CHAR(); - switch (ch) { - case 'A': - if (last) { - return -1; - } - goto X_FORWA; - case 'a': - if (last) { - return -1; - } - goto X_FORWA; - default: - return -1; - } - -X_FORWA: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto X_FORWAR; - case 'r': - if (last) { - return -1; - } - goto X_FORWAR; - default: - return -1; - } - -X_FORWAR: - NEXT_CHAR(); - switch (ch) { - case 'D': - if (last) { - return -1; - } - goto X_FORWARD; - case 'd': - if (last) { - return -1; - } - goto X_FORWARD; - default: - return -1; - } - -X_FORWARD: - NEXT_CHAR(); - switch (ch) { - case 'E': - if (last) { - return -1; - } - goto X_FORWARDE; - case 'e': - if (last) { - return -1; - } - goto X_FORWARDE; - default: - return -1; - } - -X_FORWARDE: - NEXT_CHAR(); - switch (ch) { - case 'D': - if (last) { - return -1; - } - goto X_FORWARDED; - case 'd': - if (last) { - return -1; - } - goto X_FORWARDED; - default: - return -1; - } - -X_FORWARDED: - NEXT_CHAR(); - switch (ch) { - case '-': - if (last) { - return -1; - } - goto X_FORWARDED_; - default: - return -1; - } - -X_FORWARDED_: - NEXT_CHAR(); - switch (ch) { - case 'F': - if (last) { - return -1; - } - goto X_FORWARDED_F; - case 'f': - if (last) { - return -1; - } - goto X_FORWARDED_F; - case 'H': - if (last) { - return -1; - } - goto X_FORWARDED_H; - case 'h': - if (last) { - return -1; - } - goto X_FORWARDED_H; - case 'P': - if (last) { - return -1; - } - goto X_FORWARDED_P; - case 'p': - if (last) { - return -1; - } - goto X_FORWARDED_P; - default: - return -1; - } - -X_FORWARDED_F: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto X_FORWARDED_FO; - case 'o': - if (last) { - return -1; - } - goto X_FORWARDED_FO; - default: - return -1; - } - -X_FORWARDED_FO: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return 74; - } - goto X_FORWARDED_FOR; - case 'r': - if (last) { - return 74; - } - goto X_FORWARDED_FOR; - default: - return -1; - } - -X_FORWARDED_H: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto X_FORWARDED_HO; - case 'o': - if (last) { - return -1; - } - goto X_FORWARDED_HO; - default: - return -1; - } - -X_FORWARDED_HO: - NEXT_CHAR(); - switch (ch) { - case 'S': - if (last) { - return -1; - } - goto X_FORWARDED_HOS; - case 's': - if (last) { - return -1; - } - goto X_FORWARDED_HOS; - default: - return -1; - } - -X_FORWARDED_HOS: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return 75; - } - goto X_FORWARDED_HOST; - case 't': - if (last) { - return 75; - } - goto X_FORWARDED_HOST; - default: - return -1; - } - -X_FORWARDED_P: - NEXT_CHAR(); - switch (ch) { - case 'R': - if (last) { - return -1; - } - goto X_FORWARDED_PR; - case 'r': - if (last) { - return -1; - } - goto X_FORWARDED_PR; - default: - return -1; - } - -X_FORWARDED_PR: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return -1; - } - goto X_FORWARDED_PRO; - case 'o': - if (last) { - return -1; - } - goto X_FORWARDED_PRO; - default: - return -1; - } - -X_FORWARDED_PRO: - NEXT_CHAR(); - switch (ch) { - case 'T': - if (last) { - return -1; - } - goto X_FORWARDED_PROT; - case 't': - if (last) { - return -1; - } - goto X_FORWARDED_PROT; - default: - return -1; - } - -X_FORWARDED_PROT: - NEXT_CHAR(); - switch (ch) { - case 'O': - if (last) { - return 76; - } - goto X_FORWARDED_PROTO; - case 'o': - if (last) { - return 76; - } - goto X_FORWARDED_PROTO; - default: - return -1; - } - -ACCEPT_CHARSET: -ACCEPT_ENCODING: -ACCEPT_LANGUAGE: -ACCEPT_RANGES: -ACCESS_CONTROL_ALLOW_CREDENTIALS: -ACCESS_CONTROL_ALLOW_HEADERS: -ACCESS_CONTROL_ALLOW_METHODS: -ACCESS_CONTROL_ALLOW_ORIGIN: -ACCESS_CONTROL_EXPOSE_HEADERS: -ACCESS_CONTROL_MAX_AGE: -ACCESS_CONTROL_REQUEST_HEADERS: -ACCESS_CONTROL_REQUEST_METHOD: -AGE: -ALLOW: -AUTHORIZATION: -CACHE_CONTROL: -CONNECTION: -CONTENT_DISPOSITION: -CONTENT_ENCODING: -CONTENT_LANGUAGE: -CONTENT_LENGTH: -CONTENT_LOCATION: -CONTENT_MD5: -CONTENT_RANGE: -CONTENT_TRANSFER_ENCODING: -CONTENT_TYPE: -COOKIE: -DATE: -DESTINATION: -DIGEST: -ETAG: -EXPECT: -EXPIRES: -FORWARDED: -FROM: -HOST: -IF_MATCH: -IF_MODIFIED_SINCE: -IF_NONE_MATCH: -IF_RANGE: -IF_UNMODIFIED_SINCE: -KEEP_ALIVE: -LAST_EVENT_ID: -LAST_MODIFIED: -LINK: -LOCATION: -MAX_FORWARDS: -ORIGIN: -PRAGMA: -PROXY_AUTHENTICATE: -PROXY_AUTHORIZATION: -RANGE: -REFERER: -RETRY_AFTER: -SEC_WEBSOCKET_ACCEPT: -SEC_WEBSOCKET_EXTENSIONS: -SEC_WEBSOCKET_KEY1: -SEC_WEBSOCKET_PROTOCOL: -SEC_WEBSOCKET_VERSION: -SERVER: -SET_COOKIE: -TE: -TRAILER: -TRANSFER_ENCODING: -UPGRADE: -URI: -USER_AGENT: -VARY: -VIA: -WANT_DIGEST: -WARNING: -WWW_AUTHENTICATE: -X_FORWARDED_FOR: -X_FORWARDED_HOST: -X_FORWARDED_PROTO: -missing: - /* nothing found */ - return -1; -} diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_find_header.h b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_find_header.h deleted file mode 100644 index 99b7b4f8..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_find_header.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef _FIND_HEADERS_H -#define _FIND_HEADERS_H - -#ifdef __cplusplus -extern "C" { -#endif - -int find_header(const char *str, int size); - - -#ifdef __cplusplus -} -#endif -#endif diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_find_header.pxd b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_find_header.pxd deleted file mode 100644 index 37a6c372..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_find_header.pxd +++ /dev/null @@ -1,2 +0,0 @@ -cdef extern from "_find_header.h": - int find_header(char *, int) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_frozenlist.c b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_frozenlist.c deleted file mode 100644 index 8588a951..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_frozenlist.c +++ /dev/null @@ -1,7512 +0,0 @@ -/* Generated by Cython 0.29.21 */ - -#define PY_SSIZE_T_CLEAN -#include "Python.h" -#ifndef Py_PYTHON_H - #error Python headers needed to compile C extensions, please install development version of Python. -#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) - #error Cython requires Python 2.6+ or Python 3.3+. -#else -#define CYTHON_ABI "0_29_21" -#define CYTHON_HEX_VERSION 0x001D15F0 -#define CYTHON_FUTURE_DIVISION 1 -#include -#ifndef offsetof - #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) -#endif -#if !defined(WIN32) && !defined(MS_WINDOWS) - #ifndef __stdcall - #define __stdcall - #endif - #ifndef __cdecl - #define __cdecl - #endif - #ifndef __fastcall - #define __fastcall - #endif -#endif -#ifndef DL_IMPORT - #define DL_IMPORT(t) t -#endif -#ifndef DL_EXPORT - #define DL_EXPORT(t) t -#endif -#define __PYX_COMMA , -#ifndef HAVE_LONG_LONG - #if PY_VERSION_HEX >= 0x02070000 - #define HAVE_LONG_LONG - #endif -#endif -#ifndef PY_LONG_LONG - #define PY_LONG_LONG LONG_LONG -#endif -#ifndef Py_HUGE_VAL - #define Py_HUGE_VAL HUGE_VAL -#endif -#ifdef PYPY_VERSION - #define CYTHON_COMPILING_IN_PYPY 1 - #define CYTHON_COMPILING_IN_PYSTON 0 - #define CYTHON_COMPILING_IN_CPYTHON 0 - #undef CYTHON_USE_TYPE_SLOTS - #define CYTHON_USE_TYPE_SLOTS 0 - #undef CYTHON_USE_PYTYPE_LOOKUP - #define CYTHON_USE_PYTYPE_LOOKUP 0 - #if PY_VERSION_HEX < 0x03050000 - #undef CYTHON_USE_ASYNC_SLOTS - #define CYTHON_USE_ASYNC_SLOTS 0 - #elif !defined(CYTHON_USE_ASYNC_SLOTS) - #define CYTHON_USE_ASYNC_SLOTS 1 - #endif - #undef CYTHON_USE_PYLIST_INTERNALS - #define CYTHON_USE_PYLIST_INTERNALS 0 - #undef CYTHON_USE_UNICODE_INTERNALS - #define CYTHON_USE_UNICODE_INTERNALS 0 - #undef CYTHON_USE_UNICODE_WRITER - #define CYTHON_USE_UNICODE_WRITER 0 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 - #undef CYTHON_AVOID_BORROWED_REFS - #define CYTHON_AVOID_BORROWED_REFS 1 - #undef CYTHON_ASSUME_SAFE_MACROS - #define CYTHON_ASSUME_SAFE_MACROS 0 - #undef CYTHON_UNPACK_METHODS - #define CYTHON_UNPACK_METHODS 0 - #undef CYTHON_FAST_THREAD_STATE - #define CYTHON_FAST_THREAD_STATE 0 - #undef CYTHON_FAST_PYCALL - #define CYTHON_FAST_PYCALL 0 - #undef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT 0 - #undef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE 0 - #undef CYTHON_USE_DICT_VERSIONS - #define CYTHON_USE_DICT_VERSIONS 0 - #undef CYTHON_USE_EXC_INFO_STACK - #define CYTHON_USE_EXC_INFO_STACK 0 -#elif defined(PYSTON_VERSION) - #define CYTHON_COMPILING_IN_PYPY 0 - #define CYTHON_COMPILING_IN_PYSTON 1 - #define CYTHON_COMPILING_IN_CPYTHON 0 - #ifndef CYTHON_USE_TYPE_SLOTS - #define CYTHON_USE_TYPE_SLOTS 1 - #endif - #undef CYTHON_USE_PYTYPE_LOOKUP - #define CYTHON_USE_PYTYPE_LOOKUP 0 - #undef CYTHON_USE_ASYNC_SLOTS - #define CYTHON_USE_ASYNC_SLOTS 0 - #undef CYTHON_USE_PYLIST_INTERNALS - #define CYTHON_USE_PYLIST_INTERNALS 0 - #ifndef CYTHON_USE_UNICODE_INTERNALS - #define CYTHON_USE_UNICODE_INTERNALS 1 - #endif - #undef CYTHON_USE_UNICODE_WRITER - #define CYTHON_USE_UNICODE_WRITER 0 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 - #ifndef CYTHON_AVOID_BORROWED_REFS - #define CYTHON_AVOID_BORROWED_REFS 0 - #endif - #ifndef CYTHON_ASSUME_SAFE_MACROS - #define CYTHON_ASSUME_SAFE_MACROS 1 - #endif - #ifndef CYTHON_UNPACK_METHODS - #define CYTHON_UNPACK_METHODS 1 - #endif - #undef CYTHON_FAST_THREAD_STATE - #define CYTHON_FAST_THREAD_STATE 0 - #undef CYTHON_FAST_PYCALL - #define CYTHON_FAST_PYCALL 0 - #undef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT 0 - #undef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE 0 - #undef CYTHON_USE_DICT_VERSIONS - #define CYTHON_USE_DICT_VERSIONS 0 - #undef CYTHON_USE_EXC_INFO_STACK - #define CYTHON_USE_EXC_INFO_STACK 0 -#else - #define CYTHON_COMPILING_IN_PYPY 0 - #define CYTHON_COMPILING_IN_PYSTON 0 - #define CYTHON_COMPILING_IN_CPYTHON 1 - #ifndef CYTHON_USE_TYPE_SLOTS - #define CYTHON_USE_TYPE_SLOTS 1 - #endif - #if PY_VERSION_HEX < 0x02070000 - #undef CYTHON_USE_PYTYPE_LOOKUP - #define CYTHON_USE_PYTYPE_LOOKUP 0 - #elif !defined(CYTHON_USE_PYTYPE_LOOKUP) - #define CYTHON_USE_PYTYPE_LOOKUP 1 - #endif - #if PY_MAJOR_VERSION < 3 - #undef CYTHON_USE_ASYNC_SLOTS - #define CYTHON_USE_ASYNC_SLOTS 0 - #elif !defined(CYTHON_USE_ASYNC_SLOTS) - #define CYTHON_USE_ASYNC_SLOTS 1 - #endif - #if PY_VERSION_HEX < 0x02070000 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 - #elif !defined(CYTHON_USE_PYLONG_INTERNALS) - #define CYTHON_USE_PYLONG_INTERNALS 1 - #endif - #ifndef CYTHON_USE_PYLIST_INTERNALS - #define CYTHON_USE_PYLIST_INTERNALS 1 - #endif - #ifndef CYTHON_USE_UNICODE_INTERNALS - #define CYTHON_USE_UNICODE_INTERNALS 1 - #endif - #if PY_VERSION_HEX < 0x030300F0 - #undef CYTHON_USE_UNICODE_WRITER - #define CYTHON_USE_UNICODE_WRITER 0 - #elif !defined(CYTHON_USE_UNICODE_WRITER) - #define CYTHON_USE_UNICODE_WRITER 1 - #endif - #ifndef CYTHON_AVOID_BORROWED_REFS - #define CYTHON_AVOID_BORROWED_REFS 0 - #endif - #ifndef CYTHON_ASSUME_SAFE_MACROS - #define CYTHON_ASSUME_SAFE_MACROS 1 - #endif - #ifndef CYTHON_UNPACK_METHODS - #define CYTHON_UNPACK_METHODS 1 - #endif - #ifndef CYTHON_FAST_THREAD_STATE - #define CYTHON_FAST_THREAD_STATE 1 - #endif - #ifndef CYTHON_FAST_PYCALL - #define CYTHON_FAST_PYCALL 1 - #endif - #ifndef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) - #endif - #ifndef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1) - #endif - #ifndef CYTHON_USE_DICT_VERSIONS - #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1) - #endif - #ifndef CYTHON_USE_EXC_INFO_STACK - #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) - #endif -#endif -#if !defined(CYTHON_FAST_PYCCALL) -#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) -#endif -#if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #undef SHIFT - #undef BASE - #undef MASK - #ifdef SIZEOF_VOID_P - enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; - #endif -#endif -#ifndef __has_attribute - #define __has_attribute(x) 0 -#endif -#ifndef __has_cpp_attribute - #define __has_cpp_attribute(x) 0 -#endif -#ifndef CYTHON_RESTRICT - #if defined(__GNUC__) - #define CYTHON_RESTRICT __restrict__ - #elif defined(_MSC_VER) && _MSC_VER >= 1400 - #define CYTHON_RESTRICT __restrict - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_RESTRICT restrict - #else - #define CYTHON_RESTRICT - #endif -#endif -#ifndef CYTHON_UNUSED -# if defined(__GNUC__) -# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -#endif -#ifndef CYTHON_MAYBE_UNUSED_VAR -# if defined(__cplusplus) - template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { } -# else -# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x) -# endif -#endif -#ifndef CYTHON_NCP_UNUSED -# if CYTHON_COMPILING_IN_CPYTHON -# define CYTHON_NCP_UNUSED -# else -# define CYTHON_NCP_UNUSED CYTHON_UNUSED -# endif -#endif -#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) -#ifdef _MSC_VER - #ifndef _MSC_STDINT_H_ - #if _MSC_VER < 1300 - typedef unsigned char uint8_t; - typedef unsigned int uint32_t; - #else - typedef unsigned __int8 uint8_t; - typedef unsigned __int32 uint32_t; - #endif - #endif -#else - #include -#endif -#ifndef CYTHON_FALLTHROUGH - #if defined(__cplusplus) && __cplusplus >= 201103L - #if __has_cpp_attribute(fallthrough) - #define CYTHON_FALLTHROUGH [[fallthrough]] - #elif __has_cpp_attribute(clang::fallthrough) - #define CYTHON_FALLTHROUGH [[clang::fallthrough]] - #elif __has_cpp_attribute(gnu::fallthrough) - #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] - #endif - #endif - #ifndef CYTHON_FALLTHROUGH - #if __has_attribute(fallthrough) - #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) - #else - #define CYTHON_FALLTHROUGH - #endif - #endif - #if defined(__clang__ ) && defined(__apple_build_version__) - #if __apple_build_version__ < 7000000 - #undef CYTHON_FALLTHROUGH - #define CYTHON_FALLTHROUGH - #endif - #endif -#endif - -#ifndef CYTHON_INLINE - #if defined(__clang__) - #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) - #elif defined(__GNUC__) - #define CYTHON_INLINE __inline__ - #elif defined(_MSC_VER) - #define CYTHON_INLINE __inline - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_INLINE inline - #else - #define CYTHON_INLINE - #endif -#endif - -#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) - #define Py_OptimizeFlag 0 -#endif -#define __PYX_BUILD_PY_SSIZE_T "n" -#define CYTHON_FORMAT_SSIZE_T "z" -#if PY_MAJOR_VERSION < 3 - #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyClass_Type -#else - #define __Pyx_BUILTIN_MODULE_NAME "builtins" -#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2 - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) -#else - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) -#endif - #define __Pyx_DefaultClassType PyType_Type -#endif -#ifndef Py_TPFLAGS_CHECKTYPES - #define Py_TPFLAGS_CHECKTYPES 0 -#endif -#ifndef Py_TPFLAGS_HAVE_INDEX - #define Py_TPFLAGS_HAVE_INDEX 0 -#endif -#ifndef Py_TPFLAGS_HAVE_NEWBUFFER - #define Py_TPFLAGS_HAVE_NEWBUFFER 0 -#endif -#ifndef Py_TPFLAGS_HAVE_FINALIZE - #define Py_TPFLAGS_HAVE_FINALIZE 0 -#endif -#ifndef METH_STACKLESS - #define METH_STACKLESS 0 -#endif -#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) - #ifndef METH_FASTCALL - #define METH_FASTCALL 0x80 - #endif - typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); - typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, - Py_ssize_t nargs, PyObject *kwnames); -#else - #define __Pyx_PyCFunctionFast _PyCFunctionFast - #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords -#endif -#if CYTHON_FAST_PYCCALL -#define __Pyx_PyFastCFunction_Check(func)\ - ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))))) -#else -#define __Pyx_PyFastCFunction_Check(func) 0 -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) - #define PyObject_Malloc(s) PyMem_Malloc(s) - #define PyObject_Free(p) PyMem_Free(p) - #define PyObject_Realloc(p) PyMem_Realloc(p) -#endif -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1 - #define PyMem_RawMalloc(n) PyMem_Malloc(n) - #define PyMem_RawRealloc(p, n) PyMem_Realloc(p, n) - #define PyMem_RawFree(p) PyMem_Free(p) -#endif -#if CYTHON_COMPILING_IN_PYSTON - #define __Pyx_PyCode_HasFreeVars(co) PyCode_HasFreeVars(co) - #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno) -#else - #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) - #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) -#endif -#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000 - #define __Pyx_PyThreadState_Current PyThreadState_GET() -#elif PY_VERSION_HEX >= 0x03060000 - #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() -#elif PY_VERSION_HEX >= 0x03000000 - #define __Pyx_PyThreadState_Current PyThreadState_GET() -#else - #define __Pyx_PyThreadState_Current _PyThreadState_Current -#endif -#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) -#include "pythread.h" -#define Py_tss_NEEDS_INIT 0 -typedef int Py_tss_t; -static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { - *key = PyThread_create_key(); - return 0; -} -static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { - Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); - *key = Py_tss_NEEDS_INIT; - return key; -} -static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { - PyObject_Free(key); -} -static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { - return *key != Py_tss_NEEDS_INIT; -} -static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { - PyThread_delete_key(*key); - *key = Py_tss_NEEDS_INIT; -} -static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { - return PyThread_set_key_value(*key, value); -} -static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { - return PyThread_get_key_value(*key); -} -#endif -#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized) -#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) -#else -#define __Pyx_PyDict_NewPresized(n) PyDict_New() -#endif -#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION - #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) -#else - #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) -#endif -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS -#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) -#else -#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name) -#endif -#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) - #define CYTHON_PEP393_ENABLED 1 - #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ - 0 : _PyUnicode_Ready((PyObject *)(op))) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) - #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) - #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) - #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) - #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) - #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, ch) - #if defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE) - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) - #else - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) - #endif -#else - #define CYTHON_PEP393_ENABLED 0 - #define PyUnicode_1BYTE_KIND 1 - #define PyUnicode_2BYTE_KIND 2 - #define PyUnicode_4BYTE_KIND 4 - #define __Pyx_PyUnicode_READY(op) (0) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) - #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111) - #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) - #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) - #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) - #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = ch) - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) -#endif -#if CYTHON_COMPILING_IN_PYPY - #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) -#else - #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ - PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains) - #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check) - #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format) - #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) -#endif -#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) -#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) -#else - #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) -#endif -#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) - #define PyObject_ASCII(o) PyObject_Repr(o) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBaseString_Type PyUnicode_Type - #define PyStringObject PyUnicodeObject - #define PyString_Type PyUnicode_Type - #define PyString_Check PyUnicode_Check - #define PyString_CheckExact PyUnicode_CheckExact -#ifndef PyObject_Unicode - #define PyObject_Unicode PyObject_Str -#endif -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) - #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) -#else - #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) - #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) -#endif -#ifndef PySet_CheckExact - #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) -#endif -#if PY_VERSION_HEX >= 0x030900A4 - #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) - #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size) -#else - #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt) - #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size) -#endif -#if CYTHON_ASSUME_SAFE_MACROS - #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) -#else - #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyIntObject PyLongObject - #define PyInt_Type PyLong_Type - #define PyInt_Check(op) PyLong_Check(op) - #define PyInt_CheckExact(op) PyLong_CheckExact(op) - #define PyInt_FromString PyLong_FromString - #define PyInt_FromUnicode PyLong_FromUnicode - #define PyInt_FromLong PyLong_FromLong - #define PyInt_FromSize_t PyLong_FromSize_t - #define PyInt_FromSsize_t PyLong_FromSsize_t - #define PyInt_AsLong PyLong_AsLong - #define PyInt_AS_LONG PyLong_AS_LONG - #define PyInt_AsSsize_t PyLong_AsSsize_t - #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask - #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask - #define PyNumber_Int PyNumber_Long -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBoolObject PyLongObject -#endif -#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY - #ifndef PyUnicode_InternFromString - #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) - #endif -#endif -#if PY_VERSION_HEX < 0x030200A4 - typedef long Py_hash_t; - #define __Pyx_PyInt_FromHash_t PyInt_FromLong - #define __Pyx_PyInt_AsHash_t PyInt_AsLong -#else - #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t - #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyMethod_New(func, self, klass) ((self) ? ((void)(klass), PyMethod_New(func, self)) : __Pyx_NewRef(func)) -#else - #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) -#endif -#if CYTHON_USE_ASYNC_SLOTS - #if PY_VERSION_HEX >= 0x030500B1 - #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods - #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) - #else - #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) - #endif -#else - #define __Pyx_PyType_AsAsync(obj) NULL -#endif -#ifndef __Pyx_PyAsyncMethodsStruct - typedef struct { - unaryfunc am_await; - unaryfunc am_aiter; - unaryfunc am_anext; - } __Pyx_PyAsyncMethodsStruct; -#endif - -#if defined(WIN32) || defined(MS_WINDOWS) - #define _USE_MATH_DEFINES -#endif -#include -#ifdef NAN -#define __PYX_NAN() ((float) NAN) -#else -static CYTHON_INLINE float __PYX_NAN() { - float value; - memset(&value, 0xFF, sizeof(value)); - return value; -} -#endif -#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) -#define __Pyx_truncl trunc -#else -#define __Pyx_truncl truncl -#endif - -#define __PYX_MARK_ERR_POS(f_index, lineno) \ - { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } -#define __PYX_ERR(f_index, lineno, Ln_error) \ - { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } - -#ifndef __PYX_EXTERN_C - #ifdef __cplusplus - #define __PYX_EXTERN_C extern "C" - #else - #define __PYX_EXTERN_C extern - #endif -#endif - -#define __PYX_HAVE__aiohttp___frozenlist -#define __PYX_HAVE_API__aiohttp___frozenlist -/* Early includes */ -#ifdef _OPENMP -#include -#endif /* _OPENMP */ - -#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) -#define CYTHON_WITHOUT_ASSERTIONS -#endif - -typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; - const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; - -#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 -#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 -#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) -#define __PYX_DEFAULT_STRING_ENCODING "" -#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString -#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#define __Pyx_uchar_cast(c) ((unsigned char)c) -#define __Pyx_long_cast(x) ((long)x) -#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ - (sizeof(type) < sizeof(Py_ssize_t)) ||\ - (sizeof(type) > sizeof(Py_ssize_t) &&\ - likely(v < (type)PY_SSIZE_T_MAX ||\ - v == (type)PY_SSIZE_T_MAX) &&\ - (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ - v == (type)PY_SSIZE_T_MIN))) ||\ - (sizeof(type) == sizeof(Py_ssize_t) &&\ - (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ - v == (type)PY_SSIZE_T_MAX))) ) -static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { - return (size_t) i < (size_t) limit; -} -#if defined (__cplusplus) && __cplusplus >= 201103L - #include - #define __Pyx_sst_abs(value) std::abs(value) -#elif SIZEOF_INT >= SIZEOF_SIZE_T - #define __Pyx_sst_abs(value) abs(value) -#elif SIZEOF_LONG >= SIZEOF_SIZE_T - #define __Pyx_sst_abs(value) labs(value) -#elif defined (_MSC_VER) - #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) -#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define __Pyx_sst_abs(value) llabs(value) -#elif defined (__GNUC__) - #define __Pyx_sst_abs(value) __builtin_llabs(value) -#else - #define __Pyx_sst_abs(value) ((value<0) ? -value : value) -#endif -static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); -static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); -#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) -#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) -#define __Pyx_PyBytes_FromString PyBytes_FromString -#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); -#if PY_MAJOR_VERSION < 3 - #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#else - #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize -#endif -#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyObject_AsWritableString(s) ((char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsWritableSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) -#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) -#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) -#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) -#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) -static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { - const Py_UNICODE *u_end = u; - while (*u_end++) ; - return (size_t)(u_end - u - 1); -} -#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) -#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode -#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode -#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) -#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) -static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); -static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); -static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); -#define __Pyx_PySequence_Tuple(obj)\ - (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); -#if CYTHON_ASSUME_SAFE_MACROS -#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) -#else -#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) -#endif -#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) -#if PY_MAJOR_VERSION >= 3 -#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) -#else -#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) -#endif -#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x)) -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII -static int __Pyx_sys_getdefaultencoding_not_ascii; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys; - PyObject* default_encoding = NULL; - PyObject* ascii_chars_u = NULL; - PyObject* ascii_chars_b = NULL; - const char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (!sys) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); - Py_DECREF(sys); - if (!default_encoding) goto bad; - default_encoding_c = PyBytes_AsString(default_encoding); - if (!default_encoding_c) goto bad; - if (strcmp(default_encoding_c, "ascii") == 0) { - __Pyx_sys_getdefaultencoding_not_ascii = 0; - } else { - char ascii_chars[128]; - int c; - for (c = 0; c < 128; c++) { - ascii_chars[c] = c; - } - __Pyx_sys_getdefaultencoding_not_ascii = 1; - ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); - if (!ascii_chars_u) goto bad; - ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); - if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { - PyErr_Format( - PyExc_ValueError, - "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", - default_encoding_c); - goto bad; - } - Py_DECREF(ascii_chars_u); - Py_DECREF(ascii_chars_b); - } - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return -1; -} -#endif -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) -#else -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT -static char* __PYX_DEFAULT_STRING_ENCODING; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys; - PyObject* default_encoding = NULL; - char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (!sys) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - Py_DECREF(sys); - if (!default_encoding) goto bad; - default_encoding_c = PyBytes_AsString(default_encoding); - if (!default_encoding_c) goto bad; - __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); - if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; - strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(default_encoding); - return -1; -} -#endif -#endif - - -/* Test for GCC > 2.95 */ -#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) -#else /* !__GNUC__ or GCC < 2.95 */ - #define likely(x) (x) - #define unlikely(x) (x) -#endif /* __GNUC__ */ -static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } - -static PyObject *__pyx_m = NULL; -static PyObject *__pyx_d; -static PyObject *__pyx_b; -static PyObject *__pyx_cython_runtime = NULL; -static PyObject *__pyx_empty_tuple; -static PyObject *__pyx_empty_bytes; -static PyObject *__pyx_empty_unicode; -static int __pyx_lineno; -static int __pyx_clineno = 0; -static const char * __pyx_cfilenm= __FILE__; -static const char *__pyx_filename; - - -static const char *__pyx_f[] = { - "aiohttp\\_frozenlist.pyx", - "stringsource", -}; - -/*--- Type declarations ---*/ -struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList; - -/* "aiohttp/_frozenlist.pyx":4 - * - * - * cdef class FrozenList: # <<<<<<<<<<<<<< - * - * cdef readonly bint frozen - */ -struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList { - PyObject_HEAD - struct __pyx_vtabstruct_7aiohttp_11_frozenlist_FrozenList *__pyx_vtab; - int frozen; - PyObject *_items; -}; - - - -struct __pyx_vtabstruct_7aiohttp_11_frozenlist_FrozenList { - PyObject *(*_check_frozen)(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *); - PyObject *(*_fast_len)(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *); -}; -static struct __pyx_vtabstruct_7aiohttp_11_frozenlist_FrozenList *__pyx_vtabptr_7aiohttp_11_frozenlist_FrozenList; -static CYTHON_INLINE PyObject *__pyx_f_7aiohttp_11_frozenlist_10FrozenList__fast_len(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *); - -/* --- Runtime support code (head) --- */ -/* Refnanny.proto */ -#ifndef CYTHON_REFNANNY - #define CYTHON_REFNANNY 0 -#endif -#if CYTHON_REFNANNY - typedef struct { - void (*INCREF)(void*, PyObject*, int); - void (*DECREF)(void*, PyObject*, int); - void (*GOTREF)(void*, PyObject*, int); - void (*GIVEREF)(void*, PyObject*, int); - void* (*SetupContext)(const char*, int, const char*); - void (*FinishContext)(void**); - } __Pyx_RefNannyAPIStruct; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); - #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; -#ifdef WITH_THREAD - #define __Pyx_RefNannySetupContext(name, acquire_gil)\ - if (acquire_gil) {\ - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ - PyGILState_Release(__pyx_gilstate_save);\ - } else {\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ - } -#else - #define __Pyx_RefNannySetupContext(name, acquire_gil)\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) -#endif - #define __Pyx_RefNannyFinishContext()\ - __Pyx_RefNanny->FinishContext(&__pyx_refnanny) - #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) - #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) - #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) - #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) -#else - #define __Pyx_RefNannyDeclarations - #define __Pyx_RefNannySetupContext(name, acquire_gil) - #define __Pyx_RefNannyFinishContext() - #define __Pyx_INCREF(r) Py_INCREF(r) - #define __Pyx_DECREF(r) Py_DECREF(r) - #define __Pyx_GOTREF(r) - #define __Pyx_GIVEREF(r) - #define __Pyx_XINCREF(r) Py_XINCREF(r) - #define __Pyx_XDECREF(r) Py_XDECREF(r) - #define __Pyx_XGOTREF(r) - #define __Pyx_XGIVEREF(r) -#endif -#define __Pyx_XDECREF_SET(r, v) do {\ - PyObject *tmp = (PyObject *) r;\ - r = v; __Pyx_XDECREF(tmp);\ - } while (0) -#define __Pyx_DECREF_SET(r, v) do {\ - PyObject *tmp = (PyObject *) r;\ - r = v; __Pyx_DECREF(tmp);\ - } while (0) -#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) -#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) - -/* PyObjectGetAttrStr.proto */ -#if CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); -#else -#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) -#endif - -/* GetBuiltinName.proto */ -static PyObject *__Pyx_GetBuiltinName(PyObject *name); - -/* RaiseDoubleKeywords.proto */ -static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); - -/* ParseKeywords.proto */ -static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\ - PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ - const char* function_name); - -/* RaiseArgTupleInvalid.proto */ -static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, - Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); - -/* PyObjectCall.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); -#else -#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) -#endif - -/* PyThreadStateGet.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; -#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; -#define __Pyx_PyErr_Occurred() __pyx_tstate->curexc_type -#else -#define __Pyx_PyThreadState_declare -#define __Pyx_PyThreadState_assign -#define __Pyx_PyErr_Occurred() PyErr_Occurred() -#endif - -/* PyErrFetchRestore.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) -#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) -#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) -#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) -#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) -static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); -static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); -#if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) -#else -#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) -#endif -#else -#define __Pyx_PyErr_Clear() PyErr_Clear() -#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) -#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) -#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) -#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) -#endif - -/* RaiseException.proto */ -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); - -/* GetItemInt.proto */ -#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ - __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ - (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ - __Pyx_GetItemInt_Generic(o, to_py_func(i)))) -#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ - __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ - (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck); -#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ - __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ - (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck); -static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, - int is_list, int wraparound, int boundscheck); - -/* ObjectGetItem.proto */ -#if CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key); -#else -#define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key) -#endif - -/* PyFunctionFastCall.proto */ -#if CYTHON_FAST_PYCALL -#define __Pyx_PyFunction_FastCall(func, args, nargs)\ - __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) -#if 1 || PY_VERSION_HEX < 0x030600B1 -static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); -#else -#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs) -#endif -#define __Pyx_BUILD_ASSERT_EXPR(cond)\ - (sizeof(char [1 - 2*!(cond)]) - 1) -#ifndef Py_MEMBER_SIZE -#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) -#endif - static size_t __pyx_pyframe_localsplus_offset = 0; - #include "frameobject.h" - #define __Pxy_PyFrame_Initialize_Offsets()\ - ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ - (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) - #define __Pyx_PyFrame_GetLocalsplus(frame)\ - (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) -#endif - -/* PyObjectCallMethO.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); -#endif - -/* PyObjectCallNoArg.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func); -#else -#define __Pyx_PyObject_CallNoArg(func) __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL) -#endif - -/* PyCFunctionFastCall.proto */ -#if CYTHON_FAST_PYCCALL -static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs); -#else -#define __Pyx_PyCFunction_FastCall(func, args, nargs) (assert(0), NULL) -#endif - -/* PyObjectCallOneArg.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); - -/* PyIntCompare.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, long intval, long inplace); - -/* PySequenceContains.proto */ -static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* seq, int eq) { - int result = PySequence_Contains(seq, item); - return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); -} - -/* PyObjectCall2Args.proto */ -static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); - -/* PyObjectGetMethod.proto */ -static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method); - -/* PyObjectCallMethod1.proto */ -static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg); - -/* pop_index.proto */ -static PyObject* __Pyx__PyObject_PopNewIndex(PyObject* L, PyObject* py_ix); -static PyObject* __Pyx__PyObject_PopIndex(PyObject* L, PyObject* py_ix); -#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS -static PyObject* __Pyx__PyList_PopIndex(PyObject* L, PyObject* py_ix, Py_ssize_t ix); -#define __Pyx_PyObject_PopIndex(L, py_ix, ix, is_signed, type, to_py_func) (\ - (likely(PyList_CheckExact(L) && __Pyx_fits_Py_ssize_t(ix, type, is_signed))) ?\ - __Pyx__PyList_PopIndex(L, py_ix, ix) : (\ - (unlikely((py_ix) == Py_None)) ? __Pyx__PyObject_PopNewIndex(L, to_py_func(ix)) :\ - __Pyx__PyObject_PopIndex(L, py_ix))) -#define __Pyx_PyList_PopIndex(L, py_ix, ix, is_signed, type, to_py_func) (\ - __Pyx_fits_Py_ssize_t(ix, type, is_signed) ?\ - __Pyx__PyList_PopIndex(L, py_ix, ix) : (\ - (unlikely((py_ix) == Py_None)) ? __Pyx__PyObject_PopNewIndex(L, to_py_func(ix)) :\ - __Pyx__PyObject_PopIndex(L, py_ix))) -#else -#define __Pyx_PyList_PopIndex(L, py_ix, ix, is_signed, type, to_py_func)\ - __Pyx_PyObject_PopIndex(L, py_ix, ix, is_signed, type, to_py_func) -#define __Pyx_PyObject_PopIndex(L, py_ix, ix, is_signed, type, to_py_func) (\ - (unlikely((py_ix) == Py_None)) ? __Pyx__PyObject_PopNewIndex(L, to_py_func(ix)) :\ - __Pyx__PyObject_PopIndex(L, py_ix)) -#endif - -/* ListAppend.proto */ -#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS -static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) { - PyListObject* L = (PyListObject*) list; - Py_ssize_t len = Py_SIZE(list); - if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) { - Py_INCREF(x); - PyList_SET_ITEM(list, len, x); - __Pyx_SET_SIZE(list, len + 1); - return 0; - } - return PyList_Append(list, x); -} -#else -#define __Pyx_PyList_Append(L,x) PyList_Append(L,x) -#endif - -/* PyErrExceptionMatches.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) -static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); -#else -#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) -#endif - -/* GetAttr.proto */ -static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); - -/* GetAttr3.proto */ -static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *); - -/* PyDictVersioning.proto */ -#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS -#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) -#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) -#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ - (version_var) = __PYX_GET_DICT_VERSION(dict);\ - (cache_var) = (value); -#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ - static PY_UINT64_T __pyx_dict_version = 0;\ - static PyObject *__pyx_dict_cached_value = NULL;\ - if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ - (VAR) = __pyx_dict_cached_value;\ - } else {\ - (VAR) = __pyx_dict_cached_value = (LOOKUP);\ - __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ - }\ -} -static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); -static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); -static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); -#else -#define __PYX_GET_DICT_VERSION(dict) (0) -#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) -#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); -#endif - -/* GetModuleGlobalName.proto */ -#if CYTHON_USE_DICT_VERSIONS -#define __Pyx_GetModuleGlobalName(var, name) {\ - static PY_UINT64_T __pyx_dict_version = 0;\ - static PyObject *__pyx_dict_cached_value = NULL;\ - (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ - (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ - __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ -} -#define __Pyx_GetModuleGlobalNameUncached(var, name) {\ - PY_UINT64_T __pyx_dict_version;\ - PyObject *__pyx_dict_cached_value;\ - (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ -} -static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); -#else -#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) -#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) -static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); -#endif - -/* Import.proto */ -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); - -/* ImportFrom.proto */ -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); - -/* HasAttr.proto */ -static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *); - -/* PyObject_GenericGetAttrNoDict.proto */ -#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 -static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name); -#else -#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr -#endif - -/* PyObject_GenericGetAttr.proto */ -#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 -static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name); -#else -#define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr -#endif - -/* SetVTable.proto */ -static int __Pyx_SetVtable(PyObject *dict, void *vtable); - -/* PyObjectGetAttrStrNoError.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); - -/* SetupReduce.proto */ -static int __Pyx_setup_reduce(PyObject* type_obj); - -/* CLineInTraceback.proto */ -#ifdef CYTHON_CLINE_IN_TRACEBACK -#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) -#else -static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); -#endif - -/* CodeObjectCache.proto */ -typedef struct { - PyCodeObject* code_object; - int code_line; -} __Pyx_CodeObjectCacheEntry; -struct __Pyx_CodeObjectCache { - int count; - int max_count; - __Pyx_CodeObjectCacheEntry* entries; -}; -static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); -static PyCodeObject *__pyx_find_code_object(int code_line); -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); - -/* AddTraceback.proto */ -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename); - -/* CIntToPy.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value); - -/* CIntToPy.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); - -/* CIntFromPy.proto */ -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); - -/* CIntFromPy.proto */ -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); - -/* FastTypeChecks.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) -static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); -static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); -static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); -#else -#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) -#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) -#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) -#endif -#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) - -/* CheckBinaryVersion.proto */ -static int __Pyx_check_binary_version(void); - -/* InitStrings.proto */ -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); - -static PyObject *__pyx_f_7aiohttp_11_frozenlist_10FrozenList__check_frozen(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self); /* proto*/ -static CYTHON_INLINE PyObject *__pyx_f_7aiohttp_11_frozenlist_10FrozenList__fast_len(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self); /* proto*/ - -/* Module declarations from 'aiohttp._frozenlist' */ -static PyTypeObject *__pyx_ptype_7aiohttp_11_frozenlist_FrozenList = 0; -static PyObject *__pyx_f_7aiohttp_11_frozenlist___pyx_unpickle_FrozenList__set_state(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *, PyObject *); /*proto*/ -#define __Pyx_MODULE_NAME "aiohttp._frozenlist" -extern int __pyx_module_is_main_aiohttp___frozenlist; -int __pyx_module_is_main_aiohttp___frozenlist = 0; - -/* Implementation of 'aiohttp._frozenlist' */ -static PyObject *__pyx_builtin_RuntimeError; -static const char __pyx_k_new[] = "__new__"; -static const char __pyx_k_pop[] = "pop"; -static const char __pyx_k_pos[] = "pos"; -static const char __pyx_k_dict[] = "__dict__"; -static const char __pyx_k_item[] = "item"; -static const char __pyx_k_iter[] = "__iter__"; -static const char __pyx_k_main[] = "__main__"; -static const char __pyx_k_name[] = "__name__"; -static const char __pyx_k_test[] = "__test__"; -static const char __pyx_k_clear[] = "clear"; -static const char __pyx_k_count[] = "count"; -static const char __pyx_k_index[] = "index"; -static const char __pyx_k_items[] = "items"; -static const char __pyx_k_format[] = "format"; -static const char __pyx_k_import[] = "__import__"; -static const char __pyx_k_pickle[] = "pickle"; -static const char __pyx_k_reduce[] = "__reduce__"; -static const char __pyx_k_remove[] = "remove"; -static const char __pyx_k_update[] = "update"; -static const char __pyx_k_getstate[] = "__getstate__"; -static const char __pyx_k_pyx_type[] = "__pyx_type"; -static const char __pyx_k_register[] = "register"; -static const char __pyx_k_reversed[] = "__reversed__"; -static const char __pyx_k_setstate[] = "__setstate__"; -static const char __pyx_k_pyx_state[] = "__pyx_state"; -static const char __pyx_k_reduce_ex[] = "__reduce_ex__"; -static const char __pyx_k_FrozenList[] = "FrozenList"; -static const char __pyx_k_pyx_result[] = "__pyx_result"; -static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__"; -static const char __pyx_k_PickleError[] = "PickleError"; -static const char __pyx_k_RuntimeError[] = "RuntimeError"; -static const char __pyx_k_pyx_checksum[] = "__pyx_checksum"; -static const char __pyx_k_stringsource[] = "stringsource"; -static const char __pyx_k_reduce_cython[] = "__reduce_cython__"; -static const char __pyx_k_MutableSequence[] = "MutableSequence"; -static const char __pyx_k_collections_abc[] = "collections.abc"; -static const char __pyx_k_pyx_PickleError[] = "__pyx_PickleError"; -static const char __pyx_k_setstate_cython[] = "__setstate_cython__"; -static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; -static const char __pyx_k_FrozenList_frozen_r[] = ""; -static const char __pyx_k_aiohttp__frozenlist[] = "aiohttp._frozenlist"; -static const char __pyx_k_pyx_unpickle_FrozenList[] = "__pyx_unpickle_FrozenList"; -static const char __pyx_k_Cannot_modify_frozen_list[] = "Cannot modify frozen list."; -static const char __pyx_k_Incompatible_checksums_s_vs_0x94[] = "Incompatible checksums (%s vs 0x949a143 = (_items, frozen))"; -static PyObject *__pyx_kp_u_Cannot_modify_frozen_list; -static PyObject *__pyx_n_s_FrozenList; -static PyObject *__pyx_kp_u_FrozenList_frozen_r; -static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0x94; -static PyObject *__pyx_n_s_MutableSequence; -static PyObject *__pyx_n_s_PickleError; -static PyObject *__pyx_n_s_RuntimeError; -static PyObject *__pyx_n_s_aiohttp__frozenlist; -static PyObject *__pyx_n_s_clear; -static PyObject *__pyx_n_s_cline_in_traceback; -static PyObject *__pyx_n_s_collections_abc; -static PyObject *__pyx_n_s_count; -static PyObject *__pyx_n_s_dict; -static PyObject *__pyx_n_s_format; -static PyObject *__pyx_n_s_getstate; -static PyObject *__pyx_n_s_import; -static PyObject *__pyx_n_s_index; -static PyObject *__pyx_n_s_item; -static PyObject *__pyx_n_s_items; -static PyObject *__pyx_n_s_iter; -static PyObject *__pyx_n_s_main; -static PyObject *__pyx_n_s_name; -static PyObject *__pyx_n_s_new; -static PyObject *__pyx_n_s_pickle; -static PyObject *__pyx_n_s_pop; -static PyObject *__pyx_n_s_pos; -static PyObject *__pyx_n_s_pyx_PickleError; -static PyObject *__pyx_n_s_pyx_checksum; -static PyObject *__pyx_n_s_pyx_result; -static PyObject *__pyx_n_s_pyx_state; -static PyObject *__pyx_n_s_pyx_type; -static PyObject *__pyx_n_s_pyx_unpickle_FrozenList; -static PyObject *__pyx_n_s_pyx_vtable; -static PyObject *__pyx_n_s_reduce; -static PyObject *__pyx_n_s_reduce_cython; -static PyObject *__pyx_n_s_reduce_ex; -static PyObject *__pyx_n_s_register; -static PyObject *__pyx_n_s_remove; -static PyObject *__pyx_n_s_reversed; -static PyObject *__pyx_n_s_setstate; -static PyObject *__pyx_n_s_setstate_cython; -static PyObject *__pyx_kp_s_stringsource; -static PyObject *__pyx_n_s_test; -static PyObject *__pyx_n_s_update; -static int __pyx_pf_7aiohttp_11_frozenlist_10FrozenList___init__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_items); /* proto */ -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_2freeze(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_4__getitem__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_index); /* proto */ -static int __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_6__setitem__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto */ -static int __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_8__delitem__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_index); /* proto */ -static Py_ssize_t __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_10__len__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_12__iter__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_14__reversed__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_16__richcmp__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_other, PyObject *__pyx_v_op); /* proto */ -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_18insert(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_pos, PyObject *__pyx_v_item); /* proto */ -static int __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_20__contains__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_item); /* proto */ -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_22__iadd__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_items); /* proto */ -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_24index(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_item); /* proto */ -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_26remove(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_item); /* proto */ -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_28clear(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_30extend(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_items); /* proto */ -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_32reverse(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_34pop(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_index); /* proto */ -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_36append(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_item); /* proto */ -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_38count(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_item); /* proto */ -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_40__repr__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_6frozen___get__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_42__reduce_cython__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_44__setstate_cython__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ -static PyObject *__pyx_pf_7aiohttp_11_frozenlist___pyx_unpickle_FrozenList(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ -static PyObject *__pyx_tp_new_7aiohttp_11_frozenlist_FrozenList(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ -static PyObject *__pyx_int_0; -static PyObject *__pyx_int_1; -static PyObject *__pyx_int_2; -static PyObject *__pyx_int_3; -static PyObject *__pyx_int_4; -static PyObject *__pyx_int_5; -static PyObject *__pyx_int_155820355; -static PyObject *__pyx_int_neg_1; -static PyObject *__pyx_tuple_; -static PyObject *__pyx_tuple__2; -static PyObject *__pyx_codeobj__3; -/* Late includes */ - -/* "aiohttp/_frozenlist.pyx":9 - * cdef list _items - * - * def __init__(self, items=None): # <<<<<<<<<<<<<< - * self.frozen = False - * if items is not None: - */ - -/* Python wrapper */ -static int __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_items = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_items,0}; - PyObject* values[1] = {0}; - values[0] = ((PyObject *)Py_None); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_items); - if (value) { values[0] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 9, __pyx_L3_error) - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_items = values[0]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 9, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return -1; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList___init__(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), __pyx_v_items); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_7aiohttp_11_frozenlist_10FrozenList___init__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_items) { - int __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__init__", 0); - __Pyx_INCREF(__pyx_v_items); - - /* "aiohttp/_frozenlist.pyx":10 - * - * def __init__(self, items=None): - * self.frozen = False # <<<<<<<<<<<<<< - * if items is not None: - * items = list(items) - */ - __pyx_v_self->frozen = 0; - - /* "aiohttp/_frozenlist.pyx":11 - * def __init__(self, items=None): - * self.frozen = False - * if items is not None: # <<<<<<<<<<<<<< - * items = list(items) - * else: - */ - __pyx_t_1 = (__pyx_v_items != Py_None); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { - - /* "aiohttp/_frozenlist.pyx":12 - * self.frozen = False - * if items is not None: - * items = list(items) # <<<<<<<<<<<<<< - * else: - * items = [] - */ - __pyx_t_3 = PySequence_List(__pyx_v_items); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF_SET(__pyx_v_items, __pyx_t_3); - __pyx_t_3 = 0; - - /* "aiohttp/_frozenlist.pyx":11 - * def __init__(self, items=None): - * self.frozen = False - * if items is not None: # <<<<<<<<<<<<<< - * items = list(items) - * else: - */ - goto __pyx_L3; - } - - /* "aiohttp/_frozenlist.pyx":14 - * items = list(items) - * else: - * items = [] # <<<<<<<<<<<<<< - * self._items = items - * - */ - /*else*/ { - __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF_SET(__pyx_v_items, __pyx_t_3); - __pyx_t_3 = 0; - } - __pyx_L3:; - - /* "aiohttp/_frozenlist.pyx":15 - * else: - * items = [] - * self._items = items # <<<<<<<<<<<<<< - * - * cdef object _check_frozen(self): - */ - if (!(likely(PyList_CheckExact(__pyx_v_items))||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_items)->tp_name), 0))) __PYX_ERR(0, 15, __pyx_L1_error) - __pyx_t_3 = __pyx_v_items; - __Pyx_INCREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __Pyx_GOTREF(__pyx_v_self->_items); - __Pyx_DECREF(__pyx_v_self->_items); - __pyx_v_self->_items = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; - - /* "aiohttp/_frozenlist.pyx":9 - * cdef list _items - * - * def __init__(self, items=None): # <<<<<<<<<<<<<< - * self.frozen = False - * if items is not None: - */ - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_items); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_frozenlist.pyx":17 - * self._items = items - * - * cdef object _check_frozen(self): # <<<<<<<<<<<<<< - * if self.frozen: - * raise RuntimeError("Cannot modify frozen list.") - */ - -static PyObject *__pyx_f_7aiohttp_11_frozenlist_10FrozenList__check_frozen(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_check_frozen", 0); - - /* "aiohttp/_frozenlist.pyx":18 - * - * cdef object _check_frozen(self): - * if self.frozen: # <<<<<<<<<<<<<< - * raise RuntimeError("Cannot modify frozen list.") - * - */ - __pyx_t_1 = (__pyx_v_self->frozen != 0); - if (unlikely(__pyx_t_1)) { - - /* "aiohttp/_frozenlist.pyx":19 - * cdef object _check_frozen(self): - * if self.frozen: - * raise RuntimeError("Cannot modify frozen list.") # <<<<<<<<<<<<<< - * - * cdef inline object _fast_len(self): - */ - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_Raise(__pyx_t_2, 0, 0, 0); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __PYX_ERR(0, 19, __pyx_L1_error) - - /* "aiohttp/_frozenlist.pyx":18 - * - * cdef object _check_frozen(self): - * if self.frozen: # <<<<<<<<<<<<<< - * raise RuntimeError("Cannot modify frozen list.") - * - */ - } - - /* "aiohttp/_frozenlist.pyx":17 - * self._items = items - * - * cdef object _check_frozen(self): # <<<<<<<<<<<<<< - * if self.frozen: - * raise RuntimeError("Cannot modify frozen list.") - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList._check_frozen", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_frozenlist.pyx":21 - * raise RuntimeError("Cannot modify frozen list.") - * - * cdef inline object _fast_len(self): # <<<<<<<<<<<<<< - * return len(self._items) - * - */ - -static CYTHON_INLINE PyObject *__pyx_f_7aiohttp_11_frozenlist_10FrozenList__fast_len(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - Py_ssize_t __pyx_t_2; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_fast_len", 0); - - /* "aiohttp/_frozenlist.pyx":22 - * - * cdef inline object _fast_len(self): - * return len(self._items) # <<<<<<<<<<<<<< - * - * def freeze(self): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __pyx_v_self->_items; - __Pyx_INCREF(__pyx_t_1); - if (unlikely(__pyx_t_1 == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(0, 22, __pyx_L1_error) - } - __pyx_t_2 = PyList_GET_SIZE(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(0, 22, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 22, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "aiohttp/_frozenlist.pyx":21 - * raise RuntimeError("Cannot modify frozen list.") - * - * cdef inline object _fast_len(self): # <<<<<<<<<<<<<< - * return len(self._items) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList._fast_len", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_frozenlist.pyx":24 - * return len(self._items) - * - * def freeze(self): # <<<<<<<<<<<<<< - * self.frozen = True - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_3freeze(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_3freeze(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("freeze (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_2freeze(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_2freeze(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("freeze", 0); - - /* "aiohttp/_frozenlist.pyx":25 - * - * def freeze(self): - * self.frozen = True # <<<<<<<<<<<<<< - * - * def __getitem__(self, index): - */ - __pyx_v_self->frozen = 1; - - /* "aiohttp/_frozenlist.pyx":24 - * return len(self._items) - * - * def freeze(self): # <<<<<<<<<<<<<< - * self.frozen = True - * - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_frozenlist.pyx":27 - * self.frozen = True - * - * def __getitem__(self, index): # <<<<<<<<<<<<<< - * return self._items[index] - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_5__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_5__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_4__getitem__(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), ((PyObject *)__pyx_v_index)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_4__getitem__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_index) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__getitem__", 0); - - /* "aiohttp/_frozenlist.pyx":28 - * - * def __getitem__(self, index): - * return self._items[index] # <<<<<<<<<<<<<< - * - * def __setitem__(self, index, value): - */ - __Pyx_XDECREF(__pyx_r); - if (unlikely(__pyx_v_self->_items == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 28, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_v_self->_items, __pyx_v_index); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 28, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "aiohttp/_frozenlist.pyx":27 - * self.frozen = True - * - * def __getitem__(self, index): # <<<<<<<<<<<<<< - * return self._items[index] - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_frozenlist.pyx":30 - * return self._items[index] - * - * def __setitem__(self, index, value): # <<<<<<<<<<<<<< - * self._check_frozen() - * self._items[index] = value - */ - -/* Python wrapper */ -static int __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_7__setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_7__setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_6__setitem__(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), ((PyObject *)__pyx_v_index), ((PyObject *)__pyx_v_value)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_6__setitem__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setitem__", 0); - - /* "aiohttp/_frozenlist.pyx":31 - * - * def __setitem__(self, index, value): - * self._check_frozen() # <<<<<<<<<<<<<< - * self._items[index] = value - * - */ - __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self->__pyx_vtab)->_check_frozen(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 31, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_frozenlist.pyx":32 - * def __setitem__(self, index, value): - * self._check_frozen() - * self._items[index] = value # <<<<<<<<<<<<<< - * - * def __delitem__(self, index): - */ - if (unlikely(__pyx_v_self->_items == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 32, __pyx_L1_error) - } - if (unlikely(PyObject_SetItem(__pyx_v_self->_items, __pyx_v_index, __pyx_v_value) < 0)) __PYX_ERR(0, 32, __pyx_L1_error) - - /* "aiohttp/_frozenlist.pyx":30 - * return self._items[index] - * - * def __setitem__(self, index, value): # <<<<<<<<<<<<<< - * self._check_frozen() - * self._items[index] = value - */ - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_frozenlist.pyx":34 - * self._items[index] = value - * - * def __delitem__(self, index): # <<<<<<<<<<<<<< - * self._check_frozen() - * del self._items[index] - */ - -/* Python wrapper */ -static int __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_9__delitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index); /*proto*/ -static int __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_9__delitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__delitem__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_8__delitem__(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), ((PyObject *)__pyx_v_index)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_8__delitem__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_index) { - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__delitem__", 0); - - /* "aiohttp/_frozenlist.pyx":35 - * - * def __delitem__(self, index): - * self._check_frozen() # <<<<<<<<<<<<<< - * del self._items[index] - * - */ - __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self->__pyx_vtab)->_check_frozen(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 35, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_frozenlist.pyx":36 - * def __delitem__(self, index): - * self._check_frozen() - * del self._items[index] # <<<<<<<<<<<<<< - * - * def __len__(self): - */ - if (unlikely(__pyx_v_self->_items == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 36, __pyx_L1_error) - } - if (unlikely(PyObject_DelItem(__pyx_v_self->_items, __pyx_v_index) < 0)) __PYX_ERR(0, 36, __pyx_L1_error) - - /* "aiohttp/_frozenlist.pyx":34 - * self._items[index] = value - * - * def __delitem__(self, index): # <<<<<<<<<<<<<< - * self._check_frozen() - * del self._items[index] - */ - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__delitem__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_frozenlist.pyx":38 - * del self._items[index] - * - * def __len__(self): # <<<<<<<<<<<<<< - * return self._fast_len() - * - */ - -/* Python wrapper */ -static Py_ssize_t __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_11__len__(PyObject *__pyx_v_self); /*proto*/ -static Py_ssize_t __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_11__len__(PyObject *__pyx_v_self) { - Py_ssize_t __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__len__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_10__len__(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static Py_ssize_t __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_10__len__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self) { - Py_ssize_t __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - Py_ssize_t __pyx_t_2; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__len__", 0); - - /* "aiohttp/_frozenlist.pyx":39 - * - * def __len__(self): - * return self._fast_len() # <<<<<<<<<<<<<< - * - * def __iter__(self): - */ - __pyx_t_1 = __pyx_f_7aiohttp_11_frozenlist_10FrozenList__fast_len(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 39, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 39, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_2; - goto __pyx_L0; - - /* "aiohttp/_frozenlist.pyx":38 - * del self._items[index] - * - * def __len__(self): # <<<<<<<<<<<<<< - * return self._fast_len() - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_frozenlist.pyx":41 - * return self._fast_len() - * - * def __iter__(self): # <<<<<<<<<<<<<< - * return self._items.__iter__() - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_13__iter__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_13__iter__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_12__iter__(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_12__iter__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__iter__", 0); - - /* "aiohttp/_frozenlist.pyx":42 - * - * def __iter__(self): - * return self._items.__iter__() # <<<<<<<<<<<<<< - * - * def __reversed__(self): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_items, __pyx_n_s_iter); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 42, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 42, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "aiohttp/_frozenlist.pyx":41 - * return self._fast_len() - * - * def __iter__(self): # <<<<<<<<<<<<<< - * return self._items.__iter__() - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_frozenlist.pyx":44 - * return self._items.__iter__() - * - * def __reversed__(self): # <<<<<<<<<<<<<< - * return self._items.__reversed__() - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_15__reversed__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_15__reversed__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__reversed__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_14__reversed__(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_14__reversed__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__reversed__", 0); - - /* "aiohttp/_frozenlist.pyx":45 - * - * def __reversed__(self): - * return self._items.__reversed__() # <<<<<<<<<<<<<< - * - * def __richcmp__(self, other, op): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_items, __pyx_n_s_reversed); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 45, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 45, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "aiohttp/_frozenlist.pyx":44 - * return self._items.__iter__() - * - * def __reversed__(self): # <<<<<<<<<<<<<< - * return self._items.__reversed__() - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__reversed__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_frozenlist.pyx":47 - * return self._items.__reversed__() - * - * def __richcmp__(self, other, op): # <<<<<<<<<<<<<< - * if op == 0: # < - * return list(self) < other - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_17__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_arg_op); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_17__richcmp__(PyObject *__pyx_v_self, PyObject *__pyx_v_other, int __pyx_arg_op) { - PyObject *__pyx_v_op = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__richcmp__ (wrapper)", 0); - __pyx_v_op = __Pyx_PyInt_From_int(__pyx_arg_op); if (unlikely(!__pyx_v_op)) __PYX_ERR(0, 47, __pyx_L3_error) - __Pyx_GOTREF(__pyx_v_op); - goto __pyx_L4_argument_unpacking_done; - __pyx_L3_error:; - __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__richcmp__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_16__richcmp__(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), ((PyObject *)__pyx_v_other), ((PyObject *)__pyx_v_op)); - - /* function exit code */ - __Pyx_XDECREF(__pyx_v_op); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_16__richcmp__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_other, PyObject *__pyx_v_op) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__richcmp__", 0); - - /* "aiohttp/_frozenlist.pyx":48 - * - * def __richcmp__(self, other, op): - * if op == 0: # < # <<<<<<<<<<<<<< - * return list(self) < other - * if op == 1: # <= - */ - __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_v_op, __pyx_int_0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 48, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_2) { - - /* "aiohttp/_frozenlist.pyx":49 - * def __richcmp__(self, other, op): - * if op == 0: # < - * return list(self) < other # <<<<<<<<<<<<<< - * if op == 1: # <= - * return list(self) <= other - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PySequence_List(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 49, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_v_other, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 49, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "aiohttp/_frozenlist.pyx":48 - * - * def __richcmp__(self, other, op): - * if op == 0: # < # <<<<<<<<<<<<<< - * return list(self) < other - * if op == 1: # <= - */ - } - - /* "aiohttp/_frozenlist.pyx":50 - * if op == 0: # < - * return list(self) < other - * if op == 1: # <= # <<<<<<<<<<<<<< - * return list(self) <= other - * if op == 2: # == - */ - __pyx_t_3 = __Pyx_PyInt_EqObjC(__pyx_v_op, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 50, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 50, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_2) { - - /* "aiohttp/_frozenlist.pyx":51 - * return list(self) < other - * if op == 1: # <= - * return list(self) <= other # <<<<<<<<<<<<<< - * if op == 2: # == - * return list(self) == other - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = PySequence_List(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 51, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = PyObject_RichCompare(__pyx_t_3, __pyx_v_other, Py_LE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "aiohttp/_frozenlist.pyx":50 - * if op == 0: # < - * return list(self) < other - * if op == 1: # <= # <<<<<<<<<<<<<< - * return list(self) <= other - * if op == 2: # == - */ - } - - /* "aiohttp/_frozenlist.pyx":52 - * if op == 1: # <= - * return list(self) <= other - * if op == 2: # == # <<<<<<<<<<<<<< - * return list(self) == other - * if op == 3: # != - */ - __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_v_op, __pyx_int_2, 2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 52, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 52, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_2) { - - /* "aiohttp/_frozenlist.pyx":53 - * return list(self) <= other - * if op == 2: # == - * return list(self) == other # <<<<<<<<<<<<<< - * if op == 3: # != - * return list(self) != other - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PySequence_List(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 53, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_v_other, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 53, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "aiohttp/_frozenlist.pyx":52 - * if op == 1: # <= - * return list(self) <= other - * if op == 2: # == # <<<<<<<<<<<<<< - * return list(self) == other - * if op == 3: # != - */ - } - - /* "aiohttp/_frozenlist.pyx":54 - * if op == 2: # == - * return list(self) == other - * if op == 3: # != # <<<<<<<<<<<<<< - * return list(self) != other - * if op == 4: # > - */ - __pyx_t_3 = __Pyx_PyInt_EqObjC(__pyx_v_op, __pyx_int_3, 3, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 54, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 54, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_2) { - - /* "aiohttp/_frozenlist.pyx":55 - * return list(self) == other - * if op == 3: # != - * return list(self) != other # <<<<<<<<<<<<<< - * if op == 4: # > - * return list(self) > other - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = PySequence_List(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 55, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = PyObject_RichCompare(__pyx_t_3, __pyx_v_other, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 55, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "aiohttp/_frozenlist.pyx":54 - * if op == 2: # == - * return list(self) == other - * if op == 3: # != # <<<<<<<<<<<<<< - * return list(self) != other - * if op == 4: # > - */ - } - - /* "aiohttp/_frozenlist.pyx":56 - * if op == 3: # != - * return list(self) != other - * if op == 4: # > # <<<<<<<<<<<<<< - * return list(self) > other - * if op == 5: # => - */ - __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_v_op, __pyx_int_4, 4, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 56, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 56, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_2) { - - /* "aiohttp/_frozenlist.pyx":57 - * return list(self) != other - * if op == 4: # > - * return list(self) > other # <<<<<<<<<<<<<< - * if op == 5: # => - * return list(self) >= other - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PySequence_List(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 57, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_v_other, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 57, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "aiohttp/_frozenlist.pyx":56 - * if op == 3: # != - * return list(self) != other - * if op == 4: # > # <<<<<<<<<<<<<< - * return list(self) > other - * if op == 5: # => - */ - } - - /* "aiohttp/_frozenlist.pyx":58 - * if op == 4: # > - * return list(self) > other - * if op == 5: # => # <<<<<<<<<<<<<< - * return list(self) >= other - * - */ - __pyx_t_3 = __Pyx_PyInt_EqObjC(__pyx_v_op, __pyx_int_5, 5, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 58, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 58, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_2) { - - /* "aiohttp/_frozenlist.pyx":59 - * return list(self) > other - * if op == 5: # => - * return list(self) >= other # <<<<<<<<<<<<<< - * - * def insert(self, pos, item): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = PySequence_List(((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 59, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = PyObject_RichCompare(__pyx_t_3, __pyx_v_other, Py_GE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 59, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "aiohttp/_frozenlist.pyx":58 - * if op == 4: # > - * return list(self) > other - * if op == 5: # => # <<<<<<<<<<<<<< - * return list(self) >= other - * - */ - } - - /* "aiohttp/_frozenlist.pyx":47 - * return self._items.__reversed__() - * - * def __richcmp__(self, other, op): # <<<<<<<<<<<<<< - * if op == 0: # < - * return list(self) < other - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__richcmp__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_frozenlist.pyx":61 - * return list(self) >= other - * - * def insert(self, pos, item): # <<<<<<<<<<<<<< - * self._check_frozen() - * self._items.insert(pos, item) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_19insert(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_19insert(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_pos = 0; - PyObject *__pyx_v_item = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("insert (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pos,&__pyx_n_s_item,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pos)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_item)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("insert", 1, 2, 2, 1); __PYX_ERR(0, 61, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "insert") < 0)) __PYX_ERR(0, 61, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_pos = values[0]; - __pyx_v_item = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("insert", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 61, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.insert", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_18insert(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), __pyx_v_pos, __pyx_v_item); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_18insert(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_pos, PyObject *__pyx_v_item) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - Py_ssize_t __pyx_t_2; - int __pyx_t_3; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("insert", 0); - - /* "aiohttp/_frozenlist.pyx":62 - * - * def insert(self, pos, item): - * self._check_frozen() # <<<<<<<<<<<<<< - * self._items.insert(pos, item) - * - */ - __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self->__pyx_vtab)->_check_frozen(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 62, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_frozenlist.pyx":63 - * def insert(self, pos, item): - * self._check_frozen() - * self._items.insert(pos, item) # <<<<<<<<<<<<<< - * - * def __contains__(self, item): - */ - if (unlikely(__pyx_v_self->_items == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "insert"); - __PYX_ERR(0, 63, __pyx_L1_error) - } - __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_v_pos); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 63, __pyx_L1_error) - __pyx_t_3 = PyList_Insert(__pyx_v_self->_items, __pyx_t_2, __pyx_v_item); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 63, __pyx_L1_error) - - /* "aiohttp/_frozenlist.pyx":61 - * return list(self) >= other - * - * def insert(self, pos, item): # <<<<<<<<<<<<<< - * self._check_frozen() - * self._items.insert(pos, item) - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.insert", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_frozenlist.pyx":65 - * self._items.insert(pos, item) - * - * def __contains__(self, item): # <<<<<<<<<<<<<< - * return item in self._items - * - */ - -/* Python wrapper */ -static int __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_21__contains__(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/ -static int __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_21__contains__(PyObject *__pyx_v_self, PyObject *__pyx_v_item) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__contains__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_20__contains__(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), ((PyObject *)__pyx_v_item)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_20__contains__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_item) { - int __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__contains__", 0); - - /* "aiohttp/_frozenlist.pyx":66 - * - * def __contains__(self, item): - * return item in self._items # <<<<<<<<<<<<<< - * - * def __iadd__(self, items): - */ - __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_item, __pyx_v_self->_items, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 66, __pyx_L1_error) - __pyx_r = __pyx_t_1; - goto __pyx_L0; - - /* "aiohttp/_frozenlist.pyx":65 - * self._items.insert(pos, item) - * - * def __contains__(self, item): # <<<<<<<<<<<<<< - * return item in self._items - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__contains__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_frozenlist.pyx":68 - * return item in self._items - * - * def __iadd__(self, items): # <<<<<<<<<<<<<< - * self._check_frozen() - * self._items += list(items) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_23__iadd__(PyObject *__pyx_v_self, PyObject *__pyx_v_items); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_23__iadd__(PyObject *__pyx_v_self, PyObject *__pyx_v_items) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__iadd__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_22__iadd__(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), ((PyObject *)__pyx_v_items)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_22__iadd__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_items) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__iadd__", 0); - - /* "aiohttp/_frozenlist.pyx":69 - * - * def __iadd__(self, items): - * self._check_frozen() # <<<<<<<<<<<<<< - * self._items += list(items) - * return self - */ - __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self->__pyx_vtab)->_check_frozen(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 69, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_frozenlist.pyx":70 - * def __iadd__(self, items): - * self._check_frozen() - * self._items += list(items) # <<<<<<<<<<<<<< - * return self - * - */ - __pyx_t_1 = PySequence_List(__pyx_v_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 70, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_self->_items, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 70, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_GIVEREF(__pyx_t_2); - __Pyx_GOTREF(__pyx_v_self->_items); - __Pyx_DECREF(__pyx_v_self->_items); - __pyx_v_self->_items = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; - - /* "aiohttp/_frozenlist.pyx":71 - * self._check_frozen() - * self._items += list(items) - * return self # <<<<<<<<<<<<<< - * - * def index(self, item): - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject *)__pyx_v_self)); - __pyx_r = ((PyObject *)__pyx_v_self); - goto __pyx_L0; - - /* "aiohttp/_frozenlist.pyx":68 - * return item in self._items - * - * def __iadd__(self, items): # <<<<<<<<<<<<<< - * self._check_frozen() - * self._items += list(items) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__iadd__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_frozenlist.pyx":73 - * return self - * - * def index(self, item): # <<<<<<<<<<<<<< - * return self._items.index(item) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_25index(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_25index(PyObject *__pyx_v_self, PyObject *__pyx_v_item) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("index (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_24index(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), ((PyObject *)__pyx_v_item)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_24index(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_item) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("index", 0); - - /* "aiohttp/_frozenlist.pyx":74 - * - * def index(self, item): - * return self._items.index(item) # <<<<<<<<<<<<<< - * - * def remove(self, item): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_items, __pyx_n_s_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 74, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_item) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_item); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 74, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "aiohttp/_frozenlist.pyx":73 - * return self - * - * def index(self, item): # <<<<<<<<<<<<<< - * return self._items.index(item) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.index", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_frozenlist.pyx":76 - * return self._items.index(item) - * - * def remove(self, item): # <<<<<<<<<<<<<< - * self._check_frozen() - * self._items.remove(item) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_27remove(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_27remove(PyObject *__pyx_v_self, PyObject *__pyx_v_item) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("remove (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_26remove(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), ((PyObject *)__pyx_v_item)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_26remove(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_item) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("remove", 0); - - /* "aiohttp/_frozenlist.pyx":77 - * - * def remove(self, item): - * self._check_frozen() # <<<<<<<<<<<<<< - * self._items.remove(item) - * - */ - __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self->__pyx_vtab)->_check_frozen(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 77, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_frozenlist.pyx":78 - * def remove(self, item): - * self._check_frozen() - * self._items.remove(item) # <<<<<<<<<<<<<< - * - * def clear(self): - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_items, __pyx_n_s_remove); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 78, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_item) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_item); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 78, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_frozenlist.pyx":76 - * return self._items.index(item) - * - * def remove(self, item): # <<<<<<<<<<<<<< - * self._check_frozen() - * self._items.remove(item) - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.remove", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_frozenlist.pyx":80 - * self._items.remove(item) - * - * def clear(self): # <<<<<<<<<<<<<< - * self._check_frozen() - * self._items.clear() - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_29clear(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_29clear(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("clear (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_28clear(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_28clear(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("clear", 0); - - /* "aiohttp/_frozenlist.pyx":81 - * - * def clear(self): - * self._check_frozen() # <<<<<<<<<<<<<< - * self._items.clear() - * - */ - __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self->__pyx_vtab)->_check_frozen(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 81, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_frozenlist.pyx":82 - * def clear(self): - * self._check_frozen() - * self._items.clear() # <<<<<<<<<<<<<< - * - * def extend(self, items): - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_items, __pyx_n_s_clear); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 82, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 82, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_frozenlist.pyx":80 - * self._items.remove(item) - * - * def clear(self): # <<<<<<<<<<<<<< - * self._check_frozen() - * self._items.clear() - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.clear", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_frozenlist.pyx":84 - * self._items.clear() - * - * def extend(self, items): # <<<<<<<<<<<<<< - * self._check_frozen() - * self._items += list(items) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_31extend(PyObject *__pyx_v_self, PyObject *__pyx_v_items); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_31extend(PyObject *__pyx_v_self, PyObject *__pyx_v_items) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("extend (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_30extend(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), ((PyObject *)__pyx_v_items)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_30extend(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_items) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("extend", 0); - - /* "aiohttp/_frozenlist.pyx":85 - * - * def extend(self, items): - * self._check_frozen() # <<<<<<<<<<<<<< - * self._items += list(items) - * - */ - __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self->__pyx_vtab)->_check_frozen(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 85, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_frozenlist.pyx":86 - * def extend(self, items): - * self._check_frozen() - * self._items += list(items) # <<<<<<<<<<<<<< - * - * def reverse(self): - */ - __pyx_t_1 = PySequence_List(__pyx_v_items); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 86, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_self->_items, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 86, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_GIVEREF(__pyx_t_2); - __Pyx_GOTREF(__pyx_v_self->_items); - __Pyx_DECREF(__pyx_v_self->_items); - __pyx_v_self->_items = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; - - /* "aiohttp/_frozenlist.pyx":84 - * self._items.clear() - * - * def extend(self, items): # <<<<<<<<<<<<<< - * self._check_frozen() - * self._items += list(items) - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.extend", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_frozenlist.pyx":88 - * self._items += list(items) - * - * def reverse(self): # <<<<<<<<<<<<<< - * self._check_frozen() - * self._items.reverse() - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_33reverse(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_33reverse(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("reverse (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_32reverse(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_32reverse(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("reverse", 0); - - /* "aiohttp/_frozenlist.pyx":89 - * - * def reverse(self): - * self._check_frozen() # <<<<<<<<<<<<<< - * self._items.reverse() - * - */ - __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self->__pyx_vtab)->_check_frozen(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 89, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_frozenlist.pyx":90 - * def reverse(self): - * self._check_frozen() - * self._items.reverse() # <<<<<<<<<<<<<< - * - * def pop(self, index=-1): - */ - if (unlikely(__pyx_v_self->_items == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "reverse"); - __PYX_ERR(0, 90, __pyx_L1_error) - } - __pyx_t_2 = PyList_Reverse(__pyx_v_self->_items); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 90, __pyx_L1_error) - - /* "aiohttp/_frozenlist.pyx":88 - * self._items += list(items) - * - * def reverse(self): # <<<<<<<<<<<<<< - * self._check_frozen() - * self._items.reverse() - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.reverse", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_frozenlist.pyx":92 - * self._items.reverse() - * - * def pop(self, index=-1): # <<<<<<<<<<<<<< - * self._check_frozen() - * return self._items.pop(index) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_35pop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_35pop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_index = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("pop (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_index,0}; - PyObject* values[1] = {0}; - values[0] = ((PyObject *)__pyx_int_neg_1); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_index); - if (value) { values[0] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pop") < 0)) __PYX_ERR(0, 92, __pyx_L3_error) - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_index = values[0]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("pop", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 92, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.pop", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_34pop(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), __pyx_v_index); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_34pop(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_index) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - Py_ssize_t __pyx_t_2; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("pop", 0); - - /* "aiohttp/_frozenlist.pyx":93 - * - * def pop(self, index=-1): - * self._check_frozen() # <<<<<<<<<<<<<< - * return self._items.pop(index) - * - */ - __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self->__pyx_vtab)->_check_frozen(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 93, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_frozenlist.pyx":94 - * def pop(self, index=-1): - * self._check_frozen() - * return self._items.pop(index) # <<<<<<<<<<<<<< - * - * def append(self, item): - */ - __Pyx_XDECREF(__pyx_r); - if (unlikely(__pyx_v_self->_items == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "pop"); - __PYX_ERR(0, 94, __pyx_L1_error) - } - __pyx_t_2 = __Pyx_PyIndex_AsSsize_t(__pyx_v_index); if (unlikely((__pyx_t_2 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 94, __pyx_L1_error) - __pyx_t_1 = __Pyx_PyList_PopIndex(__pyx_v_self->_items, __pyx_v_index, __pyx_t_2, 1, Py_ssize_t, PyInt_FromSsize_t); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 94, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "aiohttp/_frozenlist.pyx":92 - * self._items.reverse() - * - * def pop(self, index=-1): # <<<<<<<<<<<<<< - * self._check_frozen() - * return self._items.pop(index) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.pop", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_frozenlist.pyx":96 - * return self._items.pop(index) - * - * def append(self, item): # <<<<<<<<<<<<<< - * self._check_frozen() - * return self._items.append(item) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_37append(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_37append(PyObject *__pyx_v_self, PyObject *__pyx_v_item) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("append (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_36append(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), ((PyObject *)__pyx_v_item)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_36append(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_item) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("append", 0); - - /* "aiohttp/_frozenlist.pyx":97 - * - * def append(self, item): - * self._check_frozen() # <<<<<<<<<<<<<< - * return self._items.append(item) - * - */ - __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self->__pyx_vtab)->_check_frozen(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 97, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_frozenlist.pyx":98 - * def append(self, item): - * self._check_frozen() - * return self._items.append(item) # <<<<<<<<<<<<<< - * - * def count(self, item): - */ - __Pyx_XDECREF(__pyx_r); - if (unlikely(__pyx_v_self->_items == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append"); - __PYX_ERR(0, 98, __pyx_L1_error) - } - __pyx_t_2 = __Pyx_PyList_Append(__pyx_v_self->_items, __pyx_v_item); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 98, __pyx_L1_error) - __pyx_t_1 = __Pyx_Owned_Py_None(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 98, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "aiohttp/_frozenlist.pyx":96 - * return self._items.pop(index) - * - * def append(self, item): # <<<<<<<<<<<<<< - * self._check_frozen() - * return self._items.append(item) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.append", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_frozenlist.pyx":100 - * return self._items.append(item) - * - * def count(self, item): # <<<<<<<<<<<<<< - * return self._items.count(item) - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_39count(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_39count(PyObject *__pyx_v_self, PyObject *__pyx_v_item) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("count (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_38count(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), ((PyObject *)__pyx_v_item)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_38count(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v_item) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("count", 0); - - /* "aiohttp/_frozenlist.pyx":101 - * - * def count(self, item): - * return self._items.count(item) # <<<<<<<<<<<<<< - * - * def __repr__(self): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_items, __pyx_n_s_count); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 101, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_item) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_item); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 101, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "aiohttp/_frozenlist.pyx":100 - * return self._items.append(item) - * - * def count(self, item): # <<<<<<<<<<<<<< - * return self._items.count(item) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.count", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_frozenlist.pyx":103 - * return self._items.count(item) - * - * def __repr__(self): # <<<<<<<<<<<<<< - * return ''.format(self.frozen, - * self._items) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_41__repr__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_41__repr__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_40__repr__(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_40__repr__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__repr__", 0); - - /* "aiohttp/_frozenlist.pyx":104 - * - * def __repr__(self): - * return ''.format(self.frozen, # <<<<<<<<<<<<<< - * self._items) - * - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_FrozenList_frozen_r, __pyx_n_s_format); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 104, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_v_self->frozen); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 104, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - - /* "aiohttp/_frozenlist.pyx":105 - * def __repr__(self): - * return ''.format(self.frozen, - * self._items) # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_4 = NULL; - __pyx_t_5 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - __pyx_t_5 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_2)) { - PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_3, __pyx_v_self->_items}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 104, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { - PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_3, __pyx_v_self->_items}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 104, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } else - #endif - { - __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 104, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - if (__pyx_t_4) { - __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL; - } - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_t_3); - __Pyx_INCREF(__pyx_v_self->_items); - __Pyx_GIVEREF(__pyx_v_self->_items); - PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_v_self->_items); - __pyx_t_3 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 104, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "aiohttp/_frozenlist.pyx":103 - * return self._items.count(item) - * - * def __repr__(self): # <<<<<<<<<<<<<< - * return ''.format(self.frozen, - * self._items) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_frozenlist.pyx":6 - * cdef class FrozenList: - * - * cdef readonly bint frozen # <<<<<<<<<<<<<< - * cdef list _items - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_6frozen_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_6frozen_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_6frozen___get__(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_6frozen___get__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->frozen); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.frozen.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * cdef tuple state - * cdef object _dict - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_43__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_43__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_42__reduce_cython__(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_42__reduce_cython__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self) { - PyObject *__pyx_v_state = 0; - PyObject *__pyx_v__dict = 0; - int __pyx_v_use_setstate; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_t_3; - int __pyx_t_4; - PyObject *__pyx_t_5 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__reduce_cython__", 0); - - /* "(tree fragment)":5 - * cdef object _dict - * cdef bint use_setstate - * state = (self._items, self.frozen) # <<<<<<<<<<<<<< - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: - */ - __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->frozen); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_self->_items); - __Pyx_GIVEREF(__pyx_v_self->_items); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self->_items); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1); - __pyx_t_1 = 0; - __pyx_v_state = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; - - /* "(tree fragment)":6 - * cdef bint use_setstate - * state = (self._items, self.frozen) - * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< - * if _dict is not None: - * state += (_dict,) - */ - __pyx_t_2 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v__dict = __pyx_t_2; - __pyx_t_2 = 0; - - /* "(tree fragment)":7 - * state = (self._items, self.frozen) - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: # <<<<<<<<<<<<<< - * state += (_dict,) - * use_setstate = True - */ - __pyx_t_3 = (__pyx_v__dict != Py_None); - __pyx_t_4 = (__pyx_t_3 != 0); - if (__pyx_t_4) { - - /* "(tree fragment)":8 - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: - * state += (_dict,) # <<<<<<<<<<<<<< - * use_setstate = True - * else: - */ - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v__dict); - __Pyx_GIVEREF(__pyx_v__dict); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v__dict); - __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_1)); - __pyx_t_1 = 0; - - /* "(tree fragment)":9 - * if _dict is not None: - * state += (_dict,) - * use_setstate = True # <<<<<<<<<<<<<< - * else: - * use_setstate = self._items is not None - */ - __pyx_v_use_setstate = 1; - - /* "(tree fragment)":7 - * state = (self._items, self.frozen) - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: # <<<<<<<<<<<<<< - * state += (_dict,) - * use_setstate = True - */ - goto __pyx_L3; - } - - /* "(tree fragment)":11 - * use_setstate = True - * else: - * use_setstate = self._items is not None # <<<<<<<<<<<<<< - * if use_setstate: - * return __pyx_unpickle_FrozenList, (type(self), 0x949a143, None), state - */ - /*else*/ { - __pyx_t_4 = (__pyx_v_self->_items != ((PyObject*)Py_None)); - __pyx_v_use_setstate = __pyx_t_4; - } - __pyx_L3:; - - /* "(tree fragment)":12 - * else: - * use_setstate = self._items is not None - * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_FrozenList, (type(self), 0x949a143, None), state - * else: - */ - __pyx_t_4 = (__pyx_v_use_setstate != 0); - if (__pyx_t_4) { - - /* "(tree fragment)":13 - * use_setstate = self._items is not None - * if use_setstate: - * return __pyx_unpickle_FrozenList, (type(self), 0x949a143, None), state # <<<<<<<<<<<<<< - * else: - * return __pyx_unpickle_FrozenList, (type(self), 0x949a143, state) - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pyx_unpickle_FrozenList); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_155820355); - __Pyx_GIVEREF(__pyx_int_155820355); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_155820355); - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_2, 2, Py_None); - __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2); - __Pyx_INCREF(__pyx_v_state); - __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state); - __pyx_t_1 = 0; - __pyx_t_2 = 0; - __pyx_r = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L0; - - /* "(tree fragment)":12 - * else: - * use_setstate = self._items is not None - * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_FrozenList, (type(self), 0x949a143, None), state - * else: - */ - } - - /* "(tree fragment)":15 - * return __pyx_unpickle_FrozenList, (type(self), 0x949a143, None), state - * else: - * return __pyx_unpickle_FrozenList, (type(self), 0x949a143, state) # <<<<<<<<<<<<<< - * def __setstate_cython__(self, __pyx_state): - * __pyx_unpickle_FrozenList__set_state(self, __pyx_state) - */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle_FrozenList); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_155820355); - __Pyx_GIVEREF(__pyx_int_155820355); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_155820355); - __Pyx_INCREF(__pyx_v_state); - __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_state); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); - __pyx_t_5 = 0; - __pyx_t_2 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - } - - /* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * cdef tuple state - * cdef object _dict - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_state); - __Pyx_XDECREF(__pyx_v__dict); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":16 - * else: - * return __pyx_unpickle_FrozenList, (type(self), 0x949a143, state) - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * __pyx_unpickle_FrozenList__set_state(self, __pyx_state) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_45__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_45__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_11_frozenlist_10FrozenList_44__setstate_cython__(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_11_frozenlist_10FrozenList_44__setstate_cython__(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v_self, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setstate_cython__", 0); - - /* "(tree fragment)":17 - * return __pyx_unpickle_FrozenList, (type(self), 0x949a143, state) - * def __setstate_cython__(self, __pyx_state): - * __pyx_unpickle_FrozenList__set_state(self, __pyx_state) # <<<<<<<<<<<<<< - */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error) - __pyx_t_1 = __pyx_f_7aiohttp_11_frozenlist___pyx_unpickle_FrozenList__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "(tree fragment)":16 - * else: - * return __pyx_unpickle_FrozenList, (type(self), 0x949a143, state) - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * __pyx_unpickle_FrozenList__set_state(self, __pyx_state) - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._frozenlist.FrozenList.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":1 - * def __pyx_unpickle_FrozenList(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_1__pyx_unpickle_FrozenList(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_7aiohttp_11_frozenlist_1__pyx_unpickle_FrozenList = {"__pyx_unpickle_FrozenList", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7aiohttp_11_frozenlist_1__pyx_unpickle_FrozenList, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_7aiohttp_11_frozenlist_1__pyx_unpickle_FrozenList(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v___pyx_type = 0; - long __pyx_v___pyx_checksum; - PyObject *__pyx_v___pyx_state = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__pyx_unpickle_FrozenList (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_FrozenList", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_FrozenList", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_FrozenList") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - } - __pyx_v___pyx_type = values[0]; - __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) - __pyx_v___pyx_state = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_FrozenList", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("aiohttp._frozenlist.__pyx_unpickle_FrozenList", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_7aiohttp_11_frozenlist___pyx_unpickle_FrozenList(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_11_frozenlist___pyx_unpickle_FrozenList(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_v___pyx_PickleError = 0; - PyObject *__pyx_v___pyx_result = 0; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_FrozenList", 0); - - /* "(tree fragment)":4 - * cdef object __pyx_PickleError - * cdef object __pyx_result - * if __pyx_checksum != 0x949a143: # <<<<<<<<<<<<<< - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x949a143 = (_items, frozen))" % __pyx_checksum) - */ - __pyx_t_1 = ((__pyx_v___pyx_checksum != 0x949a143) != 0); - if (__pyx_t_1) { - - /* "(tree fragment)":5 - * cdef object __pyx_result - * if __pyx_checksum != 0x949a143: - * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x949a143 = (_items, frozen))" % __pyx_checksum) - * __pyx_result = FrozenList.__new__(__pyx_type) - */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_n_s_PickleError); - __Pyx_GIVEREF(__pyx_n_s_PickleError); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError); - __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_t_2); - __pyx_v___pyx_PickleError = __pyx_t_2; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "(tree fragment)":6 - * if __pyx_checksum != 0x949a143: - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x949a143 = (_items, frozen))" % __pyx_checksum) # <<<<<<<<<<<<<< - * __pyx_result = FrozenList.__new__(__pyx_type) - * if __pyx_state is not None: - */ - __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0x94, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_INCREF(__pyx_v___pyx_PickleError); - __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __PYX_ERR(1, 6, __pyx_L1_error) - - /* "(tree fragment)":4 - * cdef object __pyx_PickleError - * cdef object __pyx_result - * if __pyx_checksum != 0x949a143: # <<<<<<<<<<<<<< - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x949a143 = (_items, frozen))" % __pyx_checksum) - */ - } - - /* "(tree fragment)":7 - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x949a143 = (_items, frozen))" % __pyx_checksum) - * __pyx_result = FrozenList.__new__(__pyx_type) # <<<<<<<<<<<<<< - * if __pyx_state is not None: - * __pyx_unpickle_FrozenList__set_state( __pyx_result, __pyx_state) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_7aiohttp_11_frozenlist_FrozenList), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v___pyx_result = __pyx_t_3; - __pyx_t_3 = 0; - - /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x949a143 = (_items, frozen))" % __pyx_checksum) - * __pyx_result = FrozenList.__new__(__pyx_type) - * if __pyx_state is not None: # <<<<<<<<<<<<<< - * __pyx_unpickle_FrozenList__set_state( __pyx_result, __pyx_state) - * return __pyx_result - */ - __pyx_t_1 = (__pyx_v___pyx_state != Py_None); - __pyx_t_6 = (__pyx_t_1 != 0); - if (__pyx_t_6) { - - /* "(tree fragment)":9 - * __pyx_result = FrozenList.__new__(__pyx_type) - * if __pyx_state is not None: - * __pyx_unpickle_FrozenList__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< - * return __pyx_result - * cdef __pyx_unpickle_FrozenList__set_state(FrozenList __pyx_result, tuple __pyx_state): - */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error) - __pyx_t_3 = __pyx_f_7aiohttp_11_frozenlist___pyx_unpickle_FrozenList__set_state(((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x949a143 = (_items, frozen))" % __pyx_checksum) - * __pyx_result = FrozenList.__new__(__pyx_type) - * if __pyx_state is not None: # <<<<<<<<<<<<<< - * __pyx_unpickle_FrozenList__set_state( __pyx_result, __pyx_state) - * return __pyx_result - */ - } - - /* "(tree fragment)":10 - * if __pyx_state is not None: - * __pyx_unpickle_FrozenList__set_state( __pyx_result, __pyx_state) - * return __pyx_result # <<<<<<<<<<<<<< - * cdef __pyx_unpickle_FrozenList__set_state(FrozenList __pyx_result, tuple __pyx_state): - * __pyx_result._items = __pyx_state[0]; __pyx_result.frozen = __pyx_state[1] - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v___pyx_result); - __pyx_r = __pyx_v___pyx_result; - goto __pyx_L0; - - /* "(tree fragment)":1 - * def __pyx_unpickle_FrozenList(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("aiohttp._frozenlist.__pyx_unpickle_FrozenList", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v___pyx_PickleError); - __Pyx_XDECREF(__pyx_v___pyx_result); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":11 - * __pyx_unpickle_FrozenList__set_state( __pyx_result, __pyx_state) - * return __pyx_result - * cdef __pyx_unpickle_FrozenList__set_state(FrozenList __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< - * __pyx_result._items = __pyx_state[0]; __pyx_result.frozen = __pyx_state[1] - * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): - */ - -static PyObject *__pyx_f_7aiohttp_11_frozenlist___pyx_unpickle_FrozenList__set_state(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - Py_ssize_t __pyx_t_3; - int __pyx_t_4; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_FrozenList__set_state", 0); - - /* "(tree fragment)":12 - * return __pyx_result - * cdef __pyx_unpickle_FrozenList__set_state(FrozenList __pyx_result, tuple __pyx_state): - * __pyx_result._items = __pyx_state[0]; __pyx_result.frozen = __pyx_state[1] # <<<<<<<<<<<<<< - * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): - * __pyx_result.__dict__.update(__pyx_state[2]) - */ - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 12, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v___pyx_result->_items); - __Pyx_DECREF(__pyx_v___pyx_result->_items); - __pyx_v___pyx_result->_items = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 12, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result->frozen = __pyx_t_2; - - /* "(tree fragment)":13 - * cdef __pyx_unpickle_FrozenList__set_state(FrozenList __pyx_result, tuple __pyx_state): - * __pyx_result._items = __pyx_state[0]; __pyx_result.frozen = __pyx_state[1] - * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< - * __pyx_result.__dict__.update(__pyx_state[2]) - */ - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(1, 13, __pyx_L1_error) - } - __pyx_t_3 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) - __pyx_t_4 = ((__pyx_t_3 > 2) != 0); - if (__pyx_t_4) { - } else { - __pyx_t_2 = __pyx_t_4; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) - __pyx_t_5 = (__pyx_t_4 != 0); - __pyx_t_2 = __pyx_t_5; - __pyx_L4_bool_binop_done:; - if (__pyx_t_2) { - - /* "(tree fragment)":14 - * __pyx_result._items = __pyx_state[0]; __pyx_result.frozen = __pyx_state[1] - * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): - * __pyx_result.__dict__.update(__pyx_state[2]) # <<<<<<<<<<<<<< - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 14, __pyx_L1_error) - } - __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - } - } - __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "(tree fragment)":13 - * cdef __pyx_unpickle_FrozenList__set_state(FrozenList __pyx_result, tuple __pyx_state): - * __pyx_result._items = __pyx_state[0]; __pyx_result.frozen = __pyx_state[1] - * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< - * __pyx_result.__dict__.update(__pyx_state[2]) - */ - } - - /* "(tree fragment)":11 - * __pyx_unpickle_FrozenList__set_state( __pyx_result, __pyx_state) - * return __pyx_result - * cdef __pyx_unpickle_FrozenList__set_state(FrozenList __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< - * __pyx_result._items = __pyx_state[0]; __pyx_result.frozen = __pyx_state[1] - * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("aiohttp._frozenlist.__pyx_unpickle_FrozenList__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} -static struct __pyx_vtabstruct_7aiohttp_11_frozenlist_FrozenList __pyx_vtable_7aiohttp_11_frozenlist_FrozenList; - -static PyObject *__pyx_tp_new_7aiohttp_11_frozenlist_FrozenList(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { - struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *p; - PyObject *o; - if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { - o = (*t->tp_alloc)(t, 0); - } else { - o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); - } - if (unlikely(!o)) return 0; - p = ((struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)o); - p->__pyx_vtab = __pyx_vtabptr_7aiohttp_11_frozenlist_FrozenList; - p->_items = ((PyObject*)Py_None); Py_INCREF(Py_None); - return o; -} - -static void __pyx_tp_dealloc_7aiohttp_11_frozenlist_FrozenList(PyObject *o) { - struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *p = (struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)o; - #if CYTHON_USE_TP_FINALIZE - if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { - if (PyObject_CallFinalizerFromDealloc(o)) return; - } - #endif - PyObject_GC_UnTrack(o); - Py_CLEAR(p->_items); - (*Py_TYPE(o)->tp_free)(o); -} - -static int __pyx_tp_traverse_7aiohttp_11_frozenlist_FrozenList(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *p = (struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)o; - if (p->_items) { - e = (*v)(p->_items, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_7aiohttp_11_frozenlist_FrozenList(PyObject *o) { - PyObject* tmp; - struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *p = (struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *)o; - tmp = ((PyObject*)p->_items); - p->_items = ((PyObject*)Py_None); Py_INCREF(Py_None); - Py_XDECREF(tmp); - return 0; -} -static PyObject *__pyx_sq_item_7aiohttp_11_frozenlist_FrozenList(PyObject *o, Py_ssize_t i) { - PyObject *r; - PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0; - r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x); - Py_DECREF(x); - return r; -} - -static int __pyx_mp_ass_subscript_7aiohttp_11_frozenlist_FrozenList(PyObject *o, PyObject *i, PyObject *v) { - if (v) { - return __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_7__setitem__(o, i, v); - } - else { - return __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_9__delitem__(o, i); - } -} - -static PyObject *__pyx_getprop_7aiohttp_11_frozenlist_10FrozenList_frozen(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_6frozen_1__get__(o); -} - -static PyMethodDef __pyx_methods_7aiohttp_11_frozenlist_FrozenList[] = { - {"freeze", (PyCFunction)__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_3freeze, METH_NOARGS, 0}, - {"__reversed__", (PyCFunction)__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_15__reversed__, METH_NOARGS, 0}, - {"insert", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_19insert, METH_VARARGS|METH_KEYWORDS, 0}, - {"index", (PyCFunction)__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_25index, METH_O, 0}, - {"remove", (PyCFunction)__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_27remove, METH_O, 0}, - {"clear", (PyCFunction)__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_29clear, METH_NOARGS, 0}, - {"extend", (PyCFunction)__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_31extend, METH_O, 0}, - {"reverse", (PyCFunction)__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_33reverse, METH_NOARGS, 0}, - {"pop", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_35pop, METH_VARARGS|METH_KEYWORDS, 0}, - {"append", (PyCFunction)__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_37append, METH_O, 0}, - {"count", (PyCFunction)__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_39count, METH_O, 0}, - {"__reduce_cython__", (PyCFunction)__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_43__reduce_cython__, METH_NOARGS, 0}, - {"__setstate_cython__", (PyCFunction)__pyx_pw_7aiohttp_11_frozenlist_10FrozenList_45__setstate_cython__, METH_O, 0}, - {0, 0, 0, 0} -}; - -static struct PyGetSetDef __pyx_getsets_7aiohttp_11_frozenlist_FrozenList[] = { - {(char *)"frozen", __pyx_getprop_7aiohttp_11_frozenlist_10FrozenList_frozen, 0, (char *)0, 0}, - {0, 0, 0, 0, 0} -}; - -static PyNumberMethods __pyx_tp_as_number_FrozenList = { - 0, /*nb_add*/ - 0, /*nb_subtract*/ - 0, /*nb_multiply*/ - #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000) - 0, /*nb_divide*/ - #endif - 0, /*nb_remainder*/ - 0, /*nb_divmod*/ - 0, /*nb_power*/ - 0, /*nb_negative*/ - 0, /*nb_positive*/ - 0, /*nb_absolute*/ - 0, /*nb_nonzero*/ - 0, /*nb_invert*/ - 0, /*nb_lshift*/ - 0, /*nb_rshift*/ - 0, /*nb_and*/ - 0, /*nb_xor*/ - 0, /*nb_or*/ - #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000) - 0, /*nb_coerce*/ - #endif - 0, /*nb_int*/ - #if PY_MAJOR_VERSION < 3 - 0, /*nb_long*/ - #else - 0, /*reserved*/ - #endif - 0, /*nb_float*/ - #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000) - 0, /*nb_oct*/ - #endif - #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000) - 0, /*nb_hex*/ - #endif - __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_23__iadd__, /*nb_inplace_add*/ - 0, /*nb_inplace_subtract*/ - 0, /*nb_inplace_multiply*/ - #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000) - 0, /*nb_inplace_divide*/ - #endif - 0, /*nb_inplace_remainder*/ - 0, /*nb_inplace_power*/ - 0, /*nb_inplace_lshift*/ - 0, /*nb_inplace_rshift*/ - 0, /*nb_inplace_and*/ - 0, /*nb_inplace_xor*/ - 0, /*nb_inplace_or*/ - 0, /*nb_floor_divide*/ - 0, /*nb_true_divide*/ - 0, /*nb_inplace_floor_divide*/ - 0, /*nb_inplace_true_divide*/ - 0, /*nb_index*/ - #if PY_VERSION_HEX >= 0x03050000 - 0, /*nb_matrix_multiply*/ - #endif - #if PY_VERSION_HEX >= 0x03050000 - 0, /*nb_inplace_matrix_multiply*/ - #endif -}; - -static PySequenceMethods __pyx_tp_as_sequence_FrozenList = { - __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_11__len__, /*sq_length*/ - 0, /*sq_concat*/ - 0, /*sq_repeat*/ - __pyx_sq_item_7aiohttp_11_frozenlist_FrozenList, /*sq_item*/ - 0, /*sq_slice*/ - 0, /*sq_ass_item*/ - 0, /*sq_ass_slice*/ - __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_21__contains__, /*sq_contains*/ - 0, /*sq_inplace_concat*/ - 0, /*sq_inplace_repeat*/ -}; - -static PyMappingMethods __pyx_tp_as_mapping_FrozenList = { - __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_11__len__, /*mp_length*/ - __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_5__getitem__, /*mp_subscript*/ - __pyx_mp_ass_subscript_7aiohttp_11_frozenlist_FrozenList, /*mp_ass_subscript*/ -}; - -static PyTypeObject __pyx_type_7aiohttp_11_frozenlist_FrozenList = { - PyVarObject_HEAD_INIT(0, 0) - "aiohttp._frozenlist.FrozenList", /*tp_name*/ - sizeof(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_7aiohttp_11_frozenlist_FrozenList, /*tp_dealloc*/ - #if PY_VERSION_HEX < 0x030800b4 - 0, /*tp_print*/ - #endif - #if PY_VERSION_HEX >= 0x030800b4 - 0, /*tp_vectorcall_offset*/ - #endif - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #endif - #if PY_MAJOR_VERSION >= 3 - 0, /*tp_as_async*/ - #endif - __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_41__repr__, /*tp_repr*/ - &__pyx_tp_as_number_FrozenList, /*tp_as_number*/ - &__pyx_tp_as_sequence_FrozenList, /*tp_as_sequence*/ - &__pyx_tp_as_mapping_FrozenList, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_7aiohttp_11_frozenlist_FrozenList, /*tp_traverse*/ - __pyx_tp_clear_7aiohttp_11_frozenlist_FrozenList, /*tp_clear*/ - __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_17__richcmp__, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_13__iter__, /*tp_iter*/ - 0, /*tp_iternext*/ - __pyx_methods_7aiohttp_11_frozenlist_FrozenList, /*tp_methods*/ - 0, /*tp_members*/ - __pyx_getsets_7aiohttp_11_frozenlist_FrozenList, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - __pyx_pw_7aiohttp_11_frozenlist_10FrozenList_1__init__, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_7aiohttp_11_frozenlist_FrozenList, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - 0, /*tp_version_tag*/ - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif - #if PY_VERSION_HEX >= 0x030800b1 - 0, /*tp_vectorcall*/ - #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 - 0, /*tp_print*/ - #endif -}; - -static PyMethodDef __pyx_methods[] = { - {0, 0, 0, 0} -}; - -#if PY_MAJOR_VERSION >= 3 -#if CYTHON_PEP489_MULTI_PHASE_INIT -static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ -static int __pyx_pymod_exec__frozenlist(PyObject* module); /*proto*/ -static PyModuleDef_Slot __pyx_moduledef_slots[] = { - {Py_mod_create, (void*)__pyx_pymod_create}, - {Py_mod_exec, (void*)__pyx_pymod_exec__frozenlist}, - {0, NULL} -}; -#endif - -static struct PyModuleDef __pyx_moduledef = { - PyModuleDef_HEAD_INIT, - "_frozenlist", - 0, /* m_doc */ - #if CYTHON_PEP489_MULTI_PHASE_INIT - 0, /* m_size */ - #else - -1, /* m_size */ - #endif - __pyx_methods /* m_methods */, - #if CYTHON_PEP489_MULTI_PHASE_INIT - __pyx_moduledef_slots, /* m_slots */ - #else - NULL, /* m_reload */ - #endif - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL /* m_free */ -}; -#endif -#ifndef CYTHON_SMALL_CODE -#if defined(__clang__) - #define CYTHON_SMALL_CODE -#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) - #define CYTHON_SMALL_CODE __attribute__((cold)) -#else - #define CYTHON_SMALL_CODE -#endif -#endif - -static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_kp_u_Cannot_modify_frozen_list, __pyx_k_Cannot_modify_frozen_list, sizeof(__pyx_k_Cannot_modify_frozen_list), 0, 1, 0, 0}, - {&__pyx_n_s_FrozenList, __pyx_k_FrozenList, sizeof(__pyx_k_FrozenList), 0, 0, 1, 1}, - {&__pyx_kp_u_FrozenList_frozen_r, __pyx_k_FrozenList_frozen_r, sizeof(__pyx_k_FrozenList_frozen_r), 0, 1, 0, 0}, - {&__pyx_kp_s_Incompatible_checksums_s_vs_0x94, __pyx_k_Incompatible_checksums_s_vs_0x94, sizeof(__pyx_k_Incompatible_checksums_s_vs_0x94), 0, 0, 1, 0}, - {&__pyx_n_s_MutableSequence, __pyx_k_MutableSequence, sizeof(__pyx_k_MutableSequence), 0, 0, 1, 1}, - {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1}, - {&__pyx_n_s_RuntimeError, __pyx_k_RuntimeError, sizeof(__pyx_k_RuntimeError), 0, 0, 1, 1}, - {&__pyx_n_s_aiohttp__frozenlist, __pyx_k_aiohttp__frozenlist, sizeof(__pyx_k_aiohttp__frozenlist), 0, 0, 1, 1}, - {&__pyx_n_s_clear, __pyx_k_clear, sizeof(__pyx_k_clear), 0, 0, 1, 1}, - {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, - {&__pyx_n_s_collections_abc, __pyx_k_collections_abc, sizeof(__pyx_k_collections_abc), 0, 0, 1, 1}, - {&__pyx_n_s_count, __pyx_k_count, sizeof(__pyx_k_count), 0, 0, 1, 1}, - {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, - {&__pyx_n_s_format, __pyx_k_format, sizeof(__pyx_k_format), 0, 0, 1, 1}, - {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1}, - {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, - {&__pyx_n_s_index, __pyx_k_index, sizeof(__pyx_k_index), 0, 0, 1, 1}, - {&__pyx_n_s_item, __pyx_k_item, sizeof(__pyx_k_item), 0, 0, 1, 1}, - {&__pyx_n_s_items, __pyx_k_items, sizeof(__pyx_k_items), 0, 0, 1, 1}, - {&__pyx_n_s_iter, __pyx_k_iter, sizeof(__pyx_k_iter), 0, 0, 1, 1}, - {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, - {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, - {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1}, - {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1}, - {&__pyx_n_s_pop, __pyx_k_pop, sizeof(__pyx_k_pop), 0, 0, 1, 1}, - {&__pyx_n_s_pos, __pyx_k_pos, sizeof(__pyx_k_pos), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_state, __pyx_k_pyx_state, sizeof(__pyx_k_pyx_state), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_type, __pyx_k_pyx_type, sizeof(__pyx_k_pyx_type), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_unpickle_FrozenList, __pyx_k_pyx_unpickle_FrozenList, sizeof(__pyx_k_pyx_unpickle_FrozenList), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1}, - {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1}, - {&__pyx_n_s_reduce_cython, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1}, - {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1}, - {&__pyx_n_s_register, __pyx_k_register, sizeof(__pyx_k_register), 0, 0, 1, 1}, - {&__pyx_n_s_remove, __pyx_k_remove, sizeof(__pyx_k_remove), 0, 0, 1, 1}, - {&__pyx_n_s_reversed, __pyx_k_reversed, sizeof(__pyx_k_reversed), 0, 0, 1, 1}, - {&__pyx_n_s_setstate, __pyx_k_setstate, sizeof(__pyx_k_setstate), 0, 0, 1, 1}, - {&__pyx_n_s_setstate_cython, __pyx_k_setstate_cython, sizeof(__pyx_k_setstate_cython), 0, 0, 1, 1}, - {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0}, - {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, - {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, - {0, 0, 0, 0, 0, 0, 0} -}; -static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s_RuntimeError); if (!__pyx_builtin_RuntimeError) __PYX_ERR(0, 19, __pyx_L1_error) - return 0; - __pyx_L1_error:; - return -1; -} - -static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); - - /* "aiohttp/_frozenlist.pyx":19 - * cdef object _check_frozen(self): - * if self.frozen: - * raise RuntimeError("Cannot modify frozen list.") # <<<<<<<<<<<<<< - * - * cdef inline object _fast_len(self): - */ - __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_u_Cannot_modify_frozen_list); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 19, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple_); - __Pyx_GIVEREF(__pyx_tuple_); - - /* "(tree fragment)":1 - * def __pyx_unpickle_FrozenList(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result - */ - __pyx_tuple__2 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__2); - __Pyx_GIVEREF(__pyx_tuple__2); - __pyx_codeobj__3 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__2, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_FrozenList, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__3)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_RefNannyFinishContext(); - return -1; -} - -static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { - if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error); - __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_int_3 = PyInt_FromLong(3); if (unlikely(!__pyx_int_3)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_int_4 = PyInt_FromLong(4); if (unlikely(!__pyx_int_4)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_int_5 = PyInt_FromLong(5); if (unlikely(!__pyx_int_5)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_int_155820355 = PyInt_FromLong(155820355L); if (unlikely(!__pyx_int_155820355)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) __PYX_ERR(0, 1, __pyx_L1_error) - return 0; - __pyx_L1_error:; - return -1; -} - -static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ - -static int __Pyx_modinit_global_init_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); - /*--- Global init code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_variable_export_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); - /*--- Variable export code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_function_export_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); - /*--- Function export code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_type_init_code(void) { - __Pyx_RefNannyDeclarations - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); - /*--- Type init code ---*/ - __pyx_vtabptr_7aiohttp_11_frozenlist_FrozenList = &__pyx_vtable_7aiohttp_11_frozenlist_FrozenList; - __pyx_vtable_7aiohttp_11_frozenlist_FrozenList._check_frozen = (PyObject *(*)(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *))__pyx_f_7aiohttp_11_frozenlist_10FrozenList__check_frozen; - __pyx_vtable_7aiohttp_11_frozenlist_FrozenList._fast_len = (PyObject *(*)(struct __pyx_obj_7aiohttp_11_frozenlist_FrozenList *))__pyx_f_7aiohttp_11_frozenlist_10FrozenList__fast_len; - if (PyType_Ready(&__pyx_type_7aiohttp_11_frozenlist_FrozenList) < 0) __PYX_ERR(0, 4, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type_7aiohttp_11_frozenlist_FrozenList.tp_print = 0; - #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7aiohttp_11_frozenlist_FrozenList.tp_dictoffset && __pyx_type_7aiohttp_11_frozenlist_FrozenList.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type_7aiohttp_11_frozenlist_FrozenList.tp_getattro = __Pyx_PyObject_GenericGetAttr; - } - if (__Pyx_SetVtable(__pyx_type_7aiohttp_11_frozenlist_FrozenList.tp_dict, __pyx_vtabptr_7aiohttp_11_frozenlist_FrozenList) < 0) __PYX_ERR(0, 4, __pyx_L1_error) - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_FrozenList, (PyObject *)&__pyx_type_7aiohttp_11_frozenlist_FrozenList) < 0) __PYX_ERR(0, 4, __pyx_L1_error) - if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7aiohttp_11_frozenlist_FrozenList) < 0) __PYX_ERR(0, 4, __pyx_L1_error) - __pyx_ptype_7aiohttp_11_frozenlist_FrozenList = &__pyx_type_7aiohttp_11_frozenlist_FrozenList; - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_RefNannyFinishContext(); - return -1; -} - -static int __Pyx_modinit_type_import_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); - /*--- Type import code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_variable_import_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); - /*--- Variable import code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_function_import_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); - /*--- Function import code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - - -#ifndef CYTHON_NO_PYINIT_EXPORT -#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC -#elif PY_MAJOR_VERSION < 3 -#ifdef __cplusplus -#define __Pyx_PyMODINIT_FUNC extern "C" void -#else -#define __Pyx_PyMODINIT_FUNC void -#endif -#else -#ifdef __cplusplus -#define __Pyx_PyMODINIT_FUNC extern "C" PyObject * -#else -#define __Pyx_PyMODINIT_FUNC PyObject * -#endif -#endif - - -#if PY_MAJOR_VERSION < 3 -__Pyx_PyMODINIT_FUNC init_frozenlist(void) CYTHON_SMALL_CODE; /*proto*/ -__Pyx_PyMODINIT_FUNC init_frozenlist(void) -#else -__Pyx_PyMODINIT_FUNC PyInit__frozenlist(void) CYTHON_SMALL_CODE; /*proto*/ -__Pyx_PyMODINIT_FUNC PyInit__frozenlist(void) -#if CYTHON_PEP489_MULTI_PHASE_INIT -{ - return PyModuleDef_Init(&__pyx_moduledef); -} -static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { - #if PY_VERSION_HEX >= 0x030700A1 - static PY_INT64_T main_interpreter_id = -1; - PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); - if (main_interpreter_id == -1) { - main_interpreter_id = current_id; - return (unlikely(current_id == -1)) ? -1 : 0; - } else if (unlikely(main_interpreter_id != current_id)) - #else - static PyInterpreterState *main_interpreter = NULL; - PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; - if (!main_interpreter) { - main_interpreter = current_interpreter; - } else if (unlikely(main_interpreter != current_interpreter)) - #endif - { - PyErr_SetString( - PyExc_ImportError, - "Interpreter change detected - this module can only be loaded into one interpreter per process."); - return -1; - } - return 0; -} -static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) { - PyObject *value = PyObject_GetAttrString(spec, from_name); - int result = 0; - if (likely(value)) { - if (allow_none || value != Py_None) { - result = PyDict_SetItemString(moddict, to_name, value); - } - Py_DECREF(value); - } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Clear(); - } else { - result = -1; - } - return result; -} -static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) { - PyObject *module = NULL, *moddict, *modname; - if (__Pyx_check_single_interpreter()) - return NULL; - if (__pyx_m) - return __Pyx_NewRef(__pyx_m); - modname = PyObject_GetAttrString(spec, "name"); - if (unlikely(!modname)) goto bad; - module = PyModule_NewObject(modname); - Py_DECREF(modname); - if (unlikely(!module)) goto bad; - moddict = PyModule_GetDict(module); - if (unlikely(!moddict)) goto bad; - if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; - if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; - if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; - if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; - return module; -bad: - Py_XDECREF(module); - return NULL; -} - - -static CYTHON_SMALL_CODE int __pyx_pymod_exec__frozenlist(PyObject *__pyx_pyinit_module) -#endif -#endif -{ - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannyDeclarations - #if CYTHON_PEP489_MULTI_PHASE_INIT - if (__pyx_m) { - if (__pyx_m == __pyx_pyinit_module) return 0; - PyErr_SetString(PyExc_RuntimeError, "Module '_frozenlist' has already been imported. Re-initialisation is not supported."); - return -1; - } - #elif PY_MAJOR_VERSION >= 3 - if (__pyx_m) return __Pyx_NewRef(__pyx_m); - #endif - #if CYTHON_REFNANNY -__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); -if (!__Pyx_RefNanny) { - PyErr_Clear(); - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); - if (!__Pyx_RefNanny) - Py_FatalError("failed to import 'refnanny' module"); -} -#endif - __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit__frozenlist(void)", 0); - if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #ifdef __Pxy_PyFrame_Initialize_Offsets - __Pxy_PyFrame_Initialize_Offsets(); - #endif - __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) - #ifdef __Pyx_CyFunction_USED - if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_FusedFunction_USED - if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_Coroutine_USED - if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_Generator_USED - if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_AsyncGen_USED - if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_StopAsyncIteration_USED - if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - /*--- Library function declarations ---*/ - /*--- Threads initialization code ---*/ - #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS - #ifdef WITH_THREAD /* Python build with threading support? */ - PyEval_InitThreads(); - #endif - #endif - /*--- Module creation code ---*/ - #if CYTHON_PEP489_MULTI_PHASE_INIT - __pyx_m = __pyx_pyinit_module; - Py_INCREF(__pyx_m); - #else - #if PY_MAJOR_VERSION < 3 - __pyx_m = Py_InitModule4("_frozenlist", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); - #else - __pyx_m = PyModule_Create(&__pyx_moduledef); - #endif - if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_d); - __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_b); - __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_cython_runtime); - if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error); - /*--- Initialize various global constants etc. ---*/ - if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) - if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - if (__pyx_module_is_main_aiohttp___frozenlist) { - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - } - #if PY_MAJOR_VERSION >= 3 - { - PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) - if (!PyDict_GetItemString(modules, "aiohttp._frozenlist")) { - if (unlikely(PyDict_SetItemString(modules, "aiohttp._frozenlist", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error) - } - } - #endif - /*--- Builtin init code ---*/ - if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - /*--- Constants init code ---*/ - if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - /*--- Global type/function init code ---*/ - (void)__Pyx_modinit_global_init_code(); - (void)__Pyx_modinit_variable_export_code(); - (void)__Pyx_modinit_function_export_code(); - if (unlikely(__Pyx_modinit_type_init_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error) - (void)__Pyx_modinit_type_import_code(); - (void)__Pyx_modinit_variable_import_code(); - (void)__Pyx_modinit_function_import_code(); - /*--- Execution code ---*/ - #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) - if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - - /* "aiohttp/_frozenlist.pyx":1 - * from collections.abc import MutableSequence # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s_MutableSequence); - __Pyx_GIVEREF(__pyx_n_s_MutableSequence); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_MutableSequence); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_collections_abc, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_MutableSequence); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_MutableSequence, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "aiohttp/_frozenlist.pyx":108 - * - * - * MutableSequence.register(FrozenList) # <<<<<<<<<<<<<< - */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_MutableSequence); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 108, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_register); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 108, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, ((PyObject *)__pyx_ptype_7aiohttp_11_frozenlist_FrozenList)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 108, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "(tree fragment)":1 - * def __pyx_unpickle_FrozenList(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7aiohttp_11_frozenlist_1__pyx_unpickle_FrozenList, NULL, __pyx_n_s_aiohttp__frozenlist); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_FrozenList, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "aiohttp/_frozenlist.pyx":1 - * from collections.abc import MutableSequence # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /*--- Wrapped vars code ---*/ - - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - if (__pyx_m) { - if (__pyx_d) { - __Pyx_AddTraceback("init aiohttp._frozenlist", __pyx_clineno, __pyx_lineno, __pyx_filename); - } - Py_CLEAR(__pyx_m); - } else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_ImportError, "init aiohttp._frozenlist"); - } - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - #if CYTHON_PEP489_MULTI_PHASE_INIT - return (__pyx_m != NULL) ? 0 : -1; - #elif PY_MAJOR_VERSION >= 3 - return __pyx_m; - #else - return; - #endif -} - -/* --- Runtime support code --- */ -/* Refnanny */ -#if CYTHON_REFNANNY -static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { - PyObject *m = NULL, *p = NULL; - void *r = NULL; - m = PyImport_ImportModule(modname); - if (!m) goto end; - p = PyObject_GetAttrString(m, "RefNannyAPI"); - if (!p) goto end; - r = PyLong_AsVoidPtr(p); -end: - Py_XDECREF(p); - Py_XDECREF(m); - return (__Pyx_RefNannyAPIStruct *)r; -} -#endif - -/* PyObjectGetAttrStr */ -#if CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro)) - return tp->tp_getattro(obj, attr_name); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_getattr)) - return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); -#endif - return PyObject_GetAttr(obj, attr_name); -} -#endif - -/* GetBuiltinName */ -static PyObject *__Pyx_GetBuiltinName(PyObject *name) { - PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); - if (unlikely(!result)) { - PyErr_Format(PyExc_NameError, -#if PY_MAJOR_VERSION >= 3 - "name '%U' is not defined", name); -#else - "name '%.200s' is not defined", PyString_AS_STRING(name)); -#endif - } - return result; -} - -/* RaiseDoubleKeywords */ -static void __Pyx_RaiseDoubleKeywordsError( - const char* func_name, - PyObject* kw_name) -{ - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION >= 3 - "%s() got multiple values for keyword argument '%U'", func_name, kw_name); - #else - "%s() got multiple values for keyword argument '%s'", func_name, - PyString_AsString(kw_name)); - #endif -} - -/* ParseKeywords */ -static int __Pyx_ParseOptionalKeywords( - PyObject *kwds, - PyObject **argnames[], - PyObject *kwds2, - PyObject *values[], - Py_ssize_t num_pos_args, - const char* function_name) -{ - PyObject *key = 0, *value = 0; - Py_ssize_t pos = 0; - PyObject*** name; - PyObject*** first_kw_arg = argnames + num_pos_args; - while (PyDict_Next(kwds, &pos, &key, &value)) { - name = first_kw_arg; - while (*name && (**name != key)) name++; - if (*name) { - values[name-argnames] = value; - continue; - } - name = first_kw_arg; - #if PY_MAJOR_VERSION < 3 - if (likely(PyString_Check(key))) { - while (*name) { - if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) - && _PyString_Eq(**name, key)) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - if ((**argname == key) || ( - (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) - && _PyString_Eq(**argname, key))) { - goto arg_passed_twice; - } - argname++; - } - } - } else - #endif - if (likely(PyUnicode_Check(key))) { - while (*name) { - int cmp = (**name == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : - #endif - PyUnicode_Compare(**name, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - int cmp = (**argname == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : - #endif - PyUnicode_Compare(**argname, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) goto arg_passed_twice; - argname++; - } - } - } else - goto invalid_keyword_type; - if (kwds2) { - if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; - } else { - goto invalid_keyword; - } - } - return 0; -arg_passed_twice: - __Pyx_RaiseDoubleKeywordsError(function_name, key); - goto bad; -invalid_keyword_type: - PyErr_Format(PyExc_TypeError, - "%.200s() keywords must be strings", function_name); - goto bad; -invalid_keyword: - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION < 3 - "%.200s() got an unexpected keyword argument '%.200s'", - function_name, PyString_AsString(key)); - #else - "%s() got an unexpected keyword argument '%U'", - function_name, key); - #endif -bad: - return -1; -} - -/* RaiseArgTupleInvalid */ -static void __Pyx_RaiseArgtupleInvalid( - const char* func_name, - int exact, - Py_ssize_t num_min, - Py_ssize_t num_max, - Py_ssize_t num_found) -{ - Py_ssize_t num_expected; - const char *more_or_less; - if (num_found < num_min) { - num_expected = num_min; - more_or_less = "at least"; - } else { - num_expected = num_max; - more_or_less = "at most"; - } - if (exact) { - more_or_less = "exactly"; - } - PyErr_Format(PyExc_TypeError, - "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", - func_name, more_or_less, num_expected, - (num_expected == 1) ? "" : "s", num_found); -} - -/* PyObjectCall */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyObject *result; - ternaryfunc call = func->ob_type->tp_call; - if (unlikely(!call)) - return PyObject_Call(func, arg, kw); - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; - result = (*call)(func, arg, kw); - Py_LeaveRecursiveCall(); - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); - } - return result; -} -#endif - -/* PyErrFetchRestore */ -#if CYTHON_FAST_THREAD_STATE -static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - tmp_type = tstate->curexc_type; - tmp_value = tstate->curexc_value; - tmp_tb = tstate->curexc_traceback; - tstate->curexc_type = type; - tstate->curexc_value = value; - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -} -static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { - *type = tstate->curexc_type; - *value = tstate->curexc_value; - *tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -} -#endif - -/* RaiseException */ -#if PY_MAJOR_VERSION < 3 -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, - CYTHON_UNUSED PyObject *cause) { - __Pyx_PyThreadState_declare - Py_XINCREF(type); - if (!value || value == Py_None) - value = NULL; - else - Py_INCREF(value); - if (!tb || tb == Py_None) - tb = NULL; - else { - Py_INCREF(tb); - if (!PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto raise_error; - } - } - if (PyType_Check(type)) { -#if CYTHON_COMPILING_IN_PYPY - if (!value) { - Py_INCREF(Py_None); - value = Py_None; - } -#endif - PyErr_NormalizeException(&type, &value, &tb); - } else { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto raise_error; - } - value = type; - type = (PyObject*) Py_TYPE(type); - Py_INCREF(type); - if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto raise_error; - } - } - __Pyx_PyThreadState_assign - __Pyx_ErrRestore(type, value, tb); - return; -raise_error: - Py_XDECREF(value); - Py_XDECREF(type); - Py_XDECREF(tb); - return; -} -#else -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { - PyObject* owned_instance = NULL; - if (tb == Py_None) { - tb = 0; - } else if (tb && !PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto bad; - } - if (value == Py_None) - value = 0; - if (PyExceptionInstance_Check(type)) { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto bad; - } - value = type; - type = (PyObject*) Py_TYPE(value); - } else if (PyExceptionClass_Check(type)) { - PyObject *instance_class = NULL; - if (value && PyExceptionInstance_Check(value)) { - instance_class = (PyObject*) Py_TYPE(value); - if (instance_class != type) { - int is_subclass = PyObject_IsSubclass(instance_class, type); - if (!is_subclass) { - instance_class = NULL; - } else if (unlikely(is_subclass == -1)) { - goto bad; - } else { - type = instance_class; - } - } - } - if (!instance_class) { - PyObject *args; - if (!value) - args = PyTuple_New(0); - else if (PyTuple_Check(value)) { - Py_INCREF(value); - args = value; - } else - args = PyTuple_Pack(1, value); - if (!args) - goto bad; - owned_instance = PyObject_Call(type, args, NULL); - Py_DECREF(args); - if (!owned_instance) - goto bad; - value = owned_instance; - if (!PyExceptionInstance_Check(value)) { - PyErr_Format(PyExc_TypeError, - "calling %R should have returned an instance of " - "BaseException, not %R", - type, Py_TYPE(value)); - goto bad; - } - } - } else { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto bad; - } - if (cause) { - PyObject *fixed_cause; - if (cause == Py_None) { - fixed_cause = NULL; - } else if (PyExceptionClass_Check(cause)) { - fixed_cause = PyObject_CallObject(cause, NULL); - if (fixed_cause == NULL) - goto bad; - } else if (PyExceptionInstance_Check(cause)) { - fixed_cause = cause; - Py_INCREF(fixed_cause); - } else { - PyErr_SetString(PyExc_TypeError, - "exception causes must derive from " - "BaseException"); - goto bad; - } - PyException_SetCause(value, fixed_cause); - } - PyErr_SetObject(type, value); - if (tb) { -#if CYTHON_COMPILING_IN_PYPY - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); - Py_INCREF(tb); - PyErr_Restore(tmp_type, tmp_value, tb); - Py_XDECREF(tmp_tb); -#else - PyThreadState *tstate = __Pyx_PyThreadState_Current; - PyObject* tmp_tb = tstate->curexc_traceback; - if (tb != tmp_tb) { - Py_INCREF(tb); - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_tb); - } -#endif - } -bad: - Py_XDECREF(owned_instance); - return; -} -#endif - -/* GetItemInt */ -static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { - PyObject *r; - if (!j) return NULL; - r = PyObject_GetItem(o, j); - Py_DECREF(j); - return r; -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, - CYTHON_NCP_UNUSED int wraparound, - CYTHON_NCP_UNUSED int boundscheck) { -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - Py_ssize_t wrapped_i = i; - if (wraparound & unlikely(i < 0)) { - wrapped_i += PyList_GET_SIZE(o); - } - if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { - PyObject *r = PyList_GET_ITEM(o, wrapped_i); - Py_INCREF(r); - return r; - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -#else - return PySequence_GetItem(o, i); -#endif -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, - CYTHON_NCP_UNUSED int wraparound, - CYTHON_NCP_UNUSED int boundscheck) { -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - Py_ssize_t wrapped_i = i; - if (wraparound & unlikely(i < 0)) { - wrapped_i += PyTuple_GET_SIZE(o); - } - if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); - Py_INCREF(r); - return r; - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -#else - return PySequence_GetItem(o, i); -#endif -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, - CYTHON_NCP_UNUSED int wraparound, - CYTHON_NCP_UNUSED int boundscheck) { -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS - if (is_list || PyList_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); - if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { - PyObject *r = PyList_GET_ITEM(o, n); - Py_INCREF(r); - return r; - } - } - else if (PyTuple_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); - if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, n); - Py_INCREF(r); - return r; - } - } else { - PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; - if (likely(m && m->sq_item)) { - if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { - Py_ssize_t l = m->sq_length(o); - if (likely(l >= 0)) { - i += l; - } else { - if (!PyErr_ExceptionMatches(PyExc_OverflowError)) - return NULL; - PyErr_Clear(); - } - } - return m->sq_item(o, i); - } - } -#else - if (is_list || PySequence_Check(o)) { - return PySequence_GetItem(o, i); - } -#endif - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -} - -/* ObjectGetItem */ -#if CYTHON_USE_TYPE_SLOTS -static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject* index) { - PyObject *runerr; - Py_ssize_t key_value; - PySequenceMethods *m = Py_TYPE(obj)->tp_as_sequence; - if (unlikely(!(m && m->sq_item))) { - PyErr_Format(PyExc_TypeError, "'%.200s' object is not subscriptable", Py_TYPE(obj)->tp_name); - return NULL; - } - key_value = __Pyx_PyIndex_AsSsize_t(index); - if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) { - return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1); - } - if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) { - PyErr_Clear(); - PyErr_Format(PyExc_IndexError, "cannot fit '%.200s' into an index-sized integer", Py_TYPE(index)->tp_name); - } - return NULL; -} -static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key) { - PyMappingMethods *m = Py_TYPE(obj)->tp_as_mapping; - if (likely(m && m->mp_subscript)) { - return m->mp_subscript(obj, key); - } - return __Pyx_PyObject_GetIndex(obj, key); -} -#endif - -/* PyFunctionFastCall */ -#if CYTHON_FAST_PYCALL -static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, - PyObject *globals) { - PyFrameObject *f; - PyThreadState *tstate = __Pyx_PyThreadState_Current; - PyObject **fastlocals; - Py_ssize_t i; - PyObject *result; - assert(globals != NULL); - /* XXX Perhaps we should create a specialized - PyFrame_New() that doesn't take locals, but does - take builtins without sanity checking them. - */ - assert(tstate != NULL); - f = PyFrame_New(tstate, co, globals, NULL); - if (f == NULL) { - return NULL; - } - fastlocals = __Pyx_PyFrame_GetLocalsplus(f); - for (i = 0; i < na; i++) { - Py_INCREF(*args); - fastlocals[i] = *args++; - } - result = PyEval_EvalFrameEx(f,0); - ++tstate->recursion_depth; - Py_DECREF(f); - --tstate->recursion_depth; - return result; -} -#if 1 || PY_VERSION_HEX < 0x030600B1 -static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { - PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); - PyObject *globals = PyFunction_GET_GLOBALS(func); - PyObject *argdefs = PyFunction_GET_DEFAULTS(func); - PyObject *closure; -#if PY_MAJOR_VERSION >= 3 - PyObject *kwdefs; -#endif - PyObject *kwtuple, **k; - PyObject **d; - Py_ssize_t nd; - Py_ssize_t nk; - PyObject *result; - assert(kwargs == NULL || PyDict_Check(kwargs)); - nk = kwargs ? PyDict_Size(kwargs) : 0; - if (Py_EnterRecursiveCall((char*)" while calling a Python object")) { - return NULL; - } - if ( -#if PY_MAJOR_VERSION >= 3 - co->co_kwonlyargcount == 0 && -#endif - likely(kwargs == NULL || nk == 0) && - co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { - if (argdefs == NULL && co->co_argcount == nargs) { - result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); - goto done; - } - else if (nargs == 0 && argdefs != NULL - && co->co_argcount == Py_SIZE(argdefs)) { - /* function called with no arguments, but all parameters have - a default value: use default values as arguments .*/ - args = &PyTuple_GET_ITEM(argdefs, 0); - result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); - goto done; - } - } - if (kwargs != NULL) { - Py_ssize_t pos, i; - kwtuple = PyTuple_New(2 * nk); - if (kwtuple == NULL) { - result = NULL; - goto done; - } - k = &PyTuple_GET_ITEM(kwtuple, 0); - pos = i = 0; - while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { - Py_INCREF(k[i]); - Py_INCREF(k[i+1]); - i += 2; - } - nk = i / 2; - } - else { - kwtuple = NULL; - k = NULL; - } - closure = PyFunction_GET_CLOSURE(func); -#if PY_MAJOR_VERSION >= 3 - kwdefs = PyFunction_GET_KW_DEFAULTS(func); -#endif - if (argdefs != NULL) { - d = &PyTuple_GET_ITEM(argdefs, 0); - nd = Py_SIZE(argdefs); - } - else { - d = NULL; - nd = 0; - } -#if PY_MAJOR_VERSION >= 3 - result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, - args, (int)nargs, - k, (int)nk, - d, (int)nd, kwdefs, closure); -#else - result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, - args, (int)nargs, - k, (int)nk, - d, (int)nd, closure); -#endif - Py_XDECREF(kwtuple); -done: - Py_LeaveRecursiveCall(); - return result; -} -#endif -#endif - -/* PyObjectCallMethO */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { - PyObject *self, *result; - PyCFunction cfunc; - cfunc = PyCFunction_GET_FUNCTION(func); - self = PyCFunction_GET_SELF(func); - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; - result = cfunc(self, arg); - Py_LeaveRecursiveCall(); - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); - } - return result; -} -#endif - -/* PyObjectCallNoArg */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) { -#if CYTHON_FAST_PYCALL - if (PyFunction_Check(func)) { - return __Pyx_PyFunction_FastCall(func, NULL, 0); - } -#endif -#ifdef __Pyx_CyFunction_USED - if (likely(PyCFunction_Check(func) || __Pyx_CyFunction_Check(func))) -#else - if (likely(PyCFunction_Check(func))) -#endif - { - if (likely(PyCFunction_GET_FLAGS(func) & METH_NOARGS)) { - return __Pyx_PyObject_CallMethO(func, NULL); - } - } - return __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL); -} -#endif - -/* PyCFunctionFastCall */ -#if CYTHON_FAST_PYCCALL -static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) { - PyCFunctionObject *func = (PyCFunctionObject*)func_obj; - PyCFunction meth = PyCFunction_GET_FUNCTION(func); - PyObject *self = PyCFunction_GET_SELF(func); - int flags = PyCFunction_GET_FLAGS(func); - assert(PyCFunction_Check(func)); - assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))); - assert(nargs >= 0); - assert(nargs == 0 || args != NULL); - /* _PyCFunction_FastCallDict() must not be called with an exception set, - because it may clear it (directly or indirectly) and so the - caller loses its exception */ - assert(!PyErr_Occurred()); - if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) { - return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL); - } else { - return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs); - } -} -#endif - -/* PyObjectCallOneArg */ -#if CYTHON_COMPILING_IN_CPYTHON -static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) { - PyObject *result; - PyObject *args = PyTuple_New(1); - if (unlikely(!args)) return NULL; - Py_INCREF(arg); - PyTuple_SET_ITEM(args, 0, arg); - result = __Pyx_PyObject_Call(func, args, NULL); - Py_DECREF(args); - return result; -} -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { -#if CYTHON_FAST_PYCALL - if (PyFunction_Check(func)) { - return __Pyx_PyFunction_FastCall(func, &arg, 1); - } -#endif - if (likely(PyCFunction_Check(func))) { - if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) { - return __Pyx_PyObject_CallMethO(func, arg); -#if CYTHON_FAST_PYCCALL - } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) { - return __Pyx_PyCFunction_FastCall(func, &arg, 1); -#endif - } - } - return __Pyx__PyObject_CallOneArg(func, arg); -} -#else -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { - PyObject *result; - PyObject *args = PyTuple_Pack(1, arg); - if (unlikely(!args)) return NULL; - result = __Pyx_PyObject_Call(func, args, NULL); - Py_DECREF(args); - return result; -} -#endif - -/* PyIntCompare */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, CYTHON_UNUSED long inplace) { - if (op1 == op2) { - Py_RETURN_TRUE; - } - #if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(op1))) { - const long b = intval; - long a = PyInt_AS_LONG(op1); - if (a == b) Py_RETURN_TRUE; else Py_RETURN_FALSE; - } - #endif - #if CYTHON_USE_PYLONG_INTERNALS - if (likely(PyLong_CheckExact(op1))) { - int unequal; - unsigned long uintval; - Py_ssize_t size = Py_SIZE(op1); - const digit* digits = ((PyLongObject*)op1)->ob_digit; - if (intval == 0) { - if (size == 0) Py_RETURN_TRUE; else Py_RETURN_FALSE; - } else if (intval < 0) { - if (size >= 0) - Py_RETURN_FALSE; - intval = -intval; - size = -size; - } else { - if (size <= 0) - Py_RETURN_FALSE; - } - uintval = (unsigned long) intval; -#if PyLong_SHIFT * 4 < SIZEOF_LONG*8 - if (uintval >> (PyLong_SHIFT * 4)) { - unequal = (size != 5) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) - | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[4] != ((uintval >> (4 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); - } else -#endif -#if PyLong_SHIFT * 3 < SIZEOF_LONG*8 - if (uintval >> (PyLong_SHIFT * 3)) { - unequal = (size != 4) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) - | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); - } else -#endif -#if PyLong_SHIFT * 2 < SIZEOF_LONG*8 - if (uintval >> (PyLong_SHIFT * 2)) { - unequal = (size != 3) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) - | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); - } else -#endif -#if PyLong_SHIFT * 1 < SIZEOF_LONG*8 - if (uintval >> (PyLong_SHIFT * 1)) { - unequal = (size != 2) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) - | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); - } else -#endif - unequal = (size != 1) || (((unsigned long) digits[0]) != (uintval & (unsigned long) PyLong_MASK)); - if (unequal == 0) Py_RETURN_TRUE; else Py_RETURN_FALSE; - } - #endif - if (PyFloat_CheckExact(op1)) { - const long b = intval; - double a = PyFloat_AS_DOUBLE(op1); - if ((double)a == (double)b) Py_RETURN_TRUE; else Py_RETURN_FALSE; - } - return ( - PyObject_RichCompare(op1, op2, Py_EQ)); -} - -/* PyObjectCall2Args */ -static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { - PyObject *args, *result = NULL; - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(function)) { - PyObject *args[2] = {arg1, arg2}; - return __Pyx_PyFunction_FastCall(function, args, 2); - } - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(function)) { - PyObject *args[2] = {arg1, arg2}; - return __Pyx_PyCFunction_FastCall(function, args, 2); - } - #endif - args = PyTuple_New(2); - if (unlikely(!args)) goto done; - Py_INCREF(arg1); - PyTuple_SET_ITEM(args, 0, arg1); - Py_INCREF(arg2); - PyTuple_SET_ITEM(args, 1, arg2); - Py_INCREF(function); - result = __Pyx_PyObject_Call(function, args, NULL); - Py_DECREF(args); - Py_DECREF(function); -done: - return result; -} - -/* PyObjectGetMethod */ -static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) { - PyObject *attr; -#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP - PyTypeObject *tp = Py_TYPE(obj); - PyObject *descr; - descrgetfunc f = NULL; - PyObject **dictptr, *dict; - int meth_found = 0; - assert (*method == NULL); - if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) { - attr = __Pyx_PyObject_GetAttrStr(obj, name); - goto try_unpack; - } - if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) { - return 0; - } - descr = _PyType_Lookup(tp, name); - if (likely(descr != NULL)) { - Py_INCREF(descr); -#if PY_MAJOR_VERSION >= 3 - #ifdef __Pyx_CyFunction_USED - if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr))) - #else - if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type))) - #endif -#else - #ifdef __Pyx_CyFunction_USED - if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr))) - #else - if (likely(PyFunction_Check(descr))) - #endif -#endif - { - meth_found = 1; - } else { - f = Py_TYPE(descr)->tp_descr_get; - if (f != NULL && PyDescr_IsData(descr)) { - attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); - Py_DECREF(descr); - goto try_unpack; - } - } - } - dictptr = _PyObject_GetDictPtr(obj); - if (dictptr != NULL && (dict = *dictptr) != NULL) { - Py_INCREF(dict); - attr = __Pyx_PyDict_GetItemStr(dict, name); - if (attr != NULL) { - Py_INCREF(attr); - Py_DECREF(dict); - Py_XDECREF(descr); - goto try_unpack; - } - Py_DECREF(dict); - } - if (meth_found) { - *method = descr; - return 1; - } - if (f != NULL) { - attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); - Py_DECREF(descr); - goto try_unpack; - } - if (descr != NULL) { - *method = descr; - return 0; - } - PyErr_Format(PyExc_AttributeError, -#if PY_MAJOR_VERSION >= 3 - "'%.50s' object has no attribute '%U'", - tp->tp_name, name); -#else - "'%.50s' object has no attribute '%.400s'", - tp->tp_name, PyString_AS_STRING(name)); -#endif - return 0; -#else - attr = __Pyx_PyObject_GetAttrStr(obj, name); - goto try_unpack; -#endif -try_unpack: -#if CYTHON_UNPACK_METHODS - if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) { - PyObject *function = PyMethod_GET_FUNCTION(attr); - Py_INCREF(function); - Py_DECREF(attr); - *method = function; - return 1; - } -#endif - *method = attr; - return 0; -} - -/* PyObjectCallMethod1 */ -static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg) { - PyObject *result = __Pyx_PyObject_CallOneArg(method, arg); - Py_DECREF(method); - return result; -} -static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg) { - PyObject *method = NULL, *result; - int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); - if (likely(is_method)) { - result = __Pyx_PyObject_Call2Args(method, obj, arg); - Py_DECREF(method); - return result; - } - if (unlikely(!method)) return NULL; - return __Pyx__PyObject_CallMethod1(method, arg); -} - -/* pop_index */ -static PyObject* __Pyx__PyObject_PopNewIndex(PyObject* L, PyObject* py_ix) { - PyObject *r; - if (unlikely(!py_ix)) return NULL; - r = __Pyx__PyObject_PopIndex(L, py_ix); - Py_DECREF(py_ix); - return r; -} -static PyObject* __Pyx__PyObject_PopIndex(PyObject* L, PyObject* py_ix) { - return __Pyx_PyObject_CallMethod1(L, __pyx_n_s_pop, py_ix); -} -#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS -static PyObject* __Pyx__PyList_PopIndex(PyObject* L, PyObject* py_ix, Py_ssize_t ix) { - Py_ssize_t size = PyList_GET_SIZE(L); - if (likely(size > (((PyListObject*)L)->allocated >> 1))) { - Py_ssize_t cix = ix; - if (cix < 0) { - cix += size; - } - if (likely(__Pyx_is_valid_index(cix, size))) { - PyObject* v = PyList_GET_ITEM(L, cix); - __Pyx_SET_SIZE(L, Py_SIZE(L) - 1); - size -= 1; - memmove(&PyList_GET_ITEM(L, cix), &PyList_GET_ITEM(L, cix+1), (size_t)(size-cix)*sizeof(PyObject*)); - return v; - } - } - if (py_ix == Py_None) { - return __Pyx__PyObject_PopNewIndex(L, PyInt_FromSsize_t(ix)); - } else { - return __Pyx__PyObject_PopIndex(L, py_ix); - } -} -#endif - -/* PyErrExceptionMatches */ -#if CYTHON_FAST_THREAD_STATE -static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { - Py_ssize_t i, n; - n = PyTuple_GET_SIZE(tuple); -#if PY_MAJOR_VERSION >= 3 - for (i=0; icurexc_type; - if (exc_type == err) return 1; - if (unlikely(!exc_type)) return 0; - if (unlikely(PyTuple_Check(err))) - return __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); - return __Pyx_PyErr_GivenExceptionMatches(exc_type, err); -} -#endif - -/* GetAttr */ -static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) { -#if CYTHON_USE_TYPE_SLOTS -#if PY_MAJOR_VERSION >= 3 - if (likely(PyUnicode_Check(n))) -#else - if (likely(PyString_Check(n))) -#endif - return __Pyx_PyObject_GetAttrStr(o, n); -#endif - return PyObject_GetAttr(o, n); -} - -/* GetAttr3 */ -static PyObject *__Pyx_GetAttr3Default(PyObject *d) { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) - return NULL; - __Pyx_PyErr_Clear(); - Py_INCREF(d); - return d; -} -static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) { - PyObject *r = __Pyx_GetAttr(o, n); - return (likely(r)) ? r : __Pyx_GetAttr3Default(d); -} - -/* PyDictVersioning */ -#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { - PyObject *dict = Py_TYPE(obj)->tp_dict; - return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; -} -static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { - PyObject **dictptr = NULL; - Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; - if (offset) { -#if CYTHON_COMPILING_IN_CPYTHON - dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); -#else - dictptr = _PyObject_GetDictPtr(obj); -#endif - } - return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; -} -static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { - PyObject *dict = Py_TYPE(obj)->tp_dict; - if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) - return 0; - return obj_dict_version == __Pyx_get_object_dict_version(obj); -} -#endif - -/* GetModuleGlobalName */ -#if CYTHON_USE_DICT_VERSIONS -static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) -#else -static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) -#endif -{ - PyObject *result; -#if !CYTHON_AVOID_BORROWED_REFS -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 - result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); - __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) - if (likely(result)) { - return __Pyx_NewRef(result); - } else if (unlikely(PyErr_Occurred())) { - return NULL; - } -#else - result = PyDict_GetItem(__pyx_d, name); - __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) - if (likely(result)) { - return __Pyx_NewRef(result); - } -#endif -#else - result = PyObject_GetItem(__pyx_d, name); - __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) - if (likely(result)) { - return __Pyx_NewRef(result); - } - PyErr_Clear(); -#endif - return __Pyx_GetBuiltinName(name); -} - -/* Import */ -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { - PyObject *empty_list = 0; - PyObject *module = 0; - PyObject *global_dict = 0; - PyObject *empty_dict = 0; - PyObject *list; - #if PY_MAJOR_VERSION < 3 - PyObject *py_import; - py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); - if (!py_import) - goto bad; - #endif - if (from_list) - list = from_list; - else { - empty_list = PyList_New(0); - if (!empty_list) - goto bad; - list = empty_list; - } - global_dict = PyModule_GetDict(__pyx_m); - if (!global_dict) - goto bad; - empty_dict = PyDict_New(); - if (!empty_dict) - goto bad; - { - #if PY_MAJOR_VERSION >= 3 - if (level == -1) { - if ((1) && (strchr(__Pyx_MODULE_NAME, '.'))) { - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, 1); - if (!module) { - if (!PyErr_ExceptionMatches(PyExc_ImportError)) - goto bad; - PyErr_Clear(); - } - } - level = 0; - } - #endif - if (!module) { - #if PY_MAJOR_VERSION < 3 - PyObject *py_level = PyInt_FromLong(level); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, (PyObject *)NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, level); - #endif - } - } -bad: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(py_import); - #endif - Py_XDECREF(empty_list); - Py_XDECREF(empty_dict); - return module; -} - -/* ImportFrom */ -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { - PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); - if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Format(PyExc_ImportError, - #if PY_MAJOR_VERSION < 3 - "cannot import name %.230s", PyString_AS_STRING(name)); - #else - "cannot import name %S", name); - #endif - } - return value; -} - -/* HasAttr */ -static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) { - PyObject *r; - if (unlikely(!__Pyx_PyBaseString_Check(n))) { - PyErr_SetString(PyExc_TypeError, - "hasattr(): attribute name must be string"); - return -1; - } - r = __Pyx_GetAttr(o, n); - if (unlikely(!r)) { - PyErr_Clear(); - return 0; - } else { - Py_DECREF(r); - return 1; - } -} - -/* PyObject_GenericGetAttrNoDict */ -#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 -static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { - PyErr_Format(PyExc_AttributeError, -#if PY_MAJOR_VERSION >= 3 - "'%.50s' object has no attribute '%U'", - tp->tp_name, attr_name); -#else - "'%.50s' object has no attribute '%.400s'", - tp->tp_name, PyString_AS_STRING(attr_name)); -#endif - return NULL; -} -static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) { - PyObject *descr; - PyTypeObject *tp = Py_TYPE(obj); - if (unlikely(!PyString_Check(attr_name))) { - return PyObject_GenericGetAttr(obj, attr_name); - } - assert(!tp->tp_dictoffset); - descr = _PyType_Lookup(tp, attr_name); - if (unlikely(!descr)) { - return __Pyx_RaiseGenericGetAttributeError(tp, attr_name); - } - Py_INCREF(descr); - #if PY_MAJOR_VERSION < 3 - if (likely(PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS))) - #endif - { - descrgetfunc f = Py_TYPE(descr)->tp_descr_get; - if (unlikely(f)) { - PyObject *res = f(descr, obj, (PyObject *)tp); - Py_DECREF(descr); - return res; - } - } - return descr; -} -#endif - -/* PyObject_GenericGetAttr */ -#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 -static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name) { - if (unlikely(Py_TYPE(obj)->tp_dictoffset)) { - return PyObject_GenericGetAttr(obj, attr_name); - } - return __Pyx_PyObject_GenericGetAttrNoDict(obj, attr_name); -} -#endif - -/* SetVTable */ -static int __Pyx_SetVtable(PyObject *dict, void *vtable) { -#if PY_VERSION_HEX >= 0x02070000 - PyObject *ob = PyCapsule_New(vtable, 0, 0); -#else - PyObject *ob = PyCObject_FromVoidPtr(vtable, 0); -#endif - if (!ob) - goto bad; - if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0) - goto bad; - Py_DECREF(ob); - return 0; -bad: - Py_XDECREF(ob); - return -1; -} - -/* PyObjectGetAttrStrNoError */ -static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) - __Pyx_PyErr_Clear(); -} -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { - PyObject *result; -#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { - return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); - } -#endif - result = __Pyx_PyObject_GetAttrStr(obj, attr_name); - if (unlikely(!result)) { - __Pyx_PyObject_GetAttrStr_ClearAttributeError(); - } - return result; -} - -/* SetupReduce */ -static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) { - int ret; - PyObject *name_attr; - name_attr = __Pyx_PyObject_GetAttrStr(meth, __pyx_n_s_name); - if (likely(name_attr)) { - ret = PyObject_RichCompareBool(name_attr, name, Py_EQ); - } else { - ret = -1; - } - if (unlikely(ret < 0)) { - PyErr_Clear(); - ret = 0; - } - Py_XDECREF(name_attr); - return ret; -} -static int __Pyx_setup_reduce(PyObject* type_obj) { - int ret = 0; - PyObject *object_reduce = NULL; - PyObject *object_reduce_ex = NULL; - PyObject *reduce = NULL; - PyObject *reduce_ex = NULL; - PyObject *reduce_cython = NULL; - PyObject *setstate = NULL; - PyObject *setstate_cython = NULL; -#if CYTHON_USE_PYTYPE_LOOKUP - if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD; -#else - if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD; -#endif -#if CYTHON_USE_PYTYPE_LOOKUP - object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; -#else - object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; -#endif - reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto __PYX_BAD; - if (reduce_ex == object_reduce_ex) { -#if CYTHON_USE_PYTYPE_LOOKUP - object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; -#else - object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; -#endif - reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto __PYX_BAD; - if (reduce == object_reduce || __Pyx_setup_reduce_is_named(reduce, __pyx_n_s_reduce_cython)) { - reduce_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_reduce_cython); - if (likely(reduce_cython)) { - ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD; - ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD; - } else if (reduce == object_reduce || PyErr_Occurred()) { - goto __PYX_BAD; - } - setstate = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate); - if (!setstate) PyErr_Clear(); - if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_n_s_setstate_cython)) { - setstate_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_setstate_cython); - if (likely(setstate_cython)) { - ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD; - ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD; - } else if (!setstate || PyErr_Occurred()) { - goto __PYX_BAD; - } - } - PyType_Modified((PyTypeObject*)type_obj); - } - } - goto __PYX_GOOD; -__PYX_BAD: - if (!PyErr_Occurred()) - PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name); - ret = -1; -__PYX_GOOD: -#if !CYTHON_USE_PYTYPE_LOOKUP - Py_XDECREF(object_reduce); - Py_XDECREF(object_reduce_ex); -#endif - Py_XDECREF(reduce); - Py_XDECREF(reduce_ex); - Py_XDECREF(reduce_cython); - Py_XDECREF(setstate); - Py_XDECREF(setstate_cython); - return ret; -} - -/* CLineInTraceback */ -#ifndef CYTHON_CLINE_IN_TRACEBACK -static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int c_line) { - PyObject *use_cline; - PyObject *ptype, *pvalue, *ptraceback; -#if CYTHON_COMPILING_IN_CPYTHON - PyObject **cython_runtime_dict; -#endif - if (unlikely(!__pyx_cython_runtime)) { - return c_line; - } - __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); -#if CYTHON_COMPILING_IN_CPYTHON - cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); - if (likely(cython_runtime_dict)) { - __PYX_PY_DICT_LOOKUP_IF_MODIFIED( - use_cline, *cython_runtime_dict, - __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) - } else -#endif - { - PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); - if (use_cline_obj) { - use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; - Py_DECREF(use_cline_obj); - } else { - PyErr_Clear(); - use_cline = NULL; - } - } - if (!use_cline) { - c_line = 0; - PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); - } - else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { - c_line = 0; - } - __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); - return c_line; -} -#endif - -/* CodeObjectCache */ -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { - int start = 0, mid = 0, end = count - 1; - if (end >= 0 && code_line > entries[end].code_line) { - return count; - } - while (start < end) { - mid = start + (end - start) / 2; - if (code_line < entries[mid].code_line) { - end = mid; - } else if (code_line > entries[mid].code_line) { - start = mid + 1; - } else { - return mid; - } - } - if (code_line <= entries[mid].code_line) { - return mid; - } else { - return mid + 1; - } -} -static PyCodeObject *__pyx_find_code_object(int code_line) { - PyCodeObject* code_object; - int pos; - if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { - return NULL; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { - return NULL; - } - code_object = __pyx_code_cache.entries[pos].code_object; - Py_INCREF(code_object); - return code_object; -} -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { - int pos, i; - __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; - if (unlikely(!code_line)) { - return; - } - if (unlikely(!entries)) { - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); - if (likely(entries)) { - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = 64; - __pyx_code_cache.count = 1; - entries[0].code_line = code_line; - entries[0].code_object = code_object; - Py_INCREF(code_object); - } - return; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { - PyCodeObject* tmp = entries[pos].code_object; - entries[pos].code_object = code_object; - Py_DECREF(tmp); - return; - } - if (__pyx_code_cache.count == __pyx_code_cache.max_count) { - int new_max = __pyx_code_cache.max_count + 64; - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( - __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry)); - if (unlikely(!entries)) { - return; - } - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = new_max; - } - for (i=__pyx_code_cache.count; i>pos; i--) { - entries[i] = entries[i-1]; - } - entries[pos].code_line = code_line; - entries[pos].code_object = code_object; - __pyx_code_cache.count++; - Py_INCREF(code_object); -} - -/* AddTraceback */ -#include "compile.h" -#include "frameobject.h" -#include "traceback.h" -static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( - const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; - #if PY_MAJOR_VERSION < 3 - py_srcfile = PyString_FromString(filename); - #else - py_srcfile = PyUnicode_FromString(filename); - #endif - if (!py_srcfile) goto bad; - if (c_line) { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #else - py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #endif - } - else { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromString(funcname); - #else - py_funcname = PyUnicode_FromString(funcname); - #endif - } - if (!py_funcname) goto bad; - py_code = __Pyx_PyCode_New( - 0, - 0, - 0, - 0, - 0, - __pyx_empty_bytes, /*PyObject *code,*/ - __pyx_empty_tuple, /*PyObject *consts,*/ - __pyx_empty_tuple, /*PyObject *names,*/ - __pyx_empty_tuple, /*PyObject *varnames,*/ - __pyx_empty_tuple, /*PyObject *freevars,*/ - __pyx_empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - py_line, - __pyx_empty_bytes /*PyObject *lnotab*/ - ); - Py_DECREF(py_srcfile); - Py_DECREF(py_funcname); - return py_code; -bad: - Py_XDECREF(py_srcfile); - Py_XDECREF(py_funcname); - return NULL; -} -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyFrameObject *py_frame = 0; - PyThreadState *tstate = __Pyx_PyThreadState_Current; - if (c_line) { - c_line = __Pyx_CLineForTraceback(tstate, c_line); - } - py_code = __pyx_find_code_object(c_line ? -c_line : py_line); - if (!py_code) { - py_code = __Pyx_CreateCodeObjectForTraceback( - funcname, c_line, py_line, filename); - if (!py_code) goto bad; - __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); - } - py_frame = PyFrame_New( - tstate, /*PyThreadState *tstate,*/ - py_code, /*PyCodeObject *code,*/ - __pyx_d, /*PyObject *globals,*/ - 0 /*PyObject *locals*/ - ); - if (!py_frame) goto bad; - __Pyx_PyFrame_SetLineNumber(py_frame, py_line); - PyTraceBack_Here(py_frame); -bad: - Py_XDECREF(py_code); - Py_XDECREF(py_frame); -} - -/* CIntToPy */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { - const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(int) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(int) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { - return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); -#endif - } - } else { - if (sizeof(int) <= sizeof(long)) { - return PyInt_FromLong((long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { - return PyLong_FromLongLong((PY_LONG_LONG) value); -#endif - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(int), - little, !is_unsigned); - } -} - -/* CIntFromPyVerify */ -#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ - __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) -#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ - __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) -#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ - {\ - func_type value = func_value;\ - if (sizeof(target_type) < sizeof(func_type)) {\ - if (unlikely(value != (func_type) (target_type) value)) {\ - func_type zero = 0;\ - if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ - return (target_type) -1;\ - if (is_unsigned && unlikely(value < zero))\ - goto raise_neg_overflow;\ - else\ - goto raise_overflow;\ - }\ - }\ - return (target_type) value;\ - } - -/* CIntToPy */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { - const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(long) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { - return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); -#endif - } - } else { - if (sizeof(long) <= sizeof(long)) { - return PyInt_FromLong((long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { - return PyLong_FromLongLong((PY_LONG_LONG) value); -#endif - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(long), - little, !is_unsigned); - } -} - -/* CIntFromPy */ -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { - const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(long) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - goto raise_neg_overflow; - } - return (long) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (long) 0; - case 1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0]) - case 2: - if (8 * sizeof(long) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) { - return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); - } - } - break; - case 3: - if (8 * sizeof(long) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) { - return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); - } - } - break; - case 4: - if (8 * sizeof(long) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) { - return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); - } - } - break; - } -#endif -#if CYTHON_COMPILING_IN_CPYTHON - if (unlikely(Py_SIZE(x) < 0)) { - goto raise_neg_overflow; - } -#else - { - int result = PyObject_RichCompareBool(x, Py_False, Py_LT); - if (unlikely(result < 0)) - return (long) -1; - if (unlikely(result == 1)) - goto raise_neg_overflow; - } -#endif - if (sizeof(long) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) -#endif - } - } else { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (long) 0; - case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0])) - case 1: __PYX_VERIFY_RETURN_INT(long, digit, +digits[0]) - case -2: - if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case 2: - if (8 * sizeof(long) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case -3: - if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case 3: - if (8 * sizeof(long) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case -4: - if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case 4: - if (8 * sizeof(long) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - } -#endif - if (sizeof(long) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) -#endif - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - long val; - PyObject *v = __Pyx_PyNumber_IntOrLong(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (long) -1; - } - } else { - long val; - PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (long) -1; - val = __Pyx_PyInt_As_long(tmp); - Py_DECREF(tmp); - return val; - } -raise_overflow: - PyErr_SetString(PyExc_OverflowError, - "value too large to convert to long"); - return (long) -1; -raise_neg_overflow: - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; -} - -/* CIntFromPy */ -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { - const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(int) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - goto raise_neg_overflow; - } - return (int) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (int) 0; - case 1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0]) - case 2: - if (8 * sizeof(int) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) { - return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); - } - } - break; - case 3: - if (8 * sizeof(int) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) { - return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); - } - } - break; - case 4: - if (8 * sizeof(int) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) { - return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); - } - } - break; - } -#endif -#if CYTHON_COMPILING_IN_CPYTHON - if (unlikely(Py_SIZE(x) < 0)) { - goto raise_neg_overflow; - } -#else - { - int result = PyObject_RichCompareBool(x, Py_False, Py_LT); - if (unlikely(result < 0)) - return (int) -1; - if (unlikely(result == 1)) - goto raise_neg_overflow; - } -#endif - if (sizeof(int) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) -#endif - } - } else { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (int) 0; - case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0])) - case 1: __PYX_VERIFY_RETURN_INT(int, digit, +digits[0]) - case -2: - if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case 2: - if (8 * sizeof(int) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case -3: - if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case 3: - if (8 * sizeof(int) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case -4: - if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case 4: - if (8 * sizeof(int) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { - return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - } -#endif - if (sizeof(int) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) -#endif - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - int val; - PyObject *v = __Pyx_PyNumber_IntOrLong(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (int) -1; - } - } else { - int val; - PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (int) -1; - val = __Pyx_PyInt_As_int(tmp); - Py_DECREF(tmp); - return val; - } -raise_overflow: - PyErr_SetString(PyExc_OverflowError, - "value too large to convert to int"); - return (int) -1; -raise_neg_overflow: - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; -} - -/* FastTypeChecks */ -#if CYTHON_COMPILING_IN_CPYTHON -static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { - while (a) { - a = a->tp_base; - if (a == b) - return 1; - } - return b == &PyBaseObject_Type; -} -static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { - PyObject *mro; - if (a == b) return 1; - mro = a->tp_mro; - if (likely(mro)) { - Py_ssize_t i, n; - n = PyTuple_GET_SIZE(mro); - for (i = 0; i < n; i++) { - if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) - return 1; - } - return 0; - } - return __Pyx_InBases(a, b); -} -#if PY_MAJOR_VERSION == 2 -static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { - PyObject *exception, *value, *tb; - int res; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&exception, &value, &tb); - res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; - if (unlikely(res == -1)) { - PyErr_WriteUnraisable(err); - res = 0; - } - if (!res) { - res = PyObject_IsSubclass(err, exc_type2); - if (unlikely(res == -1)) { - PyErr_WriteUnraisable(err); - res = 0; - } - } - __Pyx_ErrRestore(exception, value, tb); - return res; -} -#else -static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { - int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; - if (!res) { - res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); - } - return res; -} -#endif -static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { - Py_ssize_t i, n; - assert(PyExceptionClass_Check(exc_type)); - n = PyTuple_GET_SIZE(tuple); -#if PY_MAJOR_VERSION >= 3 - for (i=0; ip) { - #if PY_MAJOR_VERSION < 3 - if (t->is_unicode) { - *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); - } else if (t->intern) { - *t->p = PyString_InternFromString(t->s); - } else { - *t->p = PyString_FromStringAndSize(t->s, t->n - 1); - } - #else - if (t->is_unicode | t->is_str) { - if (t->intern) { - *t->p = PyUnicode_InternFromString(t->s); - } else if (t->encoding) { - *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); - } else { - *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); - } - } else { - *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); - } - #endif - if (!*t->p) - return -1; - if (PyObject_Hash(*t->p) == -1) - return -1; - ++t; - } - return 0; -} - -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { - return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); -} -static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { - Py_ssize_t ignore; - return __Pyx_PyObject_AsStringAndSize(o, &ignore); -} -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT -#if !CYTHON_PEP393_ENABLED -static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { - char* defenc_c; - PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); - if (!defenc) return NULL; - defenc_c = PyBytes_AS_STRING(defenc); -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - { - char* end = defenc_c + PyBytes_GET_SIZE(defenc); - char* c; - for (c = defenc_c; c < end; c++) { - if ((unsigned char) (*c) >= 128) { - PyUnicode_AsASCIIString(o); - return NULL; - } - } - } -#endif - *length = PyBytes_GET_SIZE(defenc); - return defenc_c; -} -#else -static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { - if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - if (likely(PyUnicode_IS_ASCII(o))) { - *length = PyUnicode_GET_LENGTH(o); - return PyUnicode_AsUTF8(o); - } else { - PyUnicode_AsASCIIString(o); - return NULL; - } -#else - return PyUnicode_AsUTF8AndSize(o, length); -#endif -} -#endif -#endif -static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT - if ( -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - __Pyx_sys_getdefaultencoding_not_ascii && -#endif - PyUnicode_Check(o)) { - return __Pyx_PyUnicode_AsStringAndSize(o, length); - } else -#endif -#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) - if (PyByteArray_Check(o)) { - *length = PyByteArray_GET_SIZE(o); - return PyByteArray_AS_STRING(o); - } else -#endif - { - char* result; - int r = PyBytes_AsStringAndSize(o, &result, length); - if (unlikely(r < 0)) { - return NULL; - } else { - return result; - } - } -} -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { - int is_true = x == Py_True; - if (is_true | (x == Py_False) | (x == Py_None)) return is_true; - else return PyObject_IsTrue(x); -} -static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { - int retval; - if (unlikely(!x)) return -1; - retval = __Pyx_PyObject_IsTrue(x); - Py_DECREF(x); - return retval; -} -static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { -#if PY_MAJOR_VERSION >= 3 - if (PyLong_Check(result)) { - if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, - "__int__ returned non-int (type %.200s). " - "The ability to return an instance of a strict subclass of int " - "is deprecated, and may be removed in a future version of Python.", - Py_TYPE(result)->tp_name)) { - Py_DECREF(result); - return NULL; - } - return result; - } -#endif - PyErr_Format(PyExc_TypeError, - "__%.4s__ returned non-%.4s (type %.200s)", - type_name, type_name, Py_TYPE(result)->tp_name); - Py_DECREF(result); - return NULL; -} -static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { -#if CYTHON_USE_TYPE_SLOTS - PyNumberMethods *m; -#endif - const char *name = NULL; - PyObject *res = NULL; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x) || PyLong_Check(x))) -#else - if (likely(PyLong_Check(x))) -#endif - return __Pyx_NewRef(x); -#if CYTHON_USE_TYPE_SLOTS - m = Py_TYPE(x)->tp_as_number; - #if PY_MAJOR_VERSION < 3 - if (m && m->nb_int) { - name = "int"; - res = m->nb_int(x); - } - else if (m && m->nb_long) { - name = "long"; - res = m->nb_long(x); - } - #else - if (likely(m && m->nb_int)) { - name = "int"; - res = m->nb_int(x); - } - #endif -#else - if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { - res = PyNumber_Int(x); - } -#endif - if (likely(res)) { -#if PY_MAJOR_VERSION < 3 - if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { -#else - if (unlikely(!PyLong_CheckExact(res))) { -#endif - return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); - } - } - else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_TypeError, - "an integer is required"); - } - return res; -} -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { - Py_ssize_t ival; - PyObject *x; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(b))) { - if (sizeof(Py_ssize_t) >= sizeof(long)) - return PyInt_AS_LONG(b); - else - return PyInt_AsSsize_t(b); - } -#endif - if (likely(PyLong_CheckExact(b))) { - #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)b)->ob_digit; - const Py_ssize_t size = Py_SIZE(b); - if (likely(__Pyx_sst_abs(size) <= 1)) { - ival = likely(size) ? digits[0] : 0; - if (size == -1) ival = -ival; - return ival; - } else { - switch (size) { - case 2: - if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { - return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case -2: - if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { - return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case 3: - if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { - return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case -3: - if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { - return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case 4: - if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { - return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case -4: - if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { - return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - } - } - #endif - return PyLong_AsSsize_t(b); - } - x = PyNumber_Index(b); - if (!x) return -1; - ival = PyInt_AsSsize_t(x); - Py_DECREF(x); - return ival; -} -static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { - return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); -} -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { - return PyInt_FromSize_t(ival); -} - - -#endif /* Py_PYTHON_H */ diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_frozenlist.cp39-win_amd64.pyd b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_frozenlist.cp39-win_amd64.pyd deleted file mode 100644 index db45bd9864fcc77a05e6ee46897c8f925ce12d14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 64512 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 HZT|cZttphE diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_frozenlist.pyx b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_frozenlist.pyx deleted file mode 100644 index b1305772..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_frozenlist.pyx +++ /dev/null @@ -1,108 +0,0 @@ -from collections.abc import MutableSequence - - -cdef class FrozenList: - - cdef readonly bint frozen - cdef list _items - - def __init__(self, items=None): - self.frozen = False - if items is not None: - items = list(items) - else: - items = [] - self._items = items - - cdef object _check_frozen(self): - if self.frozen: - raise RuntimeError("Cannot modify frozen list.") - - cdef inline object _fast_len(self): - return len(self._items) - - def freeze(self): - self.frozen = True - - def __getitem__(self, index): - return self._items[index] - - def __setitem__(self, index, value): - self._check_frozen() - self._items[index] = value - - def __delitem__(self, index): - self._check_frozen() - del self._items[index] - - def __len__(self): - return self._fast_len() - - def __iter__(self): - return self._items.__iter__() - - def __reversed__(self): - return self._items.__reversed__() - - def __richcmp__(self, other, op): - if op == 0: # < - return list(self) < other - if op == 1: # <= - return list(self) <= other - if op == 2: # == - return list(self) == other - if op == 3: # != - return list(self) != other - if op == 4: # > - return list(self) > other - if op == 5: # => - return list(self) >= other - - def insert(self, pos, item): - self._check_frozen() - self._items.insert(pos, item) - - def __contains__(self, item): - return item in self._items - - def __iadd__(self, items): - self._check_frozen() - self._items += list(items) - return self - - def index(self, item): - return self._items.index(item) - - def remove(self, item): - self._check_frozen() - self._items.remove(item) - - def clear(self): - self._check_frozen() - self._items.clear() - - def extend(self, items): - self._check_frozen() - self._items += list(items) - - def reverse(self): - self._check_frozen() - self._items.reverse() - - def pop(self, index=-1): - self._check_frozen() - return self._items.pop(index) - - def append(self, item): - self._check_frozen() - return self._items.append(item) - - def count(self, item): - return self._items.count(item) - - def __repr__(self): - return ''.format(self.frozen, - self._items) - - -MutableSequence.register(FrozenList) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_headers.pxi b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_headers.pxi deleted file mode 100644 index 3744721d..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_headers.pxi +++ /dev/null @@ -1,83 +0,0 @@ -# The file is autogenerated from aiohttp/hdrs.py -# Run ./tools/gen.py to update it after the origin changing. - -from . import hdrs -cdef tuple headers = ( - hdrs.ACCEPT, - hdrs.ACCEPT_CHARSET, - hdrs.ACCEPT_ENCODING, - hdrs.ACCEPT_LANGUAGE, - hdrs.ACCEPT_RANGES, - hdrs.ACCESS_CONTROL_ALLOW_CREDENTIALS, - hdrs.ACCESS_CONTROL_ALLOW_HEADERS, - hdrs.ACCESS_CONTROL_ALLOW_METHODS, - hdrs.ACCESS_CONTROL_ALLOW_ORIGIN, - hdrs.ACCESS_CONTROL_EXPOSE_HEADERS, - hdrs.ACCESS_CONTROL_MAX_AGE, - hdrs.ACCESS_CONTROL_REQUEST_HEADERS, - hdrs.ACCESS_CONTROL_REQUEST_METHOD, - hdrs.AGE, - hdrs.ALLOW, - hdrs.AUTHORIZATION, - hdrs.CACHE_CONTROL, - hdrs.CONNECTION, - hdrs.CONTENT_DISPOSITION, - hdrs.CONTENT_ENCODING, - hdrs.CONTENT_LANGUAGE, - hdrs.CONTENT_LENGTH, - hdrs.CONTENT_LOCATION, - hdrs.CONTENT_MD5, - hdrs.CONTENT_RANGE, - hdrs.CONTENT_TRANSFER_ENCODING, - hdrs.CONTENT_TYPE, - hdrs.COOKIE, - hdrs.DATE, - hdrs.DESTINATION, - hdrs.DIGEST, - hdrs.ETAG, - hdrs.EXPECT, - hdrs.EXPIRES, - hdrs.FORWARDED, - hdrs.FROM, - hdrs.HOST, - hdrs.IF_MATCH, - hdrs.IF_MODIFIED_SINCE, - hdrs.IF_NONE_MATCH, - hdrs.IF_RANGE, - hdrs.IF_UNMODIFIED_SINCE, - hdrs.KEEP_ALIVE, - hdrs.LAST_EVENT_ID, - hdrs.LAST_MODIFIED, - hdrs.LINK, - hdrs.LOCATION, - hdrs.MAX_FORWARDS, - hdrs.ORIGIN, - hdrs.PRAGMA, - hdrs.PROXY_AUTHENTICATE, - hdrs.PROXY_AUTHORIZATION, - hdrs.RANGE, - hdrs.REFERER, - hdrs.RETRY_AFTER, - hdrs.SEC_WEBSOCKET_ACCEPT, - hdrs.SEC_WEBSOCKET_EXTENSIONS, - hdrs.SEC_WEBSOCKET_KEY, - hdrs.SEC_WEBSOCKET_KEY1, - hdrs.SEC_WEBSOCKET_PROTOCOL, - hdrs.SEC_WEBSOCKET_VERSION, - hdrs.SERVER, - hdrs.SET_COOKIE, - hdrs.TE, - hdrs.TRAILER, - hdrs.TRANSFER_ENCODING, - hdrs.URI, - hdrs.UPGRADE, - hdrs.USER_AGENT, - hdrs.VARY, - hdrs.VIA, - hdrs.WWW_AUTHENTICATE, - hdrs.WANT_DIGEST, - hdrs.WARNING, - hdrs.X_FORWARDED_FOR, - hdrs.X_FORWARDED_HOST, - hdrs.X_FORWARDED_PROTO, -) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_helpers.c b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_helpers.c deleted file mode 100644 index e25f5ec9..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_helpers.c +++ /dev/null @@ -1,5433 +0,0 @@ -/* Generated by Cython 0.29.21 */ - -#define PY_SSIZE_T_CLEAN -#include "Python.h" -#ifndef Py_PYTHON_H - #error Python headers needed to compile C extensions, please install development version of Python. -#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) - #error Cython requires Python 2.6+ or Python 3.3+. -#else -#define CYTHON_ABI "0_29_21" -#define CYTHON_HEX_VERSION 0x001D15F0 -#define CYTHON_FUTURE_DIVISION 1 -#include -#ifndef offsetof - #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) -#endif -#if !defined(WIN32) && !defined(MS_WINDOWS) - #ifndef __stdcall - #define __stdcall - #endif - #ifndef __cdecl - #define __cdecl - #endif - #ifndef __fastcall - #define __fastcall - #endif -#endif -#ifndef DL_IMPORT - #define DL_IMPORT(t) t -#endif -#ifndef DL_EXPORT - #define DL_EXPORT(t) t -#endif -#define __PYX_COMMA , -#ifndef HAVE_LONG_LONG - #if PY_VERSION_HEX >= 0x02070000 - #define HAVE_LONG_LONG - #endif -#endif -#ifndef PY_LONG_LONG - #define PY_LONG_LONG LONG_LONG -#endif -#ifndef Py_HUGE_VAL - #define Py_HUGE_VAL HUGE_VAL -#endif -#ifdef PYPY_VERSION - #define CYTHON_COMPILING_IN_PYPY 1 - #define CYTHON_COMPILING_IN_PYSTON 0 - #define CYTHON_COMPILING_IN_CPYTHON 0 - #undef CYTHON_USE_TYPE_SLOTS - #define CYTHON_USE_TYPE_SLOTS 0 - #undef CYTHON_USE_PYTYPE_LOOKUP - #define CYTHON_USE_PYTYPE_LOOKUP 0 - #if PY_VERSION_HEX < 0x03050000 - #undef CYTHON_USE_ASYNC_SLOTS - #define CYTHON_USE_ASYNC_SLOTS 0 - #elif !defined(CYTHON_USE_ASYNC_SLOTS) - #define CYTHON_USE_ASYNC_SLOTS 1 - #endif - #undef CYTHON_USE_PYLIST_INTERNALS - #define CYTHON_USE_PYLIST_INTERNALS 0 - #undef CYTHON_USE_UNICODE_INTERNALS - #define CYTHON_USE_UNICODE_INTERNALS 0 - #undef CYTHON_USE_UNICODE_WRITER - #define CYTHON_USE_UNICODE_WRITER 0 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 - #undef CYTHON_AVOID_BORROWED_REFS - #define CYTHON_AVOID_BORROWED_REFS 1 - #undef CYTHON_ASSUME_SAFE_MACROS - #define CYTHON_ASSUME_SAFE_MACROS 0 - #undef CYTHON_UNPACK_METHODS - #define CYTHON_UNPACK_METHODS 0 - #undef CYTHON_FAST_THREAD_STATE - #define CYTHON_FAST_THREAD_STATE 0 - #undef CYTHON_FAST_PYCALL - #define CYTHON_FAST_PYCALL 0 - #undef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT 0 - #undef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE 0 - #undef CYTHON_USE_DICT_VERSIONS - #define CYTHON_USE_DICT_VERSIONS 0 - #undef CYTHON_USE_EXC_INFO_STACK - #define CYTHON_USE_EXC_INFO_STACK 0 -#elif defined(PYSTON_VERSION) - #define CYTHON_COMPILING_IN_PYPY 0 - #define CYTHON_COMPILING_IN_PYSTON 1 - #define CYTHON_COMPILING_IN_CPYTHON 0 - #ifndef CYTHON_USE_TYPE_SLOTS - #define CYTHON_USE_TYPE_SLOTS 1 - #endif - #undef CYTHON_USE_PYTYPE_LOOKUP - #define CYTHON_USE_PYTYPE_LOOKUP 0 - #undef CYTHON_USE_ASYNC_SLOTS - #define CYTHON_USE_ASYNC_SLOTS 0 - #undef CYTHON_USE_PYLIST_INTERNALS - #define CYTHON_USE_PYLIST_INTERNALS 0 - #ifndef CYTHON_USE_UNICODE_INTERNALS - #define CYTHON_USE_UNICODE_INTERNALS 1 - #endif - #undef CYTHON_USE_UNICODE_WRITER - #define CYTHON_USE_UNICODE_WRITER 0 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 - #ifndef CYTHON_AVOID_BORROWED_REFS - #define CYTHON_AVOID_BORROWED_REFS 0 - #endif - #ifndef CYTHON_ASSUME_SAFE_MACROS - #define CYTHON_ASSUME_SAFE_MACROS 1 - #endif - #ifndef CYTHON_UNPACK_METHODS - #define CYTHON_UNPACK_METHODS 1 - #endif - #undef CYTHON_FAST_THREAD_STATE - #define CYTHON_FAST_THREAD_STATE 0 - #undef CYTHON_FAST_PYCALL - #define CYTHON_FAST_PYCALL 0 - #undef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT 0 - #undef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE 0 - #undef CYTHON_USE_DICT_VERSIONS - #define CYTHON_USE_DICT_VERSIONS 0 - #undef CYTHON_USE_EXC_INFO_STACK - #define CYTHON_USE_EXC_INFO_STACK 0 -#else - #define CYTHON_COMPILING_IN_PYPY 0 - #define CYTHON_COMPILING_IN_PYSTON 0 - #define CYTHON_COMPILING_IN_CPYTHON 1 - #ifndef CYTHON_USE_TYPE_SLOTS - #define CYTHON_USE_TYPE_SLOTS 1 - #endif - #if PY_VERSION_HEX < 0x02070000 - #undef CYTHON_USE_PYTYPE_LOOKUP - #define CYTHON_USE_PYTYPE_LOOKUP 0 - #elif !defined(CYTHON_USE_PYTYPE_LOOKUP) - #define CYTHON_USE_PYTYPE_LOOKUP 1 - #endif - #if PY_MAJOR_VERSION < 3 - #undef CYTHON_USE_ASYNC_SLOTS - #define CYTHON_USE_ASYNC_SLOTS 0 - #elif !defined(CYTHON_USE_ASYNC_SLOTS) - #define CYTHON_USE_ASYNC_SLOTS 1 - #endif - #if PY_VERSION_HEX < 0x02070000 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 - #elif !defined(CYTHON_USE_PYLONG_INTERNALS) - #define CYTHON_USE_PYLONG_INTERNALS 1 - #endif - #ifndef CYTHON_USE_PYLIST_INTERNALS - #define CYTHON_USE_PYLIST_INTERNALS 1 - #endif - #ifndef CYTHON_USE_UNICODE_INTERNALS - #define CYTHON_USE_UNICODE_INTERNALS 1 - #endif - #if PY_VERSION_HEX < 0x030300F0 - #undef CYTHON_USE_UNICODE_WRITER - #define CYTHON_USE_UNICODE_WRITER 0 - #elif !defined(CYTHON_USE_UNICODE_WRITER) - #define CYTHON_USE_UNICODE_WRITER 1 - #endif - #ifndef CYTHON_AVOID_BORROWED_REFS - #define CYTHON_AVOID_BORROWED_REFS 0 - #endif - #ifndef CYTHON_ASSUME_SAFE_MACROS - #define CYTHON_ASSUME_SAFE_MACROS 1 - #endif - #ifndef CYTHON_UNPACK_METHODS - #define CYTHON_UNPACK_METHODS 1 - #endif - #ifndef CYTHON_FAST_THREAD_STATE - #define CYTHON_FAST_THREAD_STATE 1 - #endif - #ifndef CYTHON_FAST_PYCALL - #define CYTHON_FAST_PYCALL 1 - #endif - #ifndef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) - #endif - #ifndef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1) - #endif - #ifndef CYTHON_USE_DICT_VERSIONS - #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1) - #endif - #ifndef CYTHON_USE_EXC_INFO_STACK - #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) - #endif -#endif -#if !defined(CYTHON_FAST_PYCCALL) -#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) -#endif -#if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #undef SHIFT - #undef BASE - #undef MASK - #ifdef SIZEOF_VOID_P - enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; - #endif -#endif -#ifndef __has_attribute - #define __has_attribute(x) 0 -#endif -#ifndef __has_cpp_attribute - #define __has_cpp_attribute(x) 0 -#endif -#ifndef CYTHON_RESTRICT - #if defined(__GNUC__) - #define CYTHON_RESTRICT __restrict__ - #elif defined(_MSC_VER) && _MSC_VER >= 1400 - #define CYTHON_RESTRICT __restrict - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_RESTRICT restrict - #else - #define CYTHON_RESTRICT - #endif -#endif -#ifndef CYTHON_UNUSED -# if defined(__GNUC__) -# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -#endif -#ifndef CYTHON_MAYBE_UNUSED_VAR -# if defined(__cplusplus) - template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { } -# else -# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x) -# endif -#endif -#ifndef CYTHON_NCP_UNUSED -# if CYTHON_COMPILING_IN_CPYTHON -# define CYTHON_NCP_UNUSED -# else -# define CYTHON_NCP_UNUSED CYTHON_UNUSED -# endif -#endif -#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) -#ifdef _MSC_VER - #ifndef _MSC_STDINT_H_ - #if _MSC_VER < 1300 - typedef unsigned char uint8_t; - typedef unsigned int uint32_t; - #else - typedef unsigned __int8 uint8_t; - typedef unsigned __int32 uint32_t; - #endif - #endif -#else - #include -#endif -#ifndef CYTHON_FALLTHROUGH - #if defined(__cplusplus) && __cplusplus >= 201103L - #if __has_cpp_attribute(fallthrough) - #define CYTHON_FALLTHROUGH [[fallthrough]] - #elif __has_cpp_attribute(clang::fallthrough) - #define CYTHON_FALLTHROUGH [[clang::fallthrough]] - #elif __has_cpp_attribute(gnu::fallthrough) - #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] - #endif - #endif - #ifndef CYTHON_FALLTHROUGH - #if __has_attribute(fallthrough) - #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) - #else - #define CYTHON_FALLTHROUGH - #endif - #endif - #if defined(__clang__ ) && defined(__apple_build_version__) - #if __apple_build_version__ < 7000000 - #undef CYTHON_FALLTHROUGH - #define CYTHON_FALLTHROUGH - #endif - #endif -#endif - -#ifndef CYTHON_INLINE - #if defined(__clang__) - #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) - #elif defined(__GNUC__) - #define CYTHON_INLINE __inline__ - #elif defined(_MSC_VER) - #define CYTHON_INLINE __inline - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_INLINE inline - #else - #define CYTHON_INLINE - #endif -#endif - -#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) - #define Py_OptimizeFlag 0 -#endif -#define __PYX_BUILD_PY_SSIZE_T "n" -#define CYTHON_FORMAT_SSIZE_T "z" -#if PY_MAJOR_VERSION < 3 - #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyClass_Type -#else - #define __Pyx_BUILTIN_MODULE_NAME "builtins" -#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2 - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) -#else - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) -#endif - #define __Pyx_DefaultClassType PyType_Type -#endif -#ifndef Py_TPFLAGS_CHECKTYPES - #define Py_TPFLAGS_CHECKTYPES 0 -#endif -#ifndef Py_TPFLAGS_HAVE_INDEX - #define Py_TPFLAGS_HAVE_INDEX 0 -#endif -#ifndef Py_TPFLAGS_HAVE_NEWBUFFER - #define Py_TPFLAGS_HAVE_NEWBUFFER 0 -#endif -#ifndef Py_TPFLAGS_HAVE_FINALIZE - #define Py_TPFLAGS_HAVE_FINALIZE 0 -#endif -#ifndef METH_STACKLESS - #define METH_STACKLESS 0 -#endif -#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) - #ifndef METH_FASTCALL - #define METH_FASTCALL 0x80 - #endif - typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); - typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, - Py_ssize_t nargs, PyObject *kwnames); -#else - #define __Pyx_PyCFunctionFast _PyCFunctionFast - #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords -#endif -#if CYTHON_FAST_PYCCALL -#define __Pyx_PyFastCFunction_Check(func)\ - ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))))) -#else -#define __Pyx_PyFastCFunction_Check(func) 0 -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) - #define PyObject_Malloc(s) PyMem_Malloc(s) - #define PyObject_Free(p) PyMem_Free(p) - #define PyObject_Realloc(p) PyMem_Realloc(p) -#endif -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1 - #define PyMem_RawMalloc(n) PyMem_Malloc(n) - #define PyMem_RawRealloc(p, n) PyMem_Realloc(p, n) - #define PyMem_RawFree(p) PyMem_Free(p) -#endif -#if CYTHON_COMPILING_IN_PYSTON - #define __Pyx_PyCode_HasFreeVars(co) PyCode_HasFreeVars(co) - #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno) -#else - #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) - #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) -#endif -#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000 - #define __Pyx_PyThreadState_Current PyThreadState_GET() -#elif PY_VERSION_HEX >= 0x03060000 - #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() -#elif PY_VERSION_HEX >= 0x03000000 - #define __Pyx_PyThreadState_Current PyThreadState_GET() -#else - #define __Pyx_PyThreadState_Current _PyThreadState_Current -#endif -#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) -#include "pythread.h" -#define Py_tss_NEEDS_INIT 0 -typedef int Py_tss_t; -static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { - *key = PyThread_create_key(); - return 0; -} -static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { - Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); - *key = Py_tss_NEEDS_INIT; - return key; -} -static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { - PyObject_Free(key); -} -static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { - return *key != Py_tss_NEEDS_INIT; -} -static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { - PyThread_delete_key(*key); - *key = Py_tss_NEEDS_INIT; -} -static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { - return PyThread_set_key_value(*key, value); -} -static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { - return PyThread_get_key_value(*key); -} -#endif -#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized) -#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) -#else -#define __Pyx_PyDict_NewPresized(n) PyDict_New() -#endif -#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION - #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) -#else - #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) -#endif -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS -#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) -#else -#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name) -#endif -#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) - #define CYTHON_PEP393_ENABLED 1 - #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ - 0 : _PyUnicode_Ready((PyObject *)(op))) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) - #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) - #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) - #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) - #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) - #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, ch) - #if defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE) - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) - #else - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) - #endif -#else - #define CYTHON_PEP393_ENABLED 0 - #define PyUnicode_1BYTE_KIND 1 - #define PyUnicode_2BYTE_KIND 2 - #define PyUnicode_4BYTE_KIND 4 - #define __Pyx_PyUnicode_READY(op) (0) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) - #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111) - #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) - #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) - #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) - #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = ch) - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) -#endif -#if CYTHON_COMPILING_IN_PYPY - #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) -#else - #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ - PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains) - #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check) - #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format) - #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) -#endif -#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) -#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) -#else - #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) -#endif -#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) - #define PyObject_ASCII(o) PyObject_Repr(o) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBaseString_Type PyUnicode_Type - #define PyStringObject PyUnicodeObject - #define PyString_Type PyUnicode_Type - #define PyString_Check PyUnicode_Check - #define PyString_CheckExact PyUnicode_CheckExact -#ifndef PyObject_Unicode - #define PyObject_Unicode PyObject_Str -#endif -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) - #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) -#else - #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) - #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) -#endif -#ifndef PySet_CheckExact - #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) -#endif -#if PY_VERSION_HEX >= 0x030900A4 - #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) - #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size) -#else - #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt) - #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size) -#endif -#if CYTHON_ASSUME_SAFE_MACROS - #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) -#else - #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyIntObject PyLongObject - #define PyInt_Type PyLong_Type - #define PyInt_Check(op) PyLong_Check(op) - #define PyInt_CheckExact(op) PyLong_CheckExact(op) - #define PyInt_FromString PyLong_FromString - #define PyInt_FromUnicode PyLong_FromUnicode - #define PyInt_FromLong PyLong_FromLong - #define PyInt_FromSize_t PyLong_FromSize_t - #define PyInt_FromSsize_t PyLong_FromSsize_t - #define PyInt_AsLong PyLong_AsLong - #define PyInt_AS_LONG PyLong_AS_LONG - #define PyInt_AsSsize_t PyLong_AsSsize_t - #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask - #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask - #define PyNumber_Int PyNumber_Long -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBoolObject PyLongObject -#endif -#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY - #ifndef PyUnicode_InternFromString - #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) - #endif -#endif -#if PY_VERSION_HEX < 0x030200A4 - typedef long Py_hash_t; - #define __Pyx_PyInt_FromHash_t PyInt_FromLong - #define __Pyx_PyInt_AsHash_t PyInt_AsLong -#else - #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t - #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyMethod_New(func, self, klass) ((self) ? ((void)(klass), PyMethod_New(func, self)) : __Pyx_NewRef(func)) -#else - #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) -#endif -#if CYTHON_USE_ASYNC_SLOTS - #if PY_VERSION_HEX >= 0x030500B1 - #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods - #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) - #else - #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) - #endif -#else - #define __Pyx_PyType_AsAsync(obj) NULL -#endif -#ifndef __Pyx_PyAsyncMethodsStruct - typedef struct { - unaryfunc am_await; - unaryfunc am_aiter; - unaryfunc am_anext; - } __Pyx_PyAsyncMethodsStruct; -#endif - -#if defined(WIN32) || defined(MS_WINDOWS) - #define _USE_MATH_DEFINES -#endif -#include -#ifdef NAN -#define __PYX_NAN() ((float) NAN) -#else -static CYTHON_INLINE float __PYX_NAN() { - float value; - memset(&value, 0xFF, sizeof(value)); - return value; -} -#endif -#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) -#define __Pyx_truncl trunc -#else -#define __Pyx_truncl truncl -#endif - -#define __PYX_MARK_ERR_POS(f_index, lineno) \ - { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } -#define __PYX_ERR(f_index, lineno, Ln_error) \ - { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } - -#ifndef __PYX_EXTERN_C - #ifdef __cplusplus - #define __PYX_EXTERN_C extern "C" - #else - #define __PYX_EXTERN_C extern - #endif -#endif - -#define __PYX_HAVE__aiohttp___helpers -#define __PYX_HAVE_API__aiohttp___helpers -/* Early includes */ -#ifdef _OPENMP -#include -#endif /* _OPENMP */ - -#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) -#define CYTHON_WITHOUT_ASSERTIONS -#endif - -typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; - const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; - -#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 -#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 -#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) -#define __PYX_DEFAULT_STRING_ENCODING "" -#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString -#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#define __Pyx_uchar_cast(c) ((unsigned char)c) -#define __Pyx_long_cast(x) ((long)x) -#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ - (sizeof(type) < sizeof(Py_ssize_t)) ||\ - (sizeof(type) > sizeof(Py_ssize_t) &&\ - likely(v < (type)PY_SSIZE_T_MAX ||\ - v == (type)PY_SSIZE_T_MAX) &&\ - (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ - v == (type)PY_SSIZE_T_MIN))) ||\ - (sizeof(type) == sizeof(Py_ssize_t) &&\ - (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ - v == (type)PY_SSIZE_T_MAX))) ) -static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { - return (size_t) i < (size_t) limit; -} -#if defined (__cplusplus) && __cplusplus >= 201103L - #include - #define __Pyx_sst_abs(value) std::abs(value) -#elif SIZEOF_INT >= SIZEOF_SIZE_T - #define __Pyx_sst_abs(value) abs(value) -#elif SIZEOF_LONG >= SIZEOF_SIZE_T - #define __Pyx_sst_abs(value) labs(value) -#elif defined (_MSC_VER) - #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) -#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define __Pyx_sst_abs(value) llabs(value) -#elif defined (__GNUC__) - #define __Pyx_sst_abs(value) __builtin_llabs(value) -#else - #define __Pyx_sst_abs(value) ((value<0) ? -value : value) -#endif -static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); -static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); -#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) -#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) -#define __Pyx_PyBytes_FromString PyBytes_FromString -#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); -#if PY_MAJOR_VERSION < 3 - #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#else - #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize -#endif -#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyObject_AsWritableString(s) ((char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsWritableSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) -#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) -#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) -#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) -#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) -static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { - const Py_UNICODE *u_end = u; - while (*u_end++) ; - return (size_t)(u_end - u - 1); -} -#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) -#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode -#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode -#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) -#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) -static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); -static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); -static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); -#define __Pyx_PySequence_Tuple(obj)\ - (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); -#if CYTHON_ASSUME_SAFE_MACROS -#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) -#else -#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) -#endif -#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) -#if PY_MAJOR_VERSION >= 3 -#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) -#else -#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) -#endif -#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x)) -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII -static int __Pyx_sys_getdefaultencoding_not_ascii; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys; - PyObject* default_encoding = NULL; - PyObject* ascii_chars_u = NULL; - PyObject* ascii_chars_b = NULL; - const char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (!sys) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); - Py_DECREF(sys); - if (!default_encoding) goto bad; - default_encoding_c = PyBytes_AsString(default_encoding); - if (!default_encoding_c) goto bad; - if (strcmp(default_encoding_c, "ascii") == 0) { - __Pyx_sys_getdefaultencoding_not_ascii = 0; - } else { - char ascii_chars[128]; - int c; - for (c = 0; c < 128; c++) { - ascii_chars[c] = c; - } - __Pyx_sys_getdefaultencoding_not_ascii = 1; - ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); - if (!ascii_chars_u) goto bad; - ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); - if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { - PyErr_Format( - PyExc_ValueError, - "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", - default_encoding_c); - goto bad; - } - Py_DECREF(ascii_chars_u); - Py_DECREF(ascii_chars_b); - } - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return -1; -} -#endif -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) -#else -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT -static char* __PYX_DEFAULT_STRING_ENCODING; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys; - PyObject* default_encoding = NULL; - char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (!sys) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - Py_DECREF(sys); - if (!default_encoding) goto bad; - default_encoding_c = PyBytes_AsString(default_encoding); - if (!default_encoding_c) goto bad; - __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); - if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; - strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(default_encoding); - return -1; -} -#endif -#endif - - -/* Test for GCC > 2.95 */ -#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) -#else /* !__GNUC__ or GCC < 2.95 */ - #define likely(x) (x) - #define unlikely(x) (x) -#endif /* __GNUC__ */ -static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } - -static PyObject *__pyx_m = NULL; -static PyObject *__pyx_d; -static PyObject *__pyx_b; -static PyObject *__pyx_cython_runtime = NULL; -static PyObject *__pyx_empty_tuple; -static PyObject *__pyx_empty_bytes; -static PyObject *__pyx_empty_unicode; -static int __pyx_lineno; -static int __pyx_clineno = 0; -static const char * __pyx_cfilenm= __FILE__; -static const char *__pyx_filename; - - -static const char *__pyx_f[] = { - "aiohttp\\_helpers.pyx", - "stringsource", -}; - -/*--- Type declarations ---*/ -struct __pyx_obj_7aiohttp_8_helpers_reify; - -/* "aiohttp/_helpers.pyx":1 - * cdef class reify: # <<<<<<<<<<<<<< - * """Use as a class method decorator. It operates almost exactly like - * the Python `@property` decorator, but it puts the result of the - */ -struct __pyx_obj_7aiohttp_8_helpers_reify { - PyObject_HEAD - PyObject *wrapped; - PyObject *name; -}; - - -/* --- Runtime support code (head) --- */ -/* Refnanny.proto */ -#ifndef CYTHON_REFNANNY - #define CYTHON_REFNANNY 0 -#endif -#if CYTHON_REFNANNY - typedef struct { - void (*INCREF)(void*, PyObject*, int); - void (*DECREF)(void*, PyObject*, int); - void (*GOTREF)(void*, PyObject*, int); - void (*GIVEREF)(void*, PyObject*, int); - void* (*SetupContext)(const char*, int, const char*); - void (*FinishContext)(void**); - } __Pyx_RefNannyAPIStruct; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); - #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; -#ifdef WITH_THREAD - #define __Pyx_RefNannySetupContext(name, acquire_gil)\ - if (acquire_gil) {\ - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ - PyGILState_Release(__pyx_gilstate_save);\ - } else {\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ - } -#else - #define __Pyx_RefNannySetupContext(name, acquire_gil)\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) -#endif - #define __Pyx_RefNannyFinishContext()\ - __Pyx_RefNanny->FinishContext(&__pyx_refnanny) - #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) - #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) - #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) - #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) -#else - #define __Pyx_RefNannyDeclarations - #define __Pyx_RefNannySetupContext(name, acquire_gil) - #define __Pyx_RefNannyFinishContext() - #define __Pyx_INCREF(r) Py_INCREF(r) - #define __Pyx_DECREF(r) Py_DECREF(r) - #define __Pyx_GOTREF(r) - #define __Pyx_GIVEREF(r) - #define __Pyx_XINCREF(r) Py_XINCREF(r) - #define __Pyx_XDECREF(r) Py_XDECREF(r) - #define __Pyx_XGOTREF(r) - #define __Pyx_XGIVEREF(r) -#endif -#define __Pyx_XDECREF_SET(r, v) do {\ - PyObject *tmp = (PyObject *) r;\ - r = v; __Pyx_XDECREF(tmp);\ - } while (0) -#define __Pyx_DECREF_SET(r, v) do {\ - PyObject *tmp = (PyObject *) r;\ - r = v; __Pyx_DECREF(tmp);\ - } while (0) -#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) -#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) - -/* PyObjectGetAttrStr.proto */ -#if CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); -#else -#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) -#endif - -/* GetBuiltinName.proto */ -static PyObject *__Pyx_GetBuiltinName(PyObject *name); - -/* RaiseDoubleKeywords.proto */ -static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); - -/* ParseKeywords.proto */ -static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\ - PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ - const char* function_name); - -/* RaiseArgTupleInvalid.proto */ -static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, - Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); - -/* GetItemInt.proto */ -#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ - __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ - (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ - __Pyx_GetItemInt_Generic(o, to_py_func(i)))) -#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ - __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ - (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck); -#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ - __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ - (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck); -static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, - int is_list, int wraparound, int boundscheck); - -/* ObjectGetItem.proto */ -#if CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key); -#else -#define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key) -#endif - -/* GetTopmostException.proto */ -#if CYTHON_USE_EXC_INFO_STACK -static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate); -#endif - -/* PyThreadStateGet.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; -#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; -#define __Pyx_PyErr_Occurred() __pyx_tstate->curexc_type -#else -#define __Pyx_PyThreadState_declare -#define __Pyx_PyThreadState_assign -#define __Pyx_PyErr_Occurred() PyErr_Occurred() -#endif - -/* SaveResetException.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb) -static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); -#define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb) -static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); -#else -#define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb) -#define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb) -#endif - -/* PyErrExceptionMatches.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) -static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); -#else -#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) -#endif - -/* GetException.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_GetException(type, value, tb) __Pyx__GetException(__pyx_tstate, type, value, tb) -static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); -#else -static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); -#endif - -/* PyCFunctionFastCall.proto */ -#if CYTHON_FAST_PYCCALL -static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs); -#else -#define __Pyx_PyCFunction_FastCall(func, args, nargs) (assert(0), NULL) -#endif - -/* PyFunctionFastCall.proto */ -#if CYTHON_FAST_PYCALL -#define __Pyx_PyFunction_FastCall(func, args, nargs)\ - __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) -#if 1 || PY_VERSION_HEX < 0x030600B1 -static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); -#else -#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs) -#endif -#define __Pyx_BUILD_ASSERT_EXPR(cond)\ - (sizeof(char [1 - 2*!(cond)]) - 1) -#ifndef Py_MEMBER_SIZE -#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) -#endif - static size_t __pyx_pyframe_localsplus_offset = 0; - #include "frameobject.h" - #define __Pxy_PyFrame_Initialize_Offsets()\ - ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ - (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) - #define __Pyx_PyFrame_GetLocalsplus(frame)\ - (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) -#endif - -/* PyObjectCall.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); -#else -#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) -#endif - -/* PyObjectCall2Args.proto */ -static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); - -/* PyObjectCallMethO.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); -#endif - -/* PyObjectCallOneArg.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); - -/* PyErrFetchRestore.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) -#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) -#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) -#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) -#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) -static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); -static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); -#if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) -#else -#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) -#endif -#else -#define __Pyx_PyErr_Clear() PyErr_Clear() -#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) -#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) -#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) -#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) -#endif - -/* RaiseException.proto */ -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); - -/* GetAttr.proto */ -static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); - -/* GetAttr3.proto */ -static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *); - -/* PyDictVersioning.proto */ -#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS -#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) -#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) -#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ - (version_var) = __PYX_GET_DICT_VERSION(dict);\ - (cache_var) = (value); -#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ - static PY_UINT64_T __pyx_dict_version = 0;\ - static PyObject *__pyx_dict_cached_value = NULL;\ - if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ - (VAR) = __pyx_dict_cached_value;\ - } else {\ - (VAR) = __pyx_dict_cached_value = (LOOKUP);\ - __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ - }\ -} -static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); -static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); -static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); -#else -#define __PYX_GET_DICT_VERSION(dict) (0) -#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) -#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); -#endif - -/* GetModuleGlobalName.proto */ -#if CYTHON_USE_DICT_VERSIONS -#define __Pyx_GetModuleGlobalName(var, name) {\ - static PY_UINT64_T __pyx_dict_version = 0;\ - static PyObject *__pyx_dict_cached_value = NULL;\ - (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ - (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ - __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ -} -#define __Pyx_GetModuleGlobalNameUncached(var, name) {\ - PY_UINT64_T __pyx_dict_version;\ - PyObject *__pyx_dict_cached_value;\ - (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ -} -static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); -#else -#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) -#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) -static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); -#endif - -/* Import.proto */ -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); - -/* ImportFrom.proto */ -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); - -/* HasAttr.proto */ -static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *); - -/* PyObject_GenericGetAttrNoDict.proto */ -#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 -static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name); -#else -#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr -#endif - -/* PyObject_GenericGetAttr.proto */ -#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 -static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name); -#else -#define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr -#endif - -/* PyObjectGetAttrStrNoError.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); - -/* SetupReduce.proto */ -static int __Pyx_setup_reduce(PyObject* type_obj); - -/* CLineInTraceback.proto */ -#ifdef CYTHON_CLINE_IN_TRACEBACK -#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) -#else -static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); -#endif - -/* CodeObjectCache.proto */ -typedef struct { - PyCodeObject* code_object; - int code_line; -} __Pyx_CodeObjectCacheEntry; -struct __Pyx_CodeObjectCache { - int count; - int max_count; - __Pyx_CodeObjectCacheEntry* entries; -}; -static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); -static PyCodeObject *__pyx_find_code_object(int code_line); -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); - -/* AddTraceback.proto */ -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename); - -/* CIntToPy.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); - -/* CIntFromPy.proto */ -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); - -/* CIntFromPy.proto */ -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); - -/* FastTypeChecks.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) -static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); -static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); -static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); -#else -#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) -#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) -#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) -#endif -#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) - -/* CheckBinaryVersion.proto */ -static int __Pyx_check_binary_version(void); - -/* InitStrings.proto */ -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); - - -/* Module declarations from 'aiohttp._helpers' */ -static PyTypeObject *__pyx_ptype_7aiohttp_8_helpers_reify = 0; -static PyObject *__pyx_f_7aiohttp_8_helpers___pyx_unpickle_reify__set_state(struct __pyx_obj_7aiohttp_8_helpers_reify *, PyObject *); /*proto*/ -#define __Pyx_MODULE_NAME "aiohttp._helpers" -extern int __pyx_module_is_main_aiohttp___helpers; -int __pyx_module_is_main_aiohttp___helpers = 0; - -/* Implementation of 'aiohttp._helpers' */ -static PyObject *__pyx_builtin_KeyError; -static PyObject *__pyx_builtin_AttributeError; -static const char __pyx_k_doc[] = "__doc__"; -static const char __pyx_k_new[] = "__new__"; -static const char __pyx_k_dict[] = "__dict__"; -static const char __pyx_k_main[] = "__main__"; -static const char __pyx_k_name[] = "__name__"; -static const char __pyx_k_test[] = "__test__"; -static const char __pyx_k_cache[] = "_cache"; -static const char __pyx_k_reify[] = "reify"; -static const char __pyx_k_import[] = "__import__"; -static const char __pyx_k_pickle[] = "pickle"; -static const char __pyx_k_reduce[] = "__reduce__"; -static const char __pyx_k_update[] = "update"; -static const char __pyx_k_wrapped[] = "wrapped"; -static const char __pyx_k_KeyError[] = "KeyError"; -static const char __pyx_k_getstate[] = "__getstate__"; -static const char __pyx_k_pyx_type[] = "__pyx_type"; -static const char __pyx_k_setstate[] = "__setstate__"; -static const char __pyx_k_pyx_state[] = "__pyx_state"; -static const char __pyx_k_reduce_ex[] = "__reduce_ex__"; -static const char __pyx_k_pyx_result[] = "__pyx_result"; -static const char __pyx_k_PickleError[] = "PickleError"; -static const char __pyx_k_pyx_checksum[] = "__pyx_checksum"; -static const char __pyx_k_stringsource[] = "stringsource"; -static const char __pyx_k_reduce_cython[] = "__reduce_cython__"; -static const char __pyx_k_AttributeError[] = "AttributeError"; -static const char __pyx_k_pyx_PickleError[] = "__pyx_PickleError"; -static const char __pyx_k_setstate_cython[] = "__setstate_cython__"; -static const char __pyx_k_aiohttp__helpers[] = "aiohttp._helpers"; -static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; -static const char __pyx_k_pyx_unpickle_reify[] = "__pyx_unpickle_reify"; -static const char __pyx_k_reified_property_is_read_only[] = "reified property is read-only"; -static const char __pyx_k_Incompatible_checksums_s_vs_0x77[] = "Incompatible checksums (%s vs 0x770cb8f = (name, wrapped))"; -static PyObject *__pyx_n_s_AttributeError; -static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0x77; -static PyObject *__pyx_n_s_KeyError; -static PyObject *__pyx_n_s_PickleError; -static PyObject *__pyx_n_s_aiohttp__helpers; -static PyObject *__pyx_n_s_cache; -static PyObject *__pyx_n_s_cline_in_traceback; -static PyObject *__pyx_n_s_dict; -static PyObject *__pyx_n_s_doc; -static PyObject *__pyx_n_s_getstate; -static PyObject *__pyx_n_s_import; -static PyObject *__pyx_n_s_main; -static PyObject *__pyx_n_s_name; -static PyObject *__pyx_n_s_new; -static PyObject *__pyx_n_s_pickle; -static PyObject *__pyx_n_s_pyx_PickleError; -static PyObject *__pyx_n_s_pyx_checksum; -static PyObject *__pyx_n_s_pyx_result; -static PyObject *__pyx_n_s_pyx_state; -static PyObject *__pyx_n_s_pyx_type; -static PyObject *__pyx_n_s_pyx_unpickle_reify; -static PyObject *__pyx_n_s_reduce; -static PyObject *__pyx_n_s_reduce_cython; -static PyObject *__pyx_n_s_reduce_ex; -static PyObject *__pyx_kp_u_reified_property_is_read_only; -static PyObject *__pyx_n_s_reify; -static PyObject *__pyx_n_s_setstate; -static PyObject *__pyx_n_s_setstate_cython; -static PyObject *__pyx_kp_s_stringsource; -static PyObject *__pyx_n_s_test; -static PyObject *__pyx_n_s_update; -static PyObject *__pyx_n_s_wrapped; -static int __pyx_pf_7aiohttp_8_helpers_5reify___init__(struct __pyx_obj_7aiohttp_8_helpers_reify *__pyx_v_self, PyObject *__pyx_v_wrapped); /* proto */ -static PyObject *__pyx_pf_7aiohttp_8_helpers_5reify_7__doc_____get__(struct __pyx_obj_7aiohttp_8_helpers_reify *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_7aiohttp_8_helpers_5reify_2__get__(struct __pyx_obj_7aiohttp_8_helpers_reify *__pyx_v_self, PyObject *__pyx_v_inst, CYTHON_UNUSED PyObject *__pyx_v_owner); /* proto */ -static int __pyx_pf_7aiohttp_8_helpers_5reify_4__set__(CYTHON_UNUSED struct __pyx_obj_7aiohttp_8_helpers_reify *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_inst, CYTHON_UNUSED PyObject *__pyx_v_value); /* proto */ -static PyObject *__pyx_pf_7aiohttp_8_helpers_5reify_6__reduce_cython__(struct __pyx_obj_7aiohttp_8_helpers_reify *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_7aiohttp_8_helpers_5reify_8__setstate_cython__(struct __pyx_obj_7aiohttp_8_helpers_reify *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */ -static PyObject *__pyx_pf_7aiohttp_8_helpers___pyx_unpickle_reify(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */ -static PyObject *__pyx_tp_new_7aiohttp_8_helpers_reify(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/ -static PyObject *__pyx_int_124832655; -static PyObject *__pyx_tuple_; -static PyObject *__pyx_tuple__2; -static PyObject *__pyx_codeobj__3; -/* Late includes */ - -/* "aiohttp/_helpers.pyx":13 - * cdef object name - * - * def __init__(self, wrapped): # <<<<<<<<<<<<<< - * self.wrapped = wrapped - * self.name = wrapped.__name__ - */ - -/* Python wrapper */ -static int __pyx_pw_7aiohttp_8_helpers_5reify_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_pw_7aiohttp_8_helpers_5reify_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_wrapped = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_wrapped,0}; - PyObject* values[1] = {0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_wrapped)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 13, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 1) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - } - __pyx_v_wrapped = values[0]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 13, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("aiohttp._helpers.reify.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return -1; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_7aiohttp_8_helpers_5reify___init__(((struct __pyx_obj_7aiohttp_8_helpers_reify *)__pyx_v_self), __pyx_v_wrapped); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_7aiohttp_8_helpers_5reify___init__(struct __pyx_obj_7aiohttp_8_helpers_reify *__pyx_v_self, PyObject *__pyx_v_wrapped) { - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__init__", 0); - - /* "aiohttp/_helpers.pyx":14 - * - * def __init__(self, wrapped): - * self.wrapped = wrapped # <<<<<<<<<<<<<< - * self.name = wrapped.__name__ - * - */ - __Pyx_INCREF(__pyx_v_wrapped); - __Pyx_GIVEREF(__pyx_v_wrapped); - __Pyx_GOTREF(__pyx_v_self->wrapped); - __Pyx_DECREF(__pyx_v_self->wrapped); - __pyx_v_self->wrapped = __pyx_v_wrapped; - - /* "aiohttp/_helpers.pyx":15 - * def __init__(self, wrapped): - * self.wrapped = wrapped - * self.name = wrapped.__name__ # <<<<<<<<<<<<<< - * - * @property - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_wrapped, __pyx_n_s_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v_self->name); - __Pyx_DECREF(__pyx_v_self->name); - __pyx_v_self->name = __pyx_t_1; - __pyx_t_1 = 0; - - /* "aiohttp/_helpers.pyx":13 - * cdef object name - * - * def __init__(self, wrapped): # <<<<<<<<<<<<<< - * self.wrapped = wrapped - * self.name = wrapped.__name__ - */ - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._helpers.reify.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_helpers.pyx":18 - * - * @property - * def __doc__(self): # <<<<<<<<<<<<<< - * return self.wrapped.__doc__ - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_8_helpers_5reify_7__doc___1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_8_helpers_5reify_7__doc___1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_8_helpers_5reify_7__doc_____get__(((struct __pyx_obj_7aiohttp_8_helpers_reify *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_8_helpers_5reify_7__doc_____get__(struct __pyx_obj_7aiohttp_8_helpers_reify *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); - - /* "aiohttp/_helpers.pyx":19 - * @property - * def __doc__(self): - * return self.wrapped.__doc__ # <<<<<<<<<<<<<< - * - * def __get__(self, inst, owner): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->wrapped, __pyx_n_s_doc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "aiohttp/_helpers.pyx":18 - * - * @property - * def __doc__(self): # <<<<<<<<<<<<<< - * return self.wrapped.__doc__ - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._helpers.reify.__doc__.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_helpers.pyx":21 - * return self.wrapped.__doc__ - * - * def __get__(self, inst, owner): # <<<<<<<<<<<<<< - * try: - * try: - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_8_helpers_5reify_3__get__(PyObject *__pyx_v_self, PyObject *__pyx_v_inst, PyObject *__pyx_v_owner); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_8_helpers_5reify_3__get__(PyObject *__pyx_v_self, PyObject *__pyx_v_inst, PyObject *__pyx_v_owner) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_8_helpers_5reify_2__get__(((struct __pyx_obj_7aiohttp_8_helpers_reify *)__pyx_v_self), ((PyObject *)__pyx_v_inst), ((PyObject *)__pyx_v_owner)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_8_helpers_5reify_2__get__(struct __pyx_obj_7aiohttp_8_helpers_reify *__pyx_v_self, PyObject *__pyx_v_inst, CYTHON_UNUSED PyObject *__pyx_v_owner) { - PyObject *__pyx_v_val = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - int __pyx_t_14; - int __pyx_t_15; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); - - /* "aiohttp/_helpers.pyx":22 - * - * def __get__(self, inst, owner): - * try: # <<<<<<<<<<<<<< - * try: - * return inst._cache[self.name] - */ - { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - /*try:*/ { - - /* "aiohttp/_helpers.pyx":23 - * def __get__(self, inst, owner): - * try: - * try: # <<<<<<<<<<<<<< - * return inst._cache[self.name] - * except KeyError: - */ - { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6); - __Pyx_XGOTREF(__pyx_t_4); - __Pyx_XGOTREF(__pyx_t_5); - __Pyx_XGOTREF(__pyx_t_6); - /*try:*/ { - - /* "aiohttp/_helpers.pyx":24 - * try: - * try: - * return inst._cache[self.name] # <<<<<<<<<<<<<< - * except KeyError: - * val = self.wrapped(inst) - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_inst, __pyx_n_s_cache); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 24, __pyx_L9_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyObject_GetItem(__pyx_t_7, __pyx_v_self->name); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 24, __pyx_L9_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_r = __pyx_t_8; - __pyx_t_8 = 0; - goto __pyx_L13_try_return; - - /* "aiohttp/_helpers.pyx":23 - * def __get__(self, inst, owner): - * try: - * try: # <<<<<<<<<<<<<< - * return inst._cache[self.name] - * except KeyError: - */ - } - __pyx_L9_error:; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "aiohttp/_helpers.pyx":25 - * try: - * return inst._cache[self.name] - * except KeyError: # <<<<<<<<<<<<<< - * val = self.wrapped(inst) - * inst._cache[self.name] = val - */ - __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_KeyError); - if (__pyx_t_9) { - __Pyx_AddTraceback("aiohttp._helpers.reify.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_10) < 0) __PYX_ERR(0, 25, __pyx_L11_except_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_10); - - /* "aiohttp/_helpers.pyx":26 - * return inst._cache[self.name] - * except KeyError: - * val = self.wrapped(inst) # <<<<<<<<<<<<<< - * inst._cache[self.name] = val - * return val - */ - __Pyx_INCREF(__pyx_v_self->wrapped); - __pyx_t_12 = __pyx_v_self->wrapped; __pyx_t_13 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_12))) { - __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_12); - if (likely(__pyx_t_13)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_12); - __Pyx_INCREF(__pyx_t_13); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_12, function); - } - } - __pyx_t_11 = (__pyx_t_13) ? __Pyx_PyObject_Call2Args(__pyx_t_12, __pyx_t_13, __pyx_v_inst) : __Pyx_PyObject_CallOneArg(__pyx_t_12, __pyx_v_inst); - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 26, __pyx_L11_except_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - __pyx_v_val = __pyx_t_11; - __pyx_t_11 = 0; - - /* "aiohttp/_helpers.pyx":27 - * except KeyError: - * val = self.wrapped(inst) - * inst._cache[self.name] = val # <<<<<<<<<<<<<< - * return val - * except AttributeError: - */ - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_inst, __pyx_n_s_cache); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 27, __pyx_L11_except_error) - __Pyx_GOTREF(__pyx_t_11); - if (unlikely(PyObject_SetItem(__pyx_t_11, __pyx_v_self->name, __pyx_v_val) < 0)) __PYX_ERR(0, 27, __pyx_L11_except_error) - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - - /* "aiohttp/_helpers.pyx":28 - * val = self.wrapped(inst) - * inst._cache[self.name] = val - * return val # <<<<<<<<<<<<<< - * except AttributeError: - * if inst is None: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_val); - __pyx_r = __pyx_v_val; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L12_except_return; - } - goto __pyx_L11_except_error; - __pyx_L11_except_error:; - - /* "aiohttp/_helpers.pyx":23 - * def __get__(self, inst, owner): - * try: - * try: # <<<<<<<<<<<<<< - * return inst._cache[self.name] - * except KeyError: - */ - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_XGIVEREF(__pyx_t_5); - __Pyx_XGIVEREF(__pyx_t_6); - __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6); - goto __pyx_L3_error; - __pyx_L13_try_return:; - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_XGIVEREF(__pyx_t_5); - __Pyx_XGIVEREF(__pyx_t_6); - __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6); - goto __pyx_L7_try_return; - __pyx_L12_except_return:; - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_XGIVEREF(__pyx_t_5); - __Pyx_XGIVEREF(__pyx_t_6); - __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6); - goto __pyx_L7_try_return; - } - - /* "aiohttp/_helpers.pyx":22 - * - * def __get__(self, inst, owner): - * try: # <<<<<<<<<<<<<< - * try: - * return inst._cache[self.name] - */ - } - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - - /* "aiohttp/_helpers.pyx":29 - * inst._cache[self.name] = val - * return val - * except AttributeError: # <<<<<<<<<<<<<< - * if inst is None: - * return self - */ - __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_AttributeError); - if (__pyx_t_9) { - __Pyx_AddTraceback("aiohttp._helpers.reify.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_7, &__pyx_t_8) < 0) __PYX_ERR(0, 29, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_8); - - /* "aiohttp/_helpers.pyx":30 - * return val - * except AttributeError: - * if inst is None: # <<<<<<<<<<<<<< - * return self - * raise - */ - __pyx_t_14 = (__pyx_v_inst == Py_None); - __pyx_t_15 = (__pyx_t_14 != 0); - if (__pyx_t_15) { - - /* "aiohttp/_helpers.pyx":31 - * except AttributeError: - * if inst is None: - * return self # <<<<<<<<<<<<<< - * raise - * - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject *)__pyx_v_self)); - __pyx_r = ((PyObject *)__pyx_v_self); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - goto __pyx_L6_except_return; - - /* "aiohttp/_helpers.pyx":30 - * return val - * except AttributeError: - * if inst is None: # <<<<<<<<<<<<<< - * return self - * raise - */ - } - - /* "aiohttp/_helpers.pyx":32 - * if inst is None: - * return self - * raise # <<<<<<<<<<<<<< - * - * def __set__(self, inst, value): - */ - __Pyx_GIVEREF(__pyx_t_10); - __Pyx_GIVEREF(__pyx_t_7); - __Pyx_XGIVEREF(__pyx_t_8); - __Pyx_ErrRestoreWithState(__pyx_t_10, __pyx_t_7, __pyx_t_8); - __pyx_t_10 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; - __PYX_ERR(0, 32, __pyx_L5_except_error) - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - - /* "aiohttp/_helpers.pyx":22 - * - * def __get__(self, inst, owner): - * try: # <<<<<<<<<<<<<< - * try: - * return inst._cache[self.name] - */ - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L1_error; - __pyx_L7_try_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - __pyx_L6_except_return:; - __Pyx_XGIVEREF(__pyx_t_1); - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3); - goto __pyx_L0; - } - - /* "aiohttp/_helpers.pyx":21 - * return self.wrapped.__doc__ - * - * def __get__(self, inst, owner): # <<<<<<<<<<<<<< - * try: - * try: - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_XDECREF(__pyx_t_12); - __Pyx_XDECREF(__pyx_t_13); - __Pyx_AddTraceback("aiohttp._helpers.reify.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_val); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_helpers.pyx":34 - * raise - * - * def __set__(self, inst, value): # <<<<<<<<<<<<<< - * raise AttributeError("reified property is read-only") - */ - -/* Python wrapper */ -static int __pyx_pw_7aiohttp_8_helpers_5reify_5__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_inst, PyObject *__pyx_v_value); /*proto*/ -static int __pyx_pw_7aiohttp_8_helpers_5reify_5__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_inst, PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__set__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_8_helpers_5reify_4__set__(((struct __pyx_obj_7aiohttp_8_helpers_reify *)__pyx_v_self), ((PyObject *)__pyx_v_inst), ((PyObject *)__pyx_v_value)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_7aiohttp_8_helpers_5reify_4__set__(CYTHON_UNUSED struct __pyx_obj_7aiohttp_8_helpers_reify *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_inst, CYTHON_UNUSED PyObject *__pyx_v_value) { - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__set__", 0); - - /* "aiohttp/_helpers.pyx":35 - * - * def __set__(self, inst, value): - * raise AttributeError("reified property is read-only") # <<<<<<<<<<<<<< - */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_AttributeError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 35, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(0, 35, __pyx_L1_error) - - /* "aiohttp/_helpers.pyx":34 - * raise - * - * def __set__(self, inst, value): # <<<<<<<<<<<<<< - * raise AttributeError("reified property is read-only") - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._helpers.reify.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * cdef tuple state - * cdef object _dict - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_8_helpers_5reify_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_8_helpers_5reify_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_8_helpers_5reify_6__reduce_cython__(((struct __pyx_obj_7aiohttp_8_helpers_reify *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_8_helpers_5reify_6__reduce_cython__(struct __pyx_obj_7aiohttp_8_helpers_reify *__pyx_v_self) { - PyObject *__pyx_v_state = 0; - PyObject *__pyx_v__dict = 0; - int __pyx_v_use_setstate; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - int __pyx_t_3; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__reduce_cython__", 0); - - /* "(tree fragment)":5 - * cdef object _dict - * cdef bint use_setstate - * state = (self.name, self.wrapped) # <<<<<<<<<<<<<< - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: - */ - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_self->name); - __Pyx_GIVEREF(__pyx_v_self->name); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->name); - __Pyx_INCREF(__pyx_v_self->wrapped); - __Pyx_GIVEREF(__pyx_v_self->wrapped); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->wrapped); - __pyx_v_state = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - - /* "(tree fragment)":6 - * cdef bint use_setstate - * state = (self.name, self.wrapped) - * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< - * if _dict is not None: - * state += (_dict,) - */ - __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v__dict = __pyx_t_1; - __pyx_t_1 = 0; - - /* "(tree fragment)":7 - * state = (self.name, self.wrapped) - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: # <<<<<<<<<<<<<< - * state += (_dict,) - * use_setstate = True - */ - __pyx_t_2 = (__pyx_v__dict != Py_None); - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { - - /* "(tree fragment)":8 - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: - * state += (_dict,) # <<<<<<<<<<<<<< - * use_setstate = True - * else: - */ - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v__dict); - __Pyx_GIVEREF(__pyx_v__dict); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict); - __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_4)); - __pyx_t_4 = 0; - - /* "(tree fragment)":9 - * if _dict is not None: - * state += (_dict,) - * use_setstate = True # <<<<<<<<<<<<<< - * else: - * use_setstate = self.name is not None or self.wrapped is not None - */ - __pyx_v_use_setstate = 1; - - /* "(tree fragment)":7 - * state = (self.name, self.wrapped) - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: # <<<<<<<<<<<<<< - * state += (_dict,) - * use_setstate = True - */ - goto __pyx_L3; - } - - /* "(tree fragment)":11 - * use_setstate = True - * else: - * use_setstate = self.name is not None or self.wrapped is not None # <<<<<<<<<<<<<< - * if use_setstate: - * return __pyx_unpickle_reify, (type(self), 0x770cb8f, None), state - */ - /*else*/ { - __pyx_t_2 = (__pyx_v_self->name != Py_None); - __pyx_t_5 = (__pyx_t_2 != 0); - if (!__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_5 = (__pyx_v_self->wrapped != Py_None); - __pyx_t_2 = (__pyx_t_5 != 0); - __pyx_t_3 = __pyx_t_2; - __pyx_L4_bool_binop_done:; - __pyx_v_use_setstate = __pyx_t_3; - } - __pyx_L3:; - - /* "(tree fragment)":12 - * else: - * use_setstate = self.name is not None or self.wrapped is not None - * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_reify, (type(self), 0x770cb8f, None), state - * else: - */ - __pyx_t_3 = (__pyx_v_use_setstate != 0); - if (__pyx_t_3) { - - /* "(tree fragment)":13 - * use_setstate = self.name is not None or self.wrapped is not None - * if use_setstate: - * return __pyx_unpickle_reify, (type(self), 0x770cb8f, None), state # <<<<<<<<<<<<<< - * else: - * return __pyx_unpickle_reify, (type(self), 0x770cb8f, state) - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_reify); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_124832655); - __Pyx_GIVEREF(__pyx_int_124832655); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_124832655); - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None); - __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_1); - __Pyx_INCREF(__pyx_v_state); - __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_state); - __pyx_t_4 = 0; - __pyx_t_1 = 0; - __pyx_r = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L0; - - /* "(tree fragment)":12 - * else: - * use_setstate = self.name is not None or self.wrapped is not None - * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_reify, (type(self), 0x770cb8f, None), state - * else: - */ - } - - /* "(tree fragment)":15 - * return __pyx_unpickle_reify, (type(self), 0x770cb8f, None), state - * else: - * return __pyx_unpickle_reify, (type(self), 0x770cb8f, state) # <<<<<<<<<<<<<< - * def __setstate_cython__(self, __pyx_state): - * __pyx_unpickle_reify__set_state(self, __pyx_state) - */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pyx_unpickle_reify); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_124832655); - __Pyx_GIVEREF(__pyx_int_124832655); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_124832655); - __Pyx_INCREF(__pyx_v_state); - __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state); - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1); - __pyx_t_6 = 0; - __pyx_t_1 = 0; - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - } - - /* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * cdef tuple state - * cdef object _dict - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_AddTraceback("aiohttp._helpers.reify.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_state); - __Pyx_XDECREF(__pyx_v__dict); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":16 - * else: - * return __pyx_unpickle_reify, (type(self), 0x770cb8f, state) - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * __pyx_unpickle_reify__set_state(self, __pyx_state) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_8_helpers_5reify_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_8_helpers_5reify_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_8_helpers_5reify_8__setstate_cython__(((struct __pyx_obj_7aiohttp_8_helpers_reify *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_8_helpers_5reify_8__setstate_cython__(struct __pyx_obj_7aiohttp_8_helpers_reify *__pyx_v_self, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setstate_cython__", 0); - - /* "(tree fragment)":17 - * return __pyx_unpickle_reify, (type(self), 0x770cb8f, state) - * def __setstate_cython__(self, __pyx_state): - * __pyx_unpickle_reify__set_state(self, __pyx_state) # <<<<<<<<<<<<<< - */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error) - __pyx_t_1 = __pyx_f_7aiohttp_8_helpers___pyx_unpickle_reify__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "(tree fragment)":16 - * else: - * return __pyx_unpickle_reify, (type(self), 0x770cb8f, state) - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * __pyx_unpickle_reify__set_state(self, __pyx_state) - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._helpers.reify.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":1 - * def __pyx_unpickle_reify(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_8_helpers_1__pyx_unpickle_reify(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_7aiohttp_8_helpers_1__pyx_unpickle_reify = {"__pyx_unpickle_reify", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7aiohttp_8_helpers_1__pyx_unpickle_reify, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_7aiohttp_8_helpers_1__pyx_unpickle_reify(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v___pyx_type = 0; - long __pyx_v___pyx_checksum; - PyObject *__pyx_v___pyx_state = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__pyx_unpickle_reify (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_reify", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_reify", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_reify") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - } - __pyx_v___pyx_type = values[0]; - __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) - __pyx_v___pyx_state = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_reify", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("aiohttp._helpers.__pyx_unpickle_reify", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_7aiohttp_8_helpers___pyx_unpickle_reify(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_8_helpers___pyx_unpickle_reify(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_v___pyx_PickleError = 0; - PyObject *__pyx_v___pyx_result = 0; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_reify", 0); - - /* "(tree fragment)":4 - * cdef object __pyx_PickleError - * cdef object __pyx_result - * if __pyx_checksum != 0x770cb8f: # <<<<<<<<<<<<<< - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x770cb8f = (name, wrapped))" % __pyx_checksum) - */ - __pyx_t_1 = ((__pyx_v___pyx_checksum != 0x770cb8f) != 0); - if (__pyx_t_1) { - - /* "(tree fragment)":5 - * cdef object __pyx_result - * if __pyx_checksum != 0x770cb8f: - * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x770cb8f = (name, wrapped))" % __pyx_checksum) - * __pyx_result = reify.__new__(__pyx_type) - */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_n_s_PickleError); - __Pyx_GIVEREF(__pyx_n_s_PickleError); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError); - __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_t_2); - __pyx_v___pyx_PickleError = __pyx_t_2; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "(tree fragment)":6 - * if __pyx_checksum != 0x770cb8f: - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x770cb8f = (name, wrapped))" % __pyx_checksum) # <<<<<<<<<<<<<< - * __pyx_result = reify.__new__(__pyx_type) - * if __pyx_state is not None: - */ - __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0x77, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_INCREF(__pyx_v___pyx_PickleError); - __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __PYX_ERR(1, 6, __pyx_L1_error) - - /* "(tree fragment)":4 - * cdef object __pyx_PickleError - * cdef object __pyx_result - * if __pyx_checksum != 0x770cb8f: # <<<<<<<<<<<<<< - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x770cb8f = (name, wrapped))" % __pyx_checksum) - */ - } - - /* "(tree fragment)":7 - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x770cb8f = (name, wrapped))" % __pyx_checksum) - * __pyx_result = reify.__new__(__pyx_type) # <<<<<<<<<<<<<< - * if __pyx_state is not None: - * __pyx_unpickle_reify__set_state( __pyx_result, __pyx_state) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_7aiohttp_8_helpers_reify), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v___pyx_result = __pyx_t_3; - __pyx_t_3 = 0; - - /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x770cb8f = (name, wrapped))" % __pyx_checksum) - * __pyx_result = reify.__new__(__pyx_type) - * if __pyx_state is not None: # <<<<<<<<<<<<<< - * __pyx_unpickle_reify__set_state( __pyx_result, __pyx_state) - * return __pyx_result - */ - __pyx_t_1 = (__pyx_v___pyx_state != Py_None); - __pyx_t_6 = (__pyx_t_1 != 0); - if (__pyx_t_6) { - - /* "(tree fragment)":9 - * __pyx_result = reify.__new__(__pyx_type) - * if __pyx_state is not None: - * __pyx_unpickle_reify__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< - * return __pyx_result - * cdef __pyx_unpickle_reify__set_state(reify __pyx_result, tuple __pyx_state): - */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error) - __pyx_t_3 = __pyx_f_7aiohttp_8_helpers___pyx_unpickle_reify__set_state(((struct __pyx_obj_7aiohttp_8_helpers_reify *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x770cb8f = (name, wrapped))" % __pyx_checksum) - * __pyx_result = reify.__new__(__pyx_type) - * if __pyx_state is not None: # <<<<<<<<<<<<<< - * __pyx_unpickle_reify__set_state( __pyx_result, __pyx_state) - * return __pyx_result - */ - } - - /* "(tree fragment)":10 - * if __pyx_state is not None: - * __pyx_unpickle_reify__set_state( __pyx_result, __pyx_state) - * return __pyx_result # <<<<<<<<<<<<<< - * cdef __pyx_unpickle_reify__set_state(reify __pyx_result, tuple __pyx_state): - * __pyx_result.name = __pyx_state[0]; __pyx_result.wrapped = __pyx_state[1] - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v___pyx_result); - __pyx_r = __pyx_v___pyx_result; - goto __pyx_L0; - - /* "(tree fragment)":1 - * def __pyx_unpickle_reify(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("aiohttp._helpers.__pyx_unpickle_reify", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v___pyx_PickleError); - __Pyx_XDECREF(__pyx_v___pyx_result); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":11 - * __pyx_unpickle_reify__set_state( __pyx_result, __pyx_state) - * return __pyx_result - * cdef __pyx_unpickle_reify__set_state(reify __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< - * __pyx_result.name = __pyx_state[0]; __pyx_result.wrapped = __pyx_state[1] - * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): - */ - -static PyObject *__pyx_f_7aiohttp_8_helpers___pyx_unpickle_reify__set_state(struct __pyx_obj_7aiohttp_8_helpers_reify *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - Py_ssize_t __pyx_t_3; - int __pyx_t_4; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_reify__set_state", 0); - - /* "(tree fragment)":12 - * return __pyx_result - * cdef __pyx_unpickle_reify__set_state(reify __pyx_result, tuple __pyx_state): - * __pyx_result.name = __pyx_state[0]; __pyx_result.wrapped = __pyx_state[1] # <<<<<<<<<<<<<< - * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): - * __pyx_result.__dict__.update(__pyx_state[2]) - */ - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 12, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v___pyx_result->name); - __Pyx_DECREF(__pyx_v___pyx_result->name); - __pyx_v___pyx_result->name = __pyx_t_1; - __pyx_t_1 = 0; - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 12, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v___pyx_result->wrapped); - __Pyx_DECREF(__pyx_v___pyx_result->wrapped); - __pyx_v___pyx_result->wrapped = __pyx_t_1; - __pyx_t_1 = 0; - - /* "(tree fragment)":13 - * cdef __pyx_unpickle_reify__set_state(reify __pyx_result, tuple __pyx_state): - * __pyx_result.name = __pyx_state[0]; __pyx_result.wrapped = __pyx_state[1] - * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< - * __pyx_result.__dict__.update(__pyx_state[2]) - */ - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(1, 13, __pyx_L1_error) - } - __pyx_t_3 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) - __pyx_t_4 = ((__pyx_t_3 > 2) != 0); - if (__pyx_t_4) { - } else { - __pyx_t_2 = __pyx_t_4; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) - __pyx_t_5 = (__pyx_t_4 != 0); - __pyx_t_2 = __pyx_t_5; - __pyx_L4_bool_binop_done:; - if (__pyx_t_2) { - - /* "(tree fragment)":14 - * __pyx_result.name = __pyx_state[0]; __pyx_result.wrapped = __pyx_state[1] - * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): - * __pyx_result.__dict__.update(__pyx_state[2]) # <<<<<<<<<<<<<< - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 14, __pyx_L1_error) - } - __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - } - } - __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "(tree fragment)":13 - * cdef __pyx_unpickle_reify__set_state(reify __pyx_result, tuple __pyx_state): - * __pyx_result.name = __pyx_state[0]; __pyx_result.wrapped = __pyx_state[1] - * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< - * __pyx_result.__dict__.update(__pyx_state[2]) - */ - } - - /* "(tree fragment)":11 - * __pyx_unpickle_reify__set_state( __pyx_result, __pyx_state) - * return __pyx_result - * cdef __pyx_unpickle_reify__set_state(reify __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< - * __pyx_result.name = __pyx_state[0]; __pyx_result.wrapped = __pyx_state[1] - * if len(__pyx_state) > 2 and hasattr(__pyx_result, '__dict__'): - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("aiohttp._helpers.__pyx_unpickle_reify__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_tp_new_7aiohttp_8_helpers_reify(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { - struct __pyx_obj_7aiohttp_8_helpers_reify *p; - PyObject *o; - if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { - o = (*t->tp_alloc)(t, 0); - } else { - o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); - } - if (unlikely(!o)) return 0; - p = ((struct __pyx_obj_7aiohttp_8_helpers_reify *)o); - p->wrapped = Py_None; Py_INCREF(Py_None); - p->name = Py_None; Py_INCREF(Py_None); - return o; -} - -static void __pyx_tp_dealloc_7aiohttp_8_helpers_reify(PyObject *o) { - struct __pyx_obj_7aiohttp_8_helpers_reify *p = (struct __pyx_obj_7aiohttp_8_helpers_reify *)o; - #if CYTHON_USE_TP_FINALIZE - if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { - if (PyObject_CallFinalizerFromDealloc(o)) return; - } - #endif - PyObject_GC_UnTrack(o); - Py_CLEAR(p->wrapped); - Py_CLEAR(p->name); - (*Py_TYPE(o)->tp_free)(o); -} - -static int __pyx_tp_traverse_7aiohttp_8_helpers_reify(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_7aiohttp_8_helpers_reify *p = (struct __pyx_obj_7aiohttp_8_helpers_reify *)o; - if (p->wrapped) { - e = (*v)(p->wrapped, a); if (e) return e; - } - if (p->name) { - e = (*v)(p->name, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_7aiohttp_8_helpers_reify(PyObject *o) { - PyObject* tmp; - struct __pyx_obj_7aiohttp_8_helpers_reify *p = (struct __pyx_obj_7aiohttp_8_helpers_reify *)o; - tmp = ((PyObject*)p->wrapped); - p->wrapped = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->name); - p->name = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - return 0; -} - -static PyObject *__pyx_tp_descr_get_7aiohttp_8_helpers_reify(PyObject *o, PyObject *i, PyObject *c) { - PyObject *r = 0; - if (!i) i = Py_None; - if (!c) c = Py_None; - r = __pyx_pw_7aiohttp_8_helpers_5reify_3__get__(o, i, c); - return r; -} - -static int __pyx_tp_descr_set_7aiohttp_8_helpers_reify(PyObject *o, PyObject *i, PyObject *v) { - if (v) { - return __pyx_pw_7aiohttp_8_helpers_5reify_5__set__(o, i, v); - } - else { - PyErr_SetString(PyExc_NotImplementedError, "__delete__"); - return -1; - } -} - -static PyObject *__pyx_getprop_7aiohttp_8_helpers_5reify___doc__(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_7aiohttp_8_helpers_5reify_7__doc___1__get__(o); -} - -static PyMethodDef __pyx_methods_7aiohttp_8_helpers_reify[] = { - {"__reduce_cython__", (PyCFunction)__pyx_pw_7aiohttp_8_helpers_5reify_7__reduce_cython__, METH_NOARGS, 0}, - {"__setstate_cython__", (PyCFunction)__pyx_pw_7aiohttp_8_helpers_5reify_9__setstate_cython__, METH_O, 0}, - {0, 0, 0, 0} -}; - -static struct PyGetSetDef __pyx_getsets_7aiohttp_8_helpers_reify[] = { - {(char *)"__doc__", __pyx_getprop_7aiohttp_8_helpers_5reify___doc__, 0, (char *)0, 0}, - {0, 0, 0, 0, 0} -}; - -static PyTypeObject __pyx_type_7aiohttp_8_helpers_reify = { - PyVarObject_HEAD_INIT(0, 0) - "aiohttp._helpers.reify", /*tp_name*/ - sizeof(struct __pyx_obj_7aiohttp_8_helpers_reify), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_7aiohttp_8_helpers_reify, /*tp_dealloc*/ - #if PY_VERSION_HEX < 0x030800b4 - 0, /*tp_print*/ - #endif - #if PY_VERSION_HEX >= 0x030800b4 - 0, /*tp_vectorcall_offset*/ - #endif - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #endif - #if PY_MAJOR_VERSION >= 3 - 0, /*tp_as_async*/ - #endif - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - "Use as a class method decorator. It operates almost exactly like\n the Python `@property` decorator, but it puts the result of the\n method it decorates into the instance dict after the first call,\n effectively replacing the function it decorates with an instance\n variable. It is, in Python parlance, a data descriptor.\n\n ", /*tp_doc*/ - __pyx_tp_traverse_7aiohttp_8_helpers_reify, /*tp_traverse*/ - __pyx_tp_clear_7aiohttp_8_helpers_reify, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - __pyx_methods_7aiohttp_8_helpers_reify, /*tp_methods*/ - 0, /*tp_members*/ - __pyx_getsets_7aiohttp_8_helpers_reify, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - __pyx_tp_descr_get_7aiohttp_8_helpers_reify, /*tp_descr_get*/ - __pyx_tp_descr_set_7aiohttp_8_helpers_reify, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - __pyx_pw_7aiohttp_8_helpers_5reify_1__init__, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_7aiohttp_8_helpers_reify, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - 0, /*tp_version_tag*/ - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif - #if PY_VERSION_HEX >= 0x030800b1 - 0, /*tp_vectorcall*/ - #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 - 0, /*tp_print*/ - #endif -}; - -static PyMethodDef __pyx_methods[] = { - {0, 0, 0, 0} -}; - -#if PY_MAJOR_VERSION >= 3 -#if CYTHON_PEP489_MULTI_PHASE_INIT -static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ -static int __pyx_pymod_exec__helpers(PyObject* module); /*proto*/ -static PyModuleDef_Slot __pyx_moduledef_slots[] = { - {Py_mod_create, (void*)__pyx_pymod_create}, - {Py_mod_exec, (void*)__pyx_pymod_exec__helpers}, - {0, NULL} -}; -#endif - -static struct PyModuleDef __pyx_moduledef = { - PyModuleDef_HEAD_INIT, - "_helpers", - 0, /* m_doc */ - #if CYTHON_PEP489_MULTI_PHASE_INIT - 0, /* m_size */ - #else - -1, /* m_size */ - #endif - __pyx_methods /* m_methods */, - #if CYTHON_PEP489_MULTI_PHASE_INIT - __pyx_moduledef_slots, /* m_slots */ - #else - NULL, /* m_reload */ - #endif - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL /* m_free */ -}; -#endif -#ifndef CYTHON_SMALL_CODE -#if defined(__clang__) - #define CYTHON_SMALL_CODE -#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) - #define CYTHON_SMALL_CODE __attribute__((cold)) -#else - #define CYTHON_SMALL_CODE -#endif -#endif - -static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_n_s_AttributeError, __pyx_k_AttributeError, sizeof(__pyx_k_AttributeError), 0, 0, 1, 1}, - {&__pyx_kp_s_Incompatible_checksums_s_vs_0x77, __pyx_k_Incompatible_checksums_s_vs_0x77, sizeof(__pyx_k_Incompatible_checksums_s_vs_0x77), 0, 0, 1, 0}, - {&__pyx_n_s_KeyError, __pyx_k_KeyError, sizeof(__pyx_k_KeyError), 0, 0, 1, 1}, - {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1}, - {&__pyx_n_s_aiohttp__helpers, __pyx_k_aiohttp__helpers, sizeof(__pyx_k_aiohttp__helpers), 0, 0, 1, 1}, - {&__pyx_n_s_cache, __pyx_k_cache, sizeof(__pyx_k_cache), 0, 0, 1, 1}, - {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, - {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, - {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1}, - {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1}, - {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, - {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, - {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, - {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1}, - {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_state, __pyx_k_pyx_state, sizeof(__pyx_k_pyx_state), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_type, __pyx_k_pyx_type, sizeof(__pyx_k_pyx_type), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_unpickle_reify, __pyx_k_pyx_unpickle_reify, sizeof(__pyx_k_pyx_unpickle_reify), 0, 0, 1, 1}, - {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1}, - {&__pyx_n_s_reduce_cython, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1}, - {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1}, - {&__pyx_kp_u_reified_property_is_read_only, __pyx_k_reified_property_is_read_only, sizeof(__pyx_k_reified_property_is_read_only), 0, 1, 0, 0}, - {&__pyx_n_s_reify, __pyx_k_reify, sizeof(__pyx_k_reify), 0, 0, 1, 1}, - {&__pyx_n_s_setstate, __pyx_k_setstate, sizeof(__pyx_k_setstate), 0, 0, 1, 1}, - {&__pyx_n_s_setstate_cython, __pyx_k_setstate_cython, sizeof(__pyx_k_setstate_cython), 0, 0, 1, 1}, - {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0}, - {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, - {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, - {&__pyx_n_s_wrapped, __pyx_k_wrapped, sizeof(__pyx_k_wrapped), 0, 0, 1, 1}, - {0, 0, 0, 0, 0, 0, 0} -}; -static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_KeyError = __Pyx_GetBuiltinName(__pyx_n_s_KeyError); if (!__pyx_builtin_KeyError) __PYX_ERR(0, 25, __pyx_L1_error) - __pyx_builtin_AttributeError = __Pyx_GetBuiltinName(__pyx_n_s_AttributeError); if (!__pyx_builtin_AttributeError) __PYX_ERR(0, 29, __pyx_L1_error) - return 0; - __pyx_L1_error:; - return -1; -} - -static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); - - /* "aiohttp/_helpers.pyx":35 - * - * def __set__(self, inst, value): - * raise AttributeError("reified property is read-only") # <<<<<<<<<<<<<< - */ - __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_u_reified_property_is_read_only); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 35, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple_); - __Pyx_GIVEREF(__pyx_tuple_); - - /* "(tree fragment)":1 - * def __pyx_unpickle_reify(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result - */ - __pyx_tuple__2 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__2); - __Pyx_GIVEREF(__pyx_tuple__2); - __pyx_codeobj__3 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__2, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_reify, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__3)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_RefNannyFinishContext(); - return -1; -} - -static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { - if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error); - __pyx_int_124832655 = PyInt_FromLong(124832655L); if (unlikely(!__pyx_int_124832655)) __PYX_ERR(0, 1, __pyx_L1_error) - return 0; - __pyx_L1_error:; - return -1; -} - -static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ - -static int __Pyx_modinit_global_init_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); - /*--- Global init code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_variable_export_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); - /*--- Variable export code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_function_export_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); - /*--- Function export code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_type_init_code(void) { - __Pyx_RefNannyDeclarations - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); - /*--- Type init code ---*/ - if (PyType_Ready(&__pyx_type_7aiohttp_8_helpers_reify) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type_7aiohttp_8_helpers_reify.tp_print = 0; - #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7aiohttp_8_helpers_reify.tp_dictoffset && __pyx_type_7aiohttp_8_helpers_reify.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type_7aiohttp_8_helpers_reify.tp_getattro = __Pyx_PyObject_GenericGetAttr; - } - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_reify, (PyObject *)&__pyx_type_7aiohttp_8_helpers_reify) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7aiohttp_8_helpers_reify) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_ptype_7aiohttp_8_helpers_reify = &__pyx_type_7aiohttp_8_helpers_reify; - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_RefNannyFinishContext(); - return -1; -} - -static int __Pyx_modinit_type_import_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); - /*--- Type import code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_variable_import_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); - /*--- Variable import code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_function_import_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); - /*--- Function import code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - - -#ifndef CYTHON_NO_PYINIT_EXPORT -#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC -#elif PY_MAJOR_VERSION < 3 -#ifdef __cplusplus -#define __Pyx_PyMODINIT_FUNC extern "C" void -#else -#define __Pyx_PyMODINIT_FUNC void -#endif -#else -#ifdef __cplusplus -#define __Pyx_PyMODINIT_FUNC extern "C" PyObject * -#else -#define __Pyx_PyMODINIT_FUNC PyObject * -#endif -#endif - - -#if PY_MAJOR_VERSION < 3 -__Pyx_PyMODINIT_FUNC init_helpers(void) CYTHON_SMALL_CODE; /*proto*/ -__Pyx_PyMODINIT_FUNC init_helpers(void) -#else -__Pyx_PyMODINIT_FUNC PyInit__helpers(void) CYTHON_SMALL_CODE; /*proto*/ -__Pyx_PyMODINIT_FUNC PyInit__helpers(void) -#if CYTHON_PEP489_MULTI_PHASE_INIT -{ - return PyModuleDef_Init(&__pyx_moduledef); -} -static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { - #if PY_VERSION_HEX >= 0x030700A1 - static PY_INT64_T main_interpreter_id = -1; - PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); - if (main_interpreter_id == -1) { - main_interpreter_id = current_id; - return (unlikely(current_id == -1)) ? -1 : 0; - } else if (unlikely(main_interpreter_id != current_id)) - #else - static PyInterpreterState *main_interpreter = NULL; - PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; - if (!main_interpreter) { - main_interpreter = current_interpreter; - } else if (unlikely(main_interpreter != current_interpreter)) - #endif - { - PyErr_SetString( - PyExc_ImportError, - "Interpreter change detected - this module can only be loaded into one interpreter per process."); - return -1; - } - return 0; -} -static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) { - PyObject *value = PyObject_GetAttrString(spec, from_name); - int result = 0; - if (likely(value)) { - if (allow_none || value != Py_None) { - result = PyDict_SetItemString(moddict, to_name, value); - } - Py_DECREF(value); - } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Clear(); - } else { - result = -1; - } - return result; -} -static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) { - PyObject *module = NULL, *moddict, *modname; - if (__Pyx_check_single_interpreter()) - return NULL; - if (__pyx_m) - return __Pyx_NewRef(__pyx_m); - modname = PyObject_GetAttrString(spec, "name"); - if (unlikely(!modname)) goto bad; - module = PyModule_NewObject(modname); - Py_DECREF(modname); - if (unlikely(!module)) goto bad; - moddict = PyModule_GetDict(module); - if (unlikely(!moddict)) goto bad; - if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; - if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; - if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; - if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; - return module; -bad: - Py_XDECREF(module); - return NULL; -} - - -static CYTHON_SMALL_CODE int __pyx_pymod_exec__helpers(PyObject *__pyx_pyinit_module) -#endif -#endif -{ - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannyDeclarations - #if CYTHON_PEP489_MULTI_PHASE_INIT - if (__pyx_m) { - if (__pyx_m == __pyx_pyinit_module) return 0; - PyErr_SetString(PyExc_RuntimeError, "Module '_helpers' has already been imported. Re-initialisation is not supported."); - return -1; - } - #elif PY_MAJOR_VERSION >= 3 - if (__pyx_m) return __Pyx_NewRef(__pyx_m); - #endif - #if CYTHON_REFNANNY -__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); -if (!__Pyx_RefNanny) { - PyErr_Clear(); - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); - if (!__Pyx_RefNanny) - Py_FatalError("failed to import 'refnanny' module"); -} -#endif - __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit__helpers(void)", 0); - if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #ifdef __Pxy_PyFrame_Initialize_Offsets - __Pxy_PyFrame_Initialize_Offsets(); - #endif - __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) - #ifdef __Pyx_CyFunction_USED - if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_FusedFunction_USED - if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_Coroutine_USED - if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_Generator_USED - if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_AsyncGen_USED - if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_StopAsyncIteration_USED - if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - /*--- Library function declarations ---*/ - /*--- Threads initialization code ---*/ - #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS - #ifdef WITH_THREAD /* Python build with threading support? */ - PyEval_InitThreads(); - #endif - #endif - /*--- Module creation code ---*/ - #if CYTHON_PEP489_MULTI_PHASE_INIT - __pyx_m = __pyx_pyinit_module; - Py_INCREF(__pyx_m); - #else - #if PY_MAJOR_VERSION < 3 - __pyx_m = Py_InitModule4("_helpers", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); - #else - __pyx_m = PyModule_Create(&__pyx_moduledef); - #endif - if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_d); - __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_b); - __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_cython_runtime); - if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error); - /*--- Initialize various global constants etc. ---*/ - if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) - if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - if (__pyx_module_is_main_aiohttp___helpers) { - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - } - #if PY_MAJOR_VERSION >= 3 - { - PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) - if (!PyDict_GetItemString(modules, "aiohttp._helpers")) { - if (unlikely(PyDict_SetItemString(modules, "aiohttp._helpers", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error) - } - } - #endif - /*--- Builtin init code ---*/ - if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - /*--- Constants init code ---*/ - if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - /*--- Global type/function init code ---*/ - (void)__Pyx_modinit_global_init_code(); - (void)__Pyx_modinit_variable_export_code(); - (void)__Pyx_modinit_function_export_code(); - if (unlikely(__Pyx_modinit_type_init_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error) - (void)__Pyx_modinit_type_import_code(); - (void)__Pyx_modinit_variable_import_code(); - (void)__Pyx_modinit_function_import_code(); - /*--- Execution code ---*/ - #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) - if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - - /* "(tree fragment)":1 - * def __pyx_unpickle_reify(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result - */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7aiohttp_8_helpers_1__pyx_unpickle_reify, NULL, __pyx_n_s_aiohttp__helpers); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_reify, __pyx_t_1) < 0) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_helpers.pyx":1 - * cdef class reify: # <<<<<<<<<<<<<< - * """Use as a class method decorator. It operates almost exactly like - * the Python `@property` decorator, but it puts the result of the - */ - __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /*--- Wrapped vars code ---*/ - - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - if (__pyx_m) { - if (__pyx_d) { - __Pyx_AddTraceback("init aiohttp._helpers", __pyx_clineno, __pyx_lineno, __pyx_filename); - } - Py_CLEAR(__pyx_m); - } else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_ImportError, "init aiohttp._helpers"); - } - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - #if CYTHON_PEP489_MULTI_PHASE_INIT - return (__pyx_m != NULL) ? 0 : -1; - #elif PY_MAJOR_VERSION >= 3 - return __pyx_m; - #else - return; - #endif -} - -/* --- Runtime support code --- */ -/* Refnanny */ -#if CYTHON_REFNANNY -static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { - PyObject *m = NULL, *p = NULL; - void *r = NULL; - m = PyImport_ImportModule(modname); - if (!m) goto end; - p = PyObject_GetAttrString(m, "RefNannyAPI"); - if (!p) goto end; - r = PyLong_AsVoidPtr(p); -end: - Py_XDECREF(p); - Py_XDECREF(m); - return (__Pyx_RefNannyAPIStruct *)r; -} -#endif - -/* PyObjectGetAttrStr */ -#if CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro)) - return tp->tp_getattro(obj, attr_name); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_getattr)) - return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); -#endif - return PyObject_GetAttr(obj, attr_name); -} -#endif - -/* GetBuiltinName */ -static PyObject *__Pyx_GetBuiltinName(PyObject *name) { - PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); - if (unlikely(!result)) { - PyErr_Format(PyExc_NameError, -#if PY_MAJOR_VERSION >= 3 - "name '%U' is not defined", name); -#else - "name '%.200s' is not defined", PyString_AS_STRING(name)); -#endif - } - return result; -} - -/* RaiseDoubleKeywords */ -static void __Pyx_RaiseDoubleKeywordsError( - const char* func_name, - PyObject* kw_name) -{ - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION >= 3 - "%s() got multiple values for keyword argument '%U'", func_name, kw_name); - #else - "%s() got multiple values for keyword argument '%s'", func_name, - PyString_AsString(kw_name)); - #endif -} - -/* ParseKeywords */ -static int __Pyx_ParseOptionalKeywords( - PyObject *kwds, - PyObject **argnames[], - PyObject *kwds2, - PyObject *values[], - Py_ssize_t num_pos_args, - const char* function_name) -{ - PyObject *key = 0, *value = 0; - Py_ssize_t pos = 0; - PyObject*** name; - PyObject*** first_kw_arg = argnames + num_pos_args; - while (PyDict_Next(kwds, &pos, &key, &value)) { - name = first_kw_arg; - while (*name && (**name != key)) name++; - if (*name) { - values[name-argnames] = value; - continue; - } - name = first_kw_arg; - #if PY_MAJOR_VERSION < 3 - if (likely(PyString_Check(key))) { - while (*name) { - if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) - && _PyString_Eq(**name, key)) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - if ((**argname == key) || ( - (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) - && _PyString_Eq(**argname, key))) { - goto arg_passed_twice; - } - argname++; - } - } - } else - #endif - if (likely(PyUnicode_Check(key))) { - while (*name) { - int cmp = (**name == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : - #endif - PyUnicode_Compare(**name, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - int cmp = (**argname == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : - #endif - PyUnicode_Compare(**argname, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) goto arg_passed_twice; - argname++; - } - } - } else - goto invalid_keyword_type; - if (kwds2) { - if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; - } else { - goto invalid_keyword; - } - } - return 0; -arg_passed_twice: - __Pyx_RaiseDoubleKeywordsError(function_name, key); - goto bad; -invalid_keyword_type: - PyErr_Format(PyExc_TypeError, - "%.200s() keywords must be strings", function_name); - goto bad; -invalid_keyword: - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION < 3 - "%.200s() got an unexpected keyword argument '%.200s'", - function_name, PyString_AsString(key)); - #else - "%s() got an unexpected keyword argument '%U'", - function_name, key); - #endif -bad: - return -1; -} - -/* RaiseArgTupleInvalid */ -static void __Pyx_RaiseArgtupleInvalid( - const char* func_name, - int exact, - Py_ssize_t num_min, - Py_ssize_t num_max, - Py_ssize_t num_found) -{ - Py_ssize_t num_expected; - const char *more_or_less; - if (num_found < num_min) { - num_expected = num_min; - more_or_less = "at least"; - } else { - num_expected = num_max; - more_or_less = "at most"; - } - if (exact) { - more_or_less = "exactly"; - } - PyErr_Format(PyExc_TypeError, - "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", - func_name, more_or_less, num_expected, - (num_expected == 1) ? "" : "s", num_found); -} - -/* GetItemInt */ -static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { - PyObject *r; - if (!j) return NULL; - r = PyObject_GetItem(o, j); - Py_DECREF(j); - return r; -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, - CYTHON_NCP_UNUSED int wraparound, - CYTHON_NCP_UNUSED int boundscheck) { -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - Py_ssize_t wrapped_i = i; - if (wraparound & unlikely(i < 0)) { - wrapped_i += PyList_GET_SIZE(o); - } - if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { - PyObject *r = PyList_GET_ITEM(o, wrapped_i); - Py_INCREF(r); - return r; - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -#else - return PySequence_GetItem(o, i); -#endif -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, - CYTHON_NCP_UNUSED int wraparound, - CYTHON_NCP_UNUSED int boundscheck) { -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - Py_ssize_t wrapped_i = i; - if (wraparound & unlikely(i < 0)) { - wrapped_i += PyTuple_GET_SIZE(o); - } - if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); - Py_INCREF(r); - return r; - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -#else - return PySequence_GetItem(o, i); -#endif -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, - CYTHON_NCP_UNUSED int wraparound, - CYTHON_NCP_UNUSED int boundscheck) { -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS - if (is_list || PyList_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); - if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { - PyObject *r = PyList_GET_ITEM(o, n); - Py_INCREF(r); - return r; - } - } - else if (PyTuple_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); - if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, n); - Py_INCREF(r); - return r; - } - } else { - PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; - if (likely(m && m->sq_item)) { - if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { - Py_ssize_t l = m->sq_length(o); - if (likely(l >= 0)) { - i += l; - } else { - if (!PyErr_ExceptionMatches(PyExc_OverflowError)) - return NULL; - PyErr_Clear(); - } - } - return m->sq_item(o, i); - } - } -#else - if (is_list || PySequence_Check(o)) { - return PySequence_GetItem(o, i); - } -#endif - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -} - -/* ObjectGetItem */ -#if CYTHON_USE_TYPE_SLOTS -static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject* index) { - PyObject *runerr; - Py_ssize_t key_value; - PySequenceMethods *m = Py_TYPE(obj)->tp_as_sequence; - if (unlikely(!(m && m->sq_item))) { - PyErr_Format(PyExc_TypeError, "'%.200s' object is not subscriptable", Py_TYPE(obj)->tp_name); - return NULL; - } - key_value = __Pyx_PyIndex_AsSsize_t(index); - if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) { - return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1); - } - if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) { - PyErr_Clear(); - PyErr_Format(PyExc_IndexError, "cannot fit '%.200s' into an index-sized integer", Py_TYPE(index)->tp_name); - } - return NULL; -} -static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key) { - PyMappingMethods *m = Py_TYPE(obj)->tp_as_mapping; - if (likely(m && m->mp_subscript)) { - return m->mp_subscript(obj, key); - } - return __Pyx_PyObject_GetIndex(obj, key); -} -#endif - -/* GetTopmostException */ -#if CYTHON_USE_EXC_INFO_STACK -static _PyErr_StackItem * -__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) -{ - _PyErr_StackItem *exc_info = tstate->exc_info; - while ((exc_info->exc_type == NULL || exc_info->exc_type == Py_None) && - exc_info->previous_item != NULL) - { - exc_info = exc_info->previous_item; - } - return exc_info; -} -#endif - -/* SaveResetException */ -#if CYTHON_FAST_THREAD_STATE -static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { - #if CYTHON_USE_EXC_INFO_STACK - _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); - *type = exc_info->exc_type; - *value = exc_info->exc_value; - *tb = exc_info->exc_traceback; - #else - *type = tstate->exc_type; - *value = tstate->exc_value; - *tb = tstate->exc_traceback; - #endif - Py_XINCREF(*type); - Py_XINCREF(*value); - Py_XINCREF(*tb); -} -static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - #if CYTHON_USE_EXC_INFO_STACK - _PyErr_StackItem *exc_info = tstate->exc_info; - tmp_type = exc_info->exc_type; - tmp_value = exc_info->exc_value; - tmp_tb = exc_info->exc_traceback; - exc_info->exc_type = type; - exc_info->exc_value = value; - exc_info->exc_traceback = tb; - #else - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = type; - tstate->exc_value = value; - tstate->exc_traceback = tb; - #endif - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -} -#endif - -/* PyErrExceptionMatches */ -#if CYTHON_FAST_THREAD_STATE -static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { - Py_ssize_t i, n; - n = PyTuple_GET_SIZE(tuple); -#if PY_MAJOR_VERSION >= 3 - for (i=0; icurexc_type; - if (exc_type == err) return 1; - if (unlikely(!exc_type)) return 0; - if (unlikely(PyTuple_Check(err))) - return __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); - return __Pyx_PyErr_GivenExceptionMatches(exc_type, err); -} -#endif - -/* GetException */ -#if CYTHON_FAST_THREAD_STATE -static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) -#else -static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) -#endif -{ - PyObject *local_type, *local_value, *local_tb; -#if CYTHON_FAST_THREAD_STATE - PyObject *tmp_type, *tmp_value, *tmp_tb; - local_type = tstate->curexc_type; - local_value = tstate->curexc_value; - local_tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -#else - PyErr_Fetch(&local_type, &local_value, &local_tb); -#endif - PyErr_NormalizeException(&local_type, &local_value, &local_tb); -#if CYTHON_FAST_THREAD_STATE - if (unlikely(tstate->curexc_type)) -#else - if (unlikely(PyErr_Occurred())) -#endif - goto bad; - #if PY_MAJOR_VERSION >= 3 - if (local_tb) { - if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) - goto bad; - } - #endif - Py_XINCREF(local_tb); - Py_XINCREF(local_type); - Py_XINCREF(local_value); - *type = local_type; - *value = local_value; - *tb = local_tb; -#if CYTHON_FAST_THREAD_STATE - #if CYTHON_USE_EXC_INFO_STACK - { - _PyErr_StackItem *exc_info = tstate->exc_info; - tmp_type = exc_info->exc_type; - tmp_value = exc_info->exc_value; - tmp_tb = exc_info->exc_traceback; - exc_info->exc_type = local_type; - exc_info->exc_value = local_value; - exc_info->exc_traceback = local_tb; - } - #else - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = local_type; - tstate->exc_value = local_value; - tstate->exc_traceback = local_tb; - #endif - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_SetExcInfo(local_type, local_value, local_tb); -#endif - return 0; -bad: - *type = 0; - *value = 0; - *tb = 0; - Py_XDECREF(local_type); - Py_XDECREF(local_value); - Py_XDECREF(local_tb); - return -1; -} - -/* PyCFunctionFastCall */ -#if CYTHON_FAST_PYCCALL -static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) { - PyCFunctionObject *func = (PyCFunctionObject*)func_obj; - PyCFunction meth = PyCFunction_GET_FUNCTION(func); - PyObject *self = PyCFunction_GET_SELF(func); - int flags = PyCFunction_GET_FLAGS(func); - assert(PyCFunction_Check(func)); - assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))); - assert(nargs >= 0); - assert(nargs == 0 || args != NULL); - /* _PyCFunction_FastCallDict() must not be called with an exception set, - because it may clear it (directly or indirectly) and so the - caller loses its exception */ - assert(!PyErr_Occurred()); - if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) { - return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL); - } else { - return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs); - } -} -#endif - -/* PyFunctionFastCall */ -#if CYTHON_FAST_PYCALL -static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, - PyObject *globals) { - PyFrameObject *f; - PyThreadState *tstate = __Pyx_PyThreadState_Current; - PyObject **fastlocals; - Py_ssize_t i; - PyObject *result; - assert(globals != NULL); - /* XXX Perhaps we should create a specialized - PyFrame_New() that doesn't take locals, but does - take builtins without sanity checking them. - */ - assert(tstate != NULL); - f = PyFrame_New(tstate, co, globals, NULL); - if (f == NULL) { - return NULL; - } - fastlocals = __Pyx_PyFrame_GetLocalsplus(f); - for (i = 0; i < na; i++) { - Py_INCREF(*args); - fastlocals[i] = *args++; - } - result = PyEval_EvalFrameEx(f,0); - ++tstate->recursion_depth; - Py_DECREF(f); - --tstate->recursion_depth; - return result; -} -#if 1 || PY_VERSION_HEX < 0x030600B1 -static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { - PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); - PyObject *globals = PyFunction_GET_GLOBALS(func); - PyObject *argdefs = PyFunction_GET_DEFAULTS(func); - PyObject *closure; -#if PY_MAJOR_VERSION >= 3 - PyObject *kwdefs; -#endif - PyObject *kwtuple, **k; - PyObject **d; - Py_ssize_t nd; - Py_ssize_t nk; - PyObject *result; - assert(kwargs == NULL || PyDict_Check(kwargs)); - nk = kwargs ? PyDict_Size(kwargs) : 0; - if (Py_EnterRecursiveCall((char*)" while calling a Python object")) { - return NULL; - } - if ( -#if PY_MAJOR_VERSION >= 3 - co->co_kwonlyargcount == 0 && -#endif - likely(kwargs == NULL || nk == 0) && - co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { - if (argdefs == NULL && co->co_argcount == nargs) { - result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); - goto done; - } - else if (nargs == 0 && argdefs != NULL - && co->co_argcount == Py_SIZE(argdefs)) { - /* function called with no arguments, but all parameters have - a default value: use default values as arguments .*/ - args = &PyTuple_GET_ITEM(argdefs, 0); - result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); - goto done; - } - } - if (kwargs != NULL) { - Py_ssize_t pos, i; - kwtuple = PyTuple_New(2 * nk); - if (kwtuple == NULL) { - result = NULL; - goto done; - } - k = &PyTuple_GET_ITEM(kwtuple, 0); - pos = i = 0; - while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { - Py_INCREF(k[i]); - Py_INCREF(k[i+1]); - i += 2; - } - nk = i / 2; - } - else { - kwtuple = NULL; - k = NULL; - } - closure = PyFunction_GET_CLOSURE(func); -#if PY_MAJOR_VERSION >= 3 - kwdefs = PyFunction_GET_KW_DEFAULTS(func); -#endif - if (argdefs != NULL) { - d = &PyTuple_GET_ITEM(argdefs, 0); - nd = Py_SIZE(argdefs); - } - else { - d = NULL; - nd = 0; - } -#if PY_MAJOR_VERSION >= 3 - result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, - args, (int)nargs, - k, (int)nk, - d, (int)nd, kwdefs, closure); -#else - result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, - args, (int)nargs, - k, (int)nk, - d, (int)nd, closure); -#endif - Py_XDECREF(kwtuple); -done: - Py_LeaveRecursiveCall(); - return result; -} -#endif -#endif - -/* PyObjectCall */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyObject *result; - ternaryfunc call = func->ob_type->tp_call; - if (unlikely(!call)) - return PyObject_Call(func, arg, kw); - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; - result = (*call)(func, arg, kw); - Py_LeaveRecursiveCall(); - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); - } - return result; -} -#endif - -/* PyObjectCall2Args */ -static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { - PyObject *args, *result = NULL; - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(function)) { - PyObject *args[2] = {arg1, arg2}; - return __Pyx_PyFunction_FastCall(function, args, 2); - } - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(function)) { - PyObject *args[2] = {arg1, arg2}; - return __Pyx_PyCFunction_FastCall(function, args, 2); - } - #endif - args = PyTuple_New(2); - if (unlikely(!args)) goto done; - Py_INCREF(arg1); - PyTuple_SET_ITEM(args, 0, arg1); - Py_INCREF(arg2); - PyTuple_SET_ITEM(args, 1, arg2); - Py_INCREF(function); - result = __Pyx_PyObject_Call(function, args, NULL); - Py_DECREF(args); - Py_DECREF(function); -done: - return result; -} - -/* PyObjectCallMethO */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { - PyObject *self, *result; - PyCFunction cfunc; - cfunc = PyCFunction_GET_FUNCTION(func); - self = PyCFunction_GET_SELF(func); - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; - result = cfunc(self, arg); - Py_LeaveRecursiveCall(); - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); - } - return result; -} -#endif - -/* PyObjectCallOneArg */ -#if CYTHON_COMPILING_IN_CPYTHON -static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) { - PyObject *result; - PyObject *args = PyTuple_New(1); - if (unlikely(!args)) return NULL; - Py_INCREF(arg); - PyTuple_SET_ITEM(args, 0, arg); - result = __Pyx_PyObject_Call(func, args, NULL); - Py_DECREF(args); - return result; -} -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { -#if CYTHON_FAST_PYCALL - if (PyFunction_Check(func)) { - return __Pyx_PyFunction_FastCall(func, &arg, 1); - } -#endif - if (likely(PyCFunction_Check(func))) { - if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) { - return __Pyx_PyObject_CallMethO(func, arg); -#if CYTHON_FAST_PYCCALL - } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) { - return __Pyx_PyCFunction_FastCall(func, &arg, 1); -#endif - } - } - return __Pyx__PyObject_CallOneArg(func, arg); -} -#else -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { - PyObject *result; - PyObject *args = PyTuple_Pack(1, arg); - if (unlikely(!args)) return NULL; - result = __Pyx_PyObject_Call(func, args, NULL); - Py_DECREF(args); - return result; -} -#endif - -/* PyErrFetchRestore */ -#if CYTHON_FAST_THREAD_STATE -static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - tmp_type = tstate->curexc_type; - tmp_value = tstate->curexc_value; - tmp_tb = tstate->curexc_traceback; - tstate->curexc_type = type; - tstate->curexc_value = value; - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -} -static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { - *type = tstate->curexc_type; - *value = tstate->curexc_value; - *tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -} -#endif - -/* RaiseException */ -#if PY_MAJOR_VERSION < 3 -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, - CYTHON_UNUSED PyObject *cause) { - __Pyx_PyThreadState_declare - Py_XINCREF(type); - if (!value || value == Py_None) - value = NULL; - else - Py_INCREF(value); - if (!tb || tb == Py_None) - tb = NULL; - else { - Py_INCREF(tb); - if (!PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto raise_error; - } - } - if (PyType_Check(type)) { -#if CYTHON_COMPILING_IN_PYPY - if (!value) { - Py_INCREF(Py_None); - value = Py_None; - } -#endif - PyErr_NormalizeException(&type, &value, &tb); - } else { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto raise_error; - } - value = type; - type = (PyObject*) Py_TYPE(type); - Py_INCREF(type); - if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto raise_error; - } - } - __Pyx_PyThreadState_assign - __Pyx_ErrRestore(type, value, tb); - return; -raise_error: - Py_XDECREF(value); - Py_XDECREF(type); - Py_XDECREF(tb); - return; -} -#else -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { - PyObject* owned_instance = NULL; - if (tb == Py_None) { - tb = 0; - } else if (tb && !PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto bad; - } - if (value == Py_None) - value = 0; - if (PyExceptionInstance_Check(type)) { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto bad; - } - value = type; - type = (PyObject*) Py_TYPE(value); - } else if (PyExceptionClass_Check(type)) { - PyObject *instance_class = NULL; - if (value && PyExceptionInstance_Check(value)) { - instance_class = (PyObject*) Py_TYPE(value); - if (instance_class != type) { - int is_subclass = PyObject_IsSubclass(instance_class, type); - if (!is_subclass) { - instance_class = NULL; - } else if (unlikely(is_subclass == -1)) { - goto bad; - } else { - type = instance_class; - } - } - } - if (!instance_class) { - PyObject *args; - if (!value) - args = PyTuple_New(0); - else if (PyTuple_Check(value)) { - Py_INCREF(value); - args = value; - } else - args = PyTuple_Pack(1, value); - if (!args) - goto bad; - owned_instance = PyObject_Call(type, args, NULL); - Py_DECREF(args); - if (!owned_instance) - goto bad; - value = owned_instance; - if (!PyExceptionInstance_Check(value)) { - PyErr_Format(PyExc_TypeError, - "calling %R should have returned an instance of " - "BaseException, not %R", - type, Py_TYPE(value)); - goto bad; - } - } - } else { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto bad; - } - if (cause) { - PyObject *fixed_cause; - if (cause == Py_None) { - fixed_cause = NULL; - } else if (PyExceptionClass_Check(cause)) { - fixed_cause = PyObject_CallObject(cause, NULL); - if (fixed_cause == NULL) - goto bad; - } else if (PyExceptionInstance_Check(cause)) { - fixed_cause = cause; - Py_INCREF(fixed_cause); - } else { - PyErr_SetString(PyExc_TypeError, - "exception causes must derive from " - "BaseException"); - goto bad; - } - PyException_SetCause(value, fixed_cause); - } - PyErr_SetObject(type, value); - if (tb) { -#if CYTHON_COMPILING_IN_PYPY - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); - Py_INCREF(tb); - PyErr_Restore(tmp_type, tmp_value, tb); - Py_XDECREF(tmp_tb); -#else - PyThreadState *tstate = __Pyx_PyThreadState_Current; - PyObject* tmp_tb = tstate->curexc_traceback; - if (tb != tmp_tb) { - Py_INCREF(tb); - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_tb); - } -#endif - } -bad: - Py_XDECREF(owned_instance); - return; -} -#endif - -/* GetAttr */ -static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) { -#if CYTHON_USE_TYPE_SLOTS -#if PY_MAJOR_VERSION >= 3 - if (likely(PyUnicode_Check(n))) -#else - if (likely(PyString_Check(n))) -#endif - return __Pyx_PyObject_GetAttrStr(o, n); -#endif - return PyObject_GetAttr(o, n); -} - -/* GetAttr3 */ -static PyObject *__Pyx_GetAttr3Default(PyObject *d) { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) - return NULL; - __Pyx_PyErr_Clear(); - Py_INCREF(d); - return d; -} -static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) { - PyObject *r = __Pyx_GetAttr(o, n); - return (likely(r)) ? r : __Pyx_GetAttr3Default(d); -} - -/* PyDictVersioning */ -#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { - PyObject *dict = Py_TYPE(obj)->tp_dict; - return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; -} -static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { - PyObject **dictptr = NULL; - Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; - if (offset) { -#if CYTHON_COMPILING_IN_CPYTHON - dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); -#else - dictptr = _PyObject_GetDictPtr(obj); -#endif - } - return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; -} -static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { - PyObject *dict = Py_TYPE(obj)->tp_dict; - if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) - return 0; - return obj_dict_version == __Pyx_get_object_dict_version(obj); -} -#endif - -/* GetModuleGlobalName */ -#if CYTHON_USE_DICT_VERSIONS -static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) -#else -static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) -#endif -{ - PyObject *result; -#if !CYTHON_AVOID_BORROWED_REFS -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 - result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); - __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) - if (likely(result)) { - return __Pyx_NewRef(result); - } else if (unlikely(PyErr_Occurred())) { - return NULL; - } -#else - result = PyDict_GetItem(__pyx_d, name); - __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) - if (likely(result)) { - return __Pyx_NewRef(result); - } -#endif -#else - result = PyObject_GetItem(__pyx_d, name); - __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) - if (likely(result)) { - return __Pyx_NewRef(result); - } - PyErr_Clear(); -#endif - return __Pyx_GetBuiltinName(name); -} - -/* Import */ -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { - PyObject *empty_list = 0; - PyObject *module = 0; - PyObject *global_dict = 0; - PyObject *empty_dict = 0; - PyObject *list; - #if PY_MAJOR_VERSION < 3 - PyObject *py_import; - py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); - if (!py_import) - goto bad; - #endif - if (from_list) - list = from_list; - else { - empty_list = PyList_New(0); - if (!empty_list) - goto bad; - list = empty_list; - } - global_dict = PyModule_GetDict(__pyx_m); - if (!global_dict) - goto bad; - empty_dict = PyDict_New(); - if (!empty_dict) - goto bad; - { - #if PY_MAJOR_VERSION >= 3 - if (level == -1) { - if ((1) && (strchr(__Pyx_MODULE_NAME, '.'))) { - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, 1); - if (!module) { - if (!PyErr_ExceptionMatches(PyExc_ImportError)) - goto bad; - PyErr_Clear(); - } - } - level = 0; - } - #endif - if (!module) { - #if PY_MAJOR_VERSION < 3 - PyObject *py_level = PyInt_FromLong(level); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, (PyObject *)NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, level); - #endif - } - } -bad: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(py_import); - #endif - Py_XDECREF(empty_list); - Py_XDECREF(empty_dict); - return module; -} - -/* ImportFrom */ -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { - PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); - if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Format(PyExc_ImportError, - #if PY_MAJOR_VERSION < 3 - "cannot import name %.230s", PyString_AS_STRING(name)); - #else - "cannot import name %S", name); - #endif - } - return value; -} - -/* HasAttr */ -static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) { - PyObject *r; - if (unlikely(!__Pyx_PyBaseString_Check(n))) { - PyErr_SetString(PyExc_TypeError, - "hasattr(): attribute name must be string"); - return -1; - } - r = __Pyx_GetAttr(o, n); - if (unlikely(!r)) { - PyErr_Clear(); - return 0; - } else { - Py_DECREF(r); - return 1; - } -} - -/* PyObject_GenericGetAttrNoDict */ -#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 -static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { - PyErr_Format(PyExc_AttributeError, -#if PY_MAJOR_VERSION >= 3 - "'%.50s' object has no attribute '%U'", - tp->tp_name, attr_name); -#else - "'%.50s' object has no attribute '%.400s'", - tp->tp_name, PyString_AS_STRING(attr_name)); -#endif - return NULL; -} -static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) { - PyObject *descr; - PyTypeObject *tp = Py_TYPE(obj); - if (unlikely(!PyString_Check(attr_name))) { - return PyObject_GenericGetAttr(obj, attr_name); - } - assert(!tp->tp_dictoffset); - descr = _PyType_Lookup(tp, attr_name); - if (unlikely(!descr)) { - return __Pyx_RaiseGenericGetAttributeError(tp, attr_name); - } - Py_INCREF(descr); - #if PY_MAJOR_VERSION < 3 - if (likely(PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS))) - #endif - { - descrgetfunc f = Py_TYPE(descr)->tp_descr_get; - if (unlikely(f)) { - PyObject *res = f(descr, obj, (PyObject *)tp); - Py_DECREF(descr); - return res; - } - } - return descr; -} -#endif - -/* PyObject_GenericGetAttr */ -#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 -static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name) { - if (unlikely(Py_TYPE(obj)->tp_dictoffset)) { - return PyObject_GenericGetAttr(obj, attr_name); - } - return __Pyx_PyObject_GenericGetAttrNoDict(obj, attr_name); -} -#endif - -/* PyObjectGetAttrStrNoError */ -static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) - __Pyx_PyErr_Clear(); -} -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { - PyObject *result; -#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { - return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); - } -#endif - result = __Pyx_PyObject_GetAttrStr(obj, attr_name); - if (unlikely(!result)) { - __Pyx_PyObject_GetAttrStr_ClearAttributeError(); - } - return result; -} - -/* SetupReduce */ -static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) { - int ret; - PyObject *name_attr; - name_attr = __Pyx_PyObject_GetAttrStr(meth, __pyx_n_s_name); - if (likely(name_attr)) { - ret = PyObject_RichCompareBool(name_attr, name, Py_EQ); - } else { - ret = -1; - } - if (unlikely(ret < 0)) { - PyErr_Clear(); - ret = 0; - } - Py_XDECREF(name_attr); - return ret; -} -static int __Pyx_setup_reduce(PyObject* type_obj) { - int ret = 0; - PyObject *object_reduce = NULL; - PyObject *object_reduce_ex = NULL; - PyObject *reduce = NULL; - PyObject *reduce_ex = NULL; - PyObject *reduce_cython = NULL; - PyObject *setstate = NULL; - PyObject *setstate_cython = NULL; -#if CYTHON_USE_PYTYPE_LOOKUP - if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD; -#else - if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD; -#endif -#if CYTHON_USE_PYTYPE_LOOKUP - object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; -#else - object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; -#endif - reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto __PYX_BAD; - if (reduce_ex == object_reduce_ex) { -#if CYTHON_USE_PYTYPE_LOOKUP - object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; -#else - object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; -#endif - reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto __PYX_BAD; - if (reduce == object_reduce || __Pyx_setup_reduce_is_named(reduce, __pyx_n_s_reduce_cython)) { - reduce_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_reduce_cython); - if (likely(reduce_cython)) { - ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD; - ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD; - } else if (reduce == object_reduce || PyErr_Occurred()) { - goto __PYX_BAD; - } - setstate = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate); - if (!setstate) PyErr_Clear(); - if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_n_s_setstate_cython)) { - setstate_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_setstate_cython); - if (likely(setstate_cython)) { - ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD; - ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD; - } else if (!setstate || PyErr_Occurred()) { - goto __PYX_BAD; - } - } - PyType_Modified((PyTypeObject*)type_obj); - } - } - goto __PYX_GOOD; -__PYX_BAD: - if (!PyErr_Occurred()) - PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name); - ret = -1; -__PYX_GOOD: -#if !CYTHON_USE_PYTYPE_LOOKUP - Py_XDECREF(object_reduce); - Py_XDECREF(object_reduce_ex); -#endif - Py_XDECREF(reduce); - Py_XDECREF(reduce_ex); - Py_XDECREF(reduce_cython); - Py_XDECREF(setstate); - Py_XDECREF(setstate_cython); - return ret; -} - -/* CLineInTraceback */ -#ifndef CYTHON_CLINE_IN_TRACEBACK -static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int c_line) { - PyObject *use_cline; - PyObject *ptype, *pvalue, *ptraceback; -#if CYTHON_COMPILING_IN_CPYTHON - PyObject **cython_runtime_dict; -#endif - if (unlikely(!__pyx_cython_runtime)) { - return c_line; - } - __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); -#if CYTHON_COMPILING_IN_CPYTHON - cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); - if (likely(cython_runtime_dict)) { - __PYX_PY_DICT_LOOKUP_IF_MODIFIED( - use_cline, *cython_runtime_dict, - __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) - } else -#endif - { - PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); - if (use_cline_obj) { - use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; - Py_DECREF(use_cline_obj); - } else { - PyErr_Clear(); - use_cline = NULL; - } - } - if (!use_cline) { - c_line = 0; - PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); - } - else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { - c_line = 0; - } - __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); - return c_line; -} -#endif - -/* CodeObjectCache */ -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { - int start = 0, mid = 0, end = count - 1; - if (end >= 0 && code_line > entries[end].code_line) { - return count; - } - while (start < end) { - mid = start + (end - start) / 2; - if (code_line < entries[mid].code_line) { - end = mid; - } else if (code_line > entries[mid].code_line) { - start = mid + 1; - } else { - return mid; - } - } - if (code_line <= entries[mid].code_line) { - return mid; - } else { - return mid + 1; - } -} -static PyCodeObject *__pyx_find_code_object(int code_line) { - PyCodeObject* code_object; - int pos; - if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { - return NULL; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { - return NULL; - } - code_object = __pyx_code_cache.entries[pos].code_object; - Py_INCREF(code_object); - return code_object; -} -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { - int pos, i; - __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; - if (unlikely(!code_line)) { - return; - } - if (unlikely(!entries)) { - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); - if (likely(entries)) { - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = 64; - __pyx_code_cache.count = 1; - entries[0].code_line = code_line; - entries[0].code_object = code_object; - Py_INCREF(code_object); - } - return; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { - PyCodeObject* tmp = entries[pos].code_object; - entries[pos].code_object = code_object; - Py_DECREF(tmp); - return; - } - if (__pyx_code_cache.count == __pyx_code_cache.max_count) { - int new_max = __pyx_code_cache.max_count + 64; - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( - __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry)); - if (unlikely(!entries)) { - return; - } - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = new_max; - } - for (i=__pyx_code_cache.count; i>pos; i--) { - entries[i] = entries[i-1]; - } - entries[pos].code_line = code_line; - entries[pos].code_object = code_object; - __pyx_code_cache.count++; - Py_INCREF(code_object); -} - -/* AddTraceback */ -#include "compile.h" -#include "frameobject.h" -#include "traceback.h" -static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( - const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; - #if PY_MAJOR_VERSION < 3 - py_srcfile = PyString_FromString(filename); - #else - py_srcfile = PyUnicode_FromString(filename); - #endif - if (!py_srcfile) goto bad; - if (c_line) { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #else - py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #endif - } - else { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromString(funcname); - #else - py_funcname = PyUnicode_FromString(funcname); - #endif - } - if (!py_funcname) goto bad; - py_code = __Pyx_PyCode_New( - 0, - 0, - 0, - 0, - 0, - __pyx_empty_bytes, /*PyObject *code,*/ - __pyx_empty_tuple, /*PyObject *consts,*/ - __pyx_empty_tuple, /*PyObject *names,*/ - __pyx_empty_tuple, /*PyObject *varnames,*/ - __pyx_empty_tuple, /*PyObject *freevars,*/ - __pyx_empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - py_line, - __pyx_empty_bytes /*PyObject *lnotab*/ - ); - Py_DECREF(py_srcfile); - Py_DECREF(py_funcname); - return py_code; -bad: - Py_XDECREF(py_srcfile); - Py_XDECREF(py_funcname); - return NULL; -} -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyFrameObject *py_frame = 0; - PyThreadState *tstate = __Pyx_PyThreadState_Current; - if (c_line) { - c_line = __Pyx_CLineForTraceback(tstate, c_line); - } - py_code = __pyx_find_code_object(c_line ? -c_line : py_line); - if (!py_code) { - py_code = __Pyx_CreateCodeObjectForTraceback( - funcname, c_line, py_line, filename); - if (!py_code) goto bad; - __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); - } - py_frame = PyFrame_New( - tstate, /*PyThreadState *tstate,*/ - py_code, /*PyCodeObject *code,*/ - __pyx_d, /*PyObject *globals,*/ - 0 /*PyObject *locals*/ - ); - if (!py_frame) goto bad; - __Pyx_PyFrame_SetLineNumber(py_frame, py_line); - PyTraceBack_Here(py_frame); -bad: - Py_XDECREF(py_code); - Py_XDECREF(py_frame); -} - -/* CIntFromPyVerify */ -#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ - __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) -#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ - __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) -#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ - {\ - func_type value = func_value;\ - if (sizeof(target_type) < sizeof(func_type)) {\ - if (unlikely(value != (func_type) (target_type) value)) {\ - func_type zero = 0;\ - if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ - return (target_type) -1;\ - if (is_unsigned && unlikely(value < zero))\ - goto raise_neg_overflow;\ - else\ - goto raise_overflow;\ - }\ - }\ - return (target_type) value;\ - } - -/* CIntToPy */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { - const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(long) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { - return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); -#endif - } - } else { - if (sizeof(long) <= sizeof(long)) { - return PyInt_FromLong((long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { - return PyLong_FromLongLong((PY_LONG_LONG) value); -#endif - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(long), - little, !is_unsigned); - } -} - -/* CIntFromPy */ -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { - const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(long) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - goto raise_neg_overflow; - } - return (long) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (long) 0; - case 1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0]) - case 2: - if (8 * sizeof(long) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) { - return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); - } - } - break; - case 3: - if (8 * sizeof(long) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) { - return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); - } - } - break; - case 4: - if (8 * sizeof(long) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) { - return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); - } - } - break; - } -#endif -#if CYTHON_COMPILING_IN_CPYTHON - if (unlikely(Py_SIZE(x) < 0)) { - goto raise_neg_overflow; - } -#else - { - int result = PyObject_RichCompareBool(x, Py_False, Py_LT); - if (unlikely(result < 0)) - return (long) -1; - if (unlikely(result == 1)) - goto raise_neg_overflow; - } -#endif - if (sizeof(long) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) -#endif - } - } else { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (long) 0; - case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0])) - case 1: __PYX_VERIFY_RETURN_INT(long, digit, +digits[0]) - case -2: - if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case 2: - if (8 * sizeof(long) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case -3: - if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case 3: - if (8 * sizeof(long) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case -4: - if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case 4: - if (8 * sizeof(long) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - } -#endif - if (sizeof(long) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) -#endif - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - long val; - PyObject *v = __Pyx_PyNumber_IntOrLong(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (long) -1; - } - } else { - long val; - PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (long) -1; - val = __Pyx_PyInt_As_long(tmp); - Py_DECREF(tmp); - return val; - } -raise_overflow: - PyErr_SetString(PyExc_OverflowError, - "value too large to convert to long"); - return (long) -1; -raise_neg_overflow: - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; -} - -/* CIntFromPy */ -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { - const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(int) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - goto raise_neg_overflow; - } - return (int) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (int) 0; - case 1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0]) - case 2: - if (8 * sizeof(int) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) { - return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); - } - } - break; - case 3: - if (8 * sizeof(int) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) { - return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); - } - } - break; - case 4: - if (8 * sizeof(int) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) { - return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); - } - } - break; - } -#endif -#if CYTHON_COMPILING_IN_CPYTHON - if (unlikely(Py_SIZE(x) < 0)) { - goto raise_neg_overflow; - } -#else - { - int result = PyObject_RichCompareBool(x, Py_False, Py_LT); - if (unlikely(result < 0)) - return (int) -1; - if (unlikely(result == 1)) - goto raise_neg_overflow; - } -#endif - if (sizeof(int) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) -#endif - } - } else { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (int) 0; - case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0])) - case 1: __PYX_VERIFY_RETURN_INT(int, digit, +digits[0]) - case -2: - if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case 2: - if (8 * sizeof(int) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case -3: - if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case 3: - if (8 * sizeof(int) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case -4: - if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case 4: - if (8 * sizeof(int) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { - return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - } -#endif - if (sizeof(int) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) -#endif - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - int val; - PyObject *v = __Pyx_PyNumber_IntOrLong(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (int) -1; - } - } else { - int val; - PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (int) -1; - val = __Pyx_PyInt_As_int(tmp); - Py_DECREF(tmp); - return val; - } -raise_overflow: - PyErr_SetString(PyExc_OverflowError, - "value too large to convert to int"); - return (int) -1; -raise_neg_overflow: - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; -} - -/* FastTypeChecks */ -#if CYTHON_COMPILING_IN_CPYTHON -static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { - while (a) { - a = a->tp_base; - if (a == b) - return 1; - } - return b == &PyBaseObject_Type; -} -static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { - PyObject *mro; - if (a == b) return 1; - mro = a->tp_mro; - if (likely(mro)) { - Py_ssize_t i, n; - n = PyTuple_GET_SIZE(mro); - for (i = 0; i < n; i++) { - if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) - return 1; - } - return 0; - } - return __Pyx_InBases(a, b); -} -#if PY_MAJOR_VERSION == 2 -static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { - PyObject *exception, *value, *tb; - int res; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&exception, &value, &tb); - res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; - if (unlikely(res == -1)) { - PyErr_WriteUnraisable(err); - res = 0; - } - if (!res) { - res = PyObject_IsSubclass(err, exc_type2); - if (unlikely(res == -1)) { - PyErr_WriteUnraisable(err); - res = 0; - } - } - __Pyx_ErrRestore(exception, value, tb); - return res; -} -#else -static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { - int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; - if (!res) { - res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); - } - return res; -} -#endif -static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { - Py_ssize_t i, n; - assert(PyExceptionClass_Check(exc_type)); - n = PyTuple_GET_SIZE(tuple); -#if PY_MAJOR_VERSION >= 3 - for (i=0; ip) { - #if PY_MAJOR_VERSION < 3 - if (t->is_unicode) { - *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); - } else if (t->intern) { - *t->p = PyString_InternFromString(t->s); - } else { - *t->p = PyString_FromStringAndSize(t->s, t->n - 1); - } - #else - if (t->is_unicode | t->is_str) { - if (t->intern) { - *t->p = PyUnicode_InternFromString(t->s); - } else if (t->encoding) { - *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); - } else { - *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); - } - } else { - *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); - } - #endif - if (!*t->p) - return -1; - if (PyObject_Hash(*t->p) == -1) - return -1; - ++t; - } - return 0; -} - -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { - return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); -} -static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { - Py_ssize_t ignore; - return __Pyx_PyObject_AsStringAndSize(o, &ignore); -} -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT -#if !CYTHON_PEP393_ENABLED -static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { - char* defenc_c; - PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); - if (!defenc) return NULL; - defenc_c = PyBytes_AS_STRING(defenc); -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - { - char* end = defenc_c + PyBytes_GET_SIZE(defenc); - char* c; - for (c = defenc_c; c < end; c++) { - if ((unsigned char) (*c) >= 128) { - PyUnicode_AsASCIIString(o); - return NULL; - } - } - } -#endif - *length = PyBytes_GET_SIZE(defenc); - return defenc_c; -} -#else -static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { - if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - if (likely(PyUnicode_IS_ASCII(o))) { - *length = PyUnicode_GET_LENGTH(o); - return PyUnicode_AsUTF8(o); - } else { - PyUnicode_AsASCIIString(o); - return NULL; - } -#else - return PyUnicode_AsUTF8AndSize(o, length); -#endif -} -#endif -#endif -static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT - if ( -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - __Pyx_sys_getdefaultencoding_not_ascii && -#endif - PyUnicode_Check(o)) { - return __Pyx_PyUnicode_AsStringAndSize(o, length); - } else -#endif -#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) - if (PyByteArray_Check(o)) { - *length = PyByteArray_GET_SIZE(o); - return PyByteArray_AS_STRING(o); - } else -#endif - { - char* result; - int r = PyBytes_AsStringAndSize(o, &result, length); - if (unlikely(r < 0)) { - return NULL; - } else { - return result; - } - } -} -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { - int is_true = x == Py_True; - if (is_true | (x == Py_False) | (x == Py_None)) return is_true; - else return PyObject_IsTrue(x); -} -static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { - int retval; - if (unlikely(!x)) return -1; - retval = __Pyx_PyObject_IsTrue(x); - Py_DECREF(x); - return retval; -} -static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { -#if PY_MAJOR_VERSION >= 3 - if (PyLong_Check(result)) { - if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, - "__int__ returned non-int (type %.200s). " - "The ability to return an instance of a strict subclass of int " - "is deprecated, and may be removed in a future version of Python.", - Py_TYPE(result)->tp_name)) { - Py_DECREF(result); - return NULL; - } - return result; - } -#endif - PyErr_Format(PyExc_TypeError, - "__%.4s__ returned non-%.4s (type %.200s)", - type_name, type_name, Py_TYPE(result)->tp_name); - Py_DECREF(result); - return NULL; -} -static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { -#if CYTHON_USE_TYPE_SLOTS - PyNumberMethods *m; -#endif - const char *name = NULL; - PyObject *res = NULL; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x) || PyLong_Check(x))) -#else - if (likely(PyLong_Check(x))) -#endif - return __Pyx_NewRef(x); -#if CYTHON_USE_TYPE_SLOTS - m = Py_TYPE(x)->tp_as_number; - #if PY_MAJOR_VERSION < 3 - if (m && m->nb_int) { - name = "int"; - res = m->nb_int(x); - } - else if (m && m->nb_long) { - name = "long"; - res = m->nb_long(x); - } - #else - if (likely(m && m->nb_int)) { - name = "int"; - res = m->nb_int(x); - } - #endif -#else - if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { - res = PyNumber_Int(x); - } -#endif - if (likely(res)) { -#if PY_MAJOR_VERSION < 3 - if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { -#else - if (unlikely(!PyLong_CheckExact(res))) { -#endif - return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); - } - } - else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_TypeError, - "an integer is required"); - } - return res; -} -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { - Py_ssize_t ival; - PyObject *x; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(b))) { - if (sizeof(Py_ssize_t) >= sizeof(long)) - return PyInt_AS_LONG(b); - else - return PyInt_AsSsize_t(b); - } -#endif - if (likely(PyLong_CheckExact(b))) { - #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)b)->ob_digit; - const Py_ssize_t size = Py_SIZE(b); - if (likely(__Pyx_sst_abs(size) <= 1)) { - ival = likely(size) ? digits[0] : 0; - if (size == -1) ival = -ival; - return ival; - } else { - switch (size) { - case 2: - if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { - return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case -2: - if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { - return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case 3: - if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { - return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case -3: - if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { - return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case 4: - if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { - return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case -4: - if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { - return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - } - } - #endif - return PyLong_AsSsize_t(b); - } - x = PyNumber_Index(b); - if (!x) return -1; - ival = PyInt_AsSsize_t(x); - Py_DECREF(x); - return ival; -} -static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { - return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); -} -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { - return PyInt_FromSize_t(ival); -} - - -#endif /* Py_PYTHON_H */ diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_helpers.cp39-win_amd64.pyd b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_helpers.cp39-win_amd64.pyd deleted file mode 100644 index 46b55ca1474626b901f151fac0406b3e007e07e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48128 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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_helpers.pyi b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_helpers.pyi deleted file mode 100644 index 1e358937..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_helpers.pyi +++ /dev/null @@ -1,6 +0,0 @@ -from typing import Any - -class reify: - def __init__(self, wrapped: Any) -> None: ... - def __get__(self, inst: Any, owner: Any) -> Any: ... - def __set__(self, inst: Any, value: Any) -> None: ... diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_helpers.pyx b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_helpers.pyx deleted file mode 100644 index 665f367c..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_helpers.pyx +++ /dev/null @@ -1,35 +0,0 @@ -cdef class reify: - """Use as a class method decorator. It operates almost exactly like - the Python `@property` decorator, but it puts the result of the - method it decorates into the instance dict after the first call, - effectively replacing the function it decorates with an instance - variable. It is, in Python parlance, a data descriptor. - - """ - - cdef object wrapped - cdef object name - - def __init__(self, wrapped): - self.wrapped = wrapped - self.name = wrapped.__name__ - - @property - def __doc__(self): - return self.wrapped.__doc__ - - def __get__(self, inst, owner): - try: - try: - return inst._cache[self.name] - except KeyError: - val = self.wrapped(inst) - inst._cache[self.name] = val - return val - except AttributeError: - if inst is None: - return self - raise - - def __set__(self, inst, value): - raise AttributeError("reified property is read-only") diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_http_parser.c b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_http_parser.c deleted file mode 100644 index 9920ca9f..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_http_parser.c +++ /dev/null @@ -1,24607 +0,0 @@ -/* Generated by Cython 0.29.21 */ - -#define PY_SSIZE_T_CLEAN -#include "Python.h" -#ifndef Py_PYTHON_H - #error Python headers needed to compile C extensions, please install development version of Python. -#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) - #error Cython requires Python 2.6+ or Python 3.3+. -#else -#define CYTHON_ABI "0_29_21" -#define CYTHON_HEX_VERSION 0x001D15F0 -#define CYTHON_FUTURE_DIVISION 1 -#include -#ifndef offsetof - #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) -#endif -#if !defined(WIN32) && !defined(MS_WINDOWS) - #ifndef __stdcall - #define __stdcall - #endif - #ifndef __cdecl - #define __cdecl - #endif - #ifndef __fastcall - #define __fastcall - #endif -#endif -#ifndef DL_IMPORT - #define DL_IMPORT(t) t -#endif -#ifndef DL_EXPORT - #define DL_EXPORT(t) t -#endif -#define __PYX_COMMA , -#ifndef HAVE_LONG_LONG - #if PY_VERSION_HEX >= 0x02070000 - #define HAVE_LONG_LONG - #endif -#endif -#ifndef PY_LONG_LONG - #define PY_LONG_LONG LONG_LONG -#endif -#ifndef Py_HUGE_VAL - #define Py_HUGE_VAL HUGE_VAL -#endif -#ifdef PYPY_VERSION - #define CYTHON_COMPILING_IN_PYPY 1 - #define CYTHON_COMPILING_IN_PYSTON 0 - #define CYTHON_COMPILING_IN_CPYTHON 0 - #undef CYTHON_USE_TYPE_SLOTS - #define CYTHON_USE_TYPE_SLOTS 0 - #undef CYTHON_USE_PYTYPE_LOOKUP - #define CYTHON_USE_PYTYPE_LOOKUP 0 - #if PY_VERSION_HEX < 0x03050000 - #undef CYTHON_USE_ASYNC_SLOTS - #define CYTHON_USE_ASYNC_SLOTS 0 - #elif !defined(CYTHON_USE_ASYNC_SLOTS) - #define CYTHON_USE_ASYNC_SLOTS 1 - #endif - #undef CYTHON_USE_PYLIST_INTERNALS - #define CYTHON_USE_PYLIST_INTERNALS 0 - #undef CYTHON_USE_UNICODE_INTERNALS - #define CYTHON_USE_UNICODE_INTERNALS 0 - #undef CYTHON_USE_UNICODE_WRITER - #define CYTHON_USE_UNICODE_WRITER 0 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 - #undef CYTHON_AVOID_BORROWED_REFS - #define CYTHON_AVOID_BORROWED_REFS 1 - #undef CYTHON_ASSUME_SAFE_MACROS - #define CYTHON_ASSUME_SAFE_MACROS 0 - #undef CYTHON_UNPACK_METHODS - #define CYTHON_UNPACK_METHODS 0 - #undef CYTHON_FAST_THREAD_STATE - #define CYTHON_FAST_THREAD_STATE 0 - #undef CYTHON_FAST_PYCALL - #define CYTHON_FAST_PYCALL 0 - #undef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT 0 - #undef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE 0 - #undef CYTHON_USE_DICT_VERSIONS - #define CYTHON_USE_DICT_VERSIONS 0 - #undef CYTHON_USE_EXC_INFO_STACK - #define CYTHON_USE_EXC_INFO_STACK 0 -#elif defined(PYSTON_VERSION) - #define CYTHON_COMPILING_IN_PYPY 0 - #define CYTHON_COMPILING_IN_PYSTON 1 - #define CYTHON_COMPILING_IN_CPYTHON 0 - #ifndef CYTHON_USE_TYPE_SLOTS - #define CYTHON_USE_TYPE_SLOTS 1 - #endif - #undef CYTHON_USE_PYTYPE_LOOKUP - #define CYTHON_USE_PYTYPE_LOOKUP 0 - #undef CYTHON_USE_ASYNC_SLOTS - #define CYTHON_USE_ASYNC_SLOTS 0 - #undef CYTHON_USE_PYLIST_INTERNALS - #define CYTHON_USE_PYLIST_INTERNALS 0 - #ifndef CYTHON_USE_UNICODE_INTERNALS - #define CYTHON_USE_UNICODE_INTERNALS 1 - #endif - #undef CYTHON_USE_UNICODE_WRITER - #define CYTHON_USE_UNICODE_WRITER 0 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 - #ifndef CYTHON_AVOID_BORROWED_REFS - #define CYTHON_AVOID_BORROWED_REFS 0 - #endif - #ifndef CYTHON_ASSUME_SAFE_MACROS - #define CYTHON_ASSUME_SAFE_MACROS 1 - #endif - #ifndef CYTHON_UNPACK_METHODS - #define CYTHON_UNPACK_METHODS 1 - #endif - #undef CYTHON_FAST_THREAD_STATE - #define CYTHON_FAST_THREAD_STATE 0 - #undef CYTHON_FAST_PYCALL - #define CYTHON_FAST_PYCALL 0 - #undef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT 0 - #undef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE 0 - #undef CYTHON_USE_DICT_VERSIONS - #define CYTHON_USE_DICT_VERSIONS 0 - #undef CYTHON_USE_EXC_INFO_STACK - #define CYTHON_USE_EXC_INFO_STACK 0 -#else - #define CYTHON_COMPILING_IN_PYPY 0 - #define CYTHON_COMPILING_IN_PYSTON 0 - #define CYTHON_COMPILING_IN_CPYTHON 1 - #ifndef CYTHON_USE_TYPE_SLOTS - #define CYTHON_USE_TYPE_SLOTS 1 - #endif - #if PY_VERSION_HEX < 0x02070000 - #undef CYTHON_USE_PYTYPE_LOOKUP - #define CYTHON_USE_PYTYPE_LOOKUP 0 - #elif !defined(CYTHON_USE_PYTYPE_LOOKUP) - #define CYTHON_USE_PYTYPE_LOOKUP 1 - #endif - #if PY_MAJOR_VERSION < 3 - #undef CYTHON_USE_ASYNC_SLOTS - #define CYTHON_USE_ASYNC_SLOTS 0 - #elif !defined(CYTHON_USE_ASYNC_SLOTS) - #define CYTHON_USE_ASYNC_SLOTS 1 - #endif - #if PY_VERSION_HEX < 0x02070000 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 - #elif !defined(CYTHON_USE_PYLONG_INTERNALS) - #define CYTHON_USE_PYLONG_INTERNALS 1 - #endif - #ifndef CYTHON_USE_PYLIST_INTERNALS - #define CYTHON_USE_PYLIST_INTERNALS 1 - #endif - #ifndef CYTHON_USE_UNICODE_INTERNALS - #define CYTHON_USE_UNICODE_INTERNALS 1 - #endif - #if PY_VERSION_HEX < 0x030300F0 - #undef CYTHON_USE_UNICODE_WRITER - #define CYTHON_USE_UNICODE_WRITER 0 - #elif !defined(CYTHON_USE_UNICODE_WRITER) - #define CYTHON_USE_UNICODE_WRITER 1 - #endif - #ifndef CYTHON_AVOID_BORROWED_REFS - #define CYTHON_AVOID_BORROWED_REFS 0 - #endif - #ifndef CYTHON_ASSUME_SAFE_MACROS - #define CYTHON_ASSUME_SAFE_MACROS 1 - #endif - #ifndef CYTHON_UNPACK_METHODS - #define CYTHON_UNPACK_METHODS 1 - #endif - #ifndef CYTHON_FAST_THREAD_STATE - #define CYTHON_FAST_THREAD_STATE 1 - #endif - #ifndef CYTHON_FAST_PYCALL - #define CYTHON_FAST_PYCALL 1 - #endif - #ifndef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) - #endif - #ifndef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1) - #endif - #ifndef CYTHON_USE_DICT_VERSIONS - #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1) - #endif - #ifndef CYTHON_USE_EXC_INFO_STACK - #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) - #endif -#endif -#if !defined(CYTHON_FAST_PYCCALL) -#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) -#endif -#if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #undef SHIFT - #undef BASE - #undef MASK - #ifdef SIZEOF_VOID_P - enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; - #endif -#endif -#ifndef __has_attribute - #define __has_attribute(x) 0 -#endif -#ifndef __has_cpp_attribute - #define __has_cpp_attribute(x) 0 -#endif -#ifndef CYTHON_RESTRICT - #if defined(__GNUC__) - #define CYTHON_RESTRICT __restrict__ - #elif defined(_MSC_VER) && _MSC_VER >= 1400 - #define CYTHON_RESTRICT __restrict - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_RESTRICT restrict - #else - #define CYTHON_RESTRICT - #endif -#endif -#ifndef CYTHON_UNUSED -# if defined(__GNUC__) -# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -#endif -#ifndef CYTHON_MAYBE_UNUSED_VAR -# if defined(__cplusplus) - template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { } -# else -# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x) -# endif -#endif -#ifndef CYTHON_NCP_UNUSED -# if CYTHON_COMPILING_IN_CPYTHON -# define CYTHON_NCP_UNUSED -# else -# define CYTHON_NCP_UNUSED CYTHON_UNUSED -# endif -#endif -#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) -#ifdef _MSC_VER - #ifndef _MSC_STDINT_H_ - #if _MSC_VER < 1300 - typedef unsigned char uint8_t; - typedef unsigned int uint32_t; - #else - typedef unsigned __int8 uint8_t; - typedef unsigned __int32 uint32_t; - #endif - #endif -#else - #include -#endif -#ifndef CYTHON_FALLTHROUGH - #if defined(__cplusplus) && __cplusplus >= 201103L - #if __has_cpp_attribute(fallthrough) - #define CYTHON_FALLTHROUGH [[fallthrough]] - #elif __has_cpp_attribute(clang::fallthrough) - #define CYTHON_FALLTHROUGH [[clang::fallthrough]] - #elif __has_cpp_attribute(gnu::fallthrough) - #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] - #endif - #endif - #ifndef CYTHON_FALLTHROUGH - #if __has_attribute(fallthrough) - #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) - #else - #define CYTHON_FALLTHROUGH - #endif - #endif - #if defined(__clang__ ) && defined(__apple_build_version__) - #if __apple_build_version__ < 7000000 - #undef CYTHON_FALLTHROUGH - #define CYTHON_FALLTHROUGH - #endif - #endif -#endif - -#ifndef CYTHON_INLINE - #if defined(__clang__) - #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) - #elif defined(__GNUC__) - #define CYTHON_INLINE __inline__ - #elif defined(_MSC_VER) - #define CYTHON_INLINE __inline - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_INLINE inline - #else - #define CYTHON_INLINE - #endif -#endif - -#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) - #define Py_OptimizeFlag 0 -#endif -#define __PYX_BUILD_PY_SSIZE_T "n" -#define CYTHON_FORMAT_SSIZE_T "z" -#if PY_MAJOR_VERSION < 3 - #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyClass_Type -#else - #define __Pyx_BUILTIN_MODULE_NAME "builtins" -#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2 - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) -#else - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) -#endif - #define __Pyx_DefaultClassType PyType_Type -#endif -#ifndef Py_TPFLAGS_CHECKTYPES - #define Py_TPFLAGS_CHECKTYPES 0 -#endif -#ifndef Py_TPFLAGS_HAVE_INDEX - #define Py_TPFLAGS_HAVE_INDEX 0 -#endif -#ifndef Py_TPFLAGS_HAVE_NEWBUFFER - #define Py_TPFLAGS_HAVE_NEWBUFFER 0 -#endif -#ifndef Py_TPFLAGS_HAVE_FINALIZE - #define Py_TPFLAGS_HAVE_FINALIZE 0 -#endif -#ifndef METH_STACKLESS - #define METH_STACKLESS 0 -#endif -#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) - #ifndef METH_FASTCALL - #define METH_FASTCALL 0x80 - #endif - typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); - typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, - Py_ssize_t nargs, PyObject *kwnames); -#else - #define __Pyx_PyCFunctionFast _PyCFunctionFast - #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords -#endif -#if CYTHON_FAST_PYCCALL -#define __Pyx_PyFastCFunction_Check(func)\ - ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))))) -#else -#define __Pyx_PyFastCFunction_Check(func) 0 -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) - #define PyObject_Malloc(s) PyMem_Malloc(s) - #define PyObject_Free(p) PyMem_Free(p) - #define PyObject_Realloc(p) PyMem_Realloc(p) -#endif -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1 - #define PyMem_RawMalloc(n) PyMem_Malloc(n) - #define PyMem_RawRealloc(p, n) PyMem_Realloc(p, n) - #define PyMem_RawFree(p) PyMem_Free(p) -#endif -#if CYTHON_COMPILING_IN_PYSTON - #define __Pyx_PyCode_HasFreeVars(co) PyCode_HasFreeVars(co) - #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno) -#else - #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) - #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) -#endif -#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000 - #define __Pyx_PyThreadState_Current PyThreadState_GET() -#elif PY_VERSION_HEX >= 0x03060000 - #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() -#elif PY_VERSION_HEX >= 0x03000000 - #define __Pyx_PyThreadState_Current PyThreadState_GET() -#else - #define __Pyx_PyThreadState_Current _PyThreadState_Current -#endif -#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) -#include "pythread.h" -#define Py_tss_NEEDS_INIT 0 -typedef int Py_tss_t; -static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { - *key = PyThread_create_key(); - return 0; -} -static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { - Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); - *key = Py_tss_NEEDS_INIT; - return key; -} -static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { - PyObject_Free(key); -} -static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { - return *key != Py_tss_NEEDS_INIT; -} -static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { - PyThread_delete_key(*key); - *key = Py_tss_NEEDS_INIT; -} -static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { - return PyThread_set_key_value(*key, value); -} -static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { - return PyThread_get_key_value(*key); -} -#endif -#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized) -#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) -#else -#define __Pyx_PyDict_NewPresized(n) PyDict_New() -#endif -#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION - #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) -#else - #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) -#endif -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS -#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) -#else -#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name) -#endif -#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) - #define CYTHON_PEP393_ENABLED 1 - #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ - 0 : _PyUnicode_Ready((PyObject *)(op))) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) - #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) - #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) - #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) - #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) - #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, ch) - #if defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE) - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) - #else - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) - #endif -#else - #define CYTHON_PEP393_ENABLED 0 - #define PyUnicode_1BYTE_KIND 1 - #define PyUnicode_2BYTE_KIND 2 - #define PyUnicode_4BYTE_KIND 4 - #define __Pyx_PyUnicode_READY(op) (0) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) - #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111) - #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) - #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) - #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) - #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = ch) - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) -#endif -#if CYTHON_COMPILING_IN_PYPY - #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) -#else - #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ - PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains) - #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check) - #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format) - #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) -#endif -#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) -#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) -#else - #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) -#endif -#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) - #define PyObject_ASCII(o) PyObject_Repr(o) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBaseString_Type PyUnicode_Type - #define PyStringObject PyUnicodeObject - #define PyString_Type PyUnicode_Type - #define PyString_Check PyUnicode_Check - #define PyString_CheckExact PyUnicode_CheckExact -#ifndef PyObject_Unicode - #define PyObject_Unicode PyObject_Str -#endif -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) - #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) -#else - #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) - #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) -#endif -#ifndef PySet_CheckExact - #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) -#endif -#if PY_VERSION_HEX >= 0x030900A4 - #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) - #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size) -#else - #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt) - #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size) -#endif -#if CYTHON_ASSUME_SAFE_MACROS - #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) -#else - #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyIntObject PyLongObject - #define PyInt_Type PyLong_Type - #define PyInt_Check(op) PyLong_Check(op) - #define PyInt_CheckExact(op) PyLong_CheckExact(op) - #define PyInt_FromString PyLong_FromString - #define PyInt_FromUnicode PyLong_FromUnicode - #define PyInt_FromLong PyLong_FromLong - #define PyInt_FromSize_t PyLong_FromSize_t - #define PyInt_FromSsize_t PyLong_FromSsize_t - #define PyInt_AsLong PyLong_AsLong - #define PyInt_AS_LONG PyLong_AS_LONG - #define PyInt_AsSsize_t PyLong_AsSsize_t - #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask - #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask - #define PyNumber_Int PyNumber_Long -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBoolObject PyLongObject -#endif -#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY - #ifndef PyUnicode_InternFromString - #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) - #endif -#endif -#if PY_VERSION_HEX < 0x030200A4 - typedef long Py_hash_t; - #define __Pyx_PyInt_FromHash_t PyInt_FromLong - #define __Pyx_PyInt_AsHash_t PyInt_AsLong -#else - #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t - #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyMethod_New(func, self, klass) ((self) ? ((void)(klass), PyMethod_New(func, self)) : __Pyx_NewRef(func)) -#else - #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) -#endif -#if CYTHON_USE_ASYNC_SLOTS - #if PY_VERSION_HEX >= 0x030500B1 - #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods - #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) - #else - #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) - #endif -#else - #define __Pyx_PyType_AsAsync(obj) NULL -#endif -#ifndef __Pyx_PyAsyncMethodsStruct - typedef struct { - unaryfunc am_await; - unaryfunc am_aiter; - unaryfunc am_anext; - } __Pyx_PyAsyncMethodsStruct; -#endif - -#if defined(WIN32) || defined(MS_WINDOWS) - #define _USE_MATH_DEFINES -#endif -#include -#ifdef NAN -#define __PYX_NAN() ((float) NAN) -#else -static CYTHON_INLINE float __PYX_NAN() { - float value; - memset(&value, 0xFF, sizeof(value)); - return value; -} -#endif -#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) -#define __Pyx_truncl trunc -#else -#define __Pyx_truncl truncl -#endif - -#define __PYX_MARK_ERR_POS(f_index, lineno) \ - { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } -#define __PYX_ERR(f_index, lineno, Ln_error) \ - { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } - -#ifndef __PYX_EXTERN_C - #ifdef __cplusplus - #define __PYX_EXTERN_C extern "C" - #else - #define __PYX_EXTERN_C extern - #endif -#endif - -#define __PYX_HAVE__aiohttp___http_parser -#define __PYX_HAVE_API__aiohttp___http_parser -/* Early includes */ -#include -#include -#include "pythread.h" -#include -#include -#include "../vendor/http-parser/http_parser.h" -#include "_find_header.h" -#ifdef _OPENMP -#include -#endif /* _OPENMP */ - -#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) -#define CYTHON_WITHOUT_ASSERTIONS -#endif - -typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; - const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; - -#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 -#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 -#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) -#define __PYX_DEFAULT_STRING_ENCODING "" -#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString -#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#define __Pyx_uchar_cast(c) ((unsigned char)c) -#define __Pyx_long_cast(x) ((long)x) -#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ - (sizeof(type) < sizeof(Py_ssize_t)) ||\ - (sizeof(type) > sizeof(Py_ssize_t) &&\ - likely(v < (type)PY_SSIZE_T_MAX ||\ - v == (type)PY_SSIZE_T_MAX) &&\ - (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ - v == (type)PY_SSIZE_T_MIN))) ||\ - (sizeof(type) == sizeof(Py_ssize_t) &&\ - (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ - v == (type)PY_SSIZE_T_MAX))) ) -static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { - return (size_t) i < (size_t) limit; -} -#if defined (__cplusplus) && __cplusplus >= 201103L - #include - #define __Pyx_sst_abs(value) std::abs(value) -#elif SIZEOF_INT >= SIZEOF_SIZE_T - #define __Pyx_sst_abs(value) abs(value) -#elif SIZEOF_LONG >= SIZEOF_SIZE_T - #define __Pyx_sst_abs(value) labs(value) -#elif defined (_MSC_VER) - #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) -#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define __Pyx_sst_abs(value) llabs(value) -#elif defined (__GNUC__) - #define __Pyx_sst_abs(value) __builtin_llabs(value) -#else - #define __Pyx_sst_abs(value) ((value<0) ? -value : value) -#endif -static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); -static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); -#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) -#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) -#define __Pyx_PyBytes_FromString PyBytes_FromString -#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); -#if PY_MAJOR_VERSION < 3 - #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#else - #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize -#endif -#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyObject_AsWritableString(s) ((char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsWritableSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) -#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) -#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) -#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) -#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) -static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { - const Py_UNICODE *u_end = u; - while (*u_end++) ; - return (size_t)(u_end - u - 1); -} -#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) -#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode -#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode -#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) -#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) -static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); -static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); -static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); -#define __Pyx_PySequence_Tuple(obj)\ - (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); -#if CYTHON_ASSUME_SAFE_MACROS -#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) -#else -#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) -#endif -#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) -#if PY_MAJOR_VERSION >= 3 -#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) -#else -#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) -#endif -#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x)) -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII -static int __Pyx_sys_getdefaultencoding_not_ascii; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys; - PyObject* default_encoding = NULL; - PyObject* ascii_chars_u = NULL; - PyObject* ascii_chars_b = NULL; - const char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (!sys) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); - Py_DECREF(sys); - if (!default_encoding) goto bad; - default_encoding_c = PyBytes_AsString(default_encoding); - if (!default_encoding_c) goto bad; - if (strcmp(default_encoding_c, "ascii") == 0) { - __Pyx_sys_getdefaultencoding_not_ascii = 0; - } else { - char ascii_chars[128]; - int c; - for (c = 0; c < 128; c++) { - ascii_chars[c] = c; - } - __Pyx_sys_getdefaultencoding_not_ascii = 1; - ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); - if (!ascii_chars_u) goto bad; - ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); - if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { - PyErr_Format( - PyExc_ValueError, - "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", - default_encoding_c); - goto bad; - } - Py_DECREF(ascii_chars_u); - Py_DECREF(ascii_chars_b); - } - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return -1; -} -#endif -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) -#else -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT -static char* __PYX_DEFAULT_STRING_ENCODING; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys; - PyObject* default_encoding = NULL; - char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (!sys) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - Py_DECREF(sys); - if (!default_encoding) goto bad; - default_encoding_c = PyBytes_AsString(default_encoding); - if (!default_encoding_c) goto bad; - __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); - if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; - strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(default_encoding); - return -1; -} -#endif -#endif - - -/* Test for GCC > 2.95 */ -#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) -#else /* !__GNUC__ or GCC < 2.95 */ - #define likely(x) (x) - #define unlikely(x) (x) -#endif /* __GNUC__ */ -static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } - -static PyObject *__pyx_m = NULL; -static PyObject *__pyx_d; -static PyObject *__pyx_b; -static PyObject *__pyx_cython_runtime = NULL; -static PyObject *__pyx_empty_tuple; -static PyObject *__pyx_empty_bytes; -static PyObject *__pyx_empty_unicode; -static int __pyx_lineno; -static int __pyx_clineno = 0; -static const char * __pyx_cfilenm= __FILE__; -static const char *__pyx_filename; - - -static const char *__pyx_f[] = { - "aiohttp\\_http_parser.pyx", - "stringsource", - "type.pxd", - "bool.pxd", - "complex.pxd", - "aiohttp\\_headers.pxi", -}; - -/*--- Type declarations ---*/ -struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage; -struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage; -struct __pyx_obj_7aiohttp_12_http_parser_HttpParser; -struct __pyx_obj_7aiohttp_12_http_parser_HttpRequestParser; -struct __pyx_obj_7aiohttp_12_http_parser_HttpResponseParser; -struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__; -struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr; -struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__; -struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr; -struct __pyx_opt_args_7aiohttp_12_http_parser_10HttpParser__init; - -/* "aiohttp/_http_parser.pyx":327 - * PyMem_Free(self._csettings) - * - * cdef _init(self, cparser.http_parser_type mode, # <<<<<<<<<<<<<< - * object protocol, object loop, int limit, - * object timer=None, - */ -struct __pyx_opt_args_7aiohttp_12_http_parser_10HttpParser__init { - int __pyx_n; - PyObject *timer; - size_t max_line_size; - size_t max_headers; - size_t max_field_size; - PyObject *payload_exception; - int response_with_body; - int read_until_eof; - int auto_decompress; -}; - -/* "aiohttp/_http_parser.pyx":110 - * - * @cython.freelist(DEFAULT_FREELIST_SIZE) - * cdef class RawRequestMessage: # <<<<<<<<<<<<<< - * cdef readonly str method - * cdef readonly str path - */ -struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage { - PyObject_HEAD - PyObject *method; - PyObject *path; - PyObject *version; - PyObject *headers; - PyObject *raw_headers; - PyObject *should_close; - PyObject *compression; - PyObject *upgrade; - PyObject *chunked; - PyObject *url; -}; - - -/* "aiohttp/_http_parser.pyx":210 - * - * @cython.freelist(DEFAULT_FREELIST_SIZE) - * cdef class RawResponseMessage: # <<<<<<<<<<<<<< - * cdef readonly object version # HttpVersion - * cdef readonly int code - */ -struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage { - PyObject_HEAD - PyObject *version; - int code; - PyObject *reason; - PyObject *headers; - PyObject *raw_headers; - PyObject *should_close; - PyObject *compression; - PyObject *upgrade; - PyObject *chunked; -}; - - -/* "aiohttp/_http_parser.pyx":272 - * - * @cython.internal - * cdef class HttpParser: # <<<<<<<<<<<<<< - * - * cdef: - */ -struct __pyx_obj_7aiohttp_12_http_parser_HttpParser { - PyObject_HEAD - struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser *__pyx_vtab; - struct http_parser *_cparser; - struct http_parser_settings *_csettings; - PyObject *_raw_name; - PyObject *_raw_value; - int _has_value; - PyObject *_protocol; - PyObject *_loop; - PyObject *_timer; - size_t _max_line_size; - size_t _max_field_size; - size_t _max_headers; - int _response_with_body; - int _read_until_eof; - int _started; - PyObject *_url; - PyObject *_buf; - PyObject *_path; - PyObject *_reason; - PyObject *_headers; - PyObject *_raw_headers; - int _upgraded; - PyObject *_messages; - PyObject *_payload; - int _payload_error; - PyObject *_payload_exception; - PyObject *_last_error; - int _auto_decompress; - int _limit; - PyObject *_content_encoding; - Py_buffer py_buf; -}; - - -/* "aiohttp/_http_parser.pyx":563 - * - * - * cdef class HttpRequestParser(HttpParser): # <<<<<<<<<<<<<< - * - * def __init__(self, protocol, loop, int limit, timer=None, - */ -struct __pyx_obj_7aiohttp_12_http_parser_HttpRequestParser { - struct __pyx_obj_7aiohttp_12_http_parser_HttpParser __pyx_base; -}; - - -/* "aiohttp/_http_parser.pyx":591 - * - * - * cdef class HttpResponseParser(HttpParser): # <<<<<<<<<<<<<< - * - * def __init__(self, protocol, loop, int limit, timer=None, - */ -struct __pyx_obj_7aiohttp_12_http_parser_HttpResponseParser { - struct __pyx_obj_7aiohttp_12_http_parser_HttpParser __pyx_base; -}; - - -/* "aiohttp/_http_parser.pyx":135 - * self.url = url - * - * def __repr__(self): # <<<<<<<<<<<<<< - * info = [] - * info.append(("method", self.method)) - */ -struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__ { - PyObject_HEAD - PyObject *__pyx_v_info; -}; - - -/* "aiohttp/_http_parser.pyx":147 - * info.append(("chunked", self.chunked)) - * info.append(("url", self.url)) - * sinfo = ', '.join(name + '=' + repr(val) for name, val in info) # <<<<<<<<<<<<<< - * return '' - * - */ -struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr { - PyObject_HEAD - struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__ *__pyx_outer_scope; - PyObject *__pyx_v_name; - PyObject *__pyx_v_val; -}; - - -/* "aiohttp/_http_parser.pyx":233 - * self.chunked = chunked - * - * def __repr__(self): # <<<<<<<<<<<<<< - * info = [] - * info.append(("version", self.version)) - */ -struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ { - PyObject_HEAD - PyObject *__pyx_v_info; -}; - - -/* "aiohttp/_http_parser.pyx":244 - * info.append(("upgrade", self.upgrade)) - * info.append(("chunked", self.chunked)) - * sinfo = ', '.join(name + '=' + repr(val) for name, val in info) # <<<<<<<<<<<<<< - * return '' - * - */ -struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr { - PyObject_HEAD - struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ *__pyx_outer_scope; - PyObject *__pyx_v_name; - PyObject *__pyx_v_val; -}; - - - -/* "aiohttp/_http_parser.pyx":272 - * - * @cython.internal - * cdef class HttpParser: # <<<<<<<<<<<<<< - * - * cdef: - */ - -struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser { - PyObject *(*_init)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *, enum http_parser_type, PyObject *, PyObject *, int, struct __pyx_opt_args_7aiohttp_12_http_parser_10HttpParser__init *__pyx_optional_args); - PyObject *(*_process_header)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *); - PyObject *(*_on_header_field)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *, char *, size_t); - PyObject *(*_on_header_value)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *, char *, size_t); - PyObject *(*_on_headers_complete)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *); - PyObject *(*_on_message_complete)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *); - PyObject *(*_on_chunk_header)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *); - PyObject *(*_on_chunk_complete)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *); - PyObject *(*_on_status_complete)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *); - PyObject *(*http_version)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *); -}; -static struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser *__pyx_vtabptr_7aiohttp_12_http_parser_HttpParser; -static CYTHON_INLINE PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser_http_version(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *); - - -/* "aiohttp/_http_parser.pyx":563 - * - * - * cdef class HttpRequestParser(HttpParser): # <<<<<<<<<<<<<< - * - * def __init__(self, protocol, loop, int limit, timer=None, - */ - -struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpRequestParser { - struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser __pyx_base; -}; -static struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpRequestParser *__pyx_vtabptr_7aiohttp_12_http_parser_HttpRequestParser; - - -/* "aiohttp/_http_parser.pyx":591 - * - * - * cdef class HttpResponseParser(HttpParser): # <<<<<<<<<<<<<< - * - * def __init__(self, protocol, loop, int limit, timer=None, - */ - -struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpResponseParser { - struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser __pyx_base; -}; -static struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpResponseParser *__pyx_vtabptr_7aiohttp_12_http_parser_HttpResponseParser; - -/* --- Runtime support code (head) --- */ -/* Refnanny.proto */ -#ifndef CYTHON_REFNANNY - #define CYTHON_REFNANNY 0 -#endif -#if CYTHON_REFNANNY - typedef struct { - void (*INCREF)(void*, PyObject*, int); - void (*DECREF)(void*, PyObject*, int); - void (*GOTREF)(void*, PyObject*, int); - void (*GIVEREF)(void*, PyObject*, int); - void* (*SetupContext)(const char*, int, const char*); - void (*FinishContext)(void**); - } __Pyx_RefNannyAPIStruct; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); - #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; -#ifdef WITH_THREAD - #define __Pyx_RefNannySetupContext(name, acquire_gil)\ - if (acquire_gil) {\ - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ - PyGILState_Release(__pyx_gilstate_save);\ - } else {\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ - } -#else - #define __Pyx_RefNannySetupContext(name, acquire_gil)\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) -#endif - #define __Pyx_RefNannyFinishContext()\ - __Pyx_RefNanny->FinishContext(&__pyx_refnanny) - #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) - #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) - #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) - #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) -#else - #define __Pyx_RefNannyDeclarations - #define __Pyx_RefNannySetupContext(name, acquire_gil) - #define __Pyx_RefNannyFinishContext() - #define __Pyx_INCREF(r) Py_INCREF(r) - #define __Pyx_DECREF(r) Py_DECREF(r) - #define __Pyx_GOTREF(r) - #define __Pyx_GIVEREF(r) - #define __Pyx_XINCREF(r) Py_XINCREF(r) - #define __Pyx_XDECREF(r) Py_XDECREF(r) - #define __Pyx_XGOTREF(r) - #define __Pyx_XGIVEREF(r) -#endif -#define __Pyx_XDECREF_SET(r, v) do {\ - PyObject *tmp = (PyObject *) r;\ - r = v; __Pyx_XDECREF(tmp);\ - } while (0) -#define __Pyx_DECREF_SET(r, v) do {\ - PyObject *tmp = (PyObject *) r;\ - r = v; __Pyx_DECREF(tmp);\ - } while (0) -#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) -#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) - -/* PyObjectGetAttrStr.proto */ -#if CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); -#else -#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) -#endif - -/* GetBuiltinName.proto */ -static PyObject *__Pyx_GetBuiltinName(PyObject *name); - -/* GetItemInt.proto */ -#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ - __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ - (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ - __Pyx_GetItemInt_Generic(o, to_py_func(i)))) -#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ - __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ - (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck); -#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ - __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ - (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck); -static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, - int is_list, int wraparound, int boundscheck); - -/* decode_c_string_utf16.proto */ -static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16(const char *s, Py_ssize_t size, const char *errors) { - int byteorder = 0; - return PyUnicode_DecodeUTF16(s, size, errors, &byteorder); -} -static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16LE(const char *s, Py_ssize_t size, const char *errors) { - int byteorder = -1; - return PyUnicode_DecodeUTF16(s, size, errors, &byteorder); -} -static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16BE(const char *s, Py_ssize_t size, const char *errors) { - int byteorder = 1; - return PyUnicode_DecodeUTF16(s, size, errors, &byteorder); -} - -/* decode_c_bytes.proto */ -static CYTHON_INLINE PyObject* __Pyx_decode_c_bytes( - const char* cstring, Py_ssize_t length, Py_ssize_t start, Py_ssize_t stop, - const char* encoding, const char* errors, - PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)); - -/* decode_bytes.proto */ -static CYTHON_INLINE PyObject* __Pyx_decode_bytes( - PyObject* string, Py_ssize_t start, Py_ssize_t stop, - const char* encoding, const char* errors, - PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) { - return __Pyx_decode_c_bytes( - PyBytes_AS_STRING(string), PyBytes_GET_SIZE(string), - start, stop, encoding, errors, decode_func); -} - -/* RaiseArgTupleInvalid.proto */ -static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, - Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); - -/* RaiseDoubleKeywords.proto */ -static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); - -/* ParseKeywords.proto */ -static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\ - PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ - const char* function_name); - -/* None.proto */ -static CYTHON_INLINE void __Pyx_RaiseClosureNameError(const char *varname); - -/* RaiseTooManyValuesToUnpack.proto */ -static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); - -/* RaiseNeedMoreValuesToUnpack.proto */ -static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); - -/* IterFinish.proto */ -static CYTHON_INLINE int __Pyx_IterFinish(void); - -/* UnpackItemEndCheck.proto */ -static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); - -/* ListCompAppend.proto */ -#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS -static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) { - PyListObject* L = (PyListObject*) list; - Py_ssize_t len = Py_SIZE(list); - if (likely(L->allocated > len)) { - Py_INCREF(x); - PyList_SET_ITEM(list, len, x); - __Pyx_SET_SIZE(list, len + 1); - return 0; - } - return PyList_Append(list, x); -} -#else -#define __Pyx_ListComp_Append(L,x) PyList_Append(L,x) -#endif - -/* ListAppend.proto */ -#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS -static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) { - PyListObject* L = (PyListObject*) list; - Py_ssize_t len = Py_SIZE(list); - if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) { - Py_INCREF(x); - PyList_SET_ITEM(list, len, x); - __Pyx_SET_SIZE(list, len + 1); - return 0; - } - return PyList_Append(list, x); -} -#else -#define __Pyx_PyList_Append(L,x) PyList_Append(L,x) -#endif - -/* KeywordStringCheck.proto */ -static int __Pyx_CheckKeywordStrings(PyObject *kwdict, const char* function_name, int kw_allowed); - -/* ExtTypeTest.proto */ -static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); - -/* PyDictContains.proto */ -static CYTHON_INLINE int __Pyx_PyDict_ContainsTF(PyObject* item, PyObject* dict, int eq) { - int result = PyDict_Contains(dict, item); - return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); -} - -/* DictGetItem.proto */ -#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY -static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key); -#define __Pyx_PyObject_Dict_GetItem(obj, name)\ - (likely(PyDict_CheckExact(obj)) ?\ - __Pyx_PyDict_GetItem(obj, name) : PyObject_GetItem(obj, name)) -#else -#define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key) -#define __Pyx_PyObject_Dict_GetItem(obj, name) PyObject_GetItem(obj, name) -#endif - -/* PyErrExceptionMatches.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err) -static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); -#else -#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) -#endif - -/* PyThreadStateGet.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; -#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; -#define __Pyx_PyErr_Occurred() __pyx_tstate->curexc_type -#else -#define __Pyx_PyThreadState_declare -#define __Pyx_PyThreadState_assign -#define __Pyx_PyErr_Occurred() PyErr_Occurred() -#endif - -/* PyErrFetchRestore.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) -#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) -#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) -#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) -#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) -static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); -static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); -#if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) -#else -#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) -#endif -#else -#define __Pyx_PyErr_Clear() PyErr_Clear() -#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) -#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) -#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) -#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) -#endif - -/* GetAttr.proto */ -static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *); - -/* GetAttr3.proto */ -static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *); - -/* PyDictVersioning.proto */ -#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS -#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) -#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) -#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ - (version_var) = __PYX_GET_DICT_VERSION(dict);\ - (cache_var) = (value); -#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ - static PY_UINT64_T __pyx_dict_version = 0;\ - static PyObject *__pyx_dict_cached_value = NULL;\ - if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ - (VAR) = __pyx_dict_cached_value;\ - } else {\ - (VAR) = __pyx_dict_cached_value = (LOOKUP);\ - __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ - }\ -} -static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); -static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); -static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); -#else -#define __PYX_GET_DICT_VERSION(dict) (0) -#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) -#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); -#endif - -/* GetModuleGlobalName.proto */ -#if CYTHON_USE_DICT_VERSIONS -#define __Pyx_GetModuleGlobalName(var, name) {\ - static PY_UINT64_T __pyx_dict_version = 0;\ - static PyObject *__pyx_dict_cached_value = NULL;\ - (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ - (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ - __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ -} -#define __Pyx_GetModuleGlobalNameUncached(var, name) {\ - PY_UINT64_T __pyx_dict_version;\ - PyObject *__pyx_dict_cached_value;\ - (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ -} -static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); -#else -#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) -#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) -static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); -#endif - -/* PyFunctionFastCall.proto */ -#if CYTHON_FAST_PYCALL -#define __Pyx_PyFunction_FastCall(func, args, nargs)\ - __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) -#if 1 || PY_VERSION_HEX < 0x030600B1 -static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); -#else -#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs) -#endif -#define __Pyx_BUILD_ASSERT_EXPR(cond)\ - (sizeof(char [1 - 2*!(cond)]) - 1) -#ifndef Py_MEMBER_SIZE -#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) -#endif - static size_t __pyx_pyframe_localsplus_offset = 0; - #include "frameobject.h" - #define __Pxy_PyFrame_Initialize_Offsets()\ - ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ - (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) - #define __Pyx_PyFrame_GetLocalsplus(frame)\ - (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) -#endif - -/* PyObjectCall.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); -#else -#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) -#endif - -/* PyObjectCallMethO.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); -#endif - -/* PyObjectCallNoArg.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func); -#else -#define __Pyx_PyObject_CallNoArg(func) __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL) -#endif - -/* PyCFunctionFastCall.proto */ -#if CYTHON_FAST_PYCCALL -static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs); -#else -#define __Pyx_PyCFunction_FastCall(func, args, nargs) (assert(0), NULL) -#endif - -/* PyObjectCallOneArg.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); - -/* PyObjectCall2Args.proto */ -static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); - -/* PySequenceContains.proto */ -static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* seq, int eq) { - int result = PySequence_Contains(seq, item); - return unlikely(result < 0) ? result : (result == (eq == Py_EQ)); -} - -/* RaiseException.proto */ -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); - -/* IncludeStringH.proto */ -#include - -/* BytesEquals.proto */ -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); - -/* UnicodeEquals.proto */ -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); - -/* SliceObject.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice( - PyObject* obj, Py_ssize_t cstart, Py_ssize_t cstop, - PyObject** py_start, PyObject** py_stop, PyObject** py_slice, - int has_cstart, int has_cstop, int wraparound); - -/* decode_bytearray.proto */ -static CYTHON_INLINE PyObject* __Pyx_decode_bytearray( - PyObject* string, Py_ssize_t start, Py_ssize_t stop, - const char* encoding, const char* errors, - PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) { - return __Pyx_decode_c_bytes( - PyByteArray_AS_STRING(string), PyByteArray_GET_SIZE(string), - start, stop, encoding, errors, decode_func); -} - -/* GetException.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_GetException(type, value, tb) __Pyx__GetException(__pyx_tstate, type, value, tb) -static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); -#else -static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); -#endif - -/* SwapException.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb) -static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); -#else -static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); -#endif - -/* GetTopmostException.proto */ -#if CYTHON_USE_EXC_INFO_STACK -static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate); -#endif - -/* SaveResetException.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb) -static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); -#define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb) -static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); -#else -#define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb) -#define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb) -#endif - -/* decode_c_string.proto */ -static CYTHON_INLINE PyObject* __Pyx_decode_c_string( - const char* cstring, Py_ssize_t start, Py_ssize_t stop, - const char* encoding, const char* errors, - PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)); - -/* UnpackUnboundCMethod.proto */ -typedef struct { - PyObject *type; - PyObject **method_name; - PyCFunction func; - PyObject *method; - int flag; -} __Pyx_CachedCFunction; - -/* CallUnboundCMethod1.proto */ -static PyObject* __Pyx__CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg); -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg); -#else -#define __Pyx_CallUnboundCMethod1(cfunc, self, arg) __Pyx__CallUnboundCMethod1(cfunc, self, arg) -#endif - -/* Import.proto */ -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); - -/* ImportFrom.proto */ -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); - -/* HasAttr.proto */ -static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *); - -/* PyObject_GenericGetAttrNoDict.proto */ -#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 -static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name); -#else -#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr -#endif - -/* PyObject_GenericGetAttr.proto */ -#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 -static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name); -#else -#define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr -#endif - -/* PyObjectGetAttrStrNoError.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name); - -/* SetupReduce.proto */ -static int __Pyx_setup_reduce(PyObject* type_obj); - -/* SetVTable.proto */ -static int __Pyx_SetVtable(PyObject *dict, void *vtable); - -/* TypeImport.proto */ -#ifndef __PYX_HAVE_RT_ImportType_proto -#define __PYX_HAVE_RT_ImportType_proto -enum __Pyx_ImportType_CheckSize { - __Pyx_ImportType_CheckSize_Error = 0, - __Pyx_ImportType_CheckSize_Warn = 1, - __Pyx_ImportType_CheckSize_Ignore = 2 -}; -static PyTypeObject *__Pyx_ImportType(PyObject* module, const char *module_name, const char *class_name, size_t size, enum __Pyx_ImportType_CheckSize check_size); -#endif - -/* CLineInTraceback.proto */ -#ifdef CYTHON_CLINE_IN_TRACEBACK -#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) -#else -static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); -#endif - -/* CodeObjectCache.proto */ -typedef struct { - PyCodeObject* code_object; - int code_line; -} __Pyx_CodeObjectCacheEntry; -struct __Pyx_CodeObjectCache { - int count; - int max_count; - __Pyx_CodeObjectCacheEntry* entries; -}; -static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); -static PyCodeObject *__pyx_find_code_object(int code_line); -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); - -/* AddTraceback.proto */ -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename); - -/* CIntToPy.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value); - -/* CIntToPy.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_int(unsigned int value); - -/* CIntToPy.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_short(unsigned short value); - -/* CIntToPy.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); - -/* CIntToPy.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint16_t(uint16_t value); - -/* CIntFromPy.proto */ -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); - -/* CIntFromPy.proto */ -static CYTHON_INLINE enum http_method __Pyx_PyInt_As_enum__http_method(PyObject *); - -/* CIntFromPy.proto */ -static CYTHON_INLINE size_t __Pyx_PyInt_As_size_t(PyObject *); - -/* CIntFromPy.proto */ -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); - -/* FastTypeChecks.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) -static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); -static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); -static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); -#else -#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) -#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) -#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) -#endif -#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) - -/* FetchCommonType.proto */ -static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); - -/* PyObjectGetMethod.proto */ -static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method); - -/* PyObjectCallMethod1.proto */ -static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg); - -/* CoroutineBase.proto */ -typedef PyObject *(*__pyx_coroutine_body_t)(PyObject *, PyThreadState *, PyObject *); -#if CYTHON_USE_EXC_INFO_STACK -#define __Pyx_ExcInfoStruct _PyErr_StackItem -#else -typedef struct { - PyObject *exc_type; - PyObject *exc_value; - PyObject *exc_traceback; -} __Pyx_ExcInfoStruct; -#endif -typedef struct { - PyObject_HEAD - __pyx_coroutine_body_t body; - PyObject *closure; - __Pyx_ExcInfoStruct gi_exc_state; - PyObject *gi_weakreflist; - PyObject *classobj; - PyObject *yieldfrom; - PyObject *gi_name; - PyObject *gi_qualname; - PyObject *gi_modulename; - PyObject *gi_code; - int resume_label; - char is_running; -} __pyx_CoroutineObject; -static __pyx_CoroutineObject *__Pyx__Coroutine_New( - PyTypeObject *type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, - PyObject *name, PyObject *qualname, PyObject *module_name); -static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit( - __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, - PyObject *name, PyObject *qualname, PyObject *module_name); -static CYTHON_INLINE void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *self); -static int __Pyx_Coroutine_clear(PyObject *self); -static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value); -static PyObject *__Pyx_Coroutine_Close(PyObject *self); -static PyObject *__Pyx_Coroutine_Throw(PyObject *gen, PyObject *args); -#if CYTHON_USE_EXC_INFO_STACK -#define __Pyx_Coroutine_SwapException(self) -#define __Pyx_Coroutine_ResetAndClearException(self) __Pyx_Coroutine_ExceptionClear(&(self)->gi_exc_state) -#else -#define __Pyx_Coroutine_SwapException(self) {\ - __Pyx_ExceptionSwap(&(self)->gi_exc_state.exc_type, &(self)->gi_exc_state.exc_value, &(self)->gi_exc_state.exc_traceback);\ - __Pyx_Coroutine_ResetFrameBackpointer(&(self)->gi_exc_state);\ - } -#define __Pyx_Coroutine_ResetAndClearException(self) {\ - __Pyx_ExceptionReset((self)->gi_exc_state.exc_type, (self)->gi_exc_state.exc_value, (self)->gi_exc_state.exc_traceback);\ - (self)->gi_exc_state.exc_type = (self)->gi_exc_state.exc_value = (self)->gi_exc_state.exc_traceback = NULL;\ - } -#endif -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyGen_FetchStopIterationValue(pvalue)\ - __Pyx_PyGen__FetchStopIterationValue(__pyx_tstate, pvalue) -#else -#define __Pyx_PyGen_FetchStopIterationValue(pvalue)\ - __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, pvalue) -#endif -static int __Pyx_PyGen__FetchStopIterationValue(PyThreadState *tstate, PyObject **pvalue); -static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state); - -/* PatchModuleWithCoroutine.proto */ -static PyObject* __Pyx_Coroutine_patch_module(PyObject* module, const char* py_code); - -/* PatchGeneratorABC.proto */ -static int __Pyx_patch_abc(void); - -/* Generator.proto */ -#define __Pyx_Generator_USED -static PyTypeObject *__pyx_GeneratorType = 0; -#define __Pyx_Generator_CheckExact(obj) (Py_TYPE(obj) == __pyx_GeneratorType) -#define __Pyx_Generator_New(body, code, closure, name, qualname, module_name)\ - __Pyx__Coroutine_New(__pyx_GeneratorType, body, code, closure, name, qualname, module_name) -static PyObject *__Pyx_Generator_Next(PyObject *self); -static int __pyx_Generator_init(void); - -/* CheckBinaryVersion.proto */ -static int __Pyx_check_binary_version(void); - -/* InitStrings.proto */ -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); - -static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__init(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self, enum http_parser_type __pyx_v_mode, PyObject *__pyx_v_protocol, PyObject *__pyx_v_loop, int __pyx_v_limit, struct __pyx_opt_args_7aiohttp_12_http_parser_10HttpParser__init *__pyx_optional_args); /* proto*/ -static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__process_header(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self); /* proto*/ -static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_header_field(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self, char *__pyx_v_at, size_t __pyx_v_length); /* proto*/ -static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_header_value(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self, char *__pyx_v_at, size_t __pyx_v_length); /* proto*/ -static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_headers_complete(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self); /* proto*/ -static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_message_complete(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self); /* proto*/ -static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_chunk_header(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self); /* proto*/ -static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_chunk_complete(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self); /* proto*/ -static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_status_complete(CYTHON_UNUSED struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self); /* proto*/ -static CYTHON_INLINE PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser_http_version(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self); /* proto*/ -static PyObject *__pyx_f_7aiohttp_12_http_parser_17HttpRequestParser__on_status_complete(struct __pyx_obj_7aiohttp_12_http_parser_HttpRequestParser *__pyx_v_self); /* proto*/ -static PyObject *__pyx_f_7aiohttp_12_http_parser_18HttpResponseParser__on_status_complete(struct __pyx_obj_7aiohttp_12_http_parser_HttpResponseParser *__pyx_v_self); /* proto*/ - -/* Module declarations from 'cpython.version' */ - -/* Module declarations from '__builtin__' */ - -/* Module declarations from 'cpython.type' */ -static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0; - -/* Module declarations from 'libc.string' */ - -/* Module declarations from 'libc.stdio' */ - -/* Module declarations from 'cpython.object' */ - -/* Module declarations from 'cpython.ref' */ - -/* Module declarations from 'cpython.exc' */ - -/* Module declarations from 'cpython.module' */ - -/* Module declarations from 'cpython.mem' */ - -/* Module declarations from 'cpython.tuple' */ - -/* Module declarations from 'cpython.list' */ - -/* Module declarations from 'cpython.sequence' */ - -/* Module declarations from 'cpython.mapping' */ - -/* Module declarations from 'cpython.iterator' */ - -/* Module declarations from 'cpython.number' */ - -/* Module declarations from 'cpython.int' */ - -/* Module declarations from '__builtin__' */ - -/* Module declarations from 'cpython.bool' */ -static PyTypeObject *__pyx_ptype_7cpython_4bool_bool = 0; - -/* Module declarations from 'cpython.long' */ - -/* Module declarations from 'cpython.float' */ - -/* Module declarations from '__builtin__' */ - -/* Module declarations from 'cpython.complex' */ -static PyTypeObject *__pyx_ptype_7cpython_7complex_complex = 0; - -/* Module declarations from 'cpython.string' */ - -/* Module declarations from 'cpython.unicode' */ - -/* Module declarations from 'cpython.dict' */ - -/* Module declarations from 'cpython.instance' */ - -/* Module declarations from 'cpython.function' */ - -/* Module declarations from 'cpython.method' */ - -/* Module declarations from 'cpython.weakref' */ - -/* Module declarations from 'cpython.getargs' */ - -/* Module declarations from 'cpython.pythread' */ - -/* Module declarations from 'cpython.pystate' */ - -/* Module declarations from 'cpython.cobject' */ - -/* Module declarations from 'cpython.oldbuffer' */ - -/* Module declarations from 'cpython.set' */ - -/* Module declarations from 'cpython.buffer' */ - -/* Module declarations from 'cpython.bytes' */ - -/* Module declarations from 'cpython.pycapsule' */ - -/* Module declarations from 'cpython' */ - -/* Module declarations from 'libc.limits' */ - -/* Module declarations from 'cython' */ - -/* Module declarations from 'aiohttp' */ - -/* Module declarations from 'libc.stdint' */ - -/* Module declarations from 'aiohttp._cparser' */ - -/* Module declarations from 'aiohttp._find_header' */ - -/* Module declarations from 'aiohttp._http_parser' */ -static PyTypeObject *__pyx_ptype_7aiohttp_12_http_parser_RawRequestMessage = 0; -static PyTypeObject *__pyx_ptype_7aiohttp_12_http_parser_RawResponseMessage = 0; -static PyTypeObject *__pyx_ptype_7aiohttp_12_http_parser_HttpParser = 0; -static PyTypeObject *__pyx_ptype_7aiohttp_12_http_parser_HttpRequestParser = 0; -static PyTypeObject *__pyx_ptype_7aiohttp_12_http_parser_HttpResponseParser = 0; -static PyTypeObject *__pyx_ptype_7aiohttp_12_http_parser___pyx_scope_struct____repr__ = 0; -static PyTypeObject *__pyx_ptype_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr = 0; -static PyTypeObject *__pyx_ptype_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ = 0; -static PyTypeObject *__pyx_ptype_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr = 0; -static PyObject *__pyx_v_7aiohttp_12_http_parser_headers = 0; -static PyObject *__pyx_v_7aiohttp_12_http_parser_URL = 0; -static PyObject *__pyx_v_7aiohttp_12_http_parser_URL_build = 0; -static PyObject *__pyx_v_7aiohttp_12_http_parser_CIMultiDict = 0; -static PyObject *__pyx_v_7aiohttp_12_http_parser_CIMultiDictProxy = 0; -static PyObject *__pyx_v_7aiohttp_12_http_parser_HttpVersion = 0; -static PyObject *__pyx_v_7aiohttp_12_http_parser_HttpVersion10 = 0; -static PyObject *__pyx_v_7aiohttp_12_http_parser_HttpVersion11 = 0; -static PyObject *__pyx_v_7aiohttp_12_http_parser_SEC_WEBSOCKET_KEY1 = 0; -static PyObject *__pyx_v_7aiohttp_12_http_parser_CONTENT_ENCODING = 0; -static PyObject *__pyx_v_7aiohttp_12_http_parser_EMPTY_PAYLOAD = 0; -static PyObject *__pyx_v_7aiohttp_12_http_parser_StreamReader = 0; -static PyObject *__pyx_v_7aiohttp_12_http_parser_DeflateBuffer = 0; -static PyObject *__pyx_v_7aiohttp_12_http_parser__http_method = 0; -static CYTHON_INLINE PyObject *__pyx_f_7aiohttp_12_http_parser_extend(PyObject *, char const *, size_t); /*proto*/ -static CYTHON_INLINE PyObject *__pyx_f_7aiohttp_12_http_parser_http_method_str(int); /*proto*/ -static CYTHON_INLINE PyObject *__pyx_f_7aiohttp_12_http_parser_find_header(PyObject *); /*proto*/ -static PyObject *__pyx_f_7aiohttp_12_http_parser__new_request_message(PyObject *, PyObject *, PyObject *, PyObject *, PyObject *, int, PyObject *, int, int, PyObject *); /*proto*/ -static PyObject *__pyx_f_7aiohttp_12_http_parser__new_response_message(PyObject *, int, PyObject *, PyObject *, PyObject *, int, PyObject *, int, int); /*proto*/ -static int __pyx_f_7aiohttp_12_http_parser_cb_on_message_begin(struct http_parser *); /*proto*/ -static int __pyx_f_7aiohttp_12_http_parser_cb_on_url(struct http_parser *, char const *, size_t); /*proto*/ -static int __pyx_f_7aiohttp_12_http_parser_cb_on_status(struct http_parser *, char const *, size_t); /*proto*/ -static int __pyx_f_7aiohttp_12_http_parser_cb_on_header_field(struct http_parser *, char const *, size_t); /*proto*/ -static int __pyx_f_7aiohttp_12_http_parser_cb_on_header_value(struct http_parser *, char const *, size_t); /*proto*/ -static int __pyx_f_7aiohttp_12_http_parser_cb_on_headers_complete(struct http_parser *); /*proto*/ -static int __pyx_f_7aiohttp_12_http_parser_cb_on_body(struct http_parser *, char const *, size_t); /*proto*/ -static int __pyx_f_7aiohttp_12_http_parser_cb_on_message_complete(struct http_parser *); /*proto*/ -static int __pyx_f_7aiohttp_12_http_parser_cb_on_chunk_header(struct http_parser *); /*proto*/ -static int __pyx_f_7aiohttp_12_http_parser_cb_on_chunk_complete(struct http_parser *); /*proto*/ -static PyObject *__pyx_f_7aiohttp_12_http_parser_parser_error_from_errno(enum http_errno); /*proto*/ -static PyObject *__pyx_f_7aiohttp_12_http_parser__parse_url(char *, size_t); /*proto*/ -static PyObject *__pyx_f_7aiohttp_12_http_parser___pyx_unpickle_RawRequestMessage__set_state(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *, PyObject *); /*proto*/ -static PyObject *__pyx_f_7aiohttp_12_http_parser___pyx_unpickle_RawResponseMessage__set_state(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *, PyObject *); /*proto*/ -#define __Pyx_MODULE_NAME "aiohttp._http_parser" -extern int __pyx_module_is_main_aiohttp___http_parser; -int __pyx_module_is_main_aiohttp___http_parser = 0; - -/* Implementation of 'aiohttp._http_parser' */ -static PyObject *__pyx_builtin_range; -static PyObject *__pyx_builtin_MemoryError; -static PyObject *__pyx_builtin_TypeError; -static PyObject *__pyx_builtin_BaseException; -static const char __pyx_k_[] = "="; -static const char __pyx_k_i[] = "i"; -static const char __pyx_k_TE[] = "TE"; -static const char __pyx_k__2[] = ", "; -static const char __pyx_k__3[] = ")>"; -static const char __pyx_k__4[] = ""; -static const char __pyx_k_br[] = "br"; -static const char __pyx_k_AGE[] = "AGE"; -static const char __pyx_k_URI[] = "URI"; -static const char __pyx_k_URL[] = "URL"; -static const char __pyx_k_VIA[] = "VIA"; -static const char __pyx_k__11[] = ":"; -static const char __pyx_k_add[] = "add"; -static const char __pyx_k_all[] = "__all__"; -static const char __pyx_k_new[] = "__new__"; -static const char __pyx_k_url[] = "url"; -static const char __pyx_k_DATE[] = "DATE"; -static const char __pyx_k_ETAG[] = "ETAG"; -static const char __pyx_k_FROM[] = "FROM"; -static const char __pyx_k_HOST[] = "HOST"; -static const char __pyx_k_LINK[] = "LINK"; -static const char __pyx_k_VARY[] = "VARY"; -static const char __pyx_k_args[] = "args"; -static const char __pyx_k_code[] = "code"; -static const char __pyx_k_dict[] = "__dict__"; -static const char __pyx_k_gzip[] = "gzip"; -static const char __pyx_k_hdrs[] = "hdrs"; -static const char __pyx_k_host[] = "host"; -static const char __pyx_k_loop[] = "loop"; -static const char __pyx_k_main[] = "__main__"; -static const char __pyx_k_name[] = "__name__"; -static const char __pyx_k_path[] = "path"; -static const char __pyx_k_port[] = "port"; -static const char __pyx_k_send[] = "send"; -static const char __pyx_k_test[] = "__test__"; -static const char __pyx_k_user[] = "user"; -static const char __pyx_k_yarl[] = "yarl"; -static const char __pyx_k_ALLOW[] = "ALLOW"; -static const char __pyx_k_RANGE[] = "RANGE"; -static const char __pyx_k_URL_2[] = "_URL"; -static const char __pyx_k_build[] = "build"; -static const char __pyx_k_close[] = "close"; -static const char __pyx_k_limit[] = "limit"; -static const char __pyx_k_lower[] = "lower"; -static const char __pyx_k_range[] = "range"; -static const char __pyx_k_throw[] = "throw"; -static const char __pyx_k_timer[] = "timer"; -static const char __pyx_k_ACCEPT[] = "ACCEPT"; -static const char __pyx_k_COOKIE[] = "COOKIE"; -static const char __pyx_k_DIGEST[] = "DIGEST"; -static const char __pyx_k_EXPECT[] = "EXPECT"; -static const char __pyx_k_ORIGIN[] = "ORIGIN"; -static const char __pyx_k_PRAGMA[] = "PRAGMA"; -static const char __pyx_k_SERVER[] = "SERVER"; -static const char __pyx_k_format[] = "format"; -static const char __pyx_k_import[] = "__import__"; -static const char __pyx_k_method[] = "method"; -static const char __pyx_k_pickle[] = "pickle"; -static const char __pyx_k_py_buf[] = "py_buf"; -static const char __pyx_k_reason[] = "reason"; -static const char __pyx_k_reduce[] = "__reduce__"; -static const char __pyx_k_scheme[] = "scheme"; -static const char __pyx_k_update[] = "update"; -static const char __pyx_k_EXPIRES[] = "EXPIRES"; -static const char __pyx_k_REFERER[] = "REFERER"; -static const char __pyx_k_TRAILER[] = "TRAILER"; -static const char __pyx_k_UPGRADE[] = "UPGRADE"; -static const char __pyx_k_WARNING[] = "WARNING"; -static const char __pyx_k_aiohttp[] = "aiohttp"; -static const char __pyx_k_chunked[] = "chunked"; -static const char __pyx_k_deflate[] = "deflate"; -static const char __pyx_k_encoded[] = "encoded"; -static const char __pyx_k_genexpr[] = "genexpr"; -static const char __pyx_k_headers[] = "headers"; -static const char __pyx_k_streams[] = "streams"; -static const char __pyx_k_unknown[] = ""; -static const char __pyx_k_upgrade[] = "upgrade"; -static const char __pyx_k_version[] = "version"; -static const char __pyx_k_IF_MATCH[] = "IF_MATCH"; -static const char __pyx_k_IF_RANGE[] = "IF_RANGE"; -static const char __pyx_k_LOCATION[] = "LOCATION"; -static const char __pyx_k_buf_data[] = "buf_data"; -static const char __pyx_k_feed_eof[] = "feed_eof"; -static const char __pyx_k_fragment[] = "fragment"; -static const char __pyx_k_getstate[] = "__getstate__"; -static const char __pyx_k_password[] = "password"; -static const char __pyx_k_protocol[] = "protocol"; -static const char __pyx_k_pyx_type[] = "__pyx_type"; -static const char __pyx_k_setstate[] = "__setstate__"; -static const char __pyx_k_FORWARDED[] = "FORWARDED"; -static const char __pyx_k_TypeError[] = "TypeError"; -static const char __pyx_k_feed_data[] = "feed_data"; -static const char __pyx_k_multidict[] = "multidict"; -static const char __pyx_k_parse_url[] = "parse_url"; -static const char __pyx_k_partition[] = "partition"; -static const char __pyx_k_pyx_state[] = "__pyx_state"; -static const char __pyx_k_reduce_ex[] = "__reduce_ex__"; -static const char __pyx_k_CONNECTION[] = "CONNECTION"; -static const char __pyx_k_KEEP_ALIVE[] = "KEEP_ALIVE"; -static const char __pyx_k_SET_COOKIE[] = "SET_COOKIE"; -static const char __pyx_k_USER_AGENT[] = "USER_AGENT"; -static const char __pyx_k_pyx_result[] = "__pyx_result"; -static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__"; -static const char __pyx_k_CIMultiDict[] = "CIMultiDict"; -static const char __pyx_k_CONTENT_MD5[] = "CONTENT_MD5"; -static const char __pyx_k_DESTINATION[] = "DESTINATION"; -static const char __pyx_k_HttpVersion[] = "HttpVersion"; -static const char __pyx_k_LineTooLong[] = "LineTooLong"; -static const char __pyx_k_MemoryError[] = "MemoryError"; -static const char __pyx_k_PickleError[] = "PickleError"; -static const char __pyx_k_RETRY_AFTER[] = "RETRY_AFTER"; -static const char __pyx_k_WANT_DIGEST[] = "WANT_DIGEST"; -static const char __pyx_k_compression[] = "compression"; -static const char __pyx_k_http_parser[] = "http_parser"; -static const char __pyx_k_http_writer[] = "http_writer"; -static const char __pyx_k_max_headers[] = "max_headers"; -static const char __pyx_k_raw_headers[] = "raw_headers"; -static const char __pyx_k_CONTENT_TYPE[] = "CONTENT_TYPE"; -static const char __pyx_k_MAX_FORWARDS[] = "MAX_FORWARDS"; -static const char __pyx_k_StreamReader[] = "StreamReader"; -static const char __pyx_k_pyx_checksum[] = "__pyx_checksum"; -static const char __pyx_k_query_string[] = "query_string"; -static const char __pyx_k_should_close[] = "should_close"; -static const char __pyx_k_stringsource[] = "stringsource"; -static const char __pyx_k_ACCEPT_RANGES[] = "ACCEPT_RANGES"; -static const char __pyx_k_AUTHORIZATION[] = "AUTHORIZATION"; -static const char __pyx_k_BadStatusLine[] = "BadStatusLine"; -static const char __pyx_k_BaseException[] = "BaseException"; -static const char __pyx_k_CACHE_CONTROL[] = "CACHE_CONTROL"; -static const char __pyx_k_CIMultiDict_2[] = "_CIMultiDict"; -static const char __pyx_k_CONTENT_RANGE[] = "CONTENT_RANGE"; -static const char __pyx_k_DeflateBuffer[] = "DeflateBuffer"; -static const char __pyx_k_EMPTY_PAYLOAD[] = "EMPTY_PAYLOAD"; -static const char __pyx_k_HttpVersion10[] = "HttpVersion10"; -static const char __pyx_k_HttpVersion11[] = "HttpVersion11"; -static const char __pyx_k_HttpVersion_2[] = "_HttpVersion"; -static const char __pyx_k_IF_NONE_MATCH[] = "IF_NONE_MATCH"; -static const char __pyx_k_InvalidHeader[] = "InvalidHeader"; -static const char __pyx_k_LAST_EVENT_ID[] = "LAST_EVENT_ID"; -static const char __pyx_k_LAST_MODIFIED[] = "LAST_MODIFIED"; -static const char __pyx_k_invalid_url_r[] = "invalid url {!r}"; -static const char __pyx_k_max_line_size[] = "max_line_size"; -static const char __pyx_k_reduce_cython[] = "__reduce_cython__"; -static const char __pyx_k_set_exception[] = "set_exception"; -static const char __pyx_k_ACCEPT_CHARSET[] = "ACCEPT_CHARSET"; -static const char __pyx_k_BadHttpMessage[] = "BadHttpMessage"; -static const char __pyx_k_CONTENT_LENGTH[] = "CONTENT_LENGTH"; -static const char __pyx_k_StreamReader_2[] = "_StreamReader"; -static const char __pyx_k_max_field_size[] = "max_field_size"; -static const char __pyx_k_read_until_eof[] = "read_until_eof"; -static const char __pyx_k_ACCEPT_ENCODING[] = "ACCEPT_ENCODING"; -static const char __pyx_k_ACCEPT_LANGUAGE[] = "ACCEPT_LANGUAGE"; -static const char __pyx_k_DeflateBuffer_2[] = "_DeflateBuffer"; -static const char __pyx_k_EMPTY_PAYLOAD_2[] = "_EMPTY_PAYLOAD"; -static const char __pyx_k_HttpVersion10_2[] = "_HttpVersion10"; -static const char __pyx_k_HttpVersion11_2[] = "_HttpVersion11"; -static const char __pyx_k_InvalidURLError[] = "InvalidURLError"; -static const char __pyx_k_X_FORWARDED_FOR[] = "X_FORWARDED_FOR"; -static const char __pyx_k_auto_decompress[] = "auto_decompress"; -static const char __pyx_k_http_exceptions[] = "http_exceptions"; -static const char __pyx_k_pyx_PickleError[] = "__pyx_PickleError"; -static const char __pyx_k_setstate_cython[] = "__setstate_cython__"; -static const char __pyx_k_CIMultiDictProxy[] = "CIMultiDictProxy"; -static const char __pyx_k_CONTENT_ENCODING[] = "CONTENT_ENCODING"; -static const char __pyx_k_CONTENT_LANGUAGE[] = "CONTENT_LANGUAGE"; -static const char __pyx_k_CONTENT_LOCATION[] = "CONTENT_LOCATION"; -static const char __pyx_k_WWW_AUTHENTICATE[] = "WWW_AUTHENTICATE"; -static const char __pyx_k_X_FORWARDED_HOST[] = "X_FORWARDED_HOST"; -static const char __pyx_k_HttpRequestParser[] = "HttpRequestParser"; -static const char __pyx_k_IF_MODIFIED_SINCE[] = "IF_MODIFIED_SINCE"; -static const char __pyx_k_RawRequestMessage[] = "_http_method[i] - */ - -static CYTHON_INLINE PyObject *__pyx_f_7aiohttp_12_http_parser_http_method_str(int __pyx_v_i) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("http_method_str", 0); - - /* "aiohttp/_http_parser.pyx":93 - * - * cdef inline str http_method_str(int i): - * if i < METHODS_COUNT: # <<<<<<<<<<<<<< - * return _http_method[i] - * else: - */ - __pyx_t_1 = ((__pyx_v_i < 34) != 0); - if (__pyx_t_1) { - - /* "aiohttp/_http_parser.pyx":94 - * cdef inline str http_method_str(int i): - * if i < METHODS_COUNT: - * return _http_method[i] # <<<<<<<<<<<<<< - * else: - * return "" - */ - __Pyx_XDECREF(__pyx_r); - if (unlikely(__pyx_v_7aiohttp_12_http_parser__http_method == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 94, __pyx_L1_error) - } - __pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_7aiohttp_12_http_parser__http_method, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 1, 1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 94, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(((PyObject*)__pyx_t_2)); - __pyx_r = ((PyObject*)__pyx_t_2); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - goto __pyx_L0; - - /* "aiohttp/_http_parser.pyx":93 - * - * cdef inline str http_method_str(int i): - * if i < METHODS_COUNT: # <<<<<<<<<<<<<< - * return _http_method[i] - * else: - */ - } - - /* "aiohttp/_http_parser.pyx":96 - * return _http_method[i] - * else: - * return "" # <<<<<<<<<<<<<< - * - * cdef inline object find_header(bytes raw_header): - */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_kp_u_unknown); - __pyx_r = __pyx_kp_u_unknown; - goto __pyx_L0; - } - - /* "aiohttp/_http_parser.pyx":92 - * - * - * cdef inline str http_method_str(int i): # <<<<<<<<<<<<<< - * if i < METHODS_COUNT: - * return _http_method[i] - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("aiohttp._http_parser.http_method_str", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":98 - * return "" - * - * cdef inline object find_header(bytes raw_header): # <<<<<<<<<<<<<< - * cdef Py_ssize_t size - * cdef char *buf - */ - -static CYTHON_INLINE PyObject *__pyx_f_7aiohttp_12_http_parser_find_header(PyObject *__pyx_v_raw_header) { - Py_ssize_t __pyx_v_size; - char *__pyx_v_buf; - int __pyx_v_idx; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("find_header", 0); - - /* "aiohttp/_http_parser.pyx":102 - * cdef char *buf - * cdef int idx - * PyBytes_AsStringAndSize(raw_header, &buf, &size) # <<<<<<<<<<<<<< - * idx = _find_header.find_header(buf, size) - * if idx == -1: - */ - __pyx_t_1 = PyBytes_AsStringAndSize(__pyx_v_raw_header, (&__pyx_v_buf), (&__pyx_v_size)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 102, __pyx_L1_error) - - /* "aiohttp/_http_parser.pyx":103 - * cdef int idx - * PyBytes_AsStringAndSize(raw_header, &buf, &size) - * idx = _find_header.find_header(buf, size) # <<<<<<<<<<<<<< - * if idx == -1: - * return raw_header.decode('utf-8', 'surrogateescape') - */ - __pyx_v_idx = find_header(__pyx_v_buf, __pyx_v_size); - - /* "aiohttp/_http_parser.pyx":104 - * PyBytes_AsStringAndSize(raw_header, &buf, &size) - * idx = _find_header.find_header(buf, size) - * if idx == -1: # <<<<<<<<<<<<<< - * return raw_header.decode('utf-8', 'surrogateescape') - * return headers[idx] - */ - __pyx_t_2 = ((__pyx_v_idx == -1L) != 0); - if (__pyx_t_2) { - - /* "aiohttp/_http_parser.pyx":105 - * idx = _find_header.find_header(buf, size) - * if idx == -1: - * return raw_header.decode('utf-8', 'surrogateescape') # <<<<<<<<<<<<<< - * return headers[idx] - * - */ - __Pyx_XDECREF(__pyx_r); - if (unlikely(__pyx_v_raw_header == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode"); - __PYX_ERR(0, 105, __pyx_L1_error) - } - __pyx_t_3 = __Pyx_decode_bytes(__pyx_v_raw_header, 0, PY_SSIZE_T_MAX, NULL, ((char const *)"surrogateescape"), PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 105, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "aiohttp/_http_parser.pyx":104 - * PyBytes_AsStringAndSize(raw_header, &buf, &size) - * idx = _find_header.find_header(buf, size) - * if idx == -1: # <<<<<<<<<<<<<< - * return raw_header.decode('utf-8', 'surrogateescape') - * return headers[idx] - */ - } - - /* "aiohttp/_http_parser.pyx":106 - * if idx == -1: - * return raw_header.decode('utf-8', 'surrogateescape') - * return headers[idx] # <<<<<<<<<<<<<< - * - * - */ - __Pyx_XDECREF(__pyx_r); - if (unlikely(__pyx_v_7aiohttp_12_http_parser_headers == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 106, __pyx_L1_error) - } - __pyx_t_3 = __Pyx_GetItemInt_Tuple(__pyx_v_7aiohttp_12_http_parser_headers, __pyx_v_idx, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 106, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "aiohttp/_http_parser.pyx":98 - * return "" - * - * cdef inline object find_header(bytes raw_header): # <<<<<<<<<<<<<< - * cdef Py_ssize_t size - * cdef char *buf - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("aiohttp._http_parser.find_header", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":122 - * cdef readonly object url # yarl.URL - * - * def __init__(self, method, path, version, headers, raw_headers, # <<<<<<<<<<<<<< - * should_close, compression, upgrade, chunked, url): - * self.method = method - */ - -/* Python wrapper */ -static int __pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_method = 0; - PyObject *__pyx_v_path = 0; - PyObject *__pyx_v_version = 0; - PyObject *__pyx_v_headers = 0; - PyObject *__pyx_v_raw_headers = 0; - PyObject *__pyx_v_should_close = 0; - PyObject *__pyx_v_compression = 0; - PyObject *__pyx_v_upgrade = 0; - PyObject *__pyx_v_chunked = 0; - PyObject *__pyx_v_url = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_method,&__pyx_n_s_path,&__pyx_n_s_version,&__pyx_n_s_headers,&__pyx_n_s_raw_headers,&__pyx_n_s_should_close,&__pyx_n_s_compression,&__pyx_n_s_upgrade,&__pyx_n_s_chunked,&__pyx_n_s_url,0}; - PyObject* values[10] = {0,0,0,0,0,0,0,0,0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - CYTHON_FALLTHROUGH; - case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - CYTHON_FALLTHROUGH; - case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - CYTHON_FALLTHROUGH; - case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_method)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_path)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 10, 10, 1); __PYX_ERR(0, 122, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_version)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 10, 10, 2); __PYX_ERR(0, 122, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 3: - if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_headers)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 10, 10, 3); __PYX_ERR(0, 122, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 4: - if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_raw_headers)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 10, 10, 4); __PYX_ERR(0, 122, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 5: - if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_should_close)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 10, 10, 5); __PYX_ERR(0, 122, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 6: - if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_compression)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 10, 10, 6); __PYX_ERR(0, 122, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 7: - if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_upgrade)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 10, 10, 7); __PYX_ERR(0, 122, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 8: - if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_chunked)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 10, 10, 8); __PYX_ERR(0, 122, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 9: - if (likely((values[9] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_url)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 10, 10, 9); __PYX_ERR(0, 122, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 122, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 10) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - } - __pyx_v_method = values[0]; - __pyx_v_path = values[1]; - __pyx_v_version = values[2]; - __pyx_v_headers = values[3]; - __pyx_v_raw_headers = values[4]; - __pyx_v_should_close = values[5]; - __pyx_v_compression = values[6]; - __pyx_v_upgrade = values[7]; - __pyx_v_chunked = values[8]; - __pyx_v_url = values[9]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 1, 10, 10, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 122, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("aiohttp._http_parser.RawRequestMessage.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return -1; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage___init__(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self), __pyx_v_method, __pyx_v_path, __pyx_v_version, __pyx_v_headers, __pyx_v_raw_headers, __pyx_v_should_close, __pyx_v_compression, __pyx_v_upgrade, __pyx_v_chunked, __pyx_v_url); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage___init__(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self, PyObject *__pyx_v_method, PyObject *__pyx_v_path, PyObject *__pyx_v_version, PyObject *__pyx_v_headers, PyObject *__pyx_v_raw_headers, PyObject *__pyx_v_should_close, PyObject *__pyx_v_compression, PyObject *__pyx_v_upgrade, PyObject *__pyx_v_chunked, PyObject *__pyx_v_url) { - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__init__", 0); - - /* "aiohttp/_http_parser.pyx":124 - * def __init__(self, method, path, version, headers, raw_headers, - * should_close, compression, upgrade, chunked, url): - * self.method = method # <<<<<<<<<<<<<< - * self.path = path - * self.version = version - */ - if (!(likely(PyUnicode_CheckExact(__pyx_v_method))||((__pyx_v_method) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_method)->tp_name), 0))) __PYX_ERR(0, 124, __pyx_L1_error) - __pyx_t_1 = __pyx_v_method; - __Pyx_INCREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v_self->method); - __Pyx_DECREF(__pyx_v_self->method); - __pyx_v_self->method = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":125 - * should_close, compression, upgrade, chunked, url): - * self.method = method - * self.path = path # <<<<<<<<<<<<<< - * self.version = version - * self.headers = headers - */ - if (!(likely(PyUnicode_CheckExact(__pyx_v_path))||((__pyx_v_path) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_path)->tp_name), 0))) __PYX_ERR(0, 125, __pyx_L1_error) - __pyx_t_1 = __pyx_v_path; - __Pyx_INCREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v_self->path); - __Pyx_DECREF(__pyx_v_self->path); - __pyx_v_self->path = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":126 - * self.method = method - * self.path = path - * self.version = version # <<<<<<<<<<<<<< - * self.headers = headers - * self.raw_headers = raw_headers - */ - __Pyx_INCREF(__pyx_v_version); - __Pyx_GIVEREF(__pyx_v_version); - __Pyx_GOTREF(__pyx_v_self->version); - __Pyx_DECREF(__pyx_v_self->version); - __pyx_v_self->version = __pyx_v_version; - - /* "aiohttp/_http_parser.pyx":127 - * self.path = path - * self.version = version - * self.headers = headers # <<<<<<<<<<<<<< - * self.raw_headers = raw_headers - * self.should_close = should_close - */ - __Pyx_INCREF(__pyx_v_headers); - __Pyx_GIVEREF(__pyx_v_headers); - __Pyx_GOTREF(__pyx_v_self->headers); - __Pyx_DECREF(__pyx_v_self->headers); - __pyx_v_self->headers = __pyx_v_headers; - - /* "aiohttp/_http_parser.pyx":128 - * self.version = version - * self.headers = headers - * self.raw_headers = raw_headers # <<<<<<<<<<<<<< - * self.should_close = should_close - * self.compression = compression - */ - __Pyx_INCREF(__pyx_v_raw_headers); - __Pyx_GIVEREF(__pyx_v_raw_headers); - __Pyx_GOTREF(__pyx_v_self->raw_headers); - __Pyx_DECREF(__pyx_v_self->raw_headers); - __pyx_v_self->raw_headers = __pyx_v_raw_headers; - - /* "aiohttp/_http_parser.pyx":129 - * self.headers = headers - * self.raw_headers = raw_headers - * self.should_close = should_close # <<<<<<<<<<<<<< - * self.compression = compression - * self.upgrade = upgrade - */ - __Pyx_INCREF(__pyx_v_should_close); - __Pyx_GIVEREF(__pyx_v_should_close); - __Pyx_GOTREF(__pyx_v_self->should_close); - __Pyx_DECREF(__pyx_v_self->should_close); - __pyx_v_self->should_close = __pyx_v_should_close; - - /* "aiohttp/_http_parser.pyx":130 - * self.raw_headers = raw_headers - * self.should_close = should_close - * self.compression = compression # <<<<<<<<<<<<<< - * self.upgrade = upgrade - * self.chunked = chunked - */ - __Pyx_INCREF(__pyx_v_compression); - __Pyx_GIVEREF(__pyx_v_compression); - __Pyx_GOTREF(__pyx_v_self->compression); - __Pyx_DECREF(__pyx_v_self->compression); - __pyx_v_self->compression = __pyx_v_compression; - - /* "aiohttp/_http_parser.pyx":131 - * self.should_close = should_close - * self.compression = compression - * self.upgrade = upgrade # <<<<<<<<<<<<<< - * self.chunked = chunked - * self.url = url - */ - __Pyx_INCREF(__pyx_v_upgrade); - __Pyx_GIVEREF(__pyx_v_upgrade); - __Pyx_GOTREF(__pyx_v_self->upgrade); - __Pyx_DECREF(__pyx_v_self->upgrade); - __pyx_v_self->upgrade = __pyx_v_upgrade; - - /* "aiohttp/_http_parser.pyx":132 - * self.compression = compression - * self.upgrade = upgrade - * self.chunked = chunked # <<<<<<<<<<<<<< - * self.url = url - * - */ - __Pyx_INCREF(__pyx_v_chunked); - __Pyx_GIVEREF(__pyx_v_chunked); - __Pyx_GOTREF(__pyx_v_self->chunked); - __Pyx_DECREF(__pyx_v_self->chunked); - __pyx_v_self->chunked = __pyx_v_chunked; - - /* "aiohttp/_http_parser.pyx":133 - * self.upgrade = upgrade - * self.chunked = chunked - * self.url = url # <<<<<<<<<<<<<< - * - * def __repr__(self): - */ - __Pyx_INCREF(__pyx_v_url); - __Pyx_GIVEREF(__pyx_v_url); - __Pyx_GOTREF(__pyx_v_self->url); - __Pyx_DECREF(__pyx_v_self->url); - __pyx_v_self->url = __pyx_v_url; - - /* "aiohttp/_http_parser.pyx":122 - * cdef readonly object url # yarl.URL - * - * def __init__(self, method, path, version, headers, raw_headers, # <<<<<<<<<<<<<< - * should_close, compression, upgrade, chunked, url): - * self.method = method - */ - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._http_parser.RawRequestMessage.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":135 - * self.url = url - * - * def __repr__(self): # <<<<<<<<<<<<<< - * info = [] - * info.append(("method", self.method)) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_3__repr__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_3__repr__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_2__repr__(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} -static PyObject *__pyx_gb_7aiohttp_12_http_parser_17RawRequestMessage_8__repr___2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ - -/* "aiohttp/_http_parser.pyx":147 - * info.append(("chunked", self.chunked)) - * info.append(("url", self.url)) - * sinfo = ', '.join(name + '=' + repr(val) for name, val in info) # <<<<<<<<<<<<<< - * return '' - * - */ - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_8__repr___genexpr(PyObject *__pyx_self) { - struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr *__pyx_cur_scope; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("genexpr", 0); - __pyx_cur_scope = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr *)__pyx_tp_new_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr(__pyx_ptype_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr, __pyx_empty_tuple, NULL); - if (unlikely(!__pyx_cur_scope)) { - __pyx_cur_scope = ((struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr *)Py_None); - __Pyx_INCREF(Py_None); - __PYX_ERR(0, 147, __pyx_L1_error) - } else { - __Pyx_GOTREF(__pyx_cur_scope); - } - __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__ *) __pyx_self; - __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope)); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope); - { - __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_7aiohttp_12_http_parser_17RawRequestMessage_8__repr___2generator, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_repr___locals_genexpr, __pyx_n_s_aiohttp__http_parser); if (unlikely(!gen)) __PYX_ERR(0, 147, __pyx_L1_error) - __Pyx_DECREF(__pyx_cur_scope); - __Pyx_RefNannyFinishContext(); - return (PyObject *) gen; - } - - /* function exit code */ - __pyx_L1_error:; - __Pyx_AddTraceback("aiohttp._http_parser.RawRequestMessage.__repr__.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __Pyx_DECREF(((PyObject *)__pyx_cur_scope)); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_gb_7aiohttp_12_http_parser_17RawRequestMessage_8__repr___2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ -{ - struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr *__pyx_cur_scope = ((struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr *)__pyx_generator->closure); - PyObject *__pyx_r = NULL; - PyObject *__pyx_t_1 = NULL; - Py_ssize_t __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *(*__pyx_t_7)(PyObject *); - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("genexpr", 0); - switch (__pyx_generator->resume_label) { - case 0: goto __pyx_L3_first_run; - default: /* CPython raises the right error here */ - __Pyx_RefNannyFinishContext(); - return NULL; - } - __pyx_L3_first_run:; - if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 147, __pyx_L1_error) - __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 147, __pyx_L1_error) - __Pyx_GOTREF(__pyx_r); - if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_info)) { __Pyx_RaiseClosureNameError("info"); __PYX_ERR(0, 147, __pyx_L1_error) } - if (unlikely(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_info == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(0, 147, __pyx_L1_error) - } - __pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_info; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0; - for (;;) { - if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 147, __pyx_L1_error) - #else - __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 147, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - #endif - if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { - PyObject* sequence = __pyx_t_3; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 2)) { - if (size > 2) __Pyx_RaiseTooManyValuesError(2); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 147, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); - } else { - __pyx_t_4 = PyList_GET_ITEM(sequence, 0); - __pyx_t_5 = PyList_GET_ITEM(sequence, 1); - } - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - #else - __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 147, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 147, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - #endif - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } else { - Py_ssize_t index = -1; - __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 147, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext; - index = 0; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L6_unpacking_failed; - __Pyx_GOTREF(__pyx_t_4); - index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L6_unpacking_failed; - __Pyx_GOTREF(__pyx_t_5); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(0, 147, __pyx_L1_error) - __pyx_t_7 = NULL; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L7_unpacking_done; - __pyx_L6_unpacking_failed:; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_7 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 147, __pyx_L1_error) - __pyx_L7_unpacking_done:; - } - __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_name); - __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_name, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_4 = 0; - __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_val); - __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_val, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_cur_scope->__pyx_v_name, __pyx_kp_u_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 147, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyObject_Repr(__pyx_cur_scope->__pyx_v_val); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 147, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 147, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 147, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); - - /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_r); __pyx_r = 0; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - #if !CYTHON_USE_EXC_INFO_STACK - __Pyx_Coroutine_ResetAndClearException(__pyx_generator); - #endif - __pyx_generator->resume_label = -1; - __Pyx_Coroutine_clear((PyObject*)__pyx_generator); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":135 - * self.url = url - * - * def __repr__(self): # <<<<<<<<<<<<<< - * info = [] - * info.append(("method", self.method)) - */ - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_2__repr__(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self) { - struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__ *__pyx_cur_scope; - PyObject *__pyx_v_sinfo = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__repr__", 0); - __pyx_cur_scope = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__ *)__pyx_tp_new_7aiohttp_12_http_parser___pyx_scope_struct____repr__(__pyx_ptype_7aiohttp_12_http_parser___pyx_scope_struct____repr__, __pyx_empty_tuple, NULL); - if (unlikely(!__pyx_cur_scope)) { - __pyx_cur_scope = ((struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__ *)Py_None); - __Pyx_INCREF(Py_None); - __PYX_ERR(0, 135, __pyx_L1_error) - } else { - __Pyx_GOTREF(__pyx_cur_scope); - } - - /* "aiohttp/_http_parser.pyx":136 - * - * def __repr__(self): - * info = [] # <<<<<<<<<<<<<< - * info.append(("method", self.method)) - * info.append(("path", self.path)) - */ - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 136, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_cur_scope->__pyx_v_info = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":137 - * def __repr__(self): - * info = [] - * info.append(("method", self.method)) # <<<<<<<<<<<<<< - * info.append(("path", self.path)) - * info.append(("version", self.version)) - */ - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 137, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_u_method); - __Pyx_GIVEREF(__pyx_n_u_method); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_method); - __Pyx_INCREF(__pyx_v_self->method); - __Pyx_GIVEREF(__pyx_v_self->method); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->method); - __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 137, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":138 - * info = [] - * info.append(("method", self.method)) - * info.append(("path", self.path)) # <<<<<<<<<<<<<< - * info.append(("version", self.version)) - * info.append(("headers", self.headers)) - */ - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 138, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_u_path); - __Pyx_GIVEREF(__pyx_n_u_path); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_path); - __Pyx_INCREF(__pyx_v_self->path); - __Pyx_GIVEREF(__pyx_v_self->path); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->path); - __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 138, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":139 - * info.append(("method", self.method)) - * info.append(("path", self.path)) - * info.append(("version", self.version)) # <<<<<<<<<<<<<< - * info.append(("headers", self.headers)) - * info.append(("raw_headers", self.raw_headers)) - */ - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 139, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_u_version); - __Pyx_GIVEREF(__pyx_n_u_version); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_version); - __Pyx_INCREF(__pyx_v_self->version); - __Pyx_GIVEREF(__pyx_v_self->version); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->version); - __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 139, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":140 - * info.append(("path", self.path)) - * info.append(("version", self.version)) - * info.append(("headers", self.headers)) # <<<<<<<<<<<<<< - * info.append(("raw_headers", self.raw_headers)) - * info.append(("should_close", self.should_close)) - */ - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 140, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_u_headers); - __Pyx_GIVEREF(__pyx_n_u_headers); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_headers); - __Pyx_INCREF(__pyx_v_self->headers); - __Pyx_GIVEREF(__pyx_v_self->headers); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->headers); - __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 140, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":141 - * info.append(("version", self.version)) - * info.append(("headers", self.headers)) - * info.append(("raw_headers", self.raw_headers)) # <<<<<<<<<<<<<< - * info.append(("should_close", self.should_close)) - * info.append(("compression", self.compression)) - */ - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 141, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_u_raw_headers); - __Pyx_GIVEREF(__pyx_n_u_raw_headers); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_raw_headers); - __Pyx_INCREF(__pyx_v_self->raw_headers); - __Pyx_GIVEREF(__pyx_v_self->raw_headers); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->raw_headers); - __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 141, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":142 - * info.append(("headers", self.headers)) - * info.append(("raw_headers", self.raw_headers)) - * info.append(("should_close", self.should_close)) # <<<<<<<<<<<<<< - * info.append(("compression", self.compression)) - * info.append(("upgrade", self.upgrade)) - */ - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 142, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_u_should_close); - __Pyx_GIVEREF(__pyx_n_u_should_close); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_should_close); - __Pyx_INCREF(__pyx_v_self->should_close); - __Pyx_GIVEREF(__pyx_v_self->should_close); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->should_close); - __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 142, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":143 - * info.append(("raw_headers", self.raw_headers)) - * info.append(("should_close", self.should_close)) - * info.append(("compression", self.compression)) # <<<<<<<<<<<<<< - * info.append(("upgrade", self.upgrade)) - * info.append(("chunked", self.chunked)) - */ - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 143, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_u_compression); - __Pyx_GIVEREF(__pyx_n_u_compression); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_compression); - __Pyx_INCREF(__pyx_v_self->compression); - __Pyx_GIVEREF(__pyx_v_self->compression); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->compression); - __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 143, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":144 - * info.append(("should_close", self.should_close)) - * info.append(("compression", self.compression)) - * info.append(("upgrade", self.upgrade)) # <<<<<<<<<<<<<< - * info.append(("chunked", self.chunked)) - * info.append(("url", self.url)) - */ - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 144, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_u_upgrade); - __Pyx_GIVEREF(__pyx_n_u_upgrade); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_upgrade); - __Pyx_INCREF(__pyx_v_self->upgrade); - __Pyx_GIVEREF(__pyx_v_self->upgrade); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->upgrade); - __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 144, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":145 - * info.append(("compression", self.compression)) - * info.append(("upgrade", self.upgrade)) - * info.append(("chunked", self.chunked)) # <<<<<<<<<<<<<< - * info.append(("url", self.url)) - * sinfo = ', '.join(name + '=' + repr(val) for name, val in info) - */ - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 145, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_u_chunked); - __Pyx_GIVEREF(__pyx_n_u_chunked); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_chunked); - __Pyx_INCREF(__pyx_v_self->chunked); - __Pyx_GIVEREF(__pyx_v_self->chunked); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->chunked); - __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 145, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":146 - * info.append(("upgrade", self.upgrade)) - * info.append(("chunked", self.chunked)) - * info.append(("url", self.url)) # <<<<<<<<<<<<<< - * sinfo = ', '.join(name + '=' + repr(val) for name, val in info) - * return '' - */ - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 146, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_u_url); - __Pyx_GIVEREF(__pyx_n_u_url); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_url); - __Pyx_INCREF(__pyx_v_self->url); - __Pyx_GIVEREF(__pyx_v_self->url); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->url); - __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 146, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":147 - * info.append(("chunked", self.chunked)) - * info.append(("url", self.url)) - * sinfo = ', '.join(name + '=' + repr(val) for name, val in info) # <<<<<<<<<<<<<< - * return '' - * - */ - __pyx_t_1 = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_8__repr___genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 147, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_Generator_Next(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 147, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyUnicode_Join(__pyx_kp_u__2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 147, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_sinfo = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":148 - * info.append(("url", self.url)) - * sinfo = ', '.join(name + '=' + repr(val) for name, val in info) - * return '' # <<<<<<<<<<<<<< - * - * def _replace(self, **dct): - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyUnicode_ConcatSafe(__pyx_kp_u_RawRequestMessage, __pyx_v_sinfo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 148, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyUnicode_Concat(__pyx_t_1, __pyx_kp_u__3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 148, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "aiohttp/_http_parser.pyx":135 - * self.url = url - * - * def __repr__(self): # <<<<<<<<<<<<<< - * info = [] - * info.append(("method", self.method)) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("aiohttp._http_parser.RawRequestMessage.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_sinfo); - __Pyx_DECREF(((PyObject *)__pyx_cur_scope)); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":150 - * return '' - * - * def _replace(self, **dct): # <<<<<<<<<<<<<< - * cdef RawRequestMessage ret - * ret = _new_request_message(self.method, - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_5_replace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_5_replace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_dct = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_replace (wrapper)", 0); - if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) { - __Pyx_RaiseArgtupleInvalid("_replace", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;} - if (__pyx_kwds && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "_replace", 1))) return NULL; - __pyx_v_dct = (__pyx_kwds) ? PyDict_Copy(__pyx_kwds) : PyDict_New(); if (unlikely(!__pyx_v_dct)) return NULL; - __Pyx_GOTREF(__pyx_v_dct); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_4_replace(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self), __pyx_v_dct); - - /* function exit code */ - __Pyx_XDECREF(__pyx_v_dct); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_4_replace(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self, PyObject *__pyx_v_dct) { - struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_ret = 0; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - PyObject *__pyx_t_7 = NULL; - int __pyx_t_8; - int __pyx_t_9; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_replace", 0); - - /* "aiohttp/_http_parser.pyx":152 - * def _replace(self, **dct): - * cdef RawRequestMessage ret - * ret = _new_request_message(self.method, # <<<<<<<<<<<<<< - * self.path, - * self.version, - */ - __pyx_t_1 = __pyx_v_self->method; - __Pyx_INCREF(__pyx_t_1); - - /* "aiohttp/_http_parser.pyx":153 - * cdef RawRequestMessage ret - * ret = _new_request_message(self.method, - * self.path, # <<<<<<<<<<<<<< - * self.version, - * self.headers, - */ - __pyx_t_2 = __pyx_v_self->path; - __Pyx_INCREF(__pyx_t_2); - - /* "aiohttp/_http_parser.pyx":154 - * ret = _new_request_message(self.method, - * self.path, - * self.version, # <<<<<<<<<<<<<< - * self.headers, - * self.raw_headers, - */ - __pyx_t_3 = __pyx_v_self->version; - __Pyx_INCREF(__pyx_t_3); - - /* "aiohttp/_http_parser.pyx":155 - * self.path, - * self.version, - * self.headers, # <<<<<<<<<<<<<< - * self.raw_headers, - * self.should_close, - */ - __pyx_t_4 = __pyx_v_self->headers; - __Pyx_INCREF(__pyx_t_4); - - /* "aiohttp/_http_parser.pyx":156 - * self.version, - * self.headers, - * self.raw_headers, # <<<<<<<<<<<<<< - * self.should_close, - * self.compression, - */ - __pyx_t_5 = __pyx_v_self->raw_headers; - __Pyx_INCREF(__pyx_t_5); - - /* "aiohttp/_http_parser.pyx":157 - * self.headers, - * self.raw_headers, - * self.should_close, # <<<<<<<<<<<<<< - * self.compression, - * self.upgrade, - */ - __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_self->should_close); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 157, __pyx_L1_error) - - /* "aiohttp/_http_parser.pyx":158 - * self.raw_headers, - * self.should_close, - * self.compression, # <<<<<<<<<<<<<< - * self.upgrade, - * self.chunked, - */ - __pyx_t_7 = __pyx_v_self->compression; - __Pyx_INCREF(__pyx_t_7); - - /* "aiohttp/_http_parser.pyx":159 - * self.should_close, - * self.compression, - * self.upgrade, # <<<<<<<<<<<<<< - * self.chunked, - * self.url) - */ - __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_self->upgrade); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 159, __pyx_L1_error) - - /* "aiohttp/_http_parser.pyx":160 - * self.compression, - * self.upgrade, - * self.chunked, # <<<<<<<<<<<<<< - * self.url) - * if "method" in dct: - */ - __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_self->chunked); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 160, __pyx_L1_error) - - /* "aiohttp/_http_parser.pyx":161 - * self.upgrade, - * self.chunked, - * self.url) # <<<<<<<<<<<<<< - * if "method" in dct: - * ret.method = dct["method"] - */ - __pyx_t_10 = __pyx_v_self->url; - __Pyx_INCREF(__pyx_t_10); - - /* "aiohttp/_http_parser.pyx":152 - * def _replace(self, **dct): - * cdef RawRequestMessage ret - * ret = _new_request_message(self.method, # <<<<<<<<<<<<<< - * self.path, - * self.version, - */ - __pyx_t_11 = __pyx_f_7aiohttp_12_http_parser__new_request_message(((PyObject*)__pyx_t_1), ((PyObject*)__pyx_t_2), __pyx_t_3, __pyx_t_4, __pyx_t_5, __pyx_t_6, __pyx_t_7, __pyx_t_8, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 152, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; - if (!(likely(((__pyx_t_11) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_11, __pyx_ptype_7aiohttp_12_http_parser_RawRequestMessage))))) __PYX_ERR(0, 152, __pyx_L1_error) - __pyx_v_ret = ((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_t_11); - __pyx_t_11 = 0; - - /* "aiohttp/_http_parser.pyx":162 - * self.chunked, - * self.url) - * if "method" in dct: # <<<<<<<<<<<<<< - * ret.method = dct["method"] - * if "path" in dct: - */ - __pyx_t_9 = (__Pyx_PyDict_ContainsTF(__pyx_n_u_method, __pyx_v_dct, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 162, __pyx_L1_error) - __pyx_t_8 = (__pyx_t_9 != 0); - if (__pyx_t_8) { - - /* "aiohttp/_http_parser.pyx":163 - * self.url) - * if "method" in dct: - * ret.method = dct["method"] # <<<<<<<<<<<<<< - * if "path" in dct: - * ret.path = dct["path"] - */ - __pyx_t_11 = __Pyx_PyDict_GetItem(__pyx_v_dct, __pyx_n_u_method); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 163, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - if (!(likely(PyUnicode_CheckExact(__pyx_t_11))||((__pyx_t_11) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_11)->tp_name), 0))) __PYX_ERR(0, 163, __pyx_L1_error) - __Pyx_GIVEREF(__pyx_t_11); - __Pyx_GOTREF(__pyx_v_ret->method); - __Pyx_DECREF(__pyx_v_ret->method); - __pyx_v_ret->method = ((PyObject*)__pyx_t_11); - __pyx_t_11 = 0; - - /* "aiohttp/_http_parser.pyx":162 - * self.chunked, - * self.url) - * if "method" in dct: # <<<<<<<<<<<<<< - * ret.method = dct["method"] - * if "path" in dct: - */ - } - - /* "aiohttp/_http_parser.pyx":164 - * if "method" in dct: - * ret.method = dct["method"] - * if "path" in dct: # <<<<<<<<<<<<<< - * ret.path = dct["path"] - * if "version" in dct: - */ - __pyx_t_8 = (__Pyx_PyDict_ContainsTF(__pyx_n_u_path, __pyx_v_dct, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 164, __pyx_L1_error) - __pyx_t_9 = (__pyx_t_8 != 0); - if (__pyx_t_9) { - - /* "aiohttp/_http_parser.pyx":165 - * ret.method = dct["method"] - * if "path" in dct: - * ret.path = dct["path"] # <<<<<<<<<<<<<< - * if "version" in dct: - * ret.version = dct["version"] - */ - __pyx_t_11 = __Pyx_PyDict_GetItem(__pyx_v_dct, __pyx_n_u_path); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 165, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - if (!(likely(PyUnicode_CheckExact(__pyx_t_11))||((__pyx_t_11) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_11)->tp_name), 0))) __PYX_ERR(0, 165, __pyx_L1_error) - __Pyx_GIVEREF(__pyx_t_11); - __Pyx_GOTREF(__pyx_v_ret->path); - __Pyx_DECREF(__pyx_v_ret->path); - __pyx_v_ret->path = ((PyObject*)__pyx_t_11); - __pyx_t_11 = 0; - - /* "aiohttp/_http_parser.pyx":164 - * if "method" in dct: - * ret.method = dct["method"] - * if "path" in dct: # <<<<<<<<<<<<<< - * ret.path = dct["path"] - * if "version" in dct: - */ - } - - /* "aiohttp/_http_parser.pyx":166 - * if "path" in dct: - * ret.path = dct["path"] - * if "version" in dct: # <<<<<<<<<<<<<< - * ret.version = dct["version"] - * if "headers" in dct: - */ - __pyx_t_9 = (__Pyx_PyDict_ContainsTF(__pyx_n_u_version, __pyx_v_dct, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 166, __pyx_L1_error) - __pyx_t_8 = (__pyx_t_9 != 0); - if (__pyx_t_8) { - - /* "aiohttp/_http_parser.pyx":167 - * ret.path = dct["path"] - * if "version" in dct: - * ret.version = dct["version"] # <<<<<<<<<<<<<< - * if "headers" in dct: - * ret.headers = dct["headers"] - */ - __pyx_t_11 = __Pyx_PyDict_GetItem(__pyx_v_dct, __pyx_n_u_version); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 167, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_GIVEREF(__pyx_t_11); - __Pyx_GOTREF(__pyx_v_ret->version); - __Pyx_DECREF(__pyx_v_ret->version); - __pyx_v_ret->version = __pyx_t_11; - __pyx_t_11 = 0; - - /* "aiohttp/_http_parser.pyx":166 - * if "path" in dct: - * ret.path = dct["path"] - * if "version" in dct: # <<<<<<<<<<<<<< - * ret.version = dct["version"] - * if "headers" in dct: - */ - } - - /* "aiohttp/_http_parser.pyx":168 - * if "version" in dct: - * ret.version = dct["version"] - * if "headers" in dct: # <<<<<<<<<<<<<< - * ret.headers = dct["headers"] - * if "raw_headers" in dct: - */ - __pyx_t_8 = (__Pyx_PyDict_ContainsTF(__pyx_n_u_headers, __pyx_v_dct, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 168, __pyx_L1_error) - __pyx_t_9 = (__pyx_t_8 != 0); - if (__pyx_t_9) { - - /* "aiohttp/_http_parser.pyx":169 - * ret.version = dct["version"] - * if "headers" in dct: - * ret.headers = dct["headers"] # <<<<<<<<<<<<<< - * if "raw_headers" in dct: - * ret.raw_headers = dct["raw_headers"] - */ - __pyx_t_11 = __Pyx_PyDict_GetItem(__pyx_v_dct, __pyx_n_u_headers); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 169, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_GIVEREF(__pyx_t_11); - __Pyx_GOTREF(__pyx_v_ret->headers); - __Pyx_DECREF(__pyx_v_ret->headers); - __pyx_v_ret->headers = __pyx_t_11; - __pyx_t_11 = 0; - - /* "aiohttp/_http_parser.pyx":168 - * if "version" in dct: - * ret.version = dct["version"] - * if "headers" in dct: # <<<<<<<<<<<<<< - * ret.headers = dct["headers"] - * if "raw_headers" in dct: - */ - } - - /* "aiohttp/_http_parser.pyx":170 - * if "headers" in dct: - * ret.headers = dct["headers"] - * if "raw_headers" in dct: # <<<<<<<<<<<<<< - * ret.raw_headers = dct["raw_headers"] - * if "should_close" in dct: - */ - __pyx_t_9 = (__Pyx_PyDict_ContainsTF(__pyx_n_u_raw_headers, __pyx_v_dct, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 170, __pyx_L1_error) - __pyx_t_8 = (__pyx_t_9 != 0); - if (__pyx_t_8) { - - /* "aiohttp/_http_parser.pyx":171 - * ret.headers = dct["headers"] - * if "raw_headers" in dct: - * ret.raw_headers = dct["raw_headers"] # <<<<<<<<<<<<<< - * if "should_close" in dct: - * ret.should_close = dct["should_close"] - */ - __pyx_t_11 = __Pyx_PyDict_GetItem(__pyx_v_dct, __pyx_n_u_raw_headers); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 171, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_GIVEREF(__pyx_t_11); - __Pyx_GOTREF(__pyx_v_ret->raw_headers); - __Pyx_DECREF(__pyx_v_ret->raw_headers); - __pyx_v_ret->raw_headers = __pyx_t_11; - __pyx_t_11 = 0; - - /* "aiohttp/_http_parser.pyx":170 - * if "headers" in dct: - * ret.headers = dct["headers"] - * if "raw_headers" in dct: # <<<<<<<<<<<<<< - * ret.raw_headers = dct["raw_headers"] - * if "should_close" in dct: - */ - } - - /* "aiohttp/_http_parser.pyx":172 - * if "raw_headers" in dct: - * ret.raw_headers = dct["raw_headers"] - * if "should_close" in dct: # <<<<<<<<<<<<<< - * ret.should_close = dct["should_close"] - * if "compression" in dct: - */ - __pyx_t_8 = (__Pyx_PyDict_ContainsTF(__pyx_n_u_should_close, __pyx_v_dct, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 172, __pyx_L1_error) - __pyx_t_9 = (__pyx_t_8 != 0); - if (__pyx_t_9) { - - /* "aiohttp/_http_parser.pyx":173 - * ret.raw_headers = dct["raw_headers"] - * if "should_close" in dct: - * ret.should_close = dct["should_close"] # <<<<<<<<<<<<<< - * if "compression" in dct: - * ret.compression = dct["compression"] - */ - __pyx_t_11 = __Pyx_PyDict_GetItem(__pyx_v_dct, __pyx_n_u_should_close); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 173, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_GIVEREF(__pyx_t_11); - __Pyx_GOTREF(__pyx_v_ret->should_close); - __Pyx_DECREF(__pyx_v_ret->should_close); - __pyx_v_ret->should_close = __pyx_t_11; - __pyx_t_11 = 0; - - /* "aiohttp/_http_parser.pyx":172 - * if "raw_headers" in dct: - * ret.raw_headers = dct["raw_headers"] - * if "should_close" in dct: # <<<<<<<<<<<<<< - * ret.should_close = dct["should_close"] - * if "compression" in dct: - */ - } - - /* "aiohttp/_http_parser.pyx":174 - * if "should_close" in dct: - * ret.should_close = dct["should_close"] - * if "compression" in dct: # <<<<<<<<<<<<<< - * ret.compression = dct["compression"] - * if "upgrade" in dct: - */ - __pyx_t_9 = (__Pyx_PyDict_ContainsTF(__pyx_n_u_compression, __pyx_v_dct, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 174, __pyx_L1_error) - __pyx_t_8 = (__pyx_t_9 != 0); - if (__pyx_t_8) { - - /* "aiohttp/_http_parser.pyx":175 - * ret.should_close = dct["should_close"] - * if "compression" in dct: - * ret.compression = dct["compression"] # <<<<<<<<<<<<<< - * if "upgrade" in dct: - * ret.upgrade = dct["upgrade"] - */ - __pyx_t_11 = __Pyx_PyDict_GetItem(__pyx_v_dct, __pyx_n_u_compression); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 175, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_GIVEREF(__pyx_t_11); - __Pyx_GOTREF(__pyx_v_ret->compression); - __Pyx_DECREF(__pyx_v_ret->compression); - __pyx_v_ret->compression = __pyx_t_11; - __pyx_t_11 = 0; - - /* "aiohttp/_http_parser.pyx":174 - * if "should_close" in dct: - * ret.should_close = dct["should_close"] - * if "compression" in dct: # <<<<<<<<<<<<<< - * ret.compression = dct["compression"] - * if "upgrade" in dct: - */ - } - - /* "aiohttp/_http_parser.pyx":176 - * if "compression" in dct: - * ret.compression = dct["compression"] - * if "upgrade" in dct: # <<<<<<<<<<<<<< - * ret.upgrade = dct["upgrade"] - * if "chunked" in dct: - */ - __pyx_t_8 = (__Pyx_PyDict_ContainsTF(__pyx_n_u_upgrade, __pyx_v_dct, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 176, __pyx_L1_error) - __pyx_t_9 = (__pyx_t_8 != 0); - if (__pyx_t_9) { - - /* "aiohttp/_http_parser.pyx":177 - * ret.compression = dct["compression"] - * if "upgrade" in dct: - * ret.upgrade = dct["upgrade"] # <<<<<<<<<<<<<< - * if "chunked" in dct: - * ret.chunked = dct["chunked"] - */ - __pyx_t_11 = __Pyx_PyDict_GetItem(__pyx_v_dct, __pyx_n_u_upgrade); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 177, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_GIVEREF(__pyx_t_11); - __Pyx_GOTREF(__pyx_v_ret->upgrade); - __Pyx_DECREF(__pyx_v_ret->upgrade); - __pyx_v_ret->upgrade = __pyx_t_11; - __pyx_t_11 = 0; - - /* "aiohttp/_http_parser.pyx":176 - * if "compression" in dct: - * ret.compression = dct["compression"] - * if "upgrade" in dct: # <<<<<<<<<<<<<< - * ret.upgrade = dct["upgrade"] - * if "chunked" in dct: - */ - } - - /* "aiohttp/_http_parser.pyx":178 - * if "upgrade" in dct: - * ret.upgrade = dct["upgrade"] - * if "chunked" in dct: # <<<<<<<<<<<<<< - * ret.chunked = dct["chunked"] - * if "url" in dct: - */ - __pyx_t_9 = (__Pyx_PyDict_ContainsTF(__pyx_n_u_chunked, __pyx_v_dct, Py_EQ)); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 178, __pyx_L1_error) - __pyx_t_8 = (__pyx_t_9 != 0); - if (__pyx_t_8) { - - /* "aiohttp/_http_parser.pyx":179 - * ret.upgrade = dct["upgrade"] - * if "chunked" in dct: - * ret.chunked = dct["chunked"] # <<<<<<<<<<<<<< - * if "url" in dct: - * ret.url = dct["url"] - */ - __pyx_t_11 = __Pyx_PyDict_GetItem(__pyx_v_dct, __pyx_n_u_chunked); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 179, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_GIVEREF(__pyx_t_11); - __Pyx_GOTREF(__pyx_v_ret->chunked); - __Pyx_DECREF(__pyx_v_ret->chunked); - __pyx_v_ret->chunked = __pyx_t_11; - __pyx_t_11 = 0; - - /* "aiohttp/_http_parser.pyx":178 - * if "upgrade" in dct: - * ret.upgrade = dct["upgrade"] - * if "chunked" in dct: # <<<<<<<<<<<<<< - * ret.chunked = dct["chunked"] - * if "url" in dct: - */ - } - - /* "aiohttp/_http_parser.pyx":180 - * if "chunked" in dct: - * ret.chunked = dct["chunked"] - * if "url" in dct: # <<<<<<<<<<<<<< - * ret.url = dct["url"] - * return ret - */ - __pyx_t_8 = (__Pyx_PyDict_ContainsTF(__pyx_n_u_url, __pyx_v_dct, Py_EQ)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 180, __pyx_L1_error) - __pyx_t_9 = (__pyx_t_8 != 0); - if (__pyx_t_9) { - - /* "aiohttp/_http_parser.pyx":181 - * ret.chunked = dct["chunked"] - * if "url" in dct: - * ret.url = dct["url"] # <<<<<<<<<<<<<< - * return ret - * - */ - __pyx_t_11 = __Pyx_PyDict_GetItem(__pyx_v_dct, __pyx_n_u_url); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 181, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_GIVEREF(__pyx_t_11); - __Pyx_GOTREF(__pyx_v_ret->url); - __Pyx_DECREF(__pyx_v_ret->url); - __pyx_v_ret->url = __pyx_t_11; - __pyx_t_11 = 0; - - /* "aiohttp/_http_parser.pyx":180 - * if "chunked" in dct: - * ret.chunked = dct["chunked"] - * if "url" in dct: # <<<<<<<<<<<<<< - * ret.url = dct["url"] - * return ret - */ - } - - /* "aiohttp/_http_parser.pyx":182 - * if "url" in dct: - * ret.url = dct["url"] - * return ret # <<<<<<<<<<<<<< - * - * cdef _new_request_message(str method, - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject *)__pyx_v_ret)); - __pyx_r = ((PyObject *)__pyx_v_ret); - goto __pyx_L0; - - /* "aiohttp/_http_parser.pyx":150 - * return '' - * - * def _replace(self, **dct): # <<<<<<<<<<<<<< - * cdef RawRequestMessage ret - * ret = _new_request_message(self.method, - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_AddTraceback("aiohttp._http_parser.RawRequestMessage._replace", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_ret); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":111 - * @cython.freelist(DEFAULT_FREELIST_SIZE) - * cdef class RawRequestMessage: - * cdef readonly str method # <<<<<<<<<<<<<< - * cdef readonly str path - * cdef readonly object version # HttpVersion - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_6method_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_6method_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_6method___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_6method___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->method); - __pyx_r = __pyx_v_self->method; - goto __pyx_L0; - - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":112 - * cdef class RawRequestMessage: - * cdef readonly str method - * cdef readonly str path # <<<<<<<<<<<<<< - * cdef readonly object version # HttpVersion - * cdef readonly object headers # CIMultiDict - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_4path_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_4path_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_4path___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_4path___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->path); - __pyx_r = __pyx_v_self->path; - goto __pyx_L0; - - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":113 - * cdef readonly str method - * cdef readonly str path - * cdef readonly object version # HttpVersion # <<<<<<<<<<<<<< - * cdef readonly object headers # CIMultiDict - * cdef readonly object raw_headers # tuple - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7version_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7version_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_7version___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_7version___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->version); - __pyx_r = __pyx_v_self->version; - goto __pyx_L0; - - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":114 - * cdef readonly str path - * cdef readonly object version # HttpVersion - * cdef readonly object headers # CIMultiDict # <<<<<<<<<<<<<< - * cdef readonly object raw_headers # tuple - * cdef readonly object should_close - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7headers_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7headers_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_7headers___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_7headers___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->headers); - __pyx_r = __pyx_v_self->headers; - goto __pyx_L0; - - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":115 - * cdef readonly object version # HttpVersion - * cdef readonly object headers # CIMultiDict - * cdef readonly object raw_headers # tuple # <<<<<<<<<<<<<< - * cdef readonly object should_close - * cdef readonly object compression - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_11raw_headers_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_11raw_headers_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_11raw_headers___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_11raw_headers___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->raw_headers); - __pyx_r = __pyx_v_self->raw_headers; - goto __pyx_L0; - - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":116 - * cdef readonly object headers # CIMultiDict - * cdef readonly object raw_headers # tuple - * cdef readonly object should_close # <<<<<<<<<<<<<< - * cdef readonly object compression - * cdef readonly object upgrade - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_12should_close_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_12should_close_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_12should_close___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_12should_close___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->should_close); - __pyx_r = __pyx_v_self->should_close; - goto __pyx_L0; - - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":117 - * cdef readonly object raw_headers # tuple - * cdef readonly object should_close - * cdef readonly object compression # <<<<<<<<<<<<<< - * cdef readonly object upgrade - * cdef readonly object chunked - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_11compression_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_11compression_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_11compression___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_11compression___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->compression); - __pyx_r = __pyx_v_self->compression; - goto __pyx_L0; - - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":118 - * cdef readonly object should_close - * cdef readonly object compression - * cdef readonly object upgrade # <<<<<<<<<<<<<< - * cdef readonly object chunked - * cdef readonly object url # yarl.URL - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7upgrade_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7upgrade_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_7upgrade___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_7upgrade___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->upgrade); - __pyx_r = __pyx_v_self->upgrade; - goto __pyx_L0; - - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":119 - * cdef readonly object compression - * cdef readonly object upgrade - * cdef readonly object chunked # <<<<<<<<<<<<<< - * cdef readonly object url # yarl.URL - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7chunked_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7chunked_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_7chunked___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_7chunked___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->chunked); - __pyx_r = __pyx_v_self->chunked; - goto __pyx_L0; - - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":120 - * cdef readonly object upgrade - * cdef readonly object chunked - * cdef readonly object url # yarl.URL # <<<<<<<<<<<<<< - * - * def __init__(self, method, path, version, headers, raw_headers, - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_3url_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_3url_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_3url___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_3url___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->url); - __pyx_r = __pyx_v_self->url; - goto __pyx_L0; - - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * cdef tuple state - * cdef object _dict - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_6__reduce_cython__(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_6__reduce_cython__(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self) { - PyObject *__pyx_v_state = 0; - PyObject *__pyx_v__dict = 0; - int __pyx_v_use_setstate; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - int __pyx_t_3; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__reduce_cython__", 0); - - /* "(tree fragment)":5 - * cdef object _dict - * cdef bint use_setstate - * state = (self.chunked, self.compression, self.headers, self.method, self.path, self.raw_headers, self.should_close, self.upgrade, self.url, self.version) # <<<<<<<<<<<<<< - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: - */ - __pyx_t_1 = PyTuple_New(10); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v_self->chunked); - __Pyx_GIVEREF(__pyx_v_self->chunked); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->chunked); - __Pyx_INCREF(__pyx_v_self->compression); - __Pyx_GIVEREF(__pyx_v_self->compression); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->compression); - __Pyx_INCREF(__pyx_v_self->headers); - __Pyx_GIVEREF(__pyx_v_self->headers); - PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_self->headers); - __Pyx_INCREF(__pyx_v_self->method); - __Pyx_GIVEREF(__pyx_v_self->method); - PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_v_self->method); - __Pyx_INCREF(__pyx_v_self->path); - __Pyx_GIVEREF(__pyx_v_self->path); - PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_v_self->path); - __Pyx_INCREF(__pyx_v_self->raw_headers); - __Pyx_GIVEREF(__pyx_v_self->raw_headers); - PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_v_self->raw_headers); - __Pyx_INCREF(__pyx_v_self->should_close); - __Pyx_GIVEREF(__pyx_v_self->should_close); - PyTuple_SET_ITEM(__pyx_t_1, 6, __pyx_v_self->should_close); - __Pyx_INCREF(__pyx_v_self->upgrade); - __Pyx_GIVEREF(__pyx_v_self->upgrade); - PyTuple_SET_ITEM(__pyx_t_1, 7, __pyx_v_self->upgrade); - __Pyx_INCREF(__pyx_v_self->url); - __Pyx_GIVEREF(__pyx_v_self->url); - PyTuple_SET_ITEM(__pyx_t_1, 8, __pyx_v_self->url); - __Pyx_INCREF(__pyx_v_self->version); - __Pyx_GIVEREF(__pyx_v_self->version); - PyTuple_SET_ITEM(__pyx_t_1, 9, __pyx_v_self->version); - __pyx_v_state = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - - /* "(tree fragment)":6 - * cdef bint use_setstate - * state = (self.chunked, self.compression, self.headers, self.method, self.path, self.raw_headers, self.should_close, self.upgrade, self.url, self.version) - * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< - * if _dict is not None: - * state += (_dict,) - */ - __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v__dict = __pyx_t_1; - __pyx_t_1 = 0; - - /* "(tree fragment)":7 - * state = (self.chunked, self.compression, self.headers, self.method, self.path, self.raw_headers, self.should_close, self.upgrade, self.url, self.version) - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: # <<<<<<<<<<<<<< - * state += (_dict,) - * use_setstate = True - */ - __pyx_t_2 = (__pyx_v__dict != Py_None); - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { - - /* "(tree fragment)":8 - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: - * state += (_dict,) # <<<<<<<<<<<<<< - * use_setstate = True - * else: - */ - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_v__dict); - __Pyx_GIVEREF(__pyx_v__dict); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict); - __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_4)); - __pyx_t_4 = 0; - - /* "(tree fragment)":9 - * if _dict is not None: - * state += (_dict,) - * use_setstate = True # <<<<<<<<<<<<<< - * else: - * use_setstate = self.chunked is not None or self.compression is not None or self.headers is not None or self.method is not None or self.path is not None or self.raw_headers is not None or self.should_close is not None or self.upgrade is not None or self.url is not None or self.version is not None - */ - __pyx_v_use_setstate = 1; - - /* "(tree fragment)":7 - * state = (self.chunked, self.compression, self.headers, self.method, self.path, self.raw_headers, self.should_close, self.upgrade, self.url, self.version) - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: # <<<<<<<<<<<<<< - * state += (_dict,) - * use_setstate = True - */ - goto __pyx_L3; - } - - /* "(tree fragment)":11 - * use_setstate = True - * else: - * use_setstate = self.chunked is not None or self.compression is not None or self.headers is not None or self.method is not None or self.path is not None or self.raw_headers is not None or self.should_close is not None or self.upgrade is not None or self.url is not None or self.version is not None # <<<<<<<<<<<<<< - * if use_setstate: - * return __pyx_unpickle_RawRequestMessage, (type(self), 0x1408252, None), state - */ - /*else*/ { - __pyx_t_2 = (__pyx_v_self->chunked != Py_None); - __pyx_t_5 = (__pyx_t_2 != 0); - if (!__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_5 = (__pyx_v_self->compression != Py_None); - __pyx_t_2 = (__pyx_t_5 != 0); - if (!__pyx_t_2) { - } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_2 = (__pyx_v_self->headers != Py_None); - __pyx_t_5 = (__pyx_t_2 != 0); - if (!__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_5 = (__pyx_v_self->method != ((PyObject*)Py_None)); - __pyx_t_2 = (__pyx_t_5 != 0); - if (!__pyx_t_2) { - } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_2 = (__pyx_v_self->path != ((PyObject*)Py_None)); - __pyx_t_5 = (__pyx_t_2 != 0); - if (!__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_5 = (__pyx_v_self->raw_headers != Py_None); - __pyx_t_2 = (__pyx_t_5 != 0); - if (!__pyx_t_2) { - } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_2 = (__pyx_v_self->should_close != Py_None); - __pyx_t_5 = (__pyx_t_2 != 0); - if (!__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_5 = (__pyx_v_self->upgrade != Py_None); - __pyx_t_2 = (__pyx_t_5 != 0); - if (!__pyx_t_2) { - } else { - __pyx_t_3 = __pyx_t_2; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_2 = (__pyx_v_self->url != Py_None); - __pyx_t_5 = (__pyx_t_2 != 0); - if (!__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_5 = (__pyx_v_self->version != Py_None); - __pyx_t_2 = (__pyx_t_5 != 0); - __pyx_t_3 = __pyx_t_2; - __pyx_L4_bool_binop_done:; - __pyx_v_use_setstate = __pyx_t_3; - } - __pyx_L3:; - - /* "(tree fragment)":12 - * else: - * use_setstate = self.chunked is not None or self.compression is not None or self.headers is not None or self.method is not None or self.path is not None or self.raw_headers is not None or self.should_close is not None or self.upgrade is not None or self.url is not None or self.version is not None - * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_RawRequestMessage, (type(self), 0x1408252, None), state - * else: - */ - __pyx_t_3 = (__pyx_v_use_setstate != 0); - if (__pyx_t_3) { - - /* "(tree fragment)":13 - * use_setstate = self.chunked is not None or self.compression is not None or self.headers is not None or self.method is not None or self.path is not None or self.raw_headers is not None or self.should_close is not None or self.upgrade is not None or self.url is not None or self.version is not None - * if use_setstate: - * return __pyx_unpickle_RawRequestMessage, (type(self), 0x1408252, None), state # <<<<<<<<<<<<<< - * else: - * return __pyx_unpickle_RawRequestMessage, (type(self), 0x1408252, state) - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_RawRequestMessage); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_21004882); - __Pyx_GIVEREF(__pyx_int_21004882); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_21004882); - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None); - __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_1); - __Pyx_INCREF(__pyx_v_state); - __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_state); - __pyx_t_4 = 0; - __pyx_t_1 = 0; - __pyx_r = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L0; - - /* "(tree fragment)":12 - * else: - * use_setstate = self.chunked is not None or self.compression is not None or self.headers is not None or self.method is not None or self.path is not None or self.raw_headers is not None or self.should_close is not None or self.upgrade is not None or self.url is not None or self.version is not None - * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_RawRequestMessage, (type(self), 0x1408252, None), state - * else: - */ - } - - /* "(tree fragment)":15 - * return __pyx_unpickle_RawRequestMessage, (type(self), 0x1408252, None), state - * else: - * return __pyx_unpickle_RawRequestMessage, (type(self), 0x1408252, state) # <<<<<<<<<<<<<< - * def __setstate_cython__(self, __pyx_state): - * __pyx_unpickle_RawRequestMessage__set_state(self, __pyx_state) - */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pyx_unpickle_RawRequestMessage); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_21004882); - __Pyx_GIVEREF(__pyx_int_21004882); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_21004882); - __Pyx_INCREF(__pyx_v_state); - __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state); - __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1); - __pyx_t_6 = 0; - __pyx_t_1 = 0; - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - } - - /* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * cdef tuple state - * cdef object _dict - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_AddTraceback("aiohttp._http_parser.RawRequestMessage.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_state); - __Pyx_XDECREF(__pyx_v__dict); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":16 - * else: - * return __pyx_unpickle_RawRequestMessage, (type(self), 0x1408252, state) - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * __pyx_unpickle_RawRequestMessage__set_state(self, __pyx_state) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_9__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_8__setstate_cython__(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_17RawRequestMessage_8__setstate_cython__(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_self, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setstate_cython__", 0); - - /* "(tree fragment)":17 - * return __pyx_unpickle_RawRequestMessage, (type(self), 0x1408252, state) - * def __setstate_cython__(self, __pyx_state): - * __pyx_unpickle_RawRequestMessage__set_state(self, __pyx_state) # <<<<<<<<<<<<<< - */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error) - __pyx_t_1 = __pyx_f_7aiohttp_12_http_parser___pyx_unpickle_RawRequestMessage__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "(tree fragment)":16 - * else: - * return __pyx_unpickle_RawRequestMessage, (type(self), 0x1408252, state) - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * __pyx_unpickle_RawRequestMessage__set_state(self, __pyx_state) - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._http_parser.RawRequestMessage.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":184 - * return ret - * - * cdef _new_request_message(str method, # <<<<<<<<<<<<<< - * str path, - * object version, - */ - -static PyObject *__pyx_f_7aiohttp_12_http_parser__new_request_message(PyObject *__pyx_v_method, PyObject *__pyx_v_path, PyObject *__pyx_v_version, PyObject *__pyx_v_headers, PyObject *__pyx_v_raw_headers, int __pyx_v_should_close, PyObject *__pyx_v_compression, int __pyx_v_upgrade, int __pyx_v_chunked, PyObject *__pyx_v_url) { - struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v_ret = 0; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_new_request_message", 0); - - /* "aiohttp/_http_parser.pyx":195 - * object url): - * cdef RawRequestMessage ret - * ret = RawRequestMessage.__new__(RawRequestMessage) # <<<<<<<<<<<<<< - * ret.method = method - * ret.path = path - */ - __pyx_t_1 = ((PyObject *)__pyx_tp_new_7aiohttp_12_http_parser_RawRequestMessage(((PyTypeObject *)__pyx_ptype_7aiohttp_12_http_parser_RawRequestMessage), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 195, __pyx_L1_error) - __Pyx_GOTREF(((PyObject *)__pyx_t_1)); - __pyx_v_ret = ((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":196 - * cdef RawRequestMessage ret - * ret = RawRequestMessage.__new__(RawRequestMessage) - * ret.method = method # <<<<<<<<<<<<<< - * ret.path = path - * ret.version = version - */ - __Pyx_INCREF(__pyx_v_method); - __Pyx_GIVEREF(__pyx_v_method); - __Pyx_GOTREF(__pyx_v_ret->method); - __Pyx_DECREF(__pyx_v_ret->method); - __pyx_v_ret->method = __pyx_v_method; - - /* "aiohttp/_http_parser.pyx":197 - * ret = RawRequestMessage.__new__(RawRequestMessage) - * ret.method = method - * ret.path = path # <<<<<<<<<<<<<< - * ret.version = version - * ret.headers = headers - */ - __Pyx_INCREF(__pyx_v_path); - __Pyx_GIVEREF(__pyx_v_path); - __Pyx_GOTREF(__pyx_v_ret->path); - __Pyx_DECREF(__pyx_v_ret->path); - __pyx_v_ret->path = __pyx_v_path; - - /* "aiohttp/_http_parser.pyx":198 - * ret.method = method - * ret.path = path - * ret.version = version # <<<<<<<<<<<<<< - * ret.headers = headers - * ret.raw_headers = raw_headers - */ - __Pyx_INCREF(__pyx_v_version); - __Pyx_GIVEREF(__pyx_v_version); - __Pyx_GOTREF(__pyx_v_ret->version); - __Pyx_DECREF(__pyx_v_ret->version); - __pyx_v_ret->version = __pyx_v_version; - - /* "aiohttp/_http_parser.pyx":199 - * ret.path = path - * ret.version = version - * ret.headers = headers # <<<<<<<<<<<<<< - * ret.raw_headers = raw_headers - * ret.should_close = should_close - */ - __Pyx_INCREF(__pyx_v_headers); - __Pyx_GIVEREF(__pyx_v_headers); - __Pyx_GOTREF(__pyx_v_ret->headers); - __Pyx_DECREF(__pyx_v_ret->headers); - __pyx_v_ret->headers = __pyx_v_headers; - - /* "aiohttp/_http_parser.pyx":200 - * ret.version = version - * ret.headers = headers - * ret.raw_headers = raw_headers # <<<<<<<<<<<<<< - * ret.should_close = should_close - * ret.compression = compression - */ - __Pyx_INCREF(__pyx_v_raw_headers); - __Pyx_GIVEREF(__pyx_v_raw_headers); - __Pyx_GOTREF(__pyx_v_ret->raw_headers); - __Pyx_DECREF(__pyx_v_ret->raw_headers); - __pyx_v_ret->raw_headers = __pyx_v_raw_headers; - - /* "aiohttp/_http_parser.pyx":201 - * ret.headers = headers - * ret.raw_headers = raw_headers - * ret.should_close = should_close # <<<<<<<<<<<<<< - * ret.compression = compression - * ret.upgrade = upgrade - */ - __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_should_close); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 201, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v_ret->should_close); - __Pyx_DECREF(__pyx_v_ret->should_close); - __pyx_v_ret->should_close = __pyx_t_1; - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":202 - * ret.raw_headers = raw_headers - * ret.should_close = should_close - * ret.compression = compression # <<<<<<<<<<<<<< - * ret.upgrade = upgrade - * ret.chunked = chunked - */ - __Pyx_INCREF(__pyx_v_compression); - __Pyx_GIVEREF(__pyx_v_compression); - __Pyx_GOTREF(__pyx_v_ret->compression); - __Pyx_DECREF(__pyx_v_ret->compression); - __pyx_v_ret->compression = __pyx_v_compression; - - /* "aiohttp/_http_parser.pyx":203 - * ret.should_close = should_close - * ret.compression = compression - * ret.upgrade = upgrade # <<<<<<<<<<<<<< - * ret.chunked = chunked - * ret.url = url - */ - __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_upgrade); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 203, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v_ret->upgrade); - __Pyx_DECREF(__pyx_v_ret->upgrade); - __pyx_v_ret->upgrade = __pyx_t_1; - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":204 - * ret.compression = compression - * ret.upgrade = upgrade - * ret.chunked = chunked # <<<<<<<<<<<<<< - * ret.url = url - * return ret - */ - __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_chunked); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 204, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v_ret->chunked); - __Pyx_DECREF(__pyx_v_ret->chunked); - __pyx_v_ret->chunked = __pyx_t_1; - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":205 - * ret.upgrade = upgrade - * ret.chunked = chunked - * ret.url = url # <<<<<<<<<<<<<< - * return ret - * - */ - __Pyx_INCREF(__pyx_v_url); - __Pyx_GIVEREF(__pyx_v_url); - __Pyx_GOTREF(__pyx_v_ret->url); - __Pyx_DECREF(__pyx_v_ret->url); - __pyx_v_ret->url = __pyx_v_url; - - /* "aiohttp/_http_parser.pyx":206 - * ret.chunked = chunked - * ret.url = url - * return ret # <<<<<<<<<<<<<< - * - * - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject *)__pyx_v_ret)); - __pyx_r = ((PyObject *)__pyx_v_ret); - goto __pyx_L0; - - /* "aiohttp/_http_parser.pyx":184 - * return ret - * - * cdef _new_request_message(str method, # <<<<<<<<<<<<<< - * str path, - * object version, - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._http_parser._new_request_message", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_ret); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":221 - * cdef readonly object chunked - * - * def __init__(self, version, code, reason, headers, raw_headers, # <<<<<<<<<<<<<< - * should_close, compression, upgrade, chunked): - * self.version = version - */ - -/* Python wrapper */ -static int __pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_version = 0; - PyObject *__pyx_v_code = 0; - PyObject *__pyx_v_reason = 0; - PyObject *__pyx_v_headers = 0; - PyObject *__pyx_v_raw_headers = 0; - PyObject *__pyx_v_should_close = 0; - PyObject *__pyx_v_compression = 0; - PyObject *__pyx_v_upgrade = 0; - PyObject *__pyx_v_chunked = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_version,&__pyx_n_s_code,&__pyx_n_s_reason,&__pyx_n_s_headers,&__pyx_n_s_raw_headers,&__pyx_n_s_should_close,&__pyx_n_s_compression,&__pyx_n_s_upgrade,&__pyx_n_s_chunked,0}; - PyObject* values[9] = {0,0,0,0,0,0,0,0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - CYTHON_FALLTHROUGH; - case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - CYTHON_FALLTHROUGH; - case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_version)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_code)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 1); __PYX_ERR(0, 221, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_reason)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 2); __PYX_ERR(0, 221, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 3: - if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_headers)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 3); __PYX_ERR(0, 221, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 4: - if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_raw_headers)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 4); __PYX_ERR(0, 221, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 5: - if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_should_close)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 5); __PYX_ERR(0, 221, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 6: - if (likely((values[6] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_compression)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 6); __PYX_ERR(0, 221, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 7: - if (likely((values[7] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_upgrade)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 7); __PYX_ERR(0, 221, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 8: - if (likely((values[8] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_chunked)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, 8); __PYX_ERR(0, 221, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 221, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 9) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - } - __pyx_v_version = values[0]; - __pyx_v_code = values[1]; - __pyx_v_reason = values[2]; - __pyx_v_headers = values[3]; - __pyx_v_raw_headers = values[4]; - __pyx_v_should_close = values[5]; - __pyx_v_compression = values[6]; - __pyx_v_upgrade = values[7]; - __pyx_v_chunked = values[8]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 1, 9, 9, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 221, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("aiohttp._http_parser.RawResponseMessage.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return -1; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage___init__(((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_v_self), __pyx_v_version, __pyx_v_code, __pyx_v_reason, __pyx_v_headers, __pyx_v_raw_headers, __pyx_v_should_close, __pyx_v_compression, __pyx_v_upgrade, __pyx_v_chunked); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage___init__(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v_self, PyObject *__pyx_v_version, PyObject *__pyx_v_code, PyObject *__pyx_v_reason, PyObject *__pyx_v_headers, PyObject *__pyx_v_raw_headers, PyObject *__pyx_v_should_close, PyObject *__pyx_v_compression, PyObject *__pyx_v_upgrade, PyObject *__pyx_v_chunked) { - int __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__init__", 0); - - /* "aiohttp/_http_parser.pyx":223 - * def __init__(self, version, code, reason, headers, raw_headers, - * should_close, compression, upgrade, chunked): - * self.version = version # <<<<<<<<<<<<<< - * self.code = code - * self.reason = reason - */ - __Pyx_INCREF(__pyx_v_version); - __Pyx_GIVEREF(__pyx_v_version); - __Pyx_GOTREF(__pyx_v_self->version); - __Pyx_DECREF(__pyx_v_self->version); - __pyx_v_self->version = __pyx_v_version; - - /* "aiohttp/_http_parser.pyx":224 - * should_close, compression, upgrade, chunked): - * self.version = version - * self.code = code # <<<<<<<<<<<<<< - * self.reason = reason - * self.headers = headers - */ - __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_code); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 224, __pyx_L1_error) - __pyx_v_self->code = __pyx_t_1; - - /* "aiohttp/_http_parser.pyx":225 - * self.version = version - * self.code = code - * self.reason = reason # <<<<<<<<<<<<<< - * self.headers = headers - * self.raw_headers = raw_headers - */ - if (!(likely(PyUnicode_CheckExact(__pyx_v_reason))||((__pyx_v_reason) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_reason)->tp_name), 0))) __PYX_ERR(0, 225, __pyx_L1_error) - __pyx_t_2 = __pyx_v_reason; - __Pyx_INCREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __Pyx_GOTREF(__pyx_v_self->reason); - __Pyx_DECREF(__pyx_v_self->reason); - __pyx_v_self->reason = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; - - /* "aiohttp/_http_parser.pyx":226 - * self.code = code - * self.reason = reason - * self.headers = headers # <<<<<<<<<<<<<< - * self.raw_headers = raw_headers - * self.should_close = should_close - */ - __Pyx_INCREF(__pyx_v_headers); - __Pyx_GIVEREF(__pyx_v_headers); - __Pyx_GOTREF(__pyx_v_self->headers); - __Pyx_DECREF(__pyx_v_self->headers); - __pyx_v_self->headers = __pyx_v_headers; - - /* "aiohttp/_http_parser.pyx":227 - * self.reason = reason - * self.headers = headers - * self.raw_headers = raw_headers # <<<<<<<<<<<<<< - * self.should_close = should_close - * self.compression = compression - */ - __Pyx_INCREF(__pyx_v_raw_headers); - __Pyx_GIVEREF(__pyx_v_raw_headers); - __Pyx_GOTREF(__pyx_v_self->raw_headers); - __Pyx_DECREF(__pyx_v_self->raw_headers); - __pyx_v_self->raw_headers = __pyx_v_raw_headers; - - /* "aiohttp/_http_parser.pyx":228 - * self.headers = headers - * self.raw_headers = raw_headers - * self.should_close = should_close # <<<<<<<<<<<<<< - * self.compression = compression - * self.upgrade = upgrade - */ - __Pyx_INCREF(__pyx_v_should_close); - __Pyx_GIVEREF(__pyx_v_should_close); - __Pyx_GOTREF(__pyx_v_self->should_close); - __Pyx_DECREF(__pyx_v_self->should_close); - __pyx_v_self->should_close = __pyx_v_should_close; - - /* "aiohttp/_http_parser.pyx":229 - * self.raw_headers = raw_headers - * self.should_close = should_close - * self.compression = compression # <<<<<<<<<<<<<< - * self.upgrade = upgrade - * self.chunked = chunked - */ - __Pyx_INCREF(__pyx_v_compression); - __Pyx_GIVEREF(__pyx_v_compression); - __Pyx_GOTREF(__pyx_v_self->compression); - __Pyx_DECREF(__pyx_v_self->compression); - __pyx_v_self->compression = __pyx_v_compression; - - /* "aiohttp/_http_parser.pyx":230 - * self.should_close = should_close - * self.compression = compression - * self.upgrade = upgrade # <<<<<<<<<<<<<< - * self.chunked = chunked - * - */ - __Pyx_INCREF(__pyx_v_upgrade); - __Pyx_GIVEREF(__pyx_v_upgrade); - __Pyx_GOTREF(__pyx_v_self->upgrade); - __Pyx_DECREF(__pyx_v_self->upgrade); - __pyx_v_self->upgrade = __pyx_v_upgrade; - - /* "aiohttp/_http_parser.pyx":231 - * self.compression = compression - * self.upgrade = upgrade - * self.chunked = chunked # <<<<<<<<<<<<<< - * - * def __repr__(self): - */ - __Pyx_INCREF(__pyx_v_chunked); - __Pyx_GIVEREF(__pyx_v_chunked); - __Pyx_GOTREF(__pyx_v_self->chunked); - __Pyx_DECREF(__pyx_v_self->chunked); - __pyx_v_self->chunked = __pyx_v_chunked; - - /* "aiohttp/_http_parser.pyx":221 - * cdef readonly object chunked - * - * def __init__(self, version, code, reason, headers, raw_headers, # <<<<<<<<<<<<<< - * should_close, compression, upgrade, chunked): - * self.version = version - */ - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("aiohttp._http_parser.RawResponseMessage.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":233 - * self.chunked = chunked - * - * def __repr__(self): # <<<<<<<<<<<<<< - * info = [] - * info.append(("version", self.version)) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_3__repr__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_3__repr__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_2__repr__(((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} -static PyObject *__pyx_gb_7aiohttp_12_http_parser_18RawResponseMessage_8__repr___2generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */ - -/* "aiohttp/_http_parser.pyx":244 - * info.append(("upgrade", self.upgrade)) - * info.append(("chunked", self.chunked)) - * sinfo = ', '.join(name + '=' + repr(val) for name, val in info) # <<<<<<<<<<<<<< - * return '' - * - */ - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_8__repr___genexpr(PyObject *__pyx_self) { - struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr *__pyx_cur_scope; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("genexpr", 0); - __pyx_cur_scope = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr *)__pyx_tp_new_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr(__pyx_ptype_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr, __pyx_empty_tuple, NULL); - if (unlikely(!__pyx_cur_scope)) { - __pyx_cur_scope = ((struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr *)Py_None); - __Pyx_INCREF(Py_None); - __PYX_ERR(0, 244, __pyx_L1_error) - } else { - __Pyx_GOTREF(__pyx_cur_scope); - } - __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ *) __pyx_self; - __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope)); - __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope); - { - __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_7aiohttp_12_http_parser_18RawResponseMessage_8__repr___2generator1, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_repr___locals_genexpr, __pyx_n_s_aiohttp__http_parser); if (unlikely(!gen)) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_DECREF(__pyx_cur_scope); - __Pyx_RefNannyFinishContext(); - return (PyObject *) gen; - } - - /* function exit code */ - __pyx_L1_error:; - __Pyx_AddTraceback("aiohttp._http_parser.RawResponseMessage.__repr__.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __Pyx_DECREF(((PyObject *)__pyx_cur_scope)); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_gb_7aiohttp_12_http_parser_18RawResponseMessage_8__repr___2generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */ -{ - struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr *__pyx_cur_scope = ((struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr *)__pyx_generator->closure); - PyObject *__pyx_r = NULL; - PyObject *__pyx_t_1 = NULL; - Py_ssize_t __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *(*__pyx_t_7)(PyObject *); - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("genexpr", 0); - switch (__pyx_generator->resume_label) { - case 0: goto __pyx_L3_first_run; - default: /* CPython raises the right error here */ - __Pyx_RefNannyFinishContext(); - return NULL; - } - __pyx_L3_first_run:; - if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 244, __pyx_L1_error) - __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_GOTREF(__pyx_r); - if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_info)) { __Pyx_RaiseClosureNameError("info"); __PYX_ERR(0, 244, __pyx_L1_error) } - if (unlikely(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_info == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(0, 244, __pyx_L1_error) - } - __pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_info; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0; - for (;;) { - if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 244, __pyx_L1_error) - #else - __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - #endif - if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { - PyObject* sequence = __pyx_t_3; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 2)) { - if (size > 2) __Pyx_RaiseTooManyValuesError(2); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 244, __pyx_L1_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); - } else { - __pyx_t_4 = PyList_GET_ITEM(sequence, 0); - __pyx_t_5 = PyList_GET_ITEM(sequence, 1); - } - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - #else - __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - #endif - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } else { - Py_ssize_t index = -1; - __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext; - index = 0; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L6_unpacking_failed; - __Pyx_GOTREF(__pyx_t_4); - index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L6_unpacking_failed; - __Pyx_GOTREF(__pyx_t_5); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(0, 244, __pyx_L1_error) - __pyx_t_7 = NULL; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - goto __pyx_L7_unpacking_done; - __pyx_L6_unpacking_failed:; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_t_7 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 244, __pyx_L1_error) - __pyx_L7_unpacking_done:; - } - __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_name); - __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_name, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __pyx_t_4 = 0; - __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_val); - __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_val, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __pyx_t_3 = PyNumber_Add(__pyx_cur_scope->__pyx_v_name, __pyx_kp_u_); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_5 = PyObject_Repr(__pyx_cur_scope->__pyx_v_val); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = PyNumber_Add(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope); - - /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_r); __pyx_r = 0; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - #if !CYTHON_USE_EXC_INFO_STACK - __Pyx_Coroutine_ResetAndClearException(__pyx_generator); - #endif - __pyx_generator->resume_label = -1; - __Pyx_Coroutine_clear((PyObject*)__pyx_generator); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":233 - * self.chunked = chunked - * - * def __repr__(self): # <<<<<<<<<<<<<< - * info = [] - * info.append(("version", self.version)) - */ - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_2__repr__(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v_self) { - struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ *__pyx_cur_scope; - PyObject *__pyx_v_sinfo = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__repr__", 0); - __pyx_cur_scope = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ *)__pyx_tp_new_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__(__pyx_ptype_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__, __pyx_empty_tuple, NULL); - if (unlikely(!__pyx_cur_scope)) { - __pyx_cur_scope = ((struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ *)Py_None); - __Pyx_INCREF(Py_None); - __PYX_ERR(0, 233, __pyx_L1_error) - } else { - __Pyx_GOTREF(__pyx_cur_scope); - } - - /* "aiohttp/_http_parser.pyx":234 - * - * def __repr__(self): - * info = [] # <<<<<<<<<<<<<< - * info.append(("version", self.version)) - * info.append(("code", self.code)) - */ - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 234, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_cur_scope->__pyx_v_info = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":235 - * def __repr__(self): - * info = [] - * info.append(("version", self.version)) # <<<<<<<<<<<<<< - * info.append(("code", self.code)) - * info.append(("reason", self.reason)) - */ - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 235, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_u_version); - __Pyx_GIVEREF(__pyx_n_u_version); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_n_u_version); - __Pyx_INCREF(__pyx_v_self->version); - __Pyx_GIVEREF(__pyx_v_self->version); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->version); - __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 235, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":236 - * info = [] - * info.append(("version", self.version)) - * info.append(("code", self.code)) # <<<<<<<<<<<<<< - * info.append(("reason", self.reason)) - * info.append(("headers", self.headers)) - */ - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 236, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 236, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_n_u_code); - __Pyx_GIVEREF(__pyx_n_u_code); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_n_u_code); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 236, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "aiohttp/_http_parser.pyx":237 - * info.append(("version", self.version)) - * info.append(("code", self.code)) - * info.append(("reason", self.reason)) # <<<<<<<<<<<<<< - * info.append(("headers", self.headers)) - * info.append(("raw_headers", self.raw_headers)) - */ - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 237, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_n_u_reason); - __Pyx_GIVEREF(__pyx_n_u_reason); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_n_u_reason); - __Pyx_INCREF(__pyx_v_self->reason); - __Pyx_GIVEREF(__pyx_v_self->reason); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_self->reason); - __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 237, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "aiohttp/_http_parser.pyx":238 - * info.append(("code", self.code)) - * info.append(("reason", self.reason)) - * info.append(("headers", self.headers)) # <<<<<<<<<<<<<< - * info.append(("raw_headers", self.raw_headers)) - * info.append(("should_close", self.should_close)) - */ - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 238, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_n_u_headers); - __Pyx_GIVEREF(__pyx_n_u_headers); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_n_u_headers); - __Pyx_INCREF(__pyx_v_self->headers); - __Pyx_GIVEREF(__pyx_v_self->headers); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_self->headers); - __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 238, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "aiohttp/_http_parser.pyx":239 - * info.append(("reason", self.reason)) - * info.append(("headers", self.headers)) - * info.append(("raw_headers", self.raw_headers)) # <<<<<<<<<<<<<< - * info.append(("should_close", self.should_close)) - * info.append(("compression", self.compression)) - */ - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 239, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_n_u_raw_headers); - __Pyx_GIVEREF(__pyx_n_u_raw_headers); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_n_u_raw_headers); - __Pyx_INCREF(__pyx_v_self->raw_headers); - __Pyx_GIVEREF(__pyx_v_self->raw_headers); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_self->raw_headers); - __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 239, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "aiohttp/_http_parser.pyx":240 - * info.append(("headers", self.headers)) - * info.append(("raw_headers", self.raw_headers)) - * info.append(("should_close", self.should_close)) # <<<<<<<<<<<<<< - * info.append(("compression", self.compression)) - * info.append(("upgrade", self.upgrade)) - */ - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_n_u_should_close); - __Pyx_GIVEREF(__pyx_n_u_should_close); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_n_u_should_close); - __Pyx_INCREF(__pyx_v_self->should_close); - __Pyx_GIVEREF(__pyx_v_self->should_close); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_self->should_close); - __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 240, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "aiohttp/_http_parser.pyx":241 - * info.append(("raw_headers", self.raw_headers)) - * info.append(("should_close", self.should_close)) - * info.append(("compression", self.compression)) # <<<<<<<<<<<<<< - * info.append(("upgrade", self.upgrade)) - * info.append(("chunked", self.chunked)) - */ - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 241, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_n_u_compression); - __Pyx_GIVEREF(__pyx_n_u_compression); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_n_u_compression); - __Pyx_INCREF(__pyx_v_self->compression); - __Pyx_GIVEREF(__pyx_v_self->compression); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_self->compression); - __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 241, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "aiohttp/_http_parser.pyx":242 - * info.append(("should_close", self.should_close)) - * info.append(("compression", self.compression)) - * info.append(("upgrade", self.upgrade)) # <<<<<<<<<<<<<< - * info.append(("chunked", self.chunked)) - * sinfo = ', '.join(name + '=' + repr(val) for name, val in info) - */ - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 242, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_n_u_upgrade); - __Pyx_GIVEREF(__pyx_n_u_upgrade); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_n_u_upgrade); - __Pyx_INCREF(__pyx_v_self->upgrade); - __Pyx_GIVEREF(__pyx_v_self->upgrade); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_self->upgrade); - __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 242, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "aiohttp/_http_parser.pyx":243 - * info.append(("compression", self.compression)) - * info.append(("upgrade", self.upgrade)) - * info.append(("chunked", self.chunked)) # <<<<<<<<<<<<<< - * sinfo = ', '.join(name + '=' + repr(val) for name, val in info) - * return '' - */ - __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 243, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_n_u_chunked); - __Pyx_GIVEREF(__pyx_n_u_chunked); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_n_u_chunked); - __Pyx_INCREF(__pyx_v_self->chunked); - __Pyx_GIVEREF(__pyx_v_self->chunked); - PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_self->chunked); - __pyx_t_2 = __Pyx_PyList_Append(__pyx_cur_scope->__pyx_v_info, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 243, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "aiohttp/_http_parser.pyx":244 - * info.append(("upgrade", self.upgrade)) - * info.append(("chunked", self.chunked)) - * sinfo = ', '.join(name + '=' + repr(val) for name, val in info) # <<<<<<<<<<<<<< - * return '' - * - */ - __pyx_t_3 = __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_8__repr___genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = __Pyx_Generator_Next(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_3 = PyUnicode_Join(__pyx_kp_u__2, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 244, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_sinfo = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; - - /* "aiohttp/_http_parser.pyx":245 - * info.append(("chunked", self.chunked)) - * sinfo = ', '.join(name + '=' + repr(val) for name, val in info) - * return '' # <<<<<<<<<<<<<< - * - * - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = __Pyx_PyUnicode_ConcatSafe(__pyx_kp_u_RawResponseMessage, __pyx_v_sinfo); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 245, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = __Pyx_PyUnicode_Concat(__pyx_t_3, __pyx_kp_u__3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 245, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "aiohttp/_http_parser.pyx":233 - * self.chunked = chunked - * - * def __repr__(self): # <<<<<<<<<<<<<< - * info = [] - * info.append(("version", self.version)) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("aiohttp._http_parser.RawResponseMessage.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_sinfo); - __Pyx_DECREF(((PyObject *)__pyx_cur_scope)); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":211 - * @cython.freelist(DEFAULT_FREELIST_SIZE) - * cdef class RawResponseMessage: - * cdef readonly object version # HttpVersion # <<<<<<<<<<<<<< - * cdef readonly int code - * cdef readonly str reason - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7version_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7version_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_7version___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_7version___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->version); - __pyx_r = __pyx_v_self->version; - goto __pyx_L0; - - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":212 - * cdef class RawResponseMessage: - * cdef readonly object version # HttpVersion - * cdef readonly int code # <<<<<<<<<<<<<< - * cdef readonly str reason - * cdef readonly object headers # CIMultiDict - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_4code_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_4code_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_4code___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_4code___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->code); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 212, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._http_parser.RawResponseMessage.code.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":213 - * cdef readonly object version # HttpVersion - * cdef readonly int code - * cdef readonly str reason # <<<<<<<<<<<<<< - * cdef readonly object headers # CIMultiDict - * cdef readonly object raw_headers # tuple - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_6reason_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_6reason_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_6reason___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_6reason___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->reason); - __pyx_r = __pyx_v_self->reason; - goto __pyx_L0; - - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":214 - * cdef readonly int code - * cdef readonly str reason - * cdef readonly object headers # CIMultiDict # <<<<<<<<<<<<<< - * cdef readonly object raw_headers # tuple - * cdef readonly object should_close - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7headers_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7headers_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_7headers___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_7headers___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->headers); - __pyx_r = __pyx_v_self->headers; - goto __pyx_L0; - - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":215 - * cdef readonly str reason - * cdef readonly object headers # CIMultiDict - * cdef readonly object raw_headers # tuple # <<<<<<<<<<<<<< - * cdef readonly object should_close - * cdef readonly object compression - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_11raw_headers_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_11raw_headers_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_11raw_headers___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_11raw_headers___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->raw_headers); - __pyx_r = __pyx_v_self->raw_headers; - goto __pyx_L0; - - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":216 - * cdef readonly object headers # CIMultiDict - * cdef readonly object raw_headers # tuple - * cdef readonly object should_close # <<<<<<<<<<<<<< - * cdef readonly object compression - * cdef readonly object upgrade - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_12should_close_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_12should_close_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_12should_close___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_12should_close___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->should_close); - __pyx_r = __pyx_v_self->should_close; - goto __pyx_L0; - - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":217 - * cdef readonly object raw_headers # tuple - * cdef readonly object should_close - * cdef readonly object compression # <<<<<<<<<<<<<< - * cdef readonly object upgrade - * cdef readonly object chunked - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_11compression_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_11compression_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_11compression___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_11compression___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->compression); - __pyx_r = __pyx_v_self->compression; - goto __pyx_L0; - - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":218 - * cdef readonly object should_close - * cdef readonly object compression - * cdef readonly object upgrade # <<<<<<<<<<<<<< - * cdef readonly object chunked - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7upgrade_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7upgrade_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_7upgrade___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_7upgrade___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->upgrade); - __pyx_r = __pyx_v_self->upgrade; - goto __pyx_L0; - - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":219 - * cdef readonly object compression - * cdef readonly object upgrade - * cdef readonly object chunked # <<<<<<<<<<<<<< - * - * def __init__(self, version, code, reason, headers, raw_headers, - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7chunked_1__get__(PyObject *__pyx_v_self); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7chunked_1__get__(PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_7chunked___get__(((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_7chunked___get__(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__get__", 0); - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_self->chunked); - __pyx_r = __pyx_v_self->chunked; - goto __pyx_L0; - - /* function exit code */ - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * cdef tuple state - * cdef object _dict - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_5__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_5__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_4__reduce_cython__(((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_4__reduce_cython__(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v_self) { - PyObject *__pyx_v_state = 0; - PyObject *__pyx_v__dict = 0; - int __pyx_v_use_setstate; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_t_3; - int __pyx_t_4; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__reduce_cython__", 0); - - /* "(tree fragment)":5 - * cdef object _dict - * cdef bint use_setstate - * state = (self.chunked, self.code, self.compression, self.headers, self.raw_headers, self.reason, self.should_close, self.upgrade, self.version) # <<<<<<<<<<<<<< - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: - */ - __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->code); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(9); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_self->chunked); - __Pyx_GIVEREF(__pyx_v_self->chunked); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self->chunked); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1); - __Pyx_INCREF(__pyx_v_self->compression); - __Pyx_GIVEREF(__pyx_v_self->compression); - PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_self->compression); - __Pyx_INCREF(__pyx_v_self->headers); - __Pyx_GIVEREF(__pyx_v_self->headers); - PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_self->headers); - __Pyx_INCREF(__pyx_v_self->raw_headers); - __Pyx_GIVEREF(__pyx_v_self->raw_headers); - PyTuple_SET_ITEM(__pyx_t_2, 4, __pyx_v_self->raw_headers); - __Pyx_INCREF(__pyx_v_self->reason); - __Pyx_GIVEREF(__pyx_v_self->reason); - PyTuple_SET_ITEM(__pyx_t_2, 5, __pyx_v_self->reason); - __Pyx_INCREF(__pyx_v_self->should_close); - __Pyx_GIVEREF(__pyx_v_self->should_close); - PyTuple_SET_ITEM(__pyx_t_2, 6, __pyx_v_self->should_close); - __Pyx_INCREF(__pyx_v_self->upgrade); - __Pyx_GIVEREF(__pyx_v_self->upgrade); - PyTuple_SET_ITEM(__pyx_t_2, 7, __pyx_v_self->upgrade); - __Pyx_INCREF(__pyx_v_self->version); - __Pyx_GIVEREF(__pyx_v_self->version); - PyTuple_SET_ITEM(__pyx_t_2, 8, __pyx_v_self->version); - __pyx_t_1 = 0; - __pyx_v_state = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; - - /* "(tree fragment)":6 - * cdef bint use_setstate - * state = (self.chunked, self.code, self.compression, self.headers, self.raw_headers, self.reason, self.should_close, self.upgrade, self.version) - * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<< - * if _dict is not None: - * state += (_dict,) - */ - __pyx_t_2 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v__dict = __pyx_t_2; - __pyx_t_2 = 0; - - /* "(tree fragment)":7 - * state = (self.chunked, self.code, self.compression, self.headers, self.raw_headers, self.reason, self.should_close, self.upgrade, self.version) - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: # <<<<<<<<<<<<<< - * state += (_dict,) - * use_setstate = True - */ - __pyx_t_3 = (__pyx_v__dict != Py_None); - __pyx_t_4 = (__pyx_t_3 != 0); - if (__pyx_t_4) { - - /* "(tree fragment)":8 - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: - * state += (_dict,) # <<<<<<<<<<<<<< - * use_setstate = True - * else: - */ - __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v__dict); - __Pyx_GIVEREF(__pyx_v__dict); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v__dict); - __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_1)); - __pyx_t_1 = 0; - - /* "(tree fragment)":9 - * if _dict is not None: - * state += (_dict,) - * use_setstate = True # <<<<<<<<<<<<<< - * else: - * use_setstate = self.chunked is not None or self.compression is not None or self.headers is not None or self.raw_headers is not None or self.reason is not None or self.should_close is not None or self.upgrade is not None or self.version is not None - */ - __pyx_v_use_setstate = 1; - - /* "(tree fragment)":7 - * state = (self.chunked, self.code, self.compression, self.headers, self.raw_headers, self.reason, self.should_close, self.upgrade, self.version) - * _dict = getattr(self, '__dict__', None) - * if _dict is not None: # <<<<<<<<<<<<<< - * state += (_dict,) - * use_setstate = True - */ - goto __pyx_L3; - } - - /* "(tree fragment)":11 - * use_setstate = True - * else: - * use_setstate = self.chunked is not None or self.compression is not None or self.headers is not None or self.raw_headers is not None or self.reason is not None or self.should_close is not None or self.upgrade is not None or self.version is not None # <<<<<<<<<<<<<< - * if use_setstate: - * return __pyx_unpickle_RawResponseMessage, (type(self), 0xc7706dc, None), state - */ - /*else*/ { - __pyx_t_3 = (__pyx_v_self->chunked != Py_None); - __pyx_t_5 = (__pyx_t_3 != 0); - if (!__pyx_t_5) { - } else { - __pyx_t_4 = __pyx_t_5; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_5 = (__pyx_v_self->compression != Py_None); - __pyx_t_3 = (__pyx_t_5 != 0); - if (!__pyx_t_3) { - } else { - __pyx_t_4 = __pyx_t_3; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_3 = (__pyx_v_self->headers != Py_None); - __pyx_t_5 = (__pyx_t_3 != 0); - if (!__pyx_t_5) { - } else { - __pyx_t_4 = __pyx_t_5; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_5 = (__pyx_v_self->raw_headers != Py_None); - __pyx_t_3 = (__pyx_t_5 != 0); - if (!__pyx_t_3) { - } else { - __pyx_t_4 = __pyx_t_3; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_3 = (__pyx_v_self->reason != ((PyObject*)Py_None)); - __pyx_t_5 = (__pyx_t_3 != 0); - if (!__pyx_t_5) { - } else { - __pyx_t_4 = __pyx_t_5; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_5 = (__pyx_v_self->should_close != Py_None); - __pyx_t_3 = (__pyx_t_5 != 0); - if (!__pyx_t_3) { - } else { - __pyx_t_4 = __pyx_t_3; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_3 = (__pyx_v_self->upgrade != Py_None); - __pyx_t_5 = (__pyx_t_3 != 0); - if (!__pyx_t_5) { - } else { - __pyx_t_4 = __pyx_t_5; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_5 = (__pyx_v_self->version != Py_None); - __pyx_t_3 = (__pyx_t_5 != 0); - __pyx_t_4 = __pyx_t_3; - __pyx_L4_bool_binop_done:; - __pyx_v_use_setstate = __pyx_t_4; - } - __pyx_L3:; - - /* "(tree fragment)":12 - * else: - * use_setstate = self.chunked is not None or self.compression is not None or self.headers is not None or self.raw_headers is not None or self.reason is not None or self.should_close is not None or self.upgrade is not None or self.version is not None - * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_RawResponseMessage, (type(self), 0xc7706dc, None), state - * else: - */ - __pyx_t_4 = (__pyx_v_use_setstate != 0); - if (__pyx_t_4) { - - /* "(tree fragment)":13 - * use_setstate = self.chunked is not None or self.compression is not None or self.headers is not None or self.raw_headers is not None or self.reason is not None or self.should_close is not None or self.upgrade is not None or self.version is not None - * if use_setstate: - * return __pyx_unpickle_RawResponseMessage, (type(self), 0xc7706dc, None), state # <<<<<<<<<<<<<< - * else: - * return __pyx_unpickle_RawResponseMessage, (type(self), 0xc7706dc, state) - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pyx_unpickle_RawResponseMessag); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_209127132); - __Pyx_GIVEREF(__pyx_int_209127132); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_209127132); - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_2, 2, Py_None); - __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_2); - __Pyx_INCREF(__pyx_v_state); - __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_state); - __pyx_t_1 = 0; - __pyx_t_2 = 0; - __pyx_r = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L0; - - /* "(tree fragment)":12 - * else: - * use_setstate = self.chunked is not None or self.compression is not None or self.headers is not None or self.raw_headers is not None or self.reason is not None or self.should_close is not None or self.upgrade is not None or self.version is not None - * if use_setstate: # <<<<<<<<<<<<<< - * return __pyx_unpickle_RawResponseMessage, (type(self), 0xc7706dc, None), state - * else: - */ - } - - /* "(tree fragment)":15 - * return __pyx_unpickle_RawResponseMessage, (type(self), 0xc7706dc, None), state - * else: - * return __pyx_unpickle_RawResponseMessage, (type(self), 0xc7706dc, state) # <<<<<<<<<<<<<< - * def __setstate_cython__(self, __pyx_state): - * __pyx_unpickle_RawResponseMessage__set_state(self, __pyx_state) - */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pyx_unpickle_RawResponseMessag); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); - __Pyx_INCREF(__pyx_int_209127132); - __Pyx_GIVEREF(__pyx_int_209127132); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_209127132); - __Pyx_INCREF(__pyx_v_state); - __Pyx_GIVEREF(__pyx_v_state); - PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_state); - __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_6); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2); - __pyx_t_6 = 0; - __pyx_t_2 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - } - - /* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * cdef tuple state - * cdef object _dict - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_AddTraceback("aiohttp._http_parser.RawResponseMessage.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_state); - __Pyx_XDECREF(__pyx_v__dict); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":16 - * else: - * return __pyx_unpickle_RawResponseMessage, (type(self), 0xc7706dc, state) - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * __pyx_unpickle_RawResponseMessage__set_state(self, __pyx_state) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_6__setstate_cython__(((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_18RawResponseMessage_6__setstate_cython__(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v_self, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setstate_cython__", 0); - - /* "(tree fragment)":17 - * return __pyx_unpickle_RawResponseMessage, (type(self), 0xc7706dc, state) - * def __setstate_cython__(self, __pyx_state): - * __pyx_unpickle_RawResponseMessage__set_state(self, __pyx_state) # <<<<<<<<<<<<<< - */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error) - __pyx_t_1 = __pyx_f_7aiohttp_12_http_parser___pyx_unpickle_RawResponseMessage__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "(tree fragment)":16 - * else: - * return __pyx_unpickle_RawResponseMessage, (type(self), 0xc7706dc, state) - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * __pyx_unpickle_RawResponseMessage__set_state(self, __pyx_state) - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._http_parser.RawResponseMessage.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":248 - * - * - * cdef _new_response_message(object version, # <<<<<<<<<<<<<< - * int code, - * str reason, - */ - -static PyObject *__pyx_f_7aiohttp_12_http_parser__new_response_message(PyObject *__pyx_v_version, int __pyx_v_code, PyObject *__pyx_v_reason, PyObject *__pyx_v_headers, PyObject *__pyx_v_raw_headers, int __pyx_v_should_close, PyObject *__pyx_v_compression, int __pyx_v_upgrade, int __pyx_v_chunked) { - struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v_ret = 0; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_new_response_message", 0); - - /* "aiohttp/_http_parser.pyx":258 - * bint chunked): - * cdef RawResponseMessage ret - * ret = RawResponseMessage.__new__(RawResponseMessage) # <<<<<<<<<<<<<< - * ret.version = version - * ret.code = code - */ - __pyx_t_1 = ((PyObject *)__pyx_tp_new_7aiohttp_12_http_parser_RawResponseMessage(((PyTypeObject *)__pyx_ptype_7aiohttp_12_http_parser_RawResponseMessage), __pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error) - __Pyx_GOTREF(((PyObject *)__pyx_t_1)); - __pyx_v_ret = ((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":259 - * cdef RawResponseMessage ret - * ret = RawResponseMessage.__new__(RawResponseMessage) - * ret.version = version # <<<<<<<<<<<<<< - * ret.code = code - * ret.reason = reason - */ - __Pyx_INCREF(__pyx_v_version); - __Pyx_GIVEREF(__pyx_v_version); - __Pyx_GOTREF(__pyx_v_ret->version); - __Pyx_DECREF(__pyx_v_ret->version); - __pyx_v_ret->version = __pyx_v_version; - - /* "aiohttp/_http_parser.pyx":260 - * ret = RawResponseMessage.__new__(RawResponseMessage) - * ret.version = version - * ret.code = code # <<<<<<<<<<<<<< - * ret.reason = reason - * ret.headers = headers - */ - __pyx_v_ret->code = __pyx_v_code; - - /* "aiohttp/_http_parser.pyx":261 - * ret.version = version - * ret.code = code - * ret.reason = reason # <<<<<<<<<<<<<< - * ret.headers = headers - * ret.raw_headers = raw_headers - */ - __Pyx_INCREF(__pyx_v_reason); - __Pyx_GIVEREF(__pyx_v_reason); - __Pyx_GOTREF(__pyx_v_ret->reason); - __Pyx_DECREF(__pyx_v_ret->reason); - __pyx_v_ret->reason = __pyx_v_reason; - - /* "aiohttp/_http_parser.pyx":262 - * ret.code = code - * ret.reason = reason - * ret.headers = headers # <<<<<<<<<<<<<< - * ret.raw_headers = raw_headers - * ret.should_close = should_close - */ - __Pyx_INCREF(__pyx_v_headers); - __Pyx_GIVEREF(__pyx_v_headers); - __Pyx_GOTREF(__pyx_v_ret->headers); - __Pyx_DECREF(__pyx_v_ret->headers); - __pyx_v_ret->headers = __pyx_v_headers; - - /* "aiohttp/_http_parser.pyx":263 - * ret.reason = reason - * ret.headers = headers - * ret.raw_headers = raw_headers # <<<<<<<<<<<<<< - * ret.should_close = should_close - * ret.compression = compression - */ - __Pyx_INCREF(__pyx_v_raw_headers); - __Pyx_GIVEREF(__pyx_v_raw_headers); - __Pyx_GOTREF(__pyx_v_ret->raw_headers); - __Pyx_DECREF(__pyx_v_ret->raw_headers); - __pyx_v_ret->raw_headers = __pyx_v_raw_headers; - - /* "aiohttp/_http_parser.pyx":264 - * ret.headers = headers - * ret.raw_headers = raw_headers - * ret.should_close = should_close # <<<<<<<<<<<<<< - * ret.compression = compression - * ret.upgrade = upgrade - */ - __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_should_close); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 264, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v_ret->should_close); - __Pyx_DECREF(__pyx_v_ret->should_close); - __pyx_v_ret->should_close = __pyx_t_1; - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":265 - * ret.raw_headers = raw_headers - * ret.should_close = should_close - * ret.compression = compression # <<<<<<<<<<<<<< - * ret.upgrade = upgrade - * ret.chunked = chunked - */ - __Pyx_INCREF(__pyx_v_compression); - __Pyx_GIVEREF(__pyx_v_compression); - __Pyx_GOTREF(__pyx_v_ret->compression); - __Pyx_DECREF(__pyx_v_ret->compression); - __pyx_v_ret->compression = __pyx_v_compression; - - /* "aiohttp/_http_parser.pyx":266 - * ret.should_close = should_close - * ret.compression = compression - * ret.upgrade = upgrade # <<<<<<<<<<<<<< - * ret.chunked = chunked - * return ret - */ - __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_upgrade); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 266, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v_ret->upgrade); - __Pyx_DECREF(__pyx_v_ret->upgrade); - __pyx_v_ret->upgrade = __pyx_t_1; - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":267 - * ret.compression = compression - * ret.upgrade = upgrade - * ret.chunked = chunked # <<<<<<<<<<<<<< - * return ret - * - */ - __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_chunked); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v_ret->chunked); - __Pyx_DECREF(__pyx_v_ret->chunked); - __pyx_v_ret->chunked = __pyx_t_1; - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":268 - * ret.upgrade = upgrade - * ret.chunked = chunked - * return ret # <<<<<<<<<<<<<< - * - * - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject *)__pyx_v_ret)); - __pyx_r = ((PyObject *)__pyx_v_ret); - goto __pyx_L0; - - /* "aiohttp/_http_parser.pyx":248 - * - * - * cdef _new_response_message(object version, # <<<<<<<<<<<<<< - * int code, - * str reason, - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._http_parser._new_response_message", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_ret); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":312 - * Py_buffer py_buf - * - * def __cinit__(self): # <<<<<<<<<<<<<< - * self._cparser = \ - * PyMem_Malloc(sizeof(cparser.http_parser)) - */ - -/* Python wrapper */ -static int __pyx_pw_7aiohttp_12_http_parser_10HttpParser_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_pw_7aiohttp_12_http_parser_10HttpParser_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0); - if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) { - __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;} - if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1; - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_10HttpParser___cinit__(((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_7aiohttp_12_http_parser_10HttpParser___cinit__(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self) { - int __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__cinit__", 0); - - /* "aiohttp/_http_parser.pyx":313 - * - * def __cinit__(self): - * self._cparser = \ # <<<<<<<<<<<<<< - * PyMem_Malloc(sizeof(cparser.http_parser)) - * if self._cparser is NULL: - */ - __pyx_v_self->_cparser = ((struct http_parser *)PyMem_Malloc((sizeof(struct http_parser)))); - - /* "aiohttp/_http_parser.pyx":315 - * self._cparser = \ - * PyMem_Malloc(sizeof(cparser.http_parser)) - * if self._cparser is NULL: # <<<<<<<<<<<<<< - * raise MemoryError() - * - */ - __pyx_t_1 = ((__pyx_v_self->_cparser == NULL) != 0); - if (unlikely(__pyx_t_1)) { - - /* "aiohttp/_http_parser.pyx":316 - * PyMem_Malloc(sizeof(cparser.http_parser)) - * if self._cparser is NULL: - * raise MemoryError() # <<<<<<<<<<<<<< - * - * self._csettings = \ - */ - PyErr_NoMemory(); __PYX_ERR(0, 316, __pyx_L1_error) - - /* "aiohttp/_http_parser.pyx":315 - * self._cparser = \ - * PyMem_Malloc(sizeof(cparser.http_parser)) - * if self._cparser is NULL: # <<<<<<<<<<<<<< - * raise MemoryError() - * - */ - } - - /* "aiohttp/_http_parser.pyx":318 - * raise MemoryError() - * - * self._csettings = \ # <<<<<<<<<<<<<< - * PyMem_Malloc(sizeof(cparser.http_parser_settings)) - * if self._csettings is NULL: - */ - __pyx_v_self->_csettings = ((struct http_parser_settings *)PyMem_Malloc((sizeof(struct http_parser_settings)))); - - /* "aiohttp/_http_parser.pyx":320 - * self._csettings = \ - * PyMem_Malloc(sizeof(cparser.http_parser_settings)) - * if self._csettings is NULL: # <<<<<<<<<<<<<< - * raise MemoryError() - * - */ - __pyx_t_1 = ((__pyx_v_self->_csettings == NULL) != 0); - if (unlikely(__pyx_t_1)) { - - /* "aiohttp/_http_parser.pyx":321 - * PyMem_Malloc(sizeof(cparser.http_parser_settings)) - * if self._csettings is NULL: - * raise MemoryError() # <<<<<<<<<<<<<< - * - * def __dealloc__(self): - */ - PyErr_NoMemory(); __PYX_ERR(0, 321, __pyx_L1_error) - - /* "aiohttp/_http_parser.pyx":320 - * self._csettings = \ - * PyMem_Malloc(sizeof(cparser.http_parser_settings)) - * if self._csettings is NULL: # <<<<<<<<<<<<<< - * raise MemoryError() - * - */ - } - - /* "aiohttp/_http_parser.pyx":312 - * Py_buffer py_buf - * - * def __cinit__(self): # <<<<<<<<<<<<<< - * self._cparser = \ - * PyMem_Malloc(sizeof(cparser.http_parser)) - */ - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("aiohttp._http_parser.HttpParser.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":323 - * raise MemoryError() - * - * def __dealloc__(self): # <<<<<<<<<<<<<< - * PyMem_Free(self._cparser) - * PyMem_Free(self._csettings) - */ - -/* Python wrapper */ -static void __pyx_pw_7aiohttp_12_http_parser_10HttpParser_3__dealloc__(PyObject *__pyx_v_self); /*proto*/ -static void __pyx_pw_7aiohttp_12_http_parser_10HttpParser_3__dealloc__(PyObject *__pyx_v_self) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0); - __pyx_pf_7aiohttp_12_http_parser_10HttpParser_2__dealloc__(((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -static void __pyx_pf_7aiohttp_12_http_parser_10HttpParser_2__dealloc__(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__dealloc__", 0); - - /* "aiohttp/_http_parser.pyx":324 - * - * def __dealloc__(self): - * PyMem_Free(self._cparser) # <<<<<<<<<<<<<< - * PyMem_Free(self._csettings) - * - */ - PyMem_Free(__pyx_v_self->_cparser); - - /* "aiohttp/_http_parser.pyx":325 - * def __dealloc__(self): - * PyMem_Free(self._cparser) - * PyMem_Free(self._csettings) # <<<<<<<<<<<<<< - * - * cdef _init(self, cparser.http_parser_type mode, - */ - PyMem_Free(__pyx_v_self->_csettings); - - /* "aiohttp/_http_parser.pyx":323 - * raise MemoryError() - * - * def __dealloc__(self): # <<<<<<<<<<<<<< - * PyMem_Free(self._cparser) - * PyMem_Free(self._csettings) - */ - - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -/* "aiohttp/_http_parser.pyx":327 - * PyMem_Free(self._csettings) - * - * cdef _init(self, cparser.http_parser_type mode, # <<<<<<<<<<<<<< - * object protocol, object loop, int limit, - * object timer=None, - */ - -static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__init(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self, enum http_parser_type __pyx_v_mode, PyObject *__pyx_v_protocol, PyObject *__pyx_v_loop, int __pyx_v_limit, struct __pyx_opt_args_7aiohttp_12_http_parser_10HttpParser__init *__pyx_optional_args) { - - /* "aiohttp/_http_parser.pyx":329 - * cdef _init(self, cparser.http_parser_type mode, - * object protocol, object loop, int limit, - * object timer=None, # <<<<<<<<<<<<<< - * size_t max_line_size=8190, size_t max_headers=32768, - * size_t max_field_size=8190, payload_exception=None, - */ - PyObject *__pyx_v_timer = ((PyObject *)Py_None); - size_t __pyx_v_max_line_size = ((size_t)0x1FFE); - size_t __pyx_v_max_headers = ((size_t)0x8000); - size_t __pyx_v_max_field_size = ((size_t)0x1FFE); - - /* "aiohttp/_http_parser.pyx":331 - * object timer=None, - * size_t max_line_size=8190, size_t max_headers=32768, - * size_t max_field_size=8190, payload_exception=None, # <<<<<<<<<<<<<< - * bint response_with_body=True, bint read_until_eof=False, - * bint auto_decompress=True): - */ - PyObject *__pyx_v_payload_exception = ((PyObject *)Py_None); - - /* "aiohttp/_http_parser.pyx":332 - * size_t max_line_size=8190, size_t max_headers=32768, - * size_t max_field_size=8190, payload_exception=None, - * bint response_with_body=True, bint read_until_eof=False, # <<<<<<<<<<<<<< - * bint auto_decompress=True): - * cparser.http_parser_init(self._cparser, mode) - */ - int __pyx_v_response_with_body = ((int)1); - int __pyx_v_read_until_eof = ((int)0); - - /* "aiohttp/_http_parser.pyx":333 - * size_t max_field_size=8190, payload_exception=None, - * bint response_with_body=True, bint read_until_eof=False, - * bint auto_decompress=True): # <<<<<<<<<<<<<< - * cparser.http_parser_init(self._cparser, mode) - * self._cparser.data = self - */ - int __pyx_v_auto_decompress = ((int)1); - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_init", 0); - if (__pyx_optional_args) { - if (__pyx_optional_args->__pyx_n > 0) { - __pyx_v_timer = __pyx_optional_args->timer; - if (__pyx_optional_args->__pyx_n > 1) { - __pyx_v_max_line_size = __pyx_optional_args->max_line_size; - if (__pyx_optional_args->__pyx_n > 2) { - __pyx_v_max_headers = __pyx_optional_args->max_headers; - if (__pyx_optional_args->__pyx_n > 3) { - __pyx_v_max_field_size = __pyx_optional_args->max_field_size; - if (__pyx_optional_args->__pyx_n > 4) { - __pyx_v_payload_exception = __pyx_optional_args->payload_exception; - if (__pyx_optional_args->__pyx_n > 5) { - __pyx_v_response_with_body = __pyx_optional_args->response_with_body; - if (__pyx_optional_args->__pyx_n > 6) { - __pyx_v_read_until_eof = __pyx_optional_args->read_until_eof; - if (__pyx_optional_args->__pyx_n > 7) { - __pyx_v_auto_decompress = __pyx_optional_args->auto_decompress; - } - } - } - } - } - } - } - } - } - - /* "aiohttp/_http_parser.pyx":334 - * bint response_with_body=True, bint read_until_eof=False, - * bint auto_decompress=True): - * cparser.http_parser_init(self._cparser, mode) # <<<<<<<<<<<<<< - * self._cparser.data = self - * self._cparser.content_length = 0 - */ - http_parser_init(__pyx_v_self->_cparser, __pyx_v_mode); - - /* "aiohttp/_http_parser.pyx":335 - * bint auto_decompress=True): - * cparser.http_parser_init(self._cparser, mode) - * self._cparser.data = self # <<<<<<<<<<<<<< - * self._cparser.content_length = 0 - * - */ - __pyx_v_self->_cparser->data = ((void *)__pyx_v_self); - - /* "aiohttp/_http_parser.pyx":336 - * cparser.http_parser_init(self._cparser, mode) - * self._cparser.data = self - * self._cparser.content_length = 0 # <<<<<<<<<<<<<< - * - * cparser.http_parser_settings_init(self._csettings) - */ - __pyx_v_self->_cparser->content_length = 0; - - /* "aiohttp/_http_parser.pyx":338 - * self._cparser.content_length = 0 - * - * cparser.http_parser_settings_init(self._csettings) # <<<<<<<<<<<<<< - * - * self._protocol = protocol - */ - http_parser_settings_init(__pyx_v_self->_csettings); - - /* "aiohttp/_http_parser.pyx":340 - * cparser.http_parser_settings_init(self._csettings) - * - * self._protocol = protocol # <<<<<<<<<<<<<< - * self._loop = loop - * self._timer = timer - */ - __Pyx_INCREF(__pyx_v_protocol); - __Pyx_GIVEREF(__pyx_v_protocol); - __Pyx_GOTREF(__pyx_v_self->_protocol); - __Pyx_DECREF(__pyx_v_self->_protocol); - __pyx_v_self->_protocol = __pyx_v_protocol; - - /* "aiohttp/_http_parser.pyx":341 - * - * self._protocol = protocol - * self._loop = loop # <<<<<<<<<<<<<< - * self._timer = timer - * - */ - __Pyx_INCREF(__pyx_v_loop); - __Pyx_GIVEREF(__pyx_v_loop); - __Pyx_GOTREF(__pyx_v_self->_loop); - __Pyx_DECREF(__pyx_v_self->_loop); - __pyx_v_self->_loop = __pyx_v_loop; - - /* "aiohttp/_http_parser.pyx":342 - * self._protocol = protocol - * self._loop = loop - * self._timer = timer # <<<<<<<<<<<<<< - * - * self._buf = bytearray() - */ - __Pyx_INCREF(__pyx_v_timer); - __Pyx_GIVEREF(__pyx_v_timer); - __Pyx_GOTREF(__pyx_v_self->_timer); - __Pyx_DECREF(__pyx_v_self->_timer); - __pyx_v_self->_timer = __pyx_v_timer; - - /* "aiohttp/_http_parser.pyx":344 - * self._timer = timer - * - * self._buf = bytearray() # <<<<<<<<<<<<<< - * self._payload = None - * self._payload_error = 0 - */ - __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)(&PyByteArray_Type))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 344, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v_self->_buf); - __Pyx_DECREF(__pyx_v_self->_buf); - __pyx_v_self->_buf = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":345 - * - * self._buf = bytearray() - * self._payload = None # <<<<<<<<<<<<<< - * self._payload_error = 0 - * self._payload_exception = payload_exception - */ - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(__pyx_v_self->_payload); - __Pyx_DECREF(__pyx_v_self->_payload); - __pyx_v_self->_payload = Py_None; - - /* "aiohttp/_http_parser.pyx":346 - * self._buf = bytearray() - * self._payload = None - * self._payload_error = 0 # <<<<<<<<<<<<<< - * self._payload_exception = payload_exception - * self._messages = [] - */ - __pyx_v_self->_payload_error = 0; - - /* "aiohttp/_http_parser.pyx":347 - * self._payload = None - * self._payload_error = 0 - * self._payload_exception = payload_exception # <<<<<<<<<<<<<< - * self._messages = [] - * - */ - __Pyx_INCREF(__pyx_v_payload_exception); - __Pyx_GIVEREF(__pyx_v_payload_exception); - __Pyx_GOTREF(__pyx_v_self->_payload_exception); - __Pyx_DECREF(__pyx_v_self->_payload_exception); - __pyx_v_self->_payload_exception = __pyx_v_payload_exception; - - /* "aiohttp/_http_parser.pyx":348 - * self._payload_error = 0 - * self._payload_exception = payload_exception - * self._messages = [] # <<<<<<<<<<<<<< - * - * self._raw_name = bytearray() - */ - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 348, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v_self->_messages); - __Pyx_DECREF(__pyx_v_self->_messages); - __pyx_v_self->_messages = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":350 - * self._messages = [] - * - * self._raw_name = bytearray() # <<<<<<<<<<<<<< - * self._raw_value = bytearray() - * self._has_value = False - */ - __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)(&PyByteArray_Type))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 350, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v_self->_raw_name); - __Pyx_DECREF(__pyx_v_self->_raw_name); - __pyx_v_self->_raw_name = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":351 - * - * self._raw_name = bytearray() - * self._raw_value = bytearray() # <<<<<<<<<<<<<< - * self._has_value = False - * - */ - __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)(&PyByteArray_Type))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 351, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v_self->_raw_value); - __Pyx_DECREF(__pyx_v_self->_raw_value); - __pyx_v_self->_raw_value = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":352 - * self._raw_name = bytearray() - * self._raw_value = bytearray() - * self._has_value = False # <<<<<<<<<<<<<< - * - * self._max_line_size = max_line_size - */ - __pyx_v_self->_has_value = 0; - - /* "aiohttp/_http_parser.pyx":354 - * self._has_value = False - * - * self._max_line_size = max_line_size # <<<<<<<<<<<<<< - * self._max_headers = max_headers - * self._max_field_size = max_field_size - */ - __pyx_v_self->_max_line_size = __pyx_v_max_line_size; - - /* "aiohttp/_http_parser.pyx":355 - * - * self._max_line_size = max_line_size - * self._max_headers = max_headers # <<<<<<<<<<<<<< - * self._max_field_size = max_field_size - * self._response_with_body = response_with_body - */ - __pyx_v_self->_max_headers = __pyx_v_max_headers; - - /* "aiohttp/_http_parser.pyx":356 - * self._max_line_size = max_line_size - * self._max_headers = max_headers - * self._max_field_size = max_field_size # <<<<<<<<<<<<<< - * self._response_with_body = response_with_body - * self._read_until_eof = read_until_eof - */ - __pyx_v_self->_max_field_size = __pyx_v_max_field_size; - - /* "aiohttp/_http_parser.pyx":357 - * self._max_headers = max_headers - * self._max_field_size = max_field_size - * self._response_with_body = response_with_body # <<<<<<<<<<<<<< - * self._read_until_eof = read_until_eof - * self._upgraded = False - */ - __pyx_v_self->_response_with_body = __pyx_v_response_with_body; - - /* "aiohttp/_http_parser.pyx":358 - * self._max_field_size = max_field_size - * self._response_with_body = response_with_body - * self._read_until_eof = read_until_eof # <<<<<<<<<<<<<< - * self._upgraded = False - * self._auto_decompress = auto_decompress - */ - __pyx_v_self->_read_until_eof = __pyx_v_read_until_eof; - - /* "aiohttp/_http_parser.pyx":359 - * self._response_with_body = response_with_body - * self._read_until_eof = read_until_eof - * self._upgraded = False # <<<<<<<<<<<<<< - * self._auto_decompress = auto_decompress - * self._content_encoding = None - */ - __pyx_v_self->_upgraded = 0; - - /* "aiohttp/_http_parser.pyx":360 - * self._read_until_eof = read_until_eof - * self._upgraded = False - * self._auto_decompress = auto_decompress # <<<<<<<<<<<<<< - * self._content_encoding = None - * - */ - __pyx_v_self->_auto_decompress = __pyx_v_auto_decompress; - - /* "aiohttp/_http_parser.pyx":361 - * self._upgraded = False - * self._auto_decompress = auto_decompress - * self._content_encoding = None # <<<<<<<<<<<<<< - * - * self._csettings.on_url = cb_on_url - */ - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(__pyx_v_self->_content_encoding); - __Pyx_DECREF(__pyx_v_self->_content_encoding); - __pyx_v_self->_content_encoding = ((PyObject*)Py_None); - - /* "aiohttp/_http_parser.pyx":363 - * self._content_encoding = None - * - * self._csettings.on_url = cb_on_url # <<<<<<<<<<<<<< - * self._csettings.on_status = cb_on_status - * self._csettings.on_header_field = cb_on_header_field - */ - __pyx_v_self->_csettings->on_url = __pyx_f_7aiohttp_12_http_parser_cb_on_url; - - /* "aiohttp/_http_parser.pyx":364 - * - * self._csettings.on_url = cb_on_url - * self._csettings.on_status = cb_on_status # <<<<<<<<<<<<<< - * self._csettings.on_header_field = cb_on_header_field - * self._csettings.on_header_value = cb_on_header_value - */ - __pyx_v_self->_csettings->on_status = __pyx_f_7aiohttp_12_http_parser_cb_on_status; - - /* "aiohttp/_http_parser.pyx":365 - * self._csettings.on_url = cb_on_url - * self._csettings.on_status = cb_on_status - * self._csettings.on_header_field = cb_on_header_field # <<<<<<<<<<<<<< - * self._csettings.on_header_value = cb_on_header_value - * self._csettings.on_headers_complete = cb_on_headers_complete - */ - __pyx_v_self->_csettings->on_header_field = __pyx_f_7aiohttp_12_http_parser_cb_on_header_field; - - /* "aiohttp/_http_parser.pyx":366 - * self._csettings.on_status = cb_on_status - * self._csettings.on_header_field = cb_on_header_field - * self._csettings.on_header_value = cb_on_header_value # <<<<<<<<<<<<<< - * self._csettings.on_headers_complete = cb_on_headers_complete - * self._csettings.on_body = cb_on_body - */ - __pyx_v_self->_csettings->on_header_value = __pyx_f_7aiohttp_12_http_parser_cb_on_header_value; - - /* "aiohttp/_http_parser.pyx":367 - * self._csettings.on_header_field = cb_on_header_field - * self._csettings.on_header_value = cb_on_header_value - * self._csettings.on_headers_complete = cb_on_headers_complete # <<<<<<<<<<<<<< - * self._csettings.on_body = cb_on_body - * self._csettings.on_message_begin = cb_on_message_begin - */ - __pyx_v_self->_csettings->on_headers_complete = __pyx_f_7aiohttp_12_http_parser_cb_on_headers_complete; - - /* "aiohttp/_http_parser.pyx":368 - * self._csettings.on_header_value = cb_on_header_value - * self._csettings.on_headers_complete = cb_on_headers_complete - * self._csettings.on_body = cb_on_body # <<<<<<<<<<<<<< - * self._csettings.on_message_begin = cb_on_message_begin - * self._csettings.on_message_complete = cb_on_message_complete - */ - __pyx_v_self->_csettings->on_body = __pyx_f_7aiohttp_12_http_parser_cb_on_body; - - /* "aiohttp/_http_parser.pyx":369 - * self._csettings.on_headers_complete = cb_on_headers_complete - * self._csettings.on_body = cb_on_body - * self._csettings.on_message_begin = cb_on_message_begin # <<<<<<<<<<<<<< - * self._csettings.on_message_complete = cb_on_message_complete - * self._csettings.on_chunk_header = cb_on_chunk_header - */ - __pyx_v_self->_csettings->on_message_begin = __pyx_f_7aiohttp_12_http_parser_cb_on_message_begin; - - /* "aiohttp/_http_parser.pyx":370 - * self._csettings.on_body = cb_on_body - * self._csettings.on_message_begin = cb_on_message_begin - * self._csettings.on_message_complete = cb_on_message_complete # <<<<<<<<<<<<<< - * self._csettings.on_chunk_header = cb_on_chunk_header - * self._csettings.on_chunk_complete = cb_on_chunk_complete - */ - __pyx_v_self->_csettings->on_message_complete = __pyx_f_7aiohttp_12_http_parser_cb_on_message_complete; - - /* "aiohttp/_http_parser.pyx":371 - * self._csettings.on_message_begin = cb_on_message_begin - * self._csettings.on_message_complete = cb_on_message_complete - * self._csettings.on_chunk_header = cb_on_chunk_header # <<<<<<<<<<<<<< - * self._csettings.on_chunk_complete = cb_on_chunk_complete - * - */ - __pyx_v_self->_csettings->on_chunk_header = __pyx_f_7aiohttp_12_http_parser_cb_on_chunk_header; - - /* "aiohttp/_http_parser.pyx":372 - * self._csettings.on_message_complete = cb_on_message_complete - * self._csettings.on_chunk_header = cb_on_chunk_header - * self._csettings.on_chunk_complete = cb_on_chunk_complete # <<<<<<<<<<<<<< - * - * self._last_error = None - */ - __pyx_v_self->_csettings->on_chunk_complete = __pyx_f_7aiohttp_12_http_parser_cb_on_chunk_complete; - - /* "aiohttp/_http_parser.pyx":374 - * self._csettings.on_chunk_complete = cb_on_chunk_complete - * - * self._last_error = None # <<<<<<<<<<<<<< - * self._limit = limit - * - */ - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(__pyx_v_self->_last_error); - __Pyx_DECREF(__pyx_v_self->_last_error); - __pyx_v_self->_last_error = Py_None; - - /* "aiohttp/_http_parser.pyx":375 - * - * self._last_error = None - * self._limit = limit # <<<<<<<<<<<<<< - * - * cdef _process_header(self): - */ - __pyx_v_self->_limit = __pyx_v_limit; - - /* "aiohttp/_http_parser.pyx":327 - * PyMem_Free(self._csettings) - * - * cdef _init(self, cparser.http_parser_type mode, # <<<<<<<<<<<<<< - * object protocol, object loop, int limit, - * object timer=None, - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._http_parser.HttpParser._init", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":377 - * self._limit = limit - * - * cdef _process_header(self): # <<<<<<<<<<<<<< - * if self._raw_name: - * raw_name = bytes(self._raw_name) - */ - -static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__process_header(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self) { - PyObject *__pyx_v_raw_name = NULL; - PyObject *__pyx_v_raw_value = NULL; - PyObject *__pyx_v_name = NULL; - PyObject *__pyx_v_value = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - int __pyx_t_7; - int __pyx_t_8; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_process_header", 0); - - /* "aiohttp/_http_parser.pyx":378 - * - * cdef _process_header(self): - * if self._raw_name: # <<<<<<<<<<<<<< - * raw_name = bytes(self._raw_name) - * raw_value = bytes(self._raw_value) - */ - __pyx_t_1 = (__pyx_v_self->_raw_name != Py_None)&&(PyByteArray_GET_SIZE(__pyx_v_self->_raw_name) != 0); - if (__pyx_t_1) { - - /* "aiohttp/_http_parser.pyx":379 - * cdef _process_header(self): - * if self._raw_name: - * raw_name = bytes(self._raw_name) # <<<<<<<<<<<<<< - * raw_value = bytes(self._raw_value) - * - */ - __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_v_self->_raw_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 379, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_raw_name = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; - - /* "aiohttp/_http_parser.pyx":380 - * if self._raw_name: - * raw_name = bytes(self._raw_name) - * raw_value = bytes(self._raw_value) # <<<<<<<<<<<<<< - * - * name = find_header(raw_name) - */ - __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_v_self->_raw_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 380, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_raw_value = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; - - /* "aiohttp/_http_parser.pyx":382 - * raw_value = bytes(self._raw_value) - * - * name = find_header(raw_name) # <<<<<<<<<<<<<< - * value = raw_value.decode('utf-8', 'surrogateescape') - * - */ - __pyx_t_2 = __pyx_f_7aiohttp_12_http_parser_find_header(__pyx_v_raw_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 382, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_name = __pyx_t_2; - __pyx_t_2 = 0; - - /* "aiohttp/_http_parser.pyx":383 - * - * name = find_header(raw_name) - * value = raw_value.decode('utf-8', 'surrogateescape') # <<<<<<<<<<<<<< - * - * self._headers.add(name, value) - */ - __pyx_t_2 = __Pyx_decode_bytes(__pyx_v_raw_value, 0, PY_SSIZE_T_MAX, NULL, ((char const *)"surrogateescape"), PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 383, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_v_value = __pyx_t_2; - __pyx_t_2 = 0; - - /* "aiohttp/_http_parser.pyx":385 - * value = raw_value.decode('utf-8', 'surrogateescape') - * - * self._headers.add(name, value) # <<<<<<<<<<<<<< - * - * if name is CONTENT_ENCODING: - */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_headers, __pyx_n_s_add); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 385, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = NULL; - __pyx_t_5 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - __pyx_t_5 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_3)) { - PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_name, __pyx_v_value}; - __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 385, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GOTREF(__pyx_t_2); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) { - PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_name, __pyx_v_value}; - __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 385, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GOTREF(__pyx_t_2); - } else - #endif - { - __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 385, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - if (__pyx_t_4) { - __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL; - } - __Pyx_INCREF(__pyx_v_name); - __Pyx_GIVEREF(__pyx_v_name); - PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_name); - __Pyx_INCREF(__pyx_v_value); - __Pyx_GIVEREF(__pyx_v_value); - PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_v_value); - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 385, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "aiohttp/_http_parser.pyx":387 - * self._headers.add(name, value) - * - * if name is CONTENT_ENCODING: # <<<<<<<<<<<<<< - * self._content_encoding = value - * - */ - __pyx_t_1 = (__pyx_v_name == __pyx_v_7aiohttp_12_http_parser_CONTENT_ENCODING); - __pyx_t_7 = (__pyx_t_1 != 0); - if (__pyx_t_7) { - - /* "aiohttp/_http_parser.pyx":388 - * - * if name is CONTENT_ENCODING: - * self._content_encoding = value # <<<<<<<<<<<<<< - * - * PyByteArray_Resize(self._raw_name, 0) - */ - if (!(likely(PyUnicode_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 388, __pyx_L1_error) - __pyx_t_2 = __pyx_v_value; - __Pyx_INCREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __Pyx_GOTREF(__pyx_v_self->_content_encoding); - __Pyx_DECREF(__pyx_v_self->_content_encoding); - __pyx_v_self->_content_encoding = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; - - /* "aiohttp/_http_parser.pyx":387 - * self._headers.add(name, value) - * - * if name is CONTENT_ENCODING: # <<<<<<<<<<<<<< - * self._content_encoding = value - * - */ - } - - /* "aiohttp/_http_parser.pyx":390 - * self._content_encoding = value - * - * PyByteArray_Resize(self._raw_name, 0) # <<<<<<<<<<<<<< - * PyByteArray_Resize(self._raw_value, 0) - * self._has_value = False - */ - __pyx_t_2 = __pyx_v_self->_raw_name; - __Pyx_INCREF(__pyx_t_2); - __pyx_t_5 = PyByteArray_Resize(__pyx_t_2, 0); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 390, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "aiohttp/_http_parser.pyx":391 - * - * PyByteArray_Resize(self._raw_name, 0) - * PyByteArray_Resize(self._raw_value, 0) # <<<<<<<<<<<<<< - * self._has_value = False - * self._raw_headers.append((raw_name, raw_value)) - */ - __pyx_t_2 = __pyx_v_self->_raw_value; - __Pyx_INCREF(__pyx_t_2); - __pyx_t_5 = PyByteArray_Resize(__pyx_t_2, 0); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 391, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "aiohttp/_http_parser.pyx":392 - * PyByteArray_Resize(self._raw_name, 0) - * PyByteArray_Resize(self._raw_value, 0) - * self._has_value = False # <<<<<<<<<<<<<< - * self._raw_headers.append((raw_name, raw_value)) - * - */ - __pyx_v_self->_has_value = 0; - - /* "aiohttp/_http_parser.pyx":393 - * PyByteArray_Resize(self._raw_value, 0) - * self._has_value = False - * self._raw_headers.append((raw_name, raw_value)) # <<<<<<<<<<<<<< - * - * cdef _on_header_field(self, char* at, size_t length): - */ - if (unlikely(__pyx_v_self->_raw_headers == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append"); - __PYX_ERR(0, 393, __pyx_L1_error) - } - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 393, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_raw_name); - __Pyx_GIVEREF(__pyx_v_raw_name); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_raw_name); - __Pyx_INCREF(__pyx_v_raw_value); - __Pyx_GIVEREF(__pyx_v_raw_value); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_raw_value); - __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_self->_raw_headers, __pyx_t_2); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 393, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "aiohttp/_http_parser.pyx":378 - * - * cdef _process_header(self): - * if self._raw_name: # <<<<<<<<<<<<<< - * raw_name = bytes(self._raw_name) - * raw_value = bytes(self._raw_value) - */ - } - - /* "aiohttp/_http_parser.pyx":377 - * self._limit = limit - * - * cdef _process_header(self): # <<<<<<<<<<<<<< - * if self._raw_name: - * raw_name = bytes(self._raw_name) - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_AddTraceback("aiohttp._http_parser.HttpParser._process_header", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_raw_name); - __Pyx_XDECREF(__pyx_v_raw_value); - __Pyx_XDECREF(__pyx_v_name); - __Pyx_XDECREF(__pyx_v_value); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":395 - * self._raw_headers.append((raw_name, raw_value)) - * - * cdef _on_header_field(self, char* at, size_t length): # <<<<<<<<<<<<<< - * cdef Py_ssize_t size - * cdef char *buf - */ - -static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_header_field(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self, char *__pyx_v_at, size_t __pyx_v_length) { - Py_ssize_t __pyx_v_size; - char *__pyx_v_buf; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - Py_ssize_t __pyx_t_3; - int __pyx_t_4; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_on_header_field", 0); - - /* "aiohttp/_http_parser.pyx":398 - * cdef Py_ssize_t size - * cdef char *buf - * if self._has_value: # <<<<<<<<<<<<<< - * self._process_header() - * - */ - __pyx_t_1 = (__pyx_v_self->_has_value != 0); - if (__pyx_t_1) { - - /* "aiohttp/_http_parser.pyx":399 - * cdef char *buf - * if self._has_value: - * self._process_header() # <<<<<<<<<<<<<< - * - * size = PyByteArray_Size(self._raw_name) - */ - __pyx_t_2 = ((struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser *)__pyx_v_self->__pyx_vtab)->_process_header(__pyx_v_self); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 399, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "aiohttp/_http_parser.pyx":398 - * cdef Py_ssize_t size - * cdef char *buf - * if self._has_value: # <<<<<<<<<<<<<< - * self._process_header() - * - */ - } - - /* "aiohttp/_http_parser.pyx":401 - * self._process_header() - * - * size = PyByteArray_Size(self._raw_name) # <<<<<<<<<<<<<< - * PyByteArray_Resize(self._raw_name, size + length) - * buf = PyByteArray_AsString(self._raw_name) - */ - __pyx_t_2 = __pyx_v_self->_raw_name; - __Pyx_INCREF(__pyx_t_2); - __pyx_t_3 = PyByteArray_Size(__pyx_t_2); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1L))) __PYX_ERR(0, 401, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_size = __pyx_t_3; - - /* "aiohttp/_http_parser.pyx":402 - * - * size = PyByteArray_Size(self._raw_name) - * PyByteArray_Resize(self._raw_name, size + length) # <<<<<<<<<<<<<< - * buf = PyByteArray_AsString(self._raw_name) - * memcpy(buf + size, at, length) - */ - __pyx_t_2 = __pyx_v_self->_raw_name; - __Pyx_INCREF(__pyx_t_2); - __pyx_t_4 = PyByteArray_Resize(__pyx_t_2, (__pyx_v_size + __pyx_v_length)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 402, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "aiohttp/_http_parser.pyx":403 - * size = PyByteArray_Size(self._raw_name) - * PyByteArray_Resize(self._raw_name, size + length) - * buf = PyByteArray_AsString(self._raw_name) # <<<<<<<<<<<<<< - * memcpy(buf + size, at, length) - * - */ - __pyx_t_2 = __pyx_v_self->_raw_name; - __Pyx_INCREF(__pyx_t_2); - __pyx_v_buf = PyByteArray_AsString(__pyx_t_2); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "aiohttp/_http_parser.pyx":404 - * PyByteArray_Resize(self._raw_name, size + length) - * buf = PyByteArray_AsString(self._raw_name) - * memcpy(buf + size, at, length) # <<<<<<<<<<<<<< - * - * cdef _on_header_value(self, char* at, size_t length): - */ - (void)(memcpy((__pyx_v_buf + __pyx_v_size), __pyx_v_at, __pyx_v_length)); - - /* "aiohttp/_http_parser.pyx":395 - * self._raw_headers.append((raw_name, raw_value)) - * - * cdef _on_header_field(self, char* at, size_t length): # <<<<<<<<<<<<<< - * cdef Py_ssize_t size - * cdef char *buf - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("aiohttp._http_parser.HttpParser._on_header_field", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":406 - * memcpy(buf + size, at, length) - * - * cdef _on_header_value(self, char* at, size_t length): # <<<<<<<<<<<<<< - * cdef Py_ssize_t size - * cdef char *buf - */ - -static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_header_value(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self, char *__pyx_v_at, size_t __pyx_v_length) { - Py_ssize_t __pyx_v_size; - char *__pyx_v_buf; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - Py_ssize_t __pyx_t_2; - int __pyx_t_3; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_on_header_value", 0); - - /* "aiohttp/_http_parser.pyx":410 - * cdef char *buf - * - * size = PyByteArray_Size(self._raw_value) # <<<<<<<<<<<<<< - * PyByteArray_Resize(self._raw_value, size + length) - * buf = PyByteArray_AsString(self._raw_value) - */ - __pyx_t_1 = __pyx_v_self->_raw_value; - __Pyx_INCREF(__pyx_t_1); - __pyx_t_2 = PyByteArray_Size(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1L))) __PYX_ERR(0, 410, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_size = __pyx_t_2; - - /* "aiohttp/_http_parser.pyx":411 - * - * size = PyByteArray_Size(self._raw_value) - * PyByteArray_Resize(self._raw_value, size + length) # <<<<<<<<<<<<<< - * buf = PyByteArray_AsString(self._raw_value) - * memcpy(buf + size, at, length) - */ - __pyx_t_1 = __pyx_v_self->_raw_value; - __Pyx_INCREF(__pyx_t_1); - __pyx_t_3 = PyByteArray_Resize(__pyx_t_1, (__pyx_v_size + __pyx_v_length)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 411, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":412 - * size = PyByteArray_Size(self._raw_value) - * PyByteArray_Resize(self._raw_value, size + length) - * buf = PyByteArray_AsString(self._raw_value) # <<<<<<<<<<<<<< - * memcpy(buf + size, at, length) - * self._has_value = True - */ - __pyx_t_1 = __pyx_v_self->_raw_value; - __Pyx_INCREF(__pyx_t_1); - __pyx_v_buf = PyByteArray_AsString(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":413 - * PyByteArray_Resize(self._raw_value, size + length) - * buf = PyByteArray_AsString(self._raw_value) - * memcpy(buf + size, at, length) # <<<<<<<<<<<<<< - * self._has_value = True - * - */ - (void)(memcpy((__pyx_v_buf + __pyx_v_size), __pyx_v_at, __pyx_v_length)); - - /* "aiohttp/_http_parser.pyx":414 - * buf = PyByteArray_AsString(self._raw_value) - * memcpy(buf + size, at, length) - * self._has_value = True # <<<<<<<<<<<<<< - * - * cdef _on_headers_complete(self): - */ - __pyx_v_self->_has_value = 1; - - /* "aiohttp/_http_parser.pyx":406 - * memcpy(buf + size, at, length) - * - * cdef _on_header_value(self, char* at, size_t length): # <<<<<<<<<<<<<< - * cdef Py_ssize_t size - * cdef char *buf - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._http_parser.HttpParser._on_header_value", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":416 - * self._has_value = True - * - * cdef _on_headers_complete(self): # <<<<<<<<<<<<<< - * self._process_header() - * - */ - -static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_headers_complete(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self) { - PyObject *__pyx_v_method = NULL; - int __pyx_v_should_close; - unsigned int __pyx_v_upgrade; - unsigned int __pyx_v_chunked; - PyObject *__pyx_v_raw_headers = NULL; - PyObject *__pyx_v_headers = NULL; - PyObject *__pyx_v_encoding = NULL; - PyObject *__pyx_v_enc = NULL; - PyObject *__pyx_v_msg = NULL; - PyObject *__pyx_v_payload = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - unsigned int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - int __pyx_t_6; - PyObject *__pyx_t_7 = NULL; - int __pyx_t_8; - int __pyx_t_9; - int __pyx_t_10; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_on_headers_complete", 0); - - /* "aiohttp/_http_parser.pyx":417 - * - * cdef _on_headers_complete(self): - * self._process_header() # <<<<<<<<<<<<<< - * - * method = http_method_str(self._cparser.method) - */ - __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser *)__pyx_v_self->__pyx_vtab)->_process_header(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 417, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":419 - * self._process_header() - * - * method = http_method_str(self._cparser.method) # <<<<<<<<<<<<<< - * should_close = not cparser.http_should_keep_alive(self._cparser) - * upgrade = self._cparser.upgrade - */ - __pyx_t_1 = __pyx_f_7aiohttp_12_http_parser_http_method_str(__pyx_v_self->_cparser->method); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_method = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":420 - * - * method = http_method_str(self._cparser.method) - * should_close = not cparser.http_should_keep_alive(self._cparser) # <<<<<<<<<<<<<< - * upgrade = self._cparser.upgrade - * chunked = self._cparser.flags & cparser.F_CHUNKED - */ - __pyx_v_should_close = (!(http_should_keep_alive(__pyx_v_self->_cparser) != 0)); - - /* "aiohttp/_http_parser.pyx":421 - * method = http_method_str(self._cparser.method) - * should_close = not cparser.http_should_keep_alive(self._cparser) - * upgrade = self._cparser.upgrade # <<<<<<<<<<<<<< - * chunked = self._cparser.flags & cparser.F_CHUNKED - * - */ - __pyx_t_2 = __pyx_v_self->_cparser->upgrade; - __pyx_v_upgrade = __pyx_t_2; - - /* "aiohttp/_http_parser.pyx":422 - * should_close = not cparser.http_should_keep_alive(self._cparser) - * upgrade = self._cparser.upgrade - * chunked = self._cparser.flags & cparser.F_CHUNKED # <<<<<<<<<<<<<< - * - * raw_headers = tuple(self._raw_headers) - */ - __pyx_v_chunked = (__pyx_v_self->_cparser->flags & F_CHUNKED); - - /* "aiohttp/_http_parser.pyx":424 - * chunked = self._cparser.flags & cparser.F_CHUNKED - * - * raw_headers = tuple(self._raw_headers) # <<<<<<<<<<<<<< - * headers = CIMultiDictProxy(self._headers) - * - */ - if (unlikely(__pyx_v_self->_raw_headers == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); - __PYX_ERR(0, 424, __pyx_L1_error) - } - __pyx_t_1 = PyList_AsTuple(__pyx_v_self->_raw_headers); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 424, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_raw_headers = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":425 - * - * raw_headers = tuple(self._raw_headers) - * headers = CIMultiDictProxy(self._headers) # <<<<<<<<<<<<<< - * - * if upgrade or self._cparser.method == 5: # cparser.CONNECT: - */ - __Pyx_INCREF(__pyx_v_7aiohttp_12_http_parser_CIMultiDictProxy); - __pyx_t_3 = __pyx_v_7aiohttp_12_http_parser_CIMultiDictProxy; __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - } - } - __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_v_self->_headers) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_self->_headers); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_v_headers = __pyx_t_1; - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":427 - * headers = CIMultiDictProxy(self._headers) - * - * if upgrade or self._cparser.method == 5: # cparser.CONNECT: # <<<<<<<<<<<<<< - * self._upgraded = True - * - */ - __pyx_t_6 = (__pyx_v_upgrade != 0); - if (!__pyx_t_6) { - } else { - __pyx_t_5 = __pyx_t_6; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_6 = ((__pyx_v_self->_cparser->method == 5) != 0); - __pyx_t_5 = __pyx_t_6; - __pyx_L4_bool_binop_done:; - if (__pyx_t_5) { - - /* "aiohttp/_http_parser.pyx":428 - * - * if upgrade or self._cparser.method == 5: # cparser.CONNECT: - * self._upgraded = True # <<<<<<<<<<<<<< - * - * # do not support old websocket spec - */ - __pyx_v_self->_upgraded = 1; - - /* "aiohttp/_http_parser.pyx":427 - * headers = CIMultiDictProxy(self._headers) - * - * if upgrade or self._cparser.method == 5: # cparser.CONNECT: # <<<<<<<<<<<<<< - * self._upgraded = True - * - */ - } - - /* "aiohttp/_http_parser.pyx":431 - * - * # do not support old websocket spec - * if SEC_WEBSOCKET_KEY1 in headers: # <<<<<<<<<<<<<< - * raise InvalidHeader(SEC_WEBSOCKET_KEY1) - * - */ - __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_v_7aiohttp_12_http_parser_SEC_WEBSOCKET_KEY1, __pyx_v_headers, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 431, __pyx_L1_error) - __pyx_t_6 = (__pyx_t_5 != 0); - if (unlikely(__pyx_t_6)) { - - /* "aiohttp/_http_parser.pyx":432 - * # do not support old websocket spec - * if SEC_WEBSOCKET_KEY1 in headers: - * raise InvalidHeader(SEC_WEBSOCKET_KEY1) # <<<<<<<<<<<<<< - * - * encoding = None - */ - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_InvalidHeader); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 432, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - } - } - __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_v_7aiohttp_12_http_parser_SEC_WEBSOCKET_KEY1) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_7aiohttp_12_http_parser_SEC_WEBSOCKET_KEY1); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 432, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(0, 432, __pyx_L1_error) - - /* "aiohttp/_http_parser.pyx":431 - * - * # do not support old websocket spec - * if SEC_WEBSOCKET_KEY1 in headers: # <<<<<<<<<<<<<< - * raise InvalidHeader(SEC_WEBSOCKET_KEY1) - * - */ - } - - /* "aiohttp/_http_parser.pyx":434 - * raise InvalidHeader(SEC_WEBSOCKET_KEY1) - * - * encoding = None # <<<<<<<<<<<<<< - * enc = self._content_encoding - * if enc is not None: - */ - __Pyx_INCREF(Py_None); - __pyx_v_encoding = Py_None; - - /* "aiohttp/_http_parser.pyx":435 - * - * encoding = None - * enc = self._content_encoding # <<<<<<<<<<<<<< - * if enc is not None: - * self._content_encoding = None - */ - __pyx_t_1 = __pyx_v_self->_content_encoding; - __Pyx_INCREF(__pyx_t_1); - __pyx_v_enc = __pyx_t_1; - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":436 - * encoding = None - * enc = self._content_encoding - * if enc is not None: # <<<<<<<<<<<<<< - * self._content_encoding = None - * enc = enc.lower() - */ - __pyx_t_6 = (__pyx_v_enc != Py_None); - __pyx_t_5 = (__pyx_t_6 != 0); - if (__pyx_t_5) { - - /* "aiohttp/_http_parser.pyx":437 - * enc = self._content_encoding - * if enc is not None: - * self._content_encoding = None # <<<<<<<<<<<<<< - * enc = enc.lower() - * if enc in ('gzip', 'deflate', 'br'): - */ - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(__pyx_v_self->_content_encoding); - __Pyx_DECREF(__pyx_v_self->_content_encoding); - __pyx_v_self->_content_encoding = ((PyObject*)Py_None); - - /* "aiohttp/_http_parser.pyx":438 - * if enc is not None: - * self._content_encoding = None - * enc = enc.lower() # <<<<<<<<<<<<<< - * if enc in ('gzip', 'deflate', 'br'): - * encoding = enc - */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_enc, __pyx_n_s_lower); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 438, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - } - } - __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 438, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF_SET(__pyx_v_enc, __pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":439 - * self._content_encoding = None - * enc = enc.lower() - * if enc in ('gzip', 'deflate', 'br'): # <<<<<<<<<<<<<< - * encoding = enc - * - */ - __Pyx_INCREF(__pyx_v_enc); - __pyx_t_1 = __pyx_v_enc; - __pyx_t_6 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_gzip, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 439, __pyx_L1_error) - if (!__pyx_t_6) { - } else { - __pyx_t_5 = __pyx_t_6; - goto __pyx_L9_bool_binop_done; - } - __pyx_t_6 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_deflate, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 439, __pyx_L1_error) - if (!__pyx_t_6) { - } else { - __pyx_t_5 = __pyx_t_6; - goto __pyx_L9_bool_binop_done; - } - __pyx_t_6 = (__Pyx_PyUnicode_Equals(__pyx_t_1, __pyx_n_u_br, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 439, __pyx_L1_error) - __pyx_t_5 = __pyx_t_6; - __pyx_L9_bool_binop_done:; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_6 = (__pyx_t_5 != 0); - if (__pyx_t_6) { - - /* "aiohttp/_http_parser.pyx":440 - * enc = enc.lower() - * if enc in ('gzip', 'deflate', 'br'): - * encoding = enc # <<<<<<<<<<<<<< - * - * if self._cparser.type == cparser.HTTP_REQUEST: - */ - __Pyx_INCREF(__pyx_v_enc); - __Pyx_DECREF_SET(__pyx_v_encoding, __pyx_v_enc); - - /* "aiohttp/_http_parser.pyx":439 - * self._content_encoding = None - * enc = enc.lower() - * if enc in ('gzip', 'deflate', 'br'): # <<<<<<<<<<<<<< - * encoding = enc - * - */ - } - - /* "aiohttp/_http_parser.pyx":436 - * encoding = None - * enc = self._content_encoding - * if enc is not None: # <<<<<<<<<<<<<< - * self._content_encoding = None - * enc = enc.lower() - */ - } - - /* "aiohttp/_http_parser.pyx":442 - * encoding = enc - * - * if self._cparser.type == cparser.HTTP_REQUEST: # <<<<<<<<<<<<<< - * msg = _new_request_message( - * method, self._path, - */ - __pyx_t_6 = ((__pyx_v_self->_cparser->type == HTTP_REQUEST) != 0); - if (__pyx_t_6) { - - /* "aiohttp/_http_parser.pyx":444 - * if self._cparser.type == cparser.HTTP_REQUEST: - * msg = _new_request_message( - * method, self._path, # <<<<<<<<<<<<<< - * self.http_version(), headers, raw_headers, - * should_close, encoding, upgrade, chunked, self._url) - */ - __pyx_t_1 = __pyx_v_self->_path; - __Pyx_INCREF(__pyx_t_1); - - /* "aiohttp/_http_parser.pyx":445 - * msg = _new_request_message( - * method, self._path, - * self.http_version(), headers, raw_headers, # <<<<<<<<<<<<<< - * should_close, encoding, upgrade, chunked, self._url) - * else: - */ - __pyx_t_3 = __pyx_f_7aiohttp_12_http_parser_10HttpParser_http_version(__pyx_v_self); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 445, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - - /* "aiohttp/_http_parser.pyx":446 - * method, self._path, - * self.http_version(), headers, raw_headers, - * should_close, encoding, upgrade, chunked, self._url) # <<<<<<<<<<<<<< - * else: - * msg = _new_response_message( - */ - __pyx_t_4 = __pyx_v_self->_url; - __Pyx_INCREF(__pyx_t_4); - - /* "aiohttp/_http_parser.pyx":443 - * - * if self._cparser.type == cparser.HTTP_REQUEST: - * msg = _new_request_message( # <<<<<<<<<<<<<< - * method, self._path, - * self.http_version(), headers, raw_headers, - */ - __pyx_t_7 = __pyx_f_7aiohttp_12_http_parser__new_request_message(__pyx_v_method, ((PyObject*)__pyx_t_1), __pyx_t_3, __pyx_v_headers, __pyx_v_raw_headers, __pyx_v_should_close, __pyx_v_encoding, __pyx_v_upgrade, __pyx_v_chunked, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 443, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_msg = __pyx_t_7; - __pyx_t_7 = 0; - - /* "aiohttp/_http_parser.pyx":442 - * encoding = enc - * - * if self._cparser.type == cparser.HTTP_REQUEST: # <<<<<<<<<<<<<< - * msg = _new_request_message( - * method, self._path, - */ - goto __pyx_L12; - } - - /* "aiohttp/_http_parser.pyx":448 - * should_close, encoding, upgrade, chunked, self._url) - * else: - * msg = _new_response_message( # <<<<<<<<<<<<<< - * self.http_version(), self._cparser.status_code, self._reason, - * headers, raw_headers, should_close, encoding, - */ - /*else*/ { - - /* "aiohttp/_http_parser.pyx":449 - * else: - * msg = _new_response_message( - * self.http_version(), self._cparser.status_code, self._reason, # <<<<<<<<<<<<<< - * headers, raw_headers, should_close, encoding, - * upgrade, chunked) - */ - __pyx_t_7 = __pyx_f_7aiohttp_12_http_parser_10HttpParser_http_version(__pyx_v_self); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 449, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_4 = __pyx_v_self->_reason; - __Pyx_INCREF(__pyx_t_4); - - /* "aiohttp/_http_parser.pyx":448 - * should_close, encoding, upgrade, chunked, self._url) - * else: - * msg = _new_response_message( # <<<<<<<<<<<<<< - * self.http_version(), self._cparser.status_code, self._reason, - * headers, raw_headers, should_close, encoding, - */ - __pyx_t_3 = __pyx_f_7aiohttp_12_http_parser__new_response_message(__pyx_t_7, __pyx_v_self->_cparser->status_code, ((PyObject*)__pyx_t_4), __pyx_v_headers, __pyx_v_raw_headers, __pyx_v_should_close, __pyx_v_encoding, __pyx_v_upgrade, __pyx_v_chunked); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 448, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_msg = __pyx_t_3; - __pyx_t_3 = 0; - } - __pyx_L12:; - - /* "aiohttp/_http_parser.pyx":453 - * upgrade, chunked) - * - * if (ULLONG_MAX > self._cparser.content_length > 0 or chunked or # <<<<<<<<<<<<<< - * self._cparser.method == 5 or # CONNECT: 5 - * (self._cparser.status_code >= 199 and - */ - __pyx_t_5 = (ULLONG_MAX > __pyx_v_self->_cparser->content_length); - if (__pyx_t_5) { - __pyx_t_5 = (__pyx_v_self->_cparser->content_length > 0); - } - __pyx_t_8 = (__pyx_t_5 != 0); - if (!__pyx_t_8) { - } else { - __pyx_t_6 = __pyx_t_8; - goto __pyx_L14_bool_binop_done; - } - __pyx_t_8 = (__pyx_v_chunked != 0); - if (!__pyx_t_8) { - } else { - __pyx_t_6 = __pyx_t_8; - goto __pyx_L14_bool_binop_done; - } - - /* "aiohttp/_http_parser.pyx":454 - * - * if (ULLONG_MAX > self._cparser.content_length > 0 or chunked or - * self._cparser.method == 5 or # CONNECT: 5 # <<<<<<<<<<<<<< - * (self._cparser.status_code >= 199 and - * self._cparser.content_length == ULLONG_MAX and - */ - __pyx_t_8 = ((__pyx_v_self->_cparser->method == 5) != 0); - if (!__pyx_t_8) { - } else { - __pyx_t_6 = __pyx_t_8; - goto __pyx_L14_bool_binop_done; - } - - /* "aiohttp/_http_parser.pyx":455 - * if (ULLONG_MAX > self._cparser.content_length > 0 or chunked or - * self._cparser.method == 5 or # CONNECT: 5 - * (self._cparser.status_code >= 199 and # <<<<<<<<<<<<<< - * self._cparser.content_length == ULLONG_MAX and - * self._read_until_eof) - */ - __pyx_t_8 = ((__pyx_v_self->_cparser->status_code >= 0xC7) != 0); - if (__pyx_t_8) { - } else { - __pyx_t_6 = __pyx_t_8; - goto __pyx_L14_bool_binop_done; - } - - /* "aiohttp/_http_parser.pyx":456 - * self._cparser.method == 5 or # CONNECT: 5 - * (self._cparser.status_code >= 199 and - * self._cparser.content_length == ULLONG_MAX and # <<<<<<<<<<<<<< - * self._read_until_eof) - * ): - */ - __pyx_t_8 = ((__pyx_v_self->_cparser->content_length == ULLONG_MAX) != 0); - if (__pyx_t_8) { - } else { - __pyx_t_6 = __pyx_t_8; - goto __pyx_L14_bool_binop_done; - } - - /* "aiohttp/_http_parser.pyx":457 - * (self._cparser.status_code >= 199 and - * self._cparser.content_length == ULLONG_MAX and - * self._read_until_eof) # <<<<<<<<<<<<<< - * ): - * payload = StreamReader( - */ - __pyx_t_8 = (__pyx_v_self->_read_until_eof != 0); - __pyx_t_6 = __pyx_t_8; - __pyx_L14_bool_binop_done:; - - /* "aiohttp/_http_parser.pyx":453 - * upgrade, chunked) - * - * if (ULLONG_MAX > self._cparser.content_length > 0 or chunked or # <<<<<<<<<<<<<< - * self._cparser.method == 5 or # CONNECT: 5 - * (self._cparser.status_code >= 199 and - */ - if (__pyx_t_6) { - - /* "aiohttp/_http_parser.pyx":459 - * self._read_until_eof) - * ): - * payload = StreamReader( # <<<<<<<<<<<<<< - * self._protocol, timer=self._timer, loop=self._loop, - * limit=self._limit) - */ - __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 459, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_INCREF(__pyx_v_self->_protocol); - __Pyx_GIVEREF(__pyx_v_self->_protocol); - PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_self->_protocol); - - /* "aiohttp/_http_parser.pyx":460 - * ): - * payload = StreamReader( - * self._protocol, timer=self._timer, loop=self._loop, # <<<<<<<<<<<<<< - * limit=self._limit) - * else: - */ - __pyx_t_4 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 460, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_timer, __pyx_v_self->_timer) < 0) __PYX_ERR(0, 460, __pyx_L1_error) - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_loop, __pyx_v_self->_loop) < 0) __PYX_ERR(0, 460, __pyx_L1_error) - - /* "aiohttp/_http_parser.pyx":461 - * payload = StreamReader( - * self._protocol, timer=self._timer, loop=self._loop, - * limit=self._limit) # <<<<<<<<<<<<<< - * else: - * payload = EMPTY_PAYLOAD - */ - __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_self->_limit); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 461, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_limit, __pyx_t_7) < 0) __PYX_ERR(0, 460, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "aiohttp/_http_parser.pyx":459 - * self._read_until_eof) - * ): - * payload = StreamReader( # <<<<<<<<<<<<<< - * self._protocol, timer=self._timer, loop=self._loop, - * limit=self._limit) - */ - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_v_7aiohttp_12_http_parser_StreamReader, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 459, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_payload = __pyx_t_7; - __pyx_t_7 = 0; - - /* "aiohttp/_http_parser.pyx":453 - * upgrade, chunked) - * - * if (ULLONG_MAX > self._cparser.content_length > 0 or chunked or # <<<<<<<<<<<<<< - * self._cparser.method == 5 or # CONNECT: 5 - * (self._cparser.status_code >= 199 and - */ - goto __pyx_L13; - } - - /* "aiohttp/_http_parser.pyx":463 - * limit=self._limit) - * else: - * payload = EMPTY_PAYLOAD # <<<<<<<<<<<<<< - * - * self._payload = payload - */ - /*else*/ { - __Pyx_INCREF(__pyx_v_7aiohttp_12_http_parser_EMPTY_PAYLOAD); - __pyx_v_payload = __pyx_v_7aiohttp_12_http_parser_EMPTY_PAYLOAD; - } - __pyx_L13:; - - /* "aiohttp/_http_parser.pyx":465 - * payload = EMPTY_PAYLOAD - * - * self._payload = payload # <<<<<<<<<<<<<< - * if encoding is not None and self._auto_decompress: - * self._payload = DeflateBuffer(payload, encoding) - */ - __Pyx_INCREF(__pyx_v_payload); - __Pyx_GIVEREF(__pyx_v_payload); - __Pyx_GOTREF(__pyx_v_self->_payload); - __Pyx_DECREF(__pyx_v_self->_payload); - __pyx_v_self->_payload = __pyx_v_payload; - - /* "aiohttp/_http_parser.pyx":466 - * - * self._payload = payload - * if encoding is not None and self._auto_decompress: # <<<<<<<<<<<<<< - * self._payload = DeflateBuffer(payload, encoding) - * - */ - __pyx_t_8 = (__pyx_v_encoding != Py_None); - __pyx_t_5 = (__pyx_t_8 != 0); - if (__pyx_t_5) { - } else { - __pyx_t_6 = __pyx_t_5; - goto __pyx_L21_bool_binop_done; - } - __pyx_t_5 = (__pyx_v_self->_auto_decompress != 0); - __pyx_t_6 = __pyx_t_5; - __pyx_L21_bool_binop_done:; - if (__pyx_t_6) { - - /* "aiohttp/_http_parser.pyx":467 - * self._payload = payload - * if encoding is not None and self._auto_decompress: - * self._payload = DeflateBuffer(payload, encoding) # <<<<<<<<<<<<<< - * - * if not self._response_with_body: - */ - __Pyx_INCREF(__pyx_v_7aiohttp_12_http_parser_DeflateBuffer); - __pyx_t_4 = __pyx_v_7aiohttp_12_http_parser_DeflateBuffer; __pyx_t_3 = NULL; - __pyx_t_9 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - __pyx_t_9 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_payload, __pyx_v_encoding}; - __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 467, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_GOTREF(__pyx_t_7); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) { - PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_payload, __pyx_v_encoding}; - __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 467, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_GOTREF(__pyx_t_7); - } else - #endif - { - __pyx_t_1 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 467, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (__pyx_t_3) { - __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); __pyx_t_3 = NULL; - } - __Pyx_INCREF(__pyx_v_payload); - __Pyx_GIVEREF(__pyx_v_payload); - PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_9, __pyx_v_payload); - __Pyx_INCREF(__pyx_v_encoding); - __Pyx_GIVEREF(__pyx_v_encoding); - PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_9, __pyx_v_encoding); - __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 467, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GIVEREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_v_self->_payload); - __Pyx_DECREF(__pyx_v_self->_payload); - __pyx_v_self->_payload = __pyx_t_7; - __pyx_t_7 = 0; - - /* "aiohttp/_http_parser.pyx":466 - * - * self._payload = payload - * if encoding is not None and self._auto_decompress: # <<<<<<<<<<<<<< - * self._payload = DeflateBuffer(payload, encoding) - * - */ - } - - /* "aiohttp/_http_parser.pyx":469 - * self._payload = DeflateBuffer(payload, encoding) - * - * if not self._response_with_body: # <<<<<<<<<<<<<< - * payload = EMPTY_PAYLOAD - * - */ - __pyx_t_6 = ((!(__pyx_v_self->_response_with_body != 0)) != 0); - if (__pyx_t_6) { - - /* "aiohttp/_http_parser.pyx":470 - * - * if not self._response_with_body: - * payload = EMPTY_PAYLOAD # <<<<<<<<<<<<<< - * - * self._messages.append((msg, payload)) - */ - __Pyx_INCREF(__pyx_v_7aiohttp_12_http_parser_EMPTY_PAYLOAD); - __Pyx_DECREF_SET(__pyx_v_payload, __pyx_v_7aiohttp_12_http_parser_EMPTY_PAYLOAD); - - /* "aiohttp/_http_parser.pyx":469 - * self._payload = DeflateBuffer(payload, encoding) - * - * if not self._response_with_body: # <<<<<<<<<<<<<< - * payload = EMPTY_PAYLOAD - * - */ - } - - /* "aiohttp/_http_parser.pyx":472 - * payload = EMPTY_PAYLOAD - * - * self._messages.append((msg, payload)) # <<<<<<<<<<<<<< - * - * cdef _on_message_complete(self): - */ - if (unlikely(__pyx_v_self->_messages == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append"); - __PYX_ERR(0, 472, __pyx_L1_error) - } - __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 472, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_v_msg); - __Pyx_GIVEREF(__pyx_v_msg); - PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_msg); - __Pyx_INCREF(__pyx_v_payload); - __Pyx_GIVEREF(__pyx_v_payload); - PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_payload); - __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_self->_messages, __pyx_t_7); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 472, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - - /* "aiohttp/_http_parser.pyx":416 - * self._has_value = True - * - * cdef _on_headers_complete(self): # <<<<<<<<<<<<<< - * self._process_header() - * - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_AddTraceback("aiohttp._http_parser.HttpParser._on_headers_complete", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_method); - __Pyx_XDECREF(__pyx_v_raw_headers); - __Pyx_XDECREF(__pyx_v_headers); - __Pyx_XDECREF(__pyx_v_encoding); - __Pyx_XDECREF(__pyx_v_enc); - __Pyx_XDECREF(__pyx_v_msg); - __Pyx_XDECREF(__pyx_v_payload); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":474 - * self._messages.append((msg, payload)) - * - * cdef _on_message_complete(self): # <<<<<<<<<<<<<< - * self._payload.feed_eof() - * self._payload = None - */ - -static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_message_complete(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_on_message_complete", 0); - - /* "aiohttp/_http_parser.pyx":475 - * - * cdef _on_message_complete(self): - * self._payload.feed_eof() # <<<<<<<<<<<<<< - * self._payload = None - * - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_payload, __pyx_n_s_feed_eof); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 475, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 475, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":476 - * cdef _on_message_complete(self): - * self._payload.feed_eof() - * self._payload = None # <<<<<<<<<<<<<< - * - * cdef _on_chunk_header(self): - */ - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(__pyx_v_self->_payload); - __Pyx_DECREF(__pyx_v_self->_payload); - __pyx_v_self->_payload = Py_None; - - /* "aiohttp/_http_parser.pyx":474 - * self._messages.append((msg, payload)) - * - * cdef _on_message_complete(self): # <<<<<<<<<<<<<< - * self._payload.feed_eof() - * self._payload = None - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("aiohttp._http_parser.HttpParser._on_message_complete", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":478 - * self._payload = None - * - * cdef _on_chunk_header(self): # <<<<<<<<<<<<<< - * self._payload.begin_http_chunk_receiving() - * - */ - -static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_chunk_header(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_on_chunk_header", 0); - - /* "aiohttp/_http_parser.pyx":479 - * - * cdef _on_chunk_header(self): - * self._payload.begin_http_chunk_receiving() # <<<<<<<<<<<<<< - * - * cdef _on_chunk_complete(self): - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_payload, __pyx_n_s_begin_http_chunk_receiving); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 479, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 479, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":478 - * self._payload = None - * - * cdef _on_chunk_header(self): # <<<<<<<<<<<<<< - * self._payload.begin_http_chunk_receiving() - * - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("aiohttp._http_parser.HttpParser._on_chunk_header", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":481 - * self._payload.begin_http_chunk_receiving() - * - * cdef _on_chunk_complete(self): # <<<<<<<<<<<<<< - * self._payload.end_http_chunk_receiving() - * - */ - -static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_chunk_complete(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_on_chunk_complete", 0); - - /* "aiohttp/_http_parser.pyx":482 - * - * cdef _on_chunk_complete(self): - * self._payload.end_http_chunk_receiving() # <<<<<<<<<<<<<< - * - * cdef object _on_status_complete(self): - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_payload, __pyx_n_s_end_http_chunk_receiving); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 482, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 482, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":481 - * self._payload.begin_http_chunk_receiving() - * - * cdef _on_chunk_complete(self): # <<<<<<<<<<<<<< - * self._payload.end_http_chunk_receiving() - * - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("aiohttp._http_parser.HttpParser._on_chunk_complete", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":484 - * self._payload.end_http_chunk_receiving() - * - * cdef object _on_status_complete(self): # <<<<<<<<<<<<<< - * pass - * - */ - -static PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_status_complete(CYTHON_UNUSED struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_on_status_complete", 0); - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":487 - * pass - * - * cdef inline http_version(self): # <<<<<<<<<<<<<< - * cdef cparser.http_parser* parser = self._cparser - * - */ - -static CYTHON_INLINE PyObject *__pyx_f_7aiohttp_12_http_parser_10HttpParser_http_version(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self) { - struct http_parser *__pyx_v_parser; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - struct http_parser *__pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - int __pyx_t_8; - PyObject *__pyx_t_9 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("http_version", 0); - - /* "aiohttp/_http_parser.pyx":488 - * - * cdef inline http_version(self): - * cdef cparser.http_parser* parser = self._cparser # <<<<<<<<<<<<<< - * - * if parser.http_major == 1: - */ - __pyx_t_1 = __pyx_v_self->_cparser; - __pyx_v_parser = __pyx_t_1; - - /* "aiohttp/_http_parser.pyx":490 - * cdef cparser.http_parser* parser = self._cparser - * - * if parser.http_major == 1: # <<<<<<<<<<<<<< - * if parser.http_minor == 0: - * return HttpVersion10 - */ - __pyx_t_2 = ((__pyx_v_parser->http_major == 1) != 0); - if (__pyx_t_2) { - - /* "aiohttp/_http_parser.pyx":491 - * - * if parser.http_major == 1: - * if parser.http_minor == 0: # <<<<<<<<<<<<<< - * return HttpVersion10 - * elif parser.http_minor == 1: - */ - switch (__pyx_v_parser->http_minor) { - case 0: - - /* "aiohttp/_http_parser.pyx":492 - * if parser.http_major == 1: - * if parser.http_minor == 0: - * return HttpVersion10 # <<<<<<<<<<<<<< - * elif parser.http_minor == 1: - * return HttpVersion11 - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_7aiohttp_12_http_parser_HttpVersion10); - __pyx_r = __pyx_v_7aiohttp_12_http_parser_HttpVersion10; - goto __pyx_L0; - - /* "aiohttp/_http_parser.pyx":491 - * - * if parser.http_major == 1: - * if parser.http_minor == 0: # <<<<<<<<<<<<<< - * return HttpVersion10 - * elif parser.http_minor == 1: - */ - break; - case 1: - - /* "aiohttp/_http_parser.pyx":494 - * return HttpVersion10 - * elif parser.http_minor == 1: - * return HttpVersion11 # <<<<<<<<<<<<<< - * - * return HttpVersion(parser.http_major, parser.http_minor) - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_7aiohttp_12_http_parser_HttpVersion11); - __pyx_r = __pyx_v_7aiohttp_12_http_parser_HttpVersion11; - goto __pyx_L0; - - /* "aiohttp/_http_parser.pyx":493 - * if parser.http_minor == 0: - * return HttpVersion10 - * elif parser.http_minor == 1: # <<<<<<<<<<<<<< - * return HttpVersion11 - * - */ - break; - default: break; - } - - /* "aiohttp/_http_parser.pyx":490 - * cdef cparser.http_parser* parser = self._cparser - * - * if parser.http_major == 1: # <<<<<<<<<<<<<< - * if parser.http_minor == 0: - * return HttpVersion10 - */ - } - - /* "aiohttp/_http_parser.pyx":496 - * return HttpVersion11 - * - * return HttpVersion(parser.http_major, parser.http_minor) # <<<<<<<<<<<<<< - * - * ### Public API ### - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyInt_From_unsigned_short(__pyx_v_parser->http_major); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 496, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyInt_From_unsigned_short(__pyx_v_parser->http_minor); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 496, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_7aiohttp_12_http_parser_HttpVersion); - __pyx_t_6 = __pyx_v_7aiohttp_12_http_parser_HttpVersion; __pyx_t_7 = NULL; - __pyx_t_8 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - __pyx_t_8 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_6)) { - PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_4, __pyx_t_5}; - __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 496, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) { - PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_4, __pyx_t_5}; - __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 496, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } else - #endif - { - __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 496, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - if (__pyx_t_7) { - __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL; - } - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_t_5); - __pyx_t_4 = 0; - __pyx_t_5 = 0; - __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_9, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 496, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __pyx_r = __pyx_t_3; - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "aiohttp/_http_parser.pyx":487 - * pass - * - * cdef inline http_version(self): # <<<<<<<<<<<<<< - * cdef cparser.http_parser* parser = self._cparser - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_AddTraceback("aiohttp._http_parser.HttpParser.http_version", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":500 - * ### Public API ### - * - * def feed_eof(self): # <<<<<<<<<<<<<< - * cdef bytes desc - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_10HttpParser_5feed_eof(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_10HttpParser_5feed_eof(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("feed_eof (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_10HttpParser_4feed_eof(((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_10HttpParser_4feed_eof(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self) { - PyObject *__pyx_v_desc = 0; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("feed_eof", 0); - - /* "aiohttp/_http_parser.pyx":503 - * cdef bytes desc - * - * if self._payload is not None: # <<<<<<<<<<<<<< - * if self._cparser.flags & cparser.F_CHUNKED: - * raise TransferEncodingError( - */ - __pyx_t_1 = (__pyx_v_self->_payload != Py_None); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { - - /* "aiohttp/_http_parser.pyx":504 - * - * if self._payload is not None: - * if self._cparser.flags & cparser.F_CHUNKED: # <<<<<<<<<<<<<< - * raise TransferEncodingError( - * "Not enough data for satisfy transfer length header.") - */ - __pyx_t_2 = ((__pyx_v_self->_cparser->flags & F_CHUNKED) != 0); - if (unlikely(__pyx_t_2)) { - - /* "aiohttp/_http_parser.pyx":505 - * if self._payload is not None: - * if self._cparser.flags & cparser.F_CHUNKED: - * raise TransferEncodingError( # <<<<<<<<<<<<<< - * "Not enough data for satisfy transfer length header.") - * elif self._cparser.flags & cparser.F_CONTENTLENGTH: - */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_TransferEncodingError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 505, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - } - } - __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_kp_u_Not_enough_data_for_satisfy_tran) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_kp_u_Not_enough_data_for_satisfy_tran); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 505, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __PYX_ERR(0, 505, __pyx_L1_error) - - /* "aiohttp/_http_parser.pyx":504 - * - * if self._payload is not None: - * if self._cparser.flags & cparser.F_CHUNKED: # <<<<<<<<<<<<<< - * raise TransferEncodingError( - * "Not enough data for satisfy transfer length header.") - */ - } - - /* "aiohttp/_http_parser.pyx":507 - * raise TransferEncodingError( - * "Not enough data for satisfy transfer length header.") - * elif self._cparser.flags & cparser.F_CONTENTLENGTH: # <<<<<<<<<<<<<< - * raise ContentLengthError( - * "Not enough data for satisfy content length header.") - */ - __pyx_t_2 = ((__pyx_v_self->_cparser->flags & F_CONTENTLENGTH) != 0); - if (unlikely(__pyx_t_2)) { - - /* "aiohttp/_http_parser.pyx":508 - * "Not enough data for satisfy transfer length header.") - * elif self._cparser.flags & cparser.F_CONTENTLENGTH: - * raise ContentLengthError( # <<<<<<<<<<<<<< - * "Not enough data for satisfy content length header.") - * elif self._cparser.http_errno != cparser.HPE_OK: - */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_ContentLengthError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 508, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - } - } - __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_kp_u_Not_enough_data_for_satisfy_cont) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_kp_u_Not_enough_data_for_satisfy_cont); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 508, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __PYX_ERR(0, 508, __pyx_L1_error) - - /* "aiohttp/_http_parser.pyx":507 - * raise TransferEncodingError( - * "Not enough data for satisfy transfer length header.") - * elif self._cparser.flags & cparser.F_CONTENTLENGTH: # <<<<<<<<<<<<<< - * raise ContentLengthError( - * "Not enough data for satisfy content length header.") - */ - } - - /* "aiohttp/_http_parser.pyx":510 - * raise ContentLengthError( - * "Not enough data for satisfy content length header.") - * elif self._cparser.http_errno != cparser.HPE_OK: # <<<<<<<<<<<<<< - * desc = cparser.http_errno_description( - * self._cparser.http_errno) - */ - __pyx_t_2 = ((__pyx_v_self->_cparser->http_errno != HPE_OK) != 0); - if (unlikely(__pyx_t_2)) { - - /* "aiohttp/_http_parser.pyx":511 - * "Not enough data for satisfy content length header.") - * elif self._cparser.http_errno != cparser.HPE_OK: - * desc = cparser.http_errno_description( # <<<<<<<<<<<<<< - * self._cparser.http_errno) - * raise PayloadEncodingError(desc.decode('latin-1')) - */ - __pyx_t_3 = __Pyx_PyBytes_FromString(http_errno_description(((enum http_errno)__pyx_v_self->_cparser->http_errno))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 511, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_v_desc = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; - - /* "aiohttp/_http_parser.pyx":513 - * desc = cparser.http_errno_description( - * self._cparser.http_errno) - * raise PayloadEncodingError(desc.decode('latin-1')) # <<<<<<<<<<<<<< - * else: - * self._payload.feed_eof() - */ - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_PayloadEncodingError); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 513, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_decode_bytes(__pyx_v_desc, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeLatin1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 513, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_6)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_6); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - } - } - __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 513, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __PYX_ERR(0, 513, __pyx_L1_error) - - /* "aiohttp/_http_parser.pyx":510 - * raise ContentLengthError( - * "Not enough data for satisfy content length header.") - * elif self._cparser.http_errno != cparser.HPE_OK: # <<<<<<<<<<<<<< - * desc = cparser.http_errno_description( - * self._cparser.http_errno) - */ - } - - /* "aiohttp/_http_parser.pyx":515 - * raise PayloadEncodingError(desc.decode('latin-1')) - * else: - * self._payload.feed_eof() # <<<<<<<<<<<<<< - * elif self._started: - * self._on_headers_complete() - */ - /*else*/ { - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_payload, __pyx_n_s_feed_eof); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 515, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - } - } - __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 515, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } - - /* "aiohttp/_http_parser.pyx":503 - * cdef bytes desc - * - * if self._payload is not None: # <<<<<<<<<<<<<< - * if self._cparser.flags & cparser.F_CHUNKED: - * raise TransferEncodingError( - */ - goto __pyx_L3; - } - - /* "aiohttp/_http_parser.pyx":516 - * else: - * self._payload.feed_eof() - * elif self._started: # <<<<<<<<<<<<<< - * self._on_headers_complete() - * if self._messages: - */ - __pyx_t_2 = (__pyx_v_self->_started != 0); - if (__pyx_t_2) { - - /* "aiohttp/_http_parser.pyx":517 - * self._payload.feed_eof() - * elif self._started: - * self._on_headers_complete() # <<<<<<<<<<<<<< - * if self._messages: - * return self._messages[-1][0] - */ - __pyx_t_3 = ((struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser *)__pyx_v_self->__pyx_vtab)->_on_headers_complete(__pyx_v_self); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 517, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "aiohttp/_http_parser.pyx":518 - * elif self._started: - * self._on_headers_complete() - * if self._messages: # <<<<<<<<<<<<<< - * return self._messages[-1][0] - * - */ - __pyx_t_2 = (__pyx_v_self->_messages != Py_None)&&(PyList_GET_SIZE(__pyx_v_self->_messages) != 0); - if (__pyx_t_2) { - - /* "aiohttp/_http_parser.pyx":519 - * self._on_headers_complete() - * if self._messages: - * return self._messages[-1][0] # <<<<<<<<<<<<<< - * - * def feed_data(self, data): - */ - __Pyx_XDECREF(__pyx_r); - if (unlikely(__pyx_v_self->_messages == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 519, __pyx_L1_error) - } - __pyx_t_3 = __Pyx_GetItemInt_List(__pyx_v_self->_messages, -1L, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 519, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 519, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - - /* "aiohttp/_http_parser.pyx":518 - * elif self._started: - * self._on_headers_complete() - * if self._messages: # <<<<<<<<<<<<<< - * return self._messages[-1][0] - * - */ - } - - /* "aiohttp/_http_parser.pyx":516 - * else: - * self._payload.feed_eof() - * elif self._started: # <<<<<<<<<<<<<< - * self._on_headers_complete() - * if self._messages: - */ - } - __pyx_L3:; - - /* "aiohttp/_http_parser.pyx":500 - * ### Public API ### - * - * def feed_eof(self): # <<<<<<<<<<<<<< - * cdef bytes desc - * - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_AddTraceback("aiohttp._http_parser.HttpParser.feed_eof", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_desc); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":521 - * return self._messages[-1][0] - * - * def feed_data(self, data): # <<<<<<<<<<<<<< - * cdef: - * size_t data_len - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_10HttpParser_7feed_data(PyObject *__pyx_v_self, PyObject *__pyx_v_data); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_10HttpParser_7feed_data(PyObject *__pyx_v_self, PyObject *__pyx_v_data) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("feed_data (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_10HttpParser_6feed_data(((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_v_self), ((PyObject *)__pyx_v_data)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_10HttpParser_6feed_data(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self, PyObject *__pyx_v_data) { - size_t __pyx_v_data_len; - size_t __pyx_v_nb; - PyObject *__pyx_v_ex = NULL; - PyObject *__pyx_v_messages = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("feed_data", 0); - - /* "aiohttp/_http_parser.pyx":526 - * size_t nb - * - * PyObject_GetBuffer(data, &self.py_buf, PyBUF_SIMPLE) # <<<<<<<<<<<<<< - * data_len = self.py_buf.len - * - */ - __pyx_t_1 = PyObject_GetBuffer(__pyx_v_data, (&__pyx_v_self->py_buf), PyBUF_SIMPLE); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 526, __pyx_L1_error) - - /* "aiohttp/_http_parser.pyx":527 - * - * PyObject_GetBuffer(data, &self.py_buf, PyBUF_SIMPLE) - * data_len = self.py_buf.len # <<<<<<<<<<<<<< - * - * nb = cparser.http_parser_execute( - */ - __pyx_v_data_len = ((size_t)__pyx_v_self->py_buf.len); - - /* "aiohttp/_http_parser.pyx":529 - * data_len = self.py_buf.len - * - * nb = cparser.http_parser_execute( # <<<<<<<<<<<<<< - * self._cparser, - * self._csettings, - */ - __pyx_v_nb = http_parser_execute(__pyx_v_self->_cparser, __pyx_v_self->_csettings, ((char *)__pyx_v_self->py_buf.buf), __pyx_v_data_len); - - /* "aiohttp/_http_parser.pyx":535 - * data_len) - * - * PyBuffer_Release(&self.py_buf) # <<<<<<<<<<<<<< - * - * if (self._cparser.http_errno != cparser.HPE_OK): - */ - PyBuffer_Release((&__pyx_v_self->py_buf)); - - /* "aiohttp/_http_parser.pyx":537 - * PyBuffer_Release(&self.py_buf) - * - * if (self._cparser.http_errno != cparser.HPE_OK): # <<<<<<<<<<<<<< - * if self._payload_error == 0: - * if self._last_error is not None: - */ - __pyx_t_2 = ((__pyx_v_self->_cparser->http_errno != HPE_OK) != 0); - if (__pyx_t_2) { - - /* "aiohttp/_http_parser.pyx":538 - * - * if (self._cparser.http_errno != cparser.HPE_OK): - * if self._payload_error == 0: # <<<<<<<<<<<<<< - * if self._last_error is not None: - * ex = self._last_error - */ - __pyx_t_2 = ((__pyx_v_self->_payload_error == 0) != 0); - if (__pyx_t_2) { - - /* "aiohttp/_http_parser.pyx":539 - * if (self._cparser.http_errno != cparser.HPE_OK): - * if self._payload_error == 0: - * if self._last_error is not None: # <<<<<<<<<<<<<< - * ex = self._last_error - * self._last_error = None - */ - __pyx_t_2 = (__pyx_v_self->_last_error != Py_None); - __pyx_t_3 = (__pyx_t_2 != 0); - if (__pyx_t_3) { - - /* "aiohttp/_http_parser.pyx":540 - * if self._payload_error == 0: - * if self._last_error is not None: - * ex = self._last_error # <<<<<<<<<<<<<< - * self._last_error = None - * else: - */ - __pyx_t_4 = __pyx_v_self->_last_error; - __Pyx_INCREF(__pyx_t_4); - __pyx_v_ex = __pyx_t_4; - __pyx_t_4 = 0; - - /* "aiohttp/_http_parser.pyx":541 - * if self._last_error is not None: - * ex = self._last_error - * self._last_error = None # <<<<<<<<<<<<<< - * else: - * ex = parser_error_from_errno( - */ - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(__pyx_v_self->_last_error); - __Pyx_DECREF(__pyx_v_self->_last_error); - __pyx_v_self->_last_error = Py_None; - - /* "aiohttp/_http_parser.pyx":539 - * if (self._cparser.http_errno != cparser.HPE_OK): - * if self._payload_error == 0: - * if self._last_error is not None: # <<<<<<<<<<<<<< - * ex = self._last_error - * self._last_error = None - */ - goto __pyx_L5; - } - - /* "aiohttp/_http_parser.pyx":543 - * self._last_error = None - * else: - * ex = parser_error_from_errno( # <<<<<<<<<<<<<< - * self._cparser.http_errno) - * self._payload = None - */ - /*else*/ { - - /* "aiohttp/_http_parser.pyx":544 - * else: - * ex = parser_error_from_errno( - * self._cparser.http_errno) # <<<<<<<<<<<<<< - * self._payload = None - * raise ex - */ - __pyx_t_4 = __pyx_f_7aiohttp_12_http_parser_parser_error_from_errno(((enum http_errno)__pyx_v_self->_cparser->http_errno)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 543, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_v_ex = __pyx_t_4; - __pyx_t_4 = 0; - } - __pyx_L5:; - - /* "aiohttp/_http_parser.pyx":545 - * ex = parser_error_from_errno( - * self._cparser.http_errno) - * self._payload = None # <<<<<<<<<<<<<< - * raise ex - * - */ - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(__pyx_v_self->_payload); - __Pyx_DECREF(__pyx_v_self->_payload); - __pyx_v_self->_payload = Py_None; - - /* "aiohttp/_http_parser.pyx":546 - * self._cparser.http_errno) - * self._payload = None - * raise ex # <<<<<<<<<<<<<< - * - * if self._messages: - */ - __Pyx_Raise(__pyx_v_ex, 0, 0, 0); - __PYX_ERR(0, 546, __pyx_L1_error) - - /* "aiohttp/_http_parser.pyx":538 - * - * if (self._cparser.http_errno != cparser.HPE_OK): - * if self._payload_error == 0: # <<<<<<<<<<<<<< - * if self._last_error is not None: - * ex = self._last_error - */ - } - - /* "aiohttp/_http_parser.pyx":537 - * PyBuffer_Release(&self.py_buf) - * - * if (self._cparser.http_errno != cparser.HPE_OK): # <<<<<<<<<<<<<< - * if self._payload_error == 0: - * if self._last_error is not None: - */ - } - - /* "aiohttp/_http_parser.pyx":548 - * raise ex - * - * if self._messages: # <<<<<<<<<<<<<< - * messages = self._messages - * self._messages = [] - */ - __pyx_t_3 = (__pyx_v_self->_messages != Py_None)&&(PyList_GET_SIZE(__pyx_v_self->_messages) != 0); - if (__pyx_t_3) { - - /* "aiohttp/_http_parser.pyx":549 - * - * if self._messages: - * messages = self._messages # <<<<<<<<<<<<<< - * self._messages = [] - * else: - */ - __pyx_t_4 = __pyx_v_self->_messages; - __Pyx_INCREF(__pyx_t_4); - __pyx_v_messages = __pyx_t_4; - __pyx_t_4 = 0; - - /* "aiohttp/_http_parser.pyx":550 - * if self._messages: - * messages = self._messages - * self._messages = [] # <<<<<<<<<<<<<< - * else: - * messages = () - */ - __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 550, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GIVEREF(__pyx_t_4); - __Pyx_GOTREF(__pyx_v_self->_messages); - __Pyx_DECREF(__pyx_v_self->_messages); - __pyx_v_self->_messages = ((PyObject*)__pyx_t_4); - __pyx_t_4 = 0; - - /* "aiohttp/_http_parser.pyx":548 - * raise ex - * - * if self._messages: # <<<<<<<<<<<<<< - * messages = self._messages - * self._messages = [] - */ - goto __pyx_L6; - } - - /* "aiohttp/_http_parser.pyx":552 - * self._messages = [] - * else: - * messages = () # <<<<<<<<<<<<<< - * - * if self._upgraded: - */ - /*else*/ { - __Pyx_INCREF(__pyx_empty_tuple); - __pyx_v_messages = __pyx_empty_tuple; - } - __pyx_L6:; - - /* "aiohttp/_http_parser.pyx":554 - * messages = () - * - * if self._upgraded: # <<<<<<<<<<<<<< - * return messages, True, data[nb:] - * else: - */ - __pyx_t_3 = (__pyx_v_self->_upgraded != 0); - if (__pyx_t_3) { - - /* "aiohttp/_http_parser.pyx":555 - * - * if self._upgraded: - * return messages, True, data[nb:] # <<<<<<<<<<<<<< - * else: - * return messages, False, b'' - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyObject_GetSlice(__pyx_v_data, __pyx_v_nb, 0, NULL, NULL, NULL, 1, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 555, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 555, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_messages); - __Pyx_GIVEREF(__pyx_v_messages); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_messages); - __Pyx_INCREF(Py_True); - __Pyx_GIVEREF(Py_True); - PyTuple_SET_ITEM(__pyx_t_5, 1, Py_True); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4); - __pyx_t_4 = 0; - __pyx_r = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L0; - - /* "aiohttp/_http_parser.pyx":554 - * messages = () - * - * if self._upgraded: # <<<<<<<<<<<<<< - * return messages, True, data[nb:] - * else: - */ - } - - /* "aiohttp/_http_parser.pyx":557 - * return messages, True, data[nb:] - * else: - * return messages, False, b'' # <<<<<<<<<<<<<< - * - * def set_upgraded(self, val): - */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 557, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_INCREF(__pyx_v_messages); - __Pyx_GIVEREF(__pyx_v_messages); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_messages); - __Pyx_INCREF(Py_False); - __Pyx_GIVEREF(Py_False); - PyTuple_SET_ITEM(__pyx_t_5, 1, Py_False); - __Pyx_INCREF(__pyx_kp_b__4); - __Pyx_GIVEREF(__pyx_kp_b__4); - PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_b__4); - __pyx_r = __pyx_t_5; - __pyx_t_5 = 0; - goto __pyx_L0; - } - - /* "aiohttp/_http_parser.pyx":521 - * return self._messages[-1][0] - * - * def feed_data(self, data): # <<<<<<<<<<<<<< - * cdef: - * size_t data_len - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("aiohttp._http_parser.HttpParser.feed_data", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_ex); - __Pyx_XDECREF(__pyx_v_messages); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":559 - * return messages, False, b'' - * - * def set_upgraded(self, val): # <<<<<<<<<<<<<< - * self._upgraded = val - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_10HttpParser_9set_upgraded(PyObject *__pyx_v_self, PyObject *__pyx_v_val); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_10HttpParser_9set_upgraded(PyObject *__pyx_v_self, PyObject *__pyx_v_val) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("set_upgraded (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_10HttpParser_8set_upgraded(((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_v_self), ((PyObject *)__pyx_v_val)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_10HttpParser_8set_upgraded(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self, PyObject *__pyx_v_val) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("set_upgraded", 0); - - /* "aiohttp/_http_parser.pyx":560 - * - * def set_upgraded(self, val): - * self._upgraded = val # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_val); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 560, __pyx_L1_error) - __pyx_v_self->_upgraded = __pyx_t_1; - - /* "aiohttp/_http_parser.pyx":559 - * return messages, False, b'' - * - * def set_upgraded(self, val): # <<<<<<<<<<<<<< - * self._upgraded = val - * - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("aiohttp._http_parser.HttpParser.set_upgraded", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_10HttpParser_11__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_10HttpParser_11__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_10HttpParser_10__reduce_cython__(((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_10HttpParser_10__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__reduce_cython__", 0); - - /* "(tree fragment)":2 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(1, 2, __pyx_L1_error) - - /* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._http_parser.HttpParser.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":3 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_10HttpParser_13__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_10HttpParser_13__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_10HttpParser_12__setstate_cython__(((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_10HttpParser_12__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setstate_cython__", 0); - - /* "(tree fragment)":4 - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< - */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(1, 4, __pyx_L1_error) - - /* "(tree fragment)":3 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._http_parser.HttpParser.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":565 - * cdef class HttpRequestParser(HttpParser): - * - * def __init__(self, protocol, loop, int limit, timer=None, # <<<<<<<<<<<<<< - * size_t max_line_size=8190, size_t max_headers=32768, - * size_t max_field_size=8190, payload_exception=None, - */ - -/* Python wrapper */ -static int __pyx_pw_7aiohttp_12_http_parser_17HttpRequestParser_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_pw_7aiohttp_12_http_parser_17HttpRequestParser_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_protocol = 0; - PyObject *__pyx_v_loop = 0; - int __pyx_v_limit; - PyObject *__pyx_v_timer = 0; - size_t __pyx_v_max_line_size; - size_t __pyx_v_max_headers; - size_t __pyx_v_max_field_size; - PyObject *__pyx_v_payload_exception = 0; - int __pyx_v_response_with_body; - int __pyx_v_read_until_eof; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_protocol,&__pyx_n_s_loop,&__pyx_n_s_limit,&__pyx_n_s_timer,&__pyx_n_s_max_line_size,&__pyx_n_s_max_headers,&__pyx_n_s_max_field_size,&__pyx_n_s_payload_exception,&__pyx_n_s_response_with_body,&__pyx_n_s_read_until_eof,0}; - PyObject* values[10] = {0,0,0,0,0,0,0,0,0,0}; - values[3] = ((PyObject *)Py_None); - - /* "aiohttp/_http_parser.pyx":567 - * def __init__(self, protocol, loop, int limit, timer=None, - * size_t max_line_size=8190, size_t max_headers=32768, - * size_t max_field_size=8190, payload_exception=None, # <<<<<<<<<<<<<< - * bint response_with_body=True, bint read_until_eof=False, - * ): - */ - values[7] = ((PyObject *)Py_None); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - CYTHON_FALLTHROUGH; - case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - CYTHON_FALLTHROUGH; - case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - CYTHON_FALLTHROUGH; - case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_protocol)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_loop)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 10, 1); __PYX_ERR(0, 565, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_limit)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 10, 2); __PYX_ERR(0, 565, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 3: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_timer); - if (value) { values[3] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 4: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_line_size); - if (value) { values[4] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 5: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_headers); - if (value) { values[5] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 6: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_field_size); - if (value) { values[6] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 7: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_payload_exception); - if (value) { values[7] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 8: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_response_with_body); - if (value) { values[8] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 9: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_read_until_eof); - if (value) { values[9] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 565, __pyx_L3_error) - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - CYTHON_FALLTHROUGH; - case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - CYTHON_FALLTHROUGH; - case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - CYTHON_FALLTHROUGH; - case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_protocol = values[0]; - __pyx_v_loop = values[1]; - __pyx_v_limit = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_limit == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 565, __pyx_L3_error) - __pyx_v_timer = values[3]; - if (values[4]) { - __pyx_v_max_line_size = __Pyx_PyInt_As_size_t(values[4]); if (unlikely((__pyx_v_max_line_size == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 566, __pyx_L3_error) - } else { - __pyx_v_max_line_size = ((size_t)0x1FFE); - } - if (values[5]) { - __pyx_v_max_headers = __Pyx_PyInt_As_size_t(values[5]); if (unlikely((__pyx_v_max_headers == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 566, __pyx_L3_error) - } else { - __pyx_v_max_headers = ((size_t)0x8000); - } - if (values[6]) { - __pyx_v_max_field_size = __Pyx_PyInt_As_size_t(values[6]); if (unlikely((__pyx_v_max_field_size == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 567, __pyx_L3_error) - } else { - __pyx_v_max_field_size = ((size_t)0x1FFE); - } - __pyx_v_payload_exception = values[7]; - if (values[8]) { - __pyx_v_response_with_body = __Pyx_PyObject_IsTrue(values[8]); if (unlikely((__pyx_v_response_with_body == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 568, __pyx_L3_error) - } else { - - /* "aiohttp/_http_parser.pyx":568 - * size_t max_line_size=8190, size_t max_headers=32768, - * size_t max_field_size=8190, payload_exception=None, - * bint response_with_body=True, bint read_until_eof=False, # <<<<<<<<<<<<<< - * ): - * self._init(cparser.HTTP_REQUEST, protocol, loop, limit, timer, - */ - __pyx_v_response_with_body = ((int)1); - } - if (values[9]) { - __pyx_v_read_until_eof = __Pyx_PyObject_IsTrue(values[9]); if (unlikely((__pyx_v_read_until_eof == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 568, __pyx_L3_error) - } else { - __pyx_v_read_until_eof = ((int)0); - } - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 10, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 565, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("aiohttp._http_parser.HttpRequestParser.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return -1; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17HttpRequestParser___init__(((struct __pyx_obj_7aiohttp_12_http_parser_HttpRequestParser *)__pyx_v_self), __pyx_v_protocol, __pyx_v_loop, __pyx_v_limit, __pyx_v_timer, __pyx_v_max_line_size, __pyx_v_max_headers, __pyx_v_max_field_size, __pyx_v_payload_exception, __pyx_v_response_with_body, __pyx_v_read_until_eof); - - /* "aiohttp/_http_parser.pyx":565 - * cdef class HttpRequestParser(HttpParser): - * - * def __init__(self, protocol, loop, int limit, timer=None, # <<<<<<<<<<<<<< - * size_t max_line_size=8190, size_t max_headers=32768, - * size_t max_field_size=8190, payload_exception=None, - */ - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_7aiohttp_12_http_parser_17HttpRequestParser___init__(struct __pyx_obj_7aiohttp_12_http_parser_HttpRequestParser *__pyx_v_self, PyObject *__pyx_v_protocol, PyObject *__pyx_v_loop, int __pyx_v_limit, PyObject *__pyx_v_timer, size_t __pyx_v_max_line_size, size_t __pyx_v_max_headers, size_t __pyx_v_max_field_size, PyObject *__pyx_v_payload_exception, int __pyx_v_response_with_body, int __pyx_v_read_until_eof) { - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - struct __pyx_opt_args_7aiohttp_12_http_parser_10HttpParser__init __pyx_t_2; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__init__", 0); - - /* "aiohttp/_http_parser.pyx":570 - * bint response_with_body=True, bint read_until_eof=False, - * ): - * self._init(cparser.HTTP_REQUEST, protocol, loop, limit, timer, # <<<<<<<<<<<<<< - * max_line_size, max_headers, max_field_size, - * payload_exception, response_with_body, read_until_eof) - */ - __pyx_t_2.__pyx_n = 7; - __pyx_t_2.timer = __pyx_v_timer; - __pyx_t_2.max_line_size = __pyx_v_max_line_size; - __pyx_t_2.max_headers = __pyx_v_max_headers; - __pyx_t_2.max_field_size = __pyx_v_max_field_size; - __pyx_t_2.payload_exception = __pyx_v_payload_exception; - __pyx_t_2.response_with_body = __pyx_v_response_with_body; - __pyx_t_2.read_until_eof = __pyx_v_read_until_eof; - __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpRequestParser *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base._init(((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_v_self), HTTP_REQUEST, __pyx_v_protocol, __pyx_v_loop, __pyx_v_limit, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 570, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":565 - * cdef class HttpRequestParser(HttpParser): - * - * def __init__(self, protocol, loop, int limit, timer=None, # <<<<<<<<<<<<<< - * size_t max_line_size=8190, size_t max_headers=32768, - * size_t max_field_size=8190, payload_exception=None, - */ - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._http_parser.HttpRequestParser.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":574 - * payload_exception, response_with_body, read_until_eof) - * - * cdef object _on_status_complete(self): # <<<<<<<<<<<<<< - * cdef Py_buffer py_buf - * if not self._buf: - */ - -static PyObject *__pyx_f_7aiohttp_12_http_parser_17HttpRequestParser__on_status_complete(struct __pyx_obj_7aiohttp_12_http_parser_HttpRequestParser *__pyx_v_self) { - Py_buffer __pyx_v_py_buf; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - int __pyx_t_7; - char const *__pyx_t_8; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_on_status_complete", 0); - - /* "aiohttp/_http_parser.pyx":576 - * cdef object _on_status_complete(self): - * cdef Py_buffer py_buf - * if not self._buf: # <<<<<<<<<<<<<< - * return - * self._path = self._buf.decode('utf-8', 'surrogateescape') - */ - __pyx_t_1 = (__pyx_v_self->__pyx_base._buf != Py_None)&&(PyByteArray_GET_SIZE(__pyx_v_self->__pyx_base._buf) != 0); - __pyx_t_2 = ((!__pyx_t_1) != 0); - if (__pyx_t_2) { - - /* "aiohttp/_http_parser.pyx":577 - * cdef Py_buffer py_buf - * if not self._buf: - * return # <<<<<<<<<<<<<< - * self._path = self._buf.decode('utf-8', 'surrogateescape') - * if self._cparser.method == 5: # CONNECT - */ - __Pyx_XDECREF(__pyx_r); - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - - /* "aiohttp/_http_parser.pyx":576 - * cdef object _on_status_complete(self): - * cdef Py_buffer py_buf - * if not self._buf: # <<<<<<<<<<<<<< - * return - * self._path = self._buf.decode('utf-8', 'surrogateescape') - */ - } - - /* "aiohttp/_http_parser.pyx":578 - * if not self._buf: - * return - * self._path = self._buf.decode('utf-8', 'surrogateescape') # <<<<<<<<<<<<<< - * if self._cparser.method == 5: # CONNECT - * self._url = URL(self._path) - */ - if (unlikely(__pyx_v_self->__pyx_base._buf == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode"); - __PYX_ERR(0, 578, __pyx_L1_error) - } - __pyx_t_3 = __Pyx_decode_bytearray(__pyx_v_self->__pyx_base._buf, 0, PY_SSIZE_T_MAX, NULL, ((char const *)"surrogateescape"), PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 578, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __Pyx_GOTREF(__pyx_v_self->__pyx_base._path); - __Pyx_DECREF(__pyx_v_self->__pyx_base._path); - __pyx_v_self->__pyx_base._path = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; - - /* "aiohttp/_http_parser.pyx":579 - * return - * self._path = self._buf.decode('utf-8', 'surrogateescape') - * if self._cparser.method == 5: # CONNECT # <<<<<<<<<<<<<< - * self._url = URL(self._path) - * else: - */ - __pyx_t_2 = ((__pyx_v_self->__pyx_base._cparser->method == 5) != 0); - if (__pyx_t_2) { - - /* "aiohttp/_http_parser.pyx":580 - * self._path = self._buf.decode('utf-8', 'surrogateescape') - * if self._cparser.method == 5: # CONNECT - * self._url = URL(self._path) # <<<<<<<<<<<<<< - * else: - * PyObject_GetBuffer(self._buf, &py_buf, PyBUF_SIMPLE) - */ - __Pyx_INCREF(__pyx_v_7aiohttp_12_http_parser_URL); - __pyx_t_4 = __pyx_v_7aiohttp_12_http_parser_URL; __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - } - } - __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_self->__pyx_base._path) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_self->__pyx_base._path); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 580, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GIVEREF(__pyx_t_3); - __Pyx_GOTREF(__pyx_v_self->__pyx_base._url); - __Pyx_DECREF(__pyx_v_self->__pyx_base._url); - __pyx_v_self->__pyx_base._url = __pyx_t_3; - __pyx_t_3 = 0; - - /* "aiohttp/_http_parser.pyx":579 - * return - * self._path = self._buf.decode('utf-8', 'surrogateescape') - * if self._cparser.method == 5: # CONNECT # <<<<<<<<<<<<<< - * self._url = URL(self._path) - * else: - */ - goto __pyx_L4; - } - - /* "aiohttp/_http_parser.pyx":582 - * self._url = URL(self._path) - * else: - * PyObject_GetBuffer(self._buf, &py_buf, PyBUF_SIMPLE) # <<<<<<<<<<<<<< - * try: - * self._url = _parse_url(py_buf.buf, - */ - /*else*/ { - __pyx_t_3 = __pyx_v_self->__pyx_base._buf; - __Pyx_INCREF(__pyx_t_3); - __pyx_t_6 = PyObject_GetBuffer(__pyx_t_3, (&__pyx_v_py_buf), PyBUF_SIMPLE); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 582, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "aiohttp/_http_parser.pyx":583 - * else: - * PyObject_GetBuffer(self._buf, &py_buf, PyBUF_SIMPLE) - * try: # <<<<<<<<<<<<<< - * self._url = _parse_url(py_buf.buf, - * py_buf.len) - */ - /*try:*/ { - - /* "aiohttp/_http_parser.pyx":584 - * PyObject_GetBuffer(self._buf, &py_buf, PyBUF_SIMPLE) - * try: - * self._url = _parse_url(py_buf.buf, # <<<<<<<<<<<<<< - * py_buf.len) - * finally: - */ - __pyx_t_3 = __pyx_f_7aiohttp_12_http_parser__parse_url(((char *)__pyx_v_py_buf.buf), __pyx_v_py_buf.len); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 584, __pyx_L6_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_GIVEREF(__pyx_t_3); - __Pyx_GOTREF(__pyx_v_self->__pyx_base._url); - __Pyx_DECREF(__pyx_v_self->__pyx_base._url); - __pyx_v_self->__pyx_base._url = __pyx_t_3; - __pyx_t_3 = 0; - } - - /* "aiohttp/_http_parser.pyx":587 - * py_buf.len) - * finally: - * PyBuffer_Release(&py_buf) # <<<<<<<<<<<<<< - * PyByteArray_Resize(self._buf, 0) - * - */ - /*finally:*/ { - /*normal exit:*/{ - PyBuffer_Release((&__pyx_v_py_buf)); - goto __pyx_L7; - } - __pyx_L6_error:; - /*exception exit:*/{ - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14); - if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11); - __Pyx_XGOTREF(__pyx_t_9); - __Pyx_XGOTREF(__pyx_t_10); - __Pyx_XGOTREF(__pyx_t_11); - __Pyx_XGOTREF(__pyx_t_12); - __Pyx_XGOTREF(__pyx_t_13); - __Pyx_XGOTREF(__pyx_t_14); - __pyx_t_6 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_8 = __pyx_filename; - { - PyBuffer_Release((&__pyx_v_py_buf)); - } - if (PY_MAJOR_VERSION >= 3) { - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14); - } - __Pyx_XGIVEREF(__pyx_t_9); - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_ErrRestore(__pyx_t_9, __pyx_t_10, __pyx_t_11); - __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; - __pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_7; __pyx_filename = __pyx_t_8; - goto __pyx_L1_error; - } - __pyx_L7:; - } - } - __pyx_L4:; - - /* "aiohttp/_http_parser.pyx":588 - * finally: - * PyBuffer_Release(&py_buf) - * PyByteArray_Resize(self._buf, 0) # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_3 = __pyx_v_self->__pyx_base._buf; - __Pyx_INCREF(__pyx_t_3); - __pyx_t_7 = PyByteArray_Resize(__pyx_t_3, 0); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 588, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "aiohttp/_http_parser.pyx":574 - * payload_exception, response_with_body, read_until_eof) - * - * cdef object _on_status_complete(self): # <<<<<<<<<<<<<< - * cdef Py_buffer py_buf - * if not self._buf: - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("aiohttp._http_parser.HttpRequestParser._on_status_complete", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17HttpRequestParser_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17HttpRequestParser_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17HttpRequestParser_2__reduce_cython__(((struct __pyx_obj_7aiohttp_12_http_parser_HttpRequestParser *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_17HttpRequestParser_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7aiohttp_12_http_parser_HttpRequestParser *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__reduce_cython__", 0); - - /* "(tree fragment)":2 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(1, 2, __pyx_L1_error) - - /* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._http_parser.HttpRequestParser.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":3 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17HttpRequestParser_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_17HttpRequestParser_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_17HttpRequestParser_4__setstate_cython__(((struct __pyx_obj_7aiohttp_12_http_parser_HttpRequestParser *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_17HttpRequestParser_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7aiohttp_12_http_parser_HttpRequestParser *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setstate_cython__", 0); - - /* "(tree fragment)":4 - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< - */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(1, 4, __pyx_L1_error) - - /* "(tree fragment)":3 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._http_parser.HttpRequestParser.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":593 - * cdef class HttpResponseParser(HttpParser): - * - * def __init__(self, protocol, loop, int limit, timer=None, # <<<<<<<<<<<<<< - * size_t max_line_size=8190, size_t max_headers=32768, - * size_t max_field_size=8190, payload_exception=None, - */ - -/* Python wrapper */ -static int __pyx_pw_7aiohttp_12_http_parser_18HttpResponseParser_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static int __pyx_pw_7aiohttp_12_http_parser_18HttpResponseParser_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_protocol = 0; - PyObject *__pyx_v_loop = 0; - int __pyx_v_limit; - PyObject *__pyx_v_timer = 0; - size_t __pyx_v_max_line_size; - size_t __pyx_v_max_headers; - size_t __pyx_v_max_field_size; - PyObject *__pyx_v_payload_exception = 0; - int __pyx_v_response_with_body; - int __pyx_v_read_until_eof; - int __pyx_v_auto_decompress; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - int __pyx_r; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_protocol,&__pyx_n_s_loop,&__pyx_n_s_limit,&__pyx_n_s_timer,&__pyx_n_s_max_line_size,&__pyx_n_s_max_headers,&__pyx_n_s_max_field_size,&__pyx_n_s_payload_exception,&__pyx_n_s_response_with_body,&__pyx_n_s_read_until_eof,&__pyx_n_s_auto_decompress,0}; - PyObject* values[11] = {0,0,0,0,0,0,0,0,0,0,0}; - values[3] = ((PyObject *)Py_None); - - /* "aiohttp/_http_parser.pyx":595 - * def __init__(self, protocol, loop, int limit, timer=None, - * size_t max_line_size=8190, size_t max_headers=32768, - * size_t max_field_size=8190, payload_exception=None, # <<<<<<<<<<<<<< - * bint response_with_body=True, bint read_until_eof=False, - * bint auto_decompress=True - */ - values[7] = ((PyObject *)Py_None); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - CYTHON_FALLTHROUGH; - case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - CYTHON_FALLTHROUGH; - case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - CYTHON_FALLTHROUGH; - case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - CYTHON_FALLTHROUGH; - case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_protocol)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_loop)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 11, 1); __PYX_ERR(0, 593, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_limit)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 11, 2); __PYX_ERR(0, 593, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 3: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_timer); - if (value) { values[3] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 4: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_line_size); - if (value) { values[4] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 5: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_headers); - if (value) { values[5] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 6: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_max_field_size); - if (value) { values[6] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 7: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_payload_exception); - if (value) { values[7] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 8: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_response_with_body); - if (value) { values[8] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 9: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_read_until_eof); - if (value) { values[9] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 10: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_auto_decompress); - if (value) { values[10] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 593, __pyx_L3_error) - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 11: values[10] = PyTuple_GET_ITEM(__pyx_args, 10); - CYTHON_FALLTHROUGH; - case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - CYTHON_FALLTHROUGH; - case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - CYTHON_FALLTHROUGH; - case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - CYTHON_FALLTHROUGH; - case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_protocol = values[0]; - __pyx_v_loop = values[1]; - __pyx_v_limit = __Pyx_PyInt_As_int(values[2]); if (unlikely((__pyx_v_limit == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 593, __pyx_L3_error) - __pyx_v_timer = values[3]; - if (values[4]) { - __pyx_v_max_line_size = __Pyx_PyInt_As_size_t(values[4]); if (unlikely((__pyx_v_max_line_size == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 594, __pyx_L3_error) - } else { - __pyx_v_max_line_size = ((size_t)0x1FFE); - } - if (values[5]) { - __pyx_v_max_headers = __Pyx_PyInt_As_size_t(values[5]); if (unlikely((__pyx_v_max_headers == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 594, __pyx_L3_error) - } else { - __pyx_v_max_headers = ((size_t)0x8000); - } - if (values[6]) { - __pyx_v_max_field_size = __Pyx_PyInt_As_size_t(values[6]); if (unlikely((__pyx_v_max_field_size == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 595, __pyx_L3_error) - } else { - __pyx_v_max_field_size = ((size_t)0x1FFE); - } - __pyx_v_payload_exception = values[7]; - if (values[8]) { - __pyx_v_response_with_body = __Pyx_PyObject_IsTrue(values[8]); if (unlikely((__pyx_v_response_with_body == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 596, __pyx_L3_error) - } else { - - /* "aiohttp/_http_parser.pyx":596 - * size_t max_line_size=8190, size_t max_headers=32768, - * size_t max_field_size=8190, payload_exception=None, - * bint response_with_body=True, bint read_until_eof=False, # <<<<<<<<<<<<<< - * bint auto_decompress=True - * ): - */ - __pyx_v_response_with_body = ((int)1); - } - if (values[9]) { - __pyx_v_read_until_eof = __Pyx_PyObject_IsTrue(values[9]); if (unlikely((__pyx_v_read_until_eof == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 596, __pyx_L3_error) - } else { - __pyx_v_read_until_eof = ((int)0); - } - if (values[10]) { - __pyx_v_auto_decompress = __Pyx_PyObject_IsTrue(values[10]); if (unlikely((__pyx_v_auto_decompress == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 597, __pyx_L3_error) - } else { - - /* "aiohttp/_http_parser.pyx":597 - * size_t max_field_size=8190, payload_exception=None, - * bint response_with_body=True, bint read_until_eof=False, - * bint auto_decompress=True # <<<<<<<<<<<<<< - * ): - * self._init(cparser.HTTP_RESPONSE, protocol, loop, limit, timer, - */ - __pyx_v_auto_decompress = ((int)1); - } - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 11, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 593, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("aiohttp._http_parser.HttpResponseParser.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return -1; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18HttpResponseParser___init__(((struct __pyx_obj_7aiohttp_12_http_parser_HttpResponseParser *)__pyx_v_self), __pyx_v_protocol, __pyx_v_loop, __pyx_v_limit, __pyx_v_timer, __pyx_v_max_line_size, __pyx_v_max_headers, __pyx_v_max_field_size, __pyx_v_payload_exception, __pyx_v_response_with_body, __pyx_v_read_until_eof, __pyx_v_auto_decompress); - - /* "aiohttp/_http_parser.pyx":593 - * cdef class HttpResponseParser(HttpParser): - * - * def __init__(self, protocol, loop, int limit, timer=None, # <<<<<<<<<<<<<< - * size_t max_line_size=8190, size_t max_headers=32768, - * size_t max_field_size=8190, payload_exception=None, - */ - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static int __pyx_pf_7aiohttp_12_http_parser_18HttpResponseParser___init__(struct __pyx_obj_7aiohttp_12_http_parser_HttpResponseParser *__pyx_v_self, PyObject *__pyx_v_protocol, PyObject *__pyx_v_loop, int __pyx_v_limit, PyObject *__pyx_v_timer, size_t __pyx_v_max_line_size, size_t __pyx_v_max_headers, size_t __pyx_v_max_field_size, PyObject *__pyx_v_payload_exception, int __pyx_v_response_with_body, int __pyx_v_read_until_eof, int __pyx_v_auto_decompress) { - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - struct __pyx_opt_args_7aiohttp_12_http_parser_10HttpParser__init __pyx_t_2; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__init__", 0); - - /* "aiohttp/_http_parser.pyx":599 - * bint auto_decompress=True - * ): - * self._init(cparser.HTTP_RESPONSE, protocol, loop, limit, timer, # <<<<<<<<<<<<<< - * max_line_size, max_headers, max_field_size, - * payload_exception, response_with_body, read_until_eof, - */ - __pyx_t_2.__pyx_n = 8; - __pyx_t_2.timer = __pyx_v_timer; - __pyx_t_2.max_line_size = __pyx_v_max_line_size; - __pyx_t_2.max_headers = __pyx_v_max_headers; - __pyx_t_2.max_field_size = __pyx_v_max_field_size; - __pyx_t_2.payload_exception = __pyx_v_payload_exception; - __pyx_t_2.response_with_body = __pyx_v_response_with_body; - __pyx_t_2.read_until_eof = __pyx_v_read_until_eof; - __pyx_t_2.auto_decompress = __pyx_v_auto_decompress; - __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpResponseParser *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base._init(((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_v_self), HTTP_RESPONSE, __pyx_v_protocol, __pyx_v_loop, __pyx_v_limit, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 599, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":593 - * cdef class HttpResponseParser(HttpParser): - * - * def __init__(self, protocol, loop, int limit, timer=None, # <<<<<<<<<<<<<< - * size_t max_line_size=8190, size_t max_headers=32768, - * size_t max_field_size=8190, payload_exception=None, - */ - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._http_parser.HttpResponseParser.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":604 - * auto_decompress) - * - * cdef object _on_status_complete(self): # <<<<<<<<<<<<<< - * if self._buf: - * self._reason = self._buf.decode('utf-8', 'surrogateescape') - */ - -static PyObject *__pyx_f_7aiohttp_12_http_parser_18HttpResponseParser__on_status_complete(struct __pyx_obj_7aiohttp_12_http_parser_HttpResponseParser *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - int __pyx_t_3; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_on_status_complete", 0); - - /* "aiohttp/_http_parser.pyx":605 - * - * cdef object _on_status_complete(self): - * if self._buf: # <<<<<<<<<<<<<< - * self._reason = self._buf.decode('utf-8', 'surrogateescape') - * PyByteArray_Resize(self._buf, 0) - */ - __pyx_t_1 = (__pyx_v_self->__pyx_base._buf != Py_None)&&(PyByteArray_GET_SIZE(__pyx_v_self->__pyx_base._buf) != 0); - if (__pyx_t_1) { - - /* "aiohttp/_http_parser.pyx":606 - * cdef object _on_status_complete(self): - * if self._buf: - * self._reason = self._buf.decode('utf-8', 'surrogateescape') # <<<<<<<<<<<<<< - * PyByteArray_Resize(self._buf, 0) - * else: - */ - if (unlikely(__pyx_v_self->__pyx_base._buf == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "decode"); - __PYX_ERR(0, 606, __pyx_L1_error) - } - __pyx_t_2 = __Pyx_decode_bytearray(__pyx_v_self->__pyx_base._buf, 0, PY_SSIZE_T_MAX, NULL, ((char const *)"surrogateescape"), PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 606, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __Pyx_GOTREF(__pyx_v_self->__pyx_base._reason); - __Pyx_DECREF(__pyx_v_self->__pyx_base._reason); - __pyx_v_self->__pyx_base._reason = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; - - /* "aiohttp/_http_parser.pyx":607 - * if self._buf: - * self._reason = self._buf.decode('utf-8', 'surrogateescape') - * PyByteArray_Resize(self._buf, 0) # <<<<<<<<<<<<<< - * else: - * self._reason = self._reason or '' - */ - __pyx_t_2 = __pyx_v_self->__pyx_base._buf; - __Pyx_INCREF(__pyx_t_2); - __pyx_t_3 = PyByteArray_Resize(__pyx_t_2, 0); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 607, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "aiohttp/_http_parser.pyx":605 - * - * cdef object _on_status_complete(self): - * if self._buf: # <<<<<<<<<<<<<< - * self._reason = self._buf.decode('utf-8', 'surrogateescape') - * PyByteArray_Resize(self._buf, 0) - */ - goto __pyx_L3; - } - - /* "aiohttp/_http_parser.pyx":609 - * PyByteArray_Resize(self._buf, 0) - * else: - * self._reason = self._reason or '' # <<<<<<<<<<<<<< - * - * cdef int cb_on_message_begin(cparser.http_parser* parser) except -1: - */ - /*else*/ { - __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_self->__pyx_base._reason); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 609, __pyx_L1_error) - if (!__pyx_t_1) { - } else { - __Pyx_INCREF(__pyx_v_self->__pyx_base._reason); - __pyx_t_2 = __pyx_v_self->__pyx_base._reason; - goto __pyx_L4_bool_binop_done; - } - __Pyx_INCREF(__pyx_kp_u__4); - __pyx_t_2 = __pyx_kp_u__4; - __pyx_L4_bool_binop_done:; - __Pyx_GIVEREF(__pyx_t_2); - __Pyx_GOTREF(__pyx_v_self->__pyx_base._reason); - __Pyx_DECREF(__pyx_v_self->__pyx_base._reason); - __pyx_v_self->__pyx_base._reason = ((PyObject*)__pyx_t_2); - __pyx_t_2 = 0; - } - __pyx_L3:; - - /* "aiohttp/_http_parser.pyx":604 - * auto_decompress) - * - * cdef object _on_status_complete(self): # <<<<<<<<<<<<<< - * if self._buf: - * self._reason = self._buf.decode('utf-8', 'surrogateescape') - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("aiohttp._http_parser.HttpResponseParser._on_status_complete", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_18HttpResponseParser_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_18HttpResponseParser_3__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18HttpResponseParser_2__reduce_cython__(((struct __pyx_obj_7aiohttp_12_http_parser_HttpResponseParser *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_18HttpResponseParser_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7aiohttp_12_http_parser_HttpResponseParser *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__reduce_cython__", 0); - - /* "(tree fragment)":2 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(1, 2, __pyx_L1_error) - - /* "(tree fragment)":1 - * def __reduce_cython__(self): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._http_parser.HttpResponseParser.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":3 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_18HttpResponseParser_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_18HttpResponseParser_5__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_18HttpResponseParser_4__setstate_cython__(((struct __pyx_obj_7aiohttp_12_http_parser_HttpResponseParser *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_18HttpResponseParser_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7aiohttp_12_http_parser_HttpResponseParser *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__setstate_cython__", 0); - - /* "(tree fragment)":4 - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< - */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(1, 4, __pyx_L1_error) - - /* "(tree fragment)":3 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<< - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("aiohttp._http_parser.HttpResponseParser.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":611 - * self._reason = self._reason or '' - * - * cdef int cb_on_message_begin(cparser.http_parser* parser) except -1: # <<<<<<<<<<<<<< - * cdef HttpParser pyparser = parser.data - * - */ - -static int __pyx_f_7aiohttp_12_http_parser_cb_on_message_begin(struct http_parser *__pyx_v_parser) { - struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_pyparser = 0; - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("cb_on_message_begin", 0); - - /* "aiohttp/_http_parser.pyx":612 - * - * cdef int cb_on_message_begin(cparser.http_parser* parser) except -1: - * cdef HttpParser pyparser = parser.data # <<<<<<<<<<<<<< - * - * pyparser._started = True - */ - __pyx_t_1 = ((PyObject *)__pyx_v_parser->data); - __Pyx_INCREF(__pyx_t_1); - __pyx_v_pyparser = ((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":614 - * cdef HttpParser pyparser = parser.data - * - * pyparser._started = True # <<<<<<<<<<<<<< - * pyparser._headers = CIMultiDict() - * pyparser._raw_headers = [] - */ - __pyx_v_pyparser->_started = 1; - - /* "aiohttp/_http_parser.pyx":615 - * - * pyparser._started = True - * pyparser._headers = CIMultiDict() # <<<<<<<<<<<<<< - * pyparser._raw_headers = [] - * PyByteArray_Resize(pyparser._buf, 0) - */ - __Pyx_INCREF(__pyx_v_7aiohttp_12_http_parser_CIMultiDict); - __pyx_t_2 = __pyx_v_7aiohttp_12_http_parser_CIMultiDict; __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 615, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v_pyparser->_headers); - __Pyx_DECREF(__pyx_v_pyparser->_headers); - __pyx_v_pyparser->_headers = __pyx_t_1; - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":616 - * pyparser._started = True - * pyparser._headers = CIMultiDict() - * pyparser._raw_headers = [] # <<<<<<<<<<<<<< - * PyByteArray_Resize(pyparser._buf, 0) - * pyparser._path = None - */ - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 616, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v_pyparser->_raw_headers); - __Pyx_DECREF(__pyx_v_pyparser->_raw_headers); - __pyx_v_pyparser->_raw_headers = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":617 - * pyparser._headers = CIMultiDict() - * pyparser._raw_headers = [] - * PyByteArray_Resize(pyparser._buf, 0) # <<<<<<<<<<<<<< - * pyparser._path = None - * pyparser._reason = None - */ - __pyx_t_1 = __pyx_v_pyparser->_buf; - __Pyx_INCREF(__pyx_t_1); - __pyx_t_4 = PyByteArray_Resize(__pyx_t_1, 0); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 617, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":618 - * pyparser._raw_headers = [] - * PyByteArray_Resize(pyparser._buf, 0) - * pyparser._path = None # <<<<<<<<<<<<<< - * pyparser._reason = None - * return 0 - */ - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(__pyx_v_pyparser->_path); - __Pyx_DECREF(__pyx_v_pyparser->_path); - __pyx_v_pyparser->_path = ((PyObject*)Py_None); - - /* "aiohttp/_http_parser.pyx":619 - * PyByteArray_Resize(pyparser._buf, 0) - * pyparser._path = None - * pyparser._reason = None # <<<<<<<<<<<<<< - * return 0 - * - */ - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - __Pyx_GOTREF(__pyx_v_pyparser->_reason); - __Pyx_DECREF(__pyx_v_pyparser->_reason); - __pyx_v_pyparser->_reason = ((PyObject*)Py_None); - - /* "aiohttp/_http_parser.pyx":620 - * pyparser._path = None - * pyparser._reason = None - * return 0 # <<<<<<<<<<<<<< - * - * - */ - __pyx_r = 0; - goto __pyx_L0; - - /* "aiohttp/_http_parser.pyx":611 - * self._reason = self._reason or '' - * - * cdef int cb_on_message_begin(cparser.http_parser* parser) except -1: # <<<<<<<<<<<<<< - * cdef HttpParser pyparser = parser.data - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_AddTraceback("aiohttp._http_parser.cb_on_message_begin", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_pyparser); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":623 - * - * - * cdef int cb_on_url(cparser.http_parser* parser, # <<<<<<<<<<<<<< - * const char *at, size_t length) except -1: - * cdef HttpParser pyparser = parser.data - */ - -static int __pyx_f_7aiohttp_12_http_parser_cb_on_url(struct http_parser *__pyx_v_parser, char const *__pyx_v_at, size_t __pyx_v_length) { - struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_pyparser = 0; - PyObject *__pyx_v_ex = NULL; - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - int __pyx_t_10; - PyObject *__pyx_t_11 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("cb_on_url", 0); - - /* "aiohttp/_http_parser.pyx":625 - * cdef int cb_on_url(cparser.http_parser* parser, - * const char *at, size_t length) except -1: - * cdef HttpParser pyparser = parser.data # <<<<<<<<<<<<<< - * try: - * if length > pyparser._max_line_size: - */ - __pyx_t_1 = ((PyObject *)__pyx_v_parser->data); - __Pyx_INCREF(__pyx_t_1); - __pyx_v_pyparser = ((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":626 - * const char *at, size_t length) except -1: - * cdef HttpParser pyparser = parser.data - * try: # <<<<<<<<<<<<<< - * if length > pyparser._max_line_size: - * raise LineTooLong( - */ - { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_4); - /*try:*/ { - - /* "aiohttp/_http_parser.pyx":627 - * cdef HttpParser pyparser = parser.data - * try: - * if length > pyparser._max_line_size: # <<<<<<<<<<<<<< - * raise LineTooLong( - * 'Status line is too long', pyparser._max_line_size, length) - */ - __pyx_t_5 = ((__pyx_v_length > __pyx_v_pyparser->_max_line_size) != 0); - if (unlikely(__pyx_t_5)) { - - /* "aiohttp/_http_parser.pyx":628 - * try: - * if length > pyparser._max_line_size: - * raise LineTooLong( # <<<<<<<<<<<<<< - * 'Status line is too long', pyparser._max_line_size, length) - * extend(pyparser._buf, at, length) - */ - __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_LineTooLong); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 628, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_6); - - /* "aiohttp/_http_parser.pyx":629 - * if length > pyparser._max_line_size: - * raise LineTooLong( - * 'Status line is too long', pyparser._max_line_size, length) # <<<<<<<<<<<<<< - * extend(pyparser._buf, at, length) - * except BaseException as ex: - */ - __pyx_t_7 = __Pyx_PyInt_FromSize_t(__pyx_v_pyparser->_max_line_size); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 629, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyInt_FromSize_t(__pyx_v_length); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 629, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = NULL; - __pyx_t_10 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_9)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_9); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - __pyx_t_10 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_6)) { - PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_kp_u_Status_line_is_too_long, __pyx_t_7, __pyx_t_8}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 628, __pyx_L3_error) - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) { - PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_kp_u_Status_line_is_too_long, __pyx_t_7, __pyx_t_8}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 628, __pyx_L3_error) - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } else - #endif - { - __pyx_t_11 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 628, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_11); - if (__pyx_t_9) { - __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9); __pyx_t_9 = NULL; - } - __Pyx_INCREF(__pyx_kp_u_Status_line_is_too_long); - __Pyx_GIVEREF(__pyx_kp_u_Status_line_is_too_long); - PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_kp_u_Status_line_is_too_long); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_t_7); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_10, __pyx_t_8); - __pyx_t_7 = 0; - __pyx_t_8 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 628, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - } - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(0, 628, __pyx_L3_error) - - /* "aiohttp/_http_parser.pyx":627 - * cdef HttpParser pyparser = parser.data - * try: - * if length > pyparser._max_line_size: # <<<<<<<<<<<<<< - * raise LineTooLong( - * 'Status line is too long', pyparser._max_line_size, length) - */ - } - - /* "aiohttp/_http_parser.pyx":630 - * raise LineTooLong( - * 'Status line is too long', pyparser._max_line_size, length) - * extend(pyparser._buf, at, length) # <<<<<<<<<<<<<< - * except BaseException as ex: - * pyparser._last_error = ex - */ - __pyx_t_1 = __pyx_v_pyparser->_buf; - __Pyx_INCREF(__pyx_t_1); - __pyx_t_6 = __pyx_f_7aiohttp_12_http_parser_extend(__pyx_t_1, __pyx_v_at, __pyx_v_length); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 630, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "aiohttp/_http_parser.pyx":626 - * const char *at, size_t length) except -1: - * cdef HttpParser pyparser = parser.data - * try: # <<<<<<<<<<<<<< - * if length > pyparser._max_line_size: - * raise LineTooLong( - */ - } - - /* "aiohttp/_http_parser.pyx":635 - * return -1 - * else: - * return 0 # <<<<<<<<<<<<<< - * - * - */ - /*else:*/ { - __pyx_r = 0; - goto __pyx_L6_except_return; - } - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - - /* "aiohttp/_http_parser.pyx":631 - * 'Status line is too long', pyparser._max_line_size, length) - * extend(pyparser._buf, at, length) - * except BaseException as ex: # <<<<<<<<<<<<<< - * pyparser._last_error = ex - * return -1 - */ - __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_BaseException); - if (__pyx_t_10) { - __Pyx_AddTraceback("aiohttp._http_parser.cb_on_url", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_1, &__pyx_t_11) < 0) __PYX_ERR(0, 631, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_t_11); - __Pyx_INCREF(__pyx_t_1); - __pyx_v_ex = __pyx_t_1; - /*try:*/ { - - /* "aiohttp/_http_parser.pyx":632 - * extend(pyparser._buf, at, length) - * except BaseException as ex: - * pyparser._last_error = ex # <<<<<<<<<<<<<< - * return -1 - * else: - */ - __Pyx_INCREF(__pyx_v_ex); - __Pyx_GIVEREF(__pyx_v_ex); - __Pyx_GOTREF(__pyx_v_pyparser->_last_error); - __Pyx_DECREF(__pyx_v_pyparser->_last_error); - __pyx_v_pyparser->_last_error = __pyx_v_ex; - - /* "aiohttp/_http_parser.pyx":633 - * except BaseException as ex: - * pyparser._last_error = ex - * return -1 # <<<<<<<<<<<<<< - * else: - * return 0 - */ - __pyx_r = -1; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - goto __pyx_L14_return; - } - - /* "aiohttp/_http_parser.pyx":631 - * 'Status line is too long', pyparser._max_line_size, length) - * extend(pyparser._buf, at, length) - * except BaseException as ex: # <<<<<<<<<<<<<< - * pyparser._last_error = ex - * return -1 - */ - /*finally:*/ { - __pyx_L14_return: { - __pyx_t_10 = __pyx_r; - __Pyx_DECREF(__pyx_v_ex); - __pyx_v_ex = NULL; - __pyx_r = __pyx_t_10; - goto __pyx_L6_except_return; - } - } - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - - /* "aiohttp/_http_parser.pyx":626 - * const char *at, size_t length) except -1: - * cdef HttpParser pyparser = parser.data - * try: # <<<<<<<<<<<<<< - * if length > pyparser._max_line_size: - * raise LineTooLong( - */ - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); - goto __pyx_L1_error; - __pyx_L6_except_return:; - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); - goto __pyx_L0; - } - - /* "aiohttp/_http_parser.pyx":623 - * - * - * cdef int cb_on_url(cparser.http_parser* parser, # <<<<<<<<<<<<<< - * const char *at, size_t length) except -1: - * cdef HttpParser pyparser = parser.data - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_AddTraceback("aiohttp._http_parser.cb_on_url", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_pyparser); - __Pyx_XDECREF(__pyx_v_ex); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":638 - * - * - * cdef int cb_on_status(cparser.http_parser* parser, # <<<<<<<<<<<<<< - * const char *at, size_t length) except -1: - * cdef HttpParser pyparser = parser.data - */ - -static int __pyx_f_7aiohttp_12_http_parser_cb_on_status(struct http_parser *__pyx_v_parser, char const *__pyx_v_at, size_t __pyx_v_length) { - struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_pyparser = 0; - PyObject *__pyx_v_ex = NULL; - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - int __pyx_t_10; - PyObject *__pyx_t_11 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("cb_on_status", 0); - - /* "aiohttp/_http_parser.pyx":640 - * cdef int cb_on_status(cparser.http_parser* parser, - * const char *at, size_t length) except -1: - * cdef HttpParser pyparser = parser.data # <<<<<<<<<<<<<< - * cdef str reason - * try: - */ - __pyx_t_1 = ((PyObject *)__pyx_v_parser->data); - __Pyx_INCREF(__pyx_t_1); - __pyx_v_pyparser = ((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":642 - * cdef HttpParser pyparser = parser.data - * cdef str reason - * try: # <<<<<<<<<<<<<< - * if length > pyparser._max_line_size: - * raise LineTooLong( - */ - { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_4); - /*try:*/ { - - /* "aiohttp/_http_parser.pyx":643 - * cdef str reason - * try: - * if length > pyparser._max_line_size: # <<<<<<<<<<<<<< - * raise LineTooLong( - * 'Status line is too long', pyparser._max_line_size, length) - */ - __pyx_t_5 = ((__pyx_v_length > __pyx_v_pyparser->_max_line_size) != 0); - if (unlikely(__pyx_t_5)) { - - /* "aiohttp/_http_parser.pyx":644 - * try: - * if length > pyparser._max_line_size: - * raise LineTooLong( # <<<<<<<<<<<<<< - * 'Status line is too long', pyparser._max_line_size, length) - * extend(pyparser._buf, at, length) - */ - __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_LineTooLong); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 644, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_6); - - /* "aiohttp/_http_parser.pyx":645 - * if length > pyparser._max_line_size: - * raise LineTooLong( - * 'Status line is too long', pyparser._max_line_size, length) # <<<<<<<<<<<<<< - * extend(pyparser._buf, at, length) - * except BaseException as ex: - */ - __pyx_t_7 = __Pyx_PyInt_FromSize_t(__pyx_v_pyparser->_max_line_size); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 645, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyInt_FromSize_t(__pyx_v_length); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 645, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = NULL; - __pyx_t_10 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_6))) { - __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_6); - if (likely(__pyx_t_9)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); - __Pyx_INCREF(__pyx_t_9); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_6, function); - __pyx_t_10 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_6)) { - PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_kp_u_Status_line_is_too_long, __pyx_t_7, __pyx_t_8}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 644, __pyx_L3_error) - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) { - PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_kp_u_Status_line_is_too_long, __pyx_t_7, __pyx_t_8}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 644, __pyx_L3_error) - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - } else - #endif - { - __pyx_t_11 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 644, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_11); - if (__pyx_t_9) { - __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9); __pyx_t_9 = NULL; - } - __Pyx_INCREF(__pyx_kp_u_Status_line_is_too_long); - __Pyx_GIVEREF(__pyx_kp_u_Status_line_is_too_long); - PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_kp_u_Status_line_is_too_long); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_t_7); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_10, __pyx_t_8); - __pyx_t_7 = 0; - __pyx_t_8 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 644, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - } - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(0, 644, __pyx_L3_error) - - /* "aiohttp/_http_parser.pyx":643 - * cdef str reason - * try: - * if length > pyparser._max_line_size: # <<<<<<<<<<<<<< - * raise LineTooLong( - * 'Status line is too long', pyparser._max_line_size, length) - */ - } - - /* "aiohttp/_http_parser.pyx":646 - * raise LineTooLong( - * 'Status line is too long', pyparser._max_line_size, length) - * extend(pyparser._buf, at, length) # <<<<<<<<<<<<<< - * except BaseException as ex: - * pyparser._last_error = ex - */ - __pyx_t_1 = __pyx_v_pyparser->_buf; - __Pyx_INCREF(__pyx_t_1); - __pyx_t_6 = __pyx_f_7aiohttp_12_http_parser_extend(__pyx_t_1, __pyx_v_at, __pyx_v_length); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 646, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "aiohttp/_http_parser.pyx":642 - * cdef HttpParser pyparser = parser.data - * cdef str reason - * try: # <<<<<<<<<<<<<< - * if length > pyparser._max_line_size: - * raise LineTooLong( - */ - } - - /* "aiohttp/_http_parser.pyx":651 - * return -1 - * else: - * return 0 # <<<<<<<<<<<<<< - * - * - */ - /*else:*/ { - __pyx_r = 0; - goto __pyx_L6_except_return; - } - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - - /* "aiohttp/_http_parser.pyx":647 - * 'Status line is too long', pyparser._max_line_size, length) - * extend(pyparser._buf, at, length) - * except BaseException as ex: # <<<<<<<<<<<<<< - * pyparser._last_error = ex - * return -1 - */ - __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_BaseException); - if (__pyx_t_10) { - __Pyx_AddTraceback("aiohttp._http_parser.cb_on_status", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_1, &__pyx_t_11) < 0) __PYX_ERR(0, 647, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_t_11); - __Pyx_INCREF(__pyx_t_1); - __pyx_v_ex = __pyx_t_1; - /*try:*/ { - - /* "aiohttp/_http_parser.pyx":648 - * extend(pyparser._buf, at, length) - * except BaseException as ex: - * pyparser._last_error = ex # <<<<<<<<<<<<<< - * return -1 - * else: - */ - __Pyx_INCREF(__pyx_v_ex); - __Pyx_GIVEREF(__pyx_v_ex); - __Pyx_GOTREF(__pyx_v_pyparser->_last_error); - __Pyx_DECREF(__pyx_v_pyparser->_last_error); - __pyx_v_pyparser->_last_error = __pyx_v_ex; - - /* "aiohttp/_http_parser.pyx":649 - * except BaseException as ex: - * pyparser._last_error = ex - * return -1 # <<<<<<<<<<<<<< - * else: - * return 0 - */ - __pyx_r = -1; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; - goto __pyx_L14_return; - } - - /* "aiohttp/_http_parser.pyx":647 - * 'Status line is too long', pyparser._max_line_size, length) - * extend(pyparser._buf, at, length) - * except BaseException as ex: # <<<<<<<<<<<<<< - * pyparser._last_error = ex - * return -1 - */ - /*finally:*/ { - __pyx_L14_return: { - __pyx_t_10 = __pyx_r; - __Pyx_DECREF(__pyx_v_ex); - __pyx_v_ex = NULL; - __pyx_r = __pyx_t_10; - goto __pyx_L6_except_return; - } - } - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - - /* "aiohttp/_http_parser.pyx":642 - * cdef HttpParser pyparser = parser.data - * cdef str reason - * try: # <<<<<<<<<<<<<< - * if length > pyparser._max_line_size: - * raise LineTooLong( - */ - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); - goto __pyx_L1_error; - __pyx_L6_except_return:; - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); - goto __pyx_L0; - } - - /* "aiohttp/_http_parser.pyx":638 - * - * - * cdef int cb_on_status(cparser.http_parser* parser, # <<<<<<<<<<<<<< - * const char *at, size_t length) except -1: - * cdef HttpParser pyparser = parser.data - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_AddTraceback("aiohttp._http_parser.cb_on_status", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_pyparser); - __Pyx_XDECREF(__pyx_v_ex); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":654 - * - * - * cdef int cb_on_header_field(cparser.http_parser* parser, # <<<<<<<<<<<<<< - * const char *at, size_t length) except -1: - * cdef HttpParser pyparser = parser.data - */ - -static int __pyx_f_7aiohttp_12_http_parser_cb_on_header_field(struct http_parser *__pyx_v_parser, char const *__pyx_v_at, size_t __pyx_v_length) { - struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_pyparser = 0; - Py_ssize_t __pyx_v_size; - PyObject *__pyx_v_ex = NULL; - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - Py_ssize_t __pyx_t_5; - int __pyx_t_6; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - int __pyx_t_11; - PyObject *__pyx_t_12 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("cb_on_header_field", 0); - - /* "aiohttp/_http_parser.pyx":656 - * cdef int cb_on_header_field(cparser.http_parser* parser, - * const char *at, size_t length) except -1: - * cdef HttpParser pyparser = parser.data # <<<<<<<<<<<<<< - * cdef Py_ssize_t size - * try: - */ - __pyx_t_1 = ((PyObject *)__pyx_v_parser->data); - __Pyx_INCREF(__pyx_t_1); - __pyx_v_pyparser = ((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":658 - * cdef HttpParser pyparser = parser.data - * cdef Py_ssize_t size - * try: # <<<<<<<<<<<<<< - * pyparser._on_status_complete() - * size = len(pyparser._raw_name) + length - */ - { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_4); - /*try:*/ { - - /* "aiohttp/_http_parser.pyx":659 - * cdef Py_ssize_t size - * try: - * pyparser._on_status_complete() # <<<<<<<<<<<<<< - * size = len(pyparser._raw_name) + length - * if size > pyparser._max_field_size: - */ - __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser *)__pyx_v_pyparser->__pyx_vtab)->_on_status_complete(__pyx_v_pyparser); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 659, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":660 - * try: - * pyparser._on_status_complete() - * size = len(pyparser._raw_name) + length # <<<<<<<<<<<<<< - * if size > pyparser._max_field_size: - * raise LineTooLong( - */ - __pyx_t_1 = __pyx_v_pyparser->_raw_name; - __Pyx_INCREF(__pyx_t_1); - if (unlikely(__pyx_t_1 == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(0, 660, __pyx_L3_error) - } - __pyx_t_5 = PyByteArray_GET_SIZE(__pyx_t_1); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 660, __pyx_L3_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_size = (__pyx_t_5 + __pyx_v_length); - - /* "aiohttp/_http_parser.pyx":661 - * pyparser._on_status_complete() - * size = len(pyparser._raw_name) + length - * if size > pyparser._max_field_size: # <<<<<<<<<<<<<< - * raise LineTooLong( - * 'Header name is too long', pyparser._max_field_size, size) - */ - __pyx_t_6 = ((__pyx_v_size > __pyx_v_pyparser->_max_field_size) != 0); - if (unlikely(__pyx_t_6)) { - - /* "aiohttp/_http_parser.pyx":662 - * size = len(pyparser._raw_name) + length - * if size > pyparser._max_field_size: - * raise LineTooLong( # <<<<<<<<<<<<<< - * 'Header name is too long', pyparser._max_field_size, size) - * pyparser._on_header_field(at, length) - */ - __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_LineTooLong); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 662, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_7); - - /* "aiohttp/_http_parser.pyx":663 - * if size > pyparser._max_field_size: - * raise LineTooLong( - * 'Header name is too long', pyparser._max_field_size, size) # <<<<<<<<<<<<<< - * pyparser._on_header_field(at, length) - * except BaseException as ex: - */ - __pyx_t_8 = __Pyx_PyInt_FromSize_t(__pyx_v_pyparser->_max_field_size); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 663, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_size); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 663, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_10 = NULL; - __pyx_t_11 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_10)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_10); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - __pyx_t_11 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_7)) { - PyObject *__pyx_temp[4] = {__pyx_t_10, __pyx_kp_u_Header_name_is_too_long, __pyx_t_8, __pyx_t_9}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_11, 3+__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 662, __pyx_L3_error) - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) { - PyObject *__pyx_temp[4] = {__pyx_t_10, __pyx_kp_u_Header_name_is_too_long, __pyx_t_8, __pyx_t_9}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_11, 3+__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 662, __pyx_L3_error) - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } else - #endif - { - __pyx_t_12 = PyTuple_New(3+__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 662, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_12); - if (__pyx_t_10) { - __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_10); __pyx_t_10 = NULL; - } - __Pyx_INCREF(__pyx_kp_u_Header_name_is_too_long); - __Pyx_GIVEREF(__pyx_kp_u_Header_name_is_too_long); - PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_11, __pyx_kp_u_Header_name_is_too_long); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_11, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_9); - PyTuple_SET_ITEM(__pyx_t_12, 2+__pyx_t_11, __pyx_t_9); - __pyx_t_8 = 0; - __pyx_t_9 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_12, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 662, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - } - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(0, 662, __pyx_L3_error) - - /* "aiohttp/_http_parser.pyx":661 - * pyparser._on_status_complete() - * size = len(pyparser._raw_name) + length - * if size > pyparser._max_field_size: # <<<<<<<<<<<<<< - * raise LineTooLong( - * 'Header name is too long', pyparser._max_field_size, size) - */ - } - - /* "aiohttp/_http_parser.pyx":664 - * raise LineTooLong( - * 'Header name is too long', pyparser._max_field_size, size) - * pyparser._on_header_field(at, length) # <<<<<<<<<<<<<< - * except BaseException as ex: - * pyparser._last_error = ex - */ - __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser *)__pyx_v_pyparser->__pyx_vtab)->_on_header_field(__pyx_v_pyparser, __pyx_v_at, __pyx_v_length); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 664, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":658 - * cdef HttpParser pyparser = parser.data - * cdef Py_ssize_t size - * try: # <<<<<<<<<<<<<< - * pyparser._on_status_complete() - * size = len(pyparser._raw_name) + length - */ - } - - /* "aiohttp/_http_parser.pyx":669 - * return -1 - * else: - * return 0 # <<<<<<<<<<<<<< - * - * - */ - /*else:*/ { - __pyx_r = 0; - goto __pyx_L6_except_return; - } - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - - /* "aiohttp/_http_parser.pyx":665 - * 'Header name is too long', pyparser._max_field_size, size) - * pyparser._on_header_field(at, length) - * except BaseException as ex: # <<<<<<<<<<<<<< - * pyparser._last_error = ex - * return -1 - */ - __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_BaseException); - if (__pyx_t_11) { - __Pyx_AddTraceback("aiohttp._http_parser.cb_on_header_field", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_7, &__pyx_t_12) < 0) __PYX_ERR(0, 665, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_12); - __Pyx_INCREF(__pyx_t_7); - __pyx_v_ex = __pyx_t_7; - /*try:*/ { - - /* "aiohttp/_http_parser.pyx":666 - * pyparser._on_header_field(at, length) - * except BaseException as ex: - * pyparser._last_error = ex # <<<<<<<<<<<<<< - * return -1 - * else: - */ - __Pyx_INCREF(__pyx_v_ex); - __Pyx_GIVEREF(__pyx_v_ex); - __Pyx_GOTREF(__pyx_v_pyparser->_last_error); - __Pyx_DECREF(__pyx_v_pyparser->_last_error); - __pyx_v_pyparser->_last_error = __pyx_v_ex; - - /* "aiohttp/_http_parser.pyx":667 - * except BaseException as ex: - * pyparser._last_error = ex - * return -1 # <<<<<<<<<<<<<< - * else: - * return 0 - */ - __pyx_r = -1; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - goto __pyx_L14_return; - } - - /* "aiohttp/_http_parser.pyx":665 - * 'Header name is too long', pyparser._max_field_size, size) - * pyparser._on_header_field(at, length) - * except BaseException as ex: # <<<<<<<<<<<<<< - * pyparser._last_error = ex - * return -1 - */ - /*finally:*/ { - __pyx_L14_return: { - __pyx_t_11 = __pyx_r; - __Pyx_DECREF(__pyx_v_ex); - __pyx_v_ex = NULL; - __pyx_r = __pyx_t_11; - goto __pyx_L6_except_return; - } - } - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - - /* "aiohttp/_http_parser.pyx":658 - * cdef HttpParser pyparser = parser.data - * cdef Py_ssize_t size - * try: # <<<<<<<<<<<<<< - * pyparser._on_status_complete() - * size = len(pyparser._raw_name) + length - */ - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); - goto __pyx_L1_error; - __pyx_L6_except_return:; - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); - goto __pyx_L0; - } - - /* "aiohttp/_http_parser.pyx":654 - * - * - * cdef int cb_on_header_field(cparser.http_parser* parser, # <<<<<<<<<<<<<< - * const char *at, size_t length) except -1: - * cdef HttpParser pyparser = parser.data - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_XDECREF(__pyx_t_12); - __Pyx_AddTraceback("aiohttp._http_parser.cb_on_header_field", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_pyparser); - __Pyx_XDECREF(__pyx_v_ex); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":672 - * - * - * cdef int cb_on_header_value(cparser.http_parser* parser, # <<<<<<<<<<<<<< - * const char *at, size_t length) except -1: - * cdef HttpParser pyparser = parser.data - */ - -static int __pyx_f_7aiohttp_12_http_parser_cb_on_header_value(struct http_parser *__pyx_v_parser, char const *__pyx_v_at, size_t __pyx_v_length) { - struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_pyparser = 0; - Py_ssize_t __pyx_v_size; - PyObject *__pyx_v_ex = NULL; - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - Py_ssize_t __pyx_t_5; - int __pyx_t_6; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - int __pyx_t_11; - PyObject *__pyx_t_12 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("cb_on_header_value", 0); - - /* "aiohttp/_http_parser.pyx":674 - * cdef int cb_on_header_value(cparser.http_parser* parser, - * const char *at, size_t length) except -1: - * cdef HttpParser pyparser = parser.data # <<<<<<<<<<<<<< - * cdef Py_ssize_t size - * try: - */ - __pyx_t_1 = ((PyObject *)__pyx_v_parser->data); - __Pyx_INCREF(__pyx_t_1); - __pyx_v_pyparser = ((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":676 - * cdef HttpParser pyparser = parser.data - * cdef Py_ssize_t size - * try: # <<<<<<<<<<<<<< - * size = len(pyparser._raw_value) + length - * if size > pyparser._max_field_size: - */ - { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_4); - /*try:*/ { - - /* "aiohttp/_http_parser.pyx":677 - * cdef Py_ssize_t size - * try: - * size = len(pyparser._raw_value) + length # <<<<<<<<<<<<<< - * if size > pyparser._max_field_size: - * raise LineTooLong( - */ - __pyx_t_1 = __pyx_v_pyparser->_raw_value; - __Pyx_INCREF(__pyx_t_1); - if (unlikely(__pyx_t_1 == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(0, 677, __pyx_L3_error) - } - __pyx_t_5 = PyByteArray_GET_SIZE(__pyx_t_1); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 677, __pyx_L3_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_size = (__pyx_t_5 + __pyx_v_length); - - /* "aiohttp/_http_parser.pyx":678 - * try: - * size = len(pyparser._raw_value) + length - * if size > pyparser._max_field_size: # <<<<<<<<<<<<<< - * raise LineTooLong( - * 'Header value is too long', pyparser._max_field_size, size) - */ - __pyx_t_6 = ((__pyx_v_size > __pyx_v_pyparser->_max_field_size) != 0); - if (unlikely(__pyx_t_6)) { - - /* "aiohttp/_http_parser.pyx":679 - * size = len(pyparser._raw_value) + length - * if size > pyparser._max_field_size: - * raise LineTooLong( # <<<<<<<<<<<<<< - * 'Header value is too long', pyparser._max_field_size, size) - * pyparser._on_header_value(at, length) - */ - __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_LineTooLong); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 679, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_7); - - /* "aiohttp/_http_parser.pyx":680 - * if size > pyparser._max_field_size: - * raise LineTooLong( - * 'Header value is too long', pyparser._max_field_size, size) # <<<<<<<<<<<<<< - * pyparser._on_header_value(at, length) - * except BaseException as ex: - */ - __pyx_t_8 = __Pyx_PyInt_FromSize_t(__pyx_v_pyparser->_max_field_size); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 680, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_8); - __pyx_t_9 = PyInt_FromSsize_t(__pyx_v_size); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 680, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_9); - __pyx_t_10 = NULL; - __pyx_t_11 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_10)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_10); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - __pyx_t_11 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_7)) { - PyObject *__pyx_temp[4] = {__pyx_t_10, __pyx_kp_u_Header_value_is_too_long, __pyx_t_8, __pyx_t_9}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_11, 3+__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 679, __pyx_L3_error) - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) { - PyObject *__pyx_temp[4] = {__pyx_t_10, __pyx_kp_u_Header_value_is_too_long, __pyx_t_8, __pyx_t_9}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_11, 3+__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 679, __pyx_L3_error) - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } else - #endif - { - __pyx_t_12 = PyTuple_New(3+__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 679, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_12); - if (__pyx_t_10) { - __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_10); __pyx_t_10 = NULL; - } - __Pyx_INCREF(__pyx_kp_u_Header_value_is_too_long); - __Pyx_GIVEREF(__pyx_kp_u_Header_value_is_too_long); - PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_11, __pyx_kp_u_Header_value_is_too_long); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_11, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_9); - PyTuple_SET_ITEM(__pyx_t_12, 2+__pyx_t_11, __pyx_t_9); - __pyx_t_8 = 0; - __pyx_t_9 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_12, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 679, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - } - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(0, 679, __pyx_L3_error) - - /* "aiohttp/_http_parser.pyx":678 - * try: - * size = len(pyparser._raw_value) + length - * if size > pyparser._max_field_size: # <<<<<<<<<<<<<< - * raise LineTooLong( - * 'Header value is too long', pyparser._max_field_size, size) - */ - } - - /* "aiohttp/_http_parser.pyx":681 - * raise LineTooLong( - * 'Header value is too long', pyparser._max_field_size, size) - * pyparser._on_header_value(at, length) # <<<<<<<<<<<<<< - * except BaseException as ex: - * pyparser._last_error = ex - */ - __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser *)__pyx_v_pyparser->__pyx_vtab)->_on_header_value(__pyx_v_pyparser, __pyx_v_at, __pyx_v_length); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 681, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":676 - * cdef HttpParser pyparser = parser.data - * cdef Py_ssize_t size - * try: # <<<<<<<<<<<<<< - * size = len(pyparser._raw_value) + length - * if size > pyparser._max_field_size: - */ - } - - /* "aiohttp/_http_parser.pyx":686 - * return -1 - * else: - * return 0 # <<<<<<<<<<<<<< - * - * - */ - /*else:*/ { - __pyx_r = 0; - goto __pyx_L6_except_return; - } - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - - /* "aiohttp/_http_parser.pyx":682 - * 'Header value is too long', pyparser._max_field_size, size) - * pyparser._on_header_value(at, length) - * except BaseException as ex: # <<<<<<<<<<<<<< - * pyparser._last_error = ex - * return -1 - */ - __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_BaseException); - if (__pyx_t_11) { - __Pyx_AddTraceback("aiohttp._http_parser.cb_on_header_value", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_7, &__pyx_t_12) < 0) __PYX_ERR(0, 682, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_GOTREF(__pyx_t_12); - __Pyx_INCREF(__pyx_t_7); - __pyx_v_ex = __pyx_t_7; - /*try:*/ { - - /* "aiohttp/_http_parser.pyx":683 - * pyparser._on_header_value(at, length) - * except BaseException as ex: - * pyparser._last_error = ex # <<<<<<<<<<<<<< - * return -1 - * else: - */ - __Pyx_INCREF(__pyx_v_ex); - __Pyx_GIVEREF(__pyx_v_ex); - __Pyx_GOTREF(__pyx_v_pyparser->_last_error); - __Pyx_DECREF(__pyx_v_pyparser->_last_error); - __pyx_v_pyparser->_last_error = __pyx_v_ex; - - /* "aiohttp/_http_parser.pyx":684 - * except BaseException as ex: - * pyparser._last_error = ex - * return -1 # <<<<<<<<<<<<<< - * else: - * return 0 - */ - __pyx_r = -1; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - goto __pyx_L14_return; - } - - /* "aiohttp/_http_parser.pyx":682 - * 'Header value is too long', pyparser._max_field_size, size) - * pyparser._on_header_value(at, length) - * except BaseException as ex: # <<<<<<<<<<<<<< - * pyparser._last_error = ex - * return -1 - */ - /*finally:*/ { - __pyx_L14_return: { - __pyx_t_11 = __pyx_r; - __Pyx_DECREF(__pyx_v_ex); - __pyx_v_ex = NULL; - __pyx_r = __pyx_t_11; - goto __pyx_L6_except_return; - } - } - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - - /* "aiohttp/_http_parser.pyx":676 - * cdef HttpParser pyparser = parser.data - * cdef Py_ssize_t size - * try: # <<<<<<<<<<<<<< - * size = len(pyparser._raw_value) + length - * if size > pyparser._max_field_size: - */ - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); - goto __pyx_L1_error; - __pyx_L6_except_return:; - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); - goto __pyx_L0; - } - - /* "aiohttp/_http_parser.pyx":672 - * - * - * cdef int cb_on_header_value(cparser.http_parser* parser, # <<<<<<<<<<<<<< - * const char *at, size_t length) except -1: - * cdef HttpParser pyparser = parser.data - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_XDECREF(__pyx_t_12); - __Pyx_AddTraceback("aiohttp._http_parser.cb_on_header_value", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_pyparser); - __Pyx_XDECREF(__pyx_v_ex); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":689 - * - * - * cdef int cb_on_headers_complete(cparser.http_parser* parser) except -1: # <<<<<<<<<<<<<< - * cdef HttpParser pyparser = parser.data - * try: - */ - -static int __pyx_f_7aiohttp_12_http_parser_cb_on_headers_complete(struct http_parser *__pyx_v_parser) { - struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_pyparser = 0; - PyObject *__pyx_v_exc = NULL; - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - int __pyx_t_6; - int __pyx_t_7; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("cb_on_headers_complete", 0); - - /* "aiohttp/_http_parser.pyx":690 - * - * cdef int cb_on_headers_complete(cparser.http_parser* parser) except -1: - * cdef HttpParser pyparser = parser.data # <<<<<<<<<<<<<< - * try: - * pyparser._on_status_complete() - */ - __pyx_t_1 = ((PyObject *)__pyx_v_parser->data); - __Pyx_INCREF(__pyx_t_1); - __pyx_v_pyparser = ((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":691 - * cdef int cb_on_headers_complete(cparser.http_parser* parser) except -1: - * cdef HttpParser pyparser = parser.data - * try: # <<<<<<<<<<<<<< - * pyparser._on_status_complete() - * pyparser._on_headers_complete() - */ - { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_4); - /*try:*/ { - - /* "aiohttp/_http_parser.pyx":692 - * cdef HttpParser pyparser = parser.data - * try: - * pyparser._on_status_complete() # <<<<<<<<<<<<<< - * pyparser._on_headers_complete() - * except BaseException as exc: - */ - __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser *)__pyx_v_pyparser->__pyx_vtab)->_on_status_complete(__pyx_v_pyparser); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 692, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":693 - * try: - * pyparser._on_status_complete() - * pyparser._on_headers_complete() # <<<<<<<<<<<<<< - * except BaseException as exc: - * pyparser._last_error = exc - */ - __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser *)__pyx_v_pyparser->__pyx_vtab)->_on_headers_complete(__pyx_v_pyparser); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 693, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":691 - * cdef int cb_on_headers_complete(cparser.http_parser* parser) except -1: - * cdef HttpParser pyparser = parser.data - * try: # <<<<<<<<<<<<<< - * pyparser._on_status_complete() - * pyparser._on_headers_complete() - */ - } - - /* "aiohttp/_http_parser.pyx":698 - * return -1 - * else: - * if pyparser._cparser.upgrade or pyparser._cparser.method == 5: # CONNECT # <<<<<<<<<<<<<< - * return 2 - * else: - */ - /*else:*/ { - __pyx_t_6 = (__pyx_v_pyparser->_cparser->upgrade != 0); - if (!__pyx_t_6) { - } else { - __pyx_t_5 = __pyx_t_6; - goto __pyx_L10_bool_binop_done; - } - __pyx_t_6 = ((__pyx_v_pyparser->_cparser->method == 5) != 0); - __pyx_t_5 = __pyx_t_6; - __pyx_L10_bool_binop_done:; - if (__pyx_t_5) { - - /* "aiohttp/_http_parser.pyx":699 - * else: - * if pyparser._cparser.upgrade or pyparser._cparser.method == 5: # CONNECT - * return 2 # <<<<<<<<<<<<<< - * else: - * return 0 - */ - __pyx_r = 2; - goto __pyx_L6_except_return; - - /* "aiohttp/_http_parser.pyx":698 - * return -1 - * else: - * if pyparser._cparser.upgrade or pyparser._cparser.method == 5: # CONNECT # <<<<<<<<<<<<<< - * return 2 - * else: - */ - } - - /* "aiohttp/_http_parser.pyx":701 - * return 2 - * else: - * return 0 # <<<<<<<<<<<<<< - * - * - */ - /*else*/ { - __pyx_r = 0; - goto __pyx_L6_except_return; - } - } - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":694 - * pyparser._on_status_complete() - * pyparser._on_headers_complete() - * except BaseException as exc: # <<<<<<<<<<<<<< - * pyparser._last_error = exc - * return -1 - */ - __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_BaseException); - if (__pyx_t_7) { - __Pyx_AddTraceback("aiohttp._http_parser.cb_on_headers_complete", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_8, &__pyx_t_9) < 0) __PYX_ERR(0, 694, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GOTREF(__pyx_t_9); - __Pyx_INCREF(__pyx_t_8); - __pyx_v_exc = __pyx_t_8; - /*try:*/ { - - /* "aiohttp/_http_parser.pyx":695 - * pyparser._on_headers_complete() - * except BaseException as exc: - * pyparser._last_error = exc # <<<<<<<<<<<<<< - * return -1 - * else: - */ - __Pyx_INCREF(__pyx_v_exc); - __Pyx_GIVEREF(__pyx_v_exc); - __Pyx_GOTREF(__pyx_v_pyparser->_last_error); - __Pyx_DECREF(__pyx_v_pyparser->_last_error); - __pyx_v_pyparser->_last_error = __pyx_v_exc; - - /* "aiohttp/_http_parser.pyx":696 - * except BaseException as exc: - * pyparser._last_error = exc - * return -1 # <<<<<<<<<<<<<< - * else: - * if pyparser._cparser.upgrade or pyparser._cparser.method == 5: # CONNECT - */ - __pyx_r = -1; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - goto __pyx_L16_return; - } - - /* "aiohttp/_http_parser.pyx":694 - * pyparser._on_status_complete() - * pyparser._on_headers_complete() - * except BaseException as exc: # <<<<<<<<<<<<<< - * pyparser._last_error = exc - * return -1 - */ - /*finally:*/ { - __pyx_L16_return: { - __pyx_t_7 = __pyx_r; - __Pyx_DECREF(__pyx_v_exc); - __pyx_v_exc = NULL; - __pyx_r = __pyx_t_7; - goto __pyx_L6_except_return; - } - } - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - - /* "aiohttp/_http_parser.pyx":691 - * cdef int cb_on_headers_complete(cparser.http_parser* parser) except -1: - * cdef HttpParser pyparser = parser.data - * try: # <<<<<<<<<<<<<< - * pyparser._on_status_complete() - * pyparser._on_headers_complete() - */ - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); - goto __pyx_L1_error; - __pyx_L6_except_return:; - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); - goto __pyx_L0; - } - - /* "aiohttp/_http_parser.pyx":689 - * - * - * cdef int cb_on_headers_complete(cparser.http_parser* parser) except -1: # <<<<<<<<<<<<<< - * cdef HttpParser pyparser = parser.data - * try: - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_AddTraceback("aiohttp._http_parser.cb_on_headers_complete", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_pyparser); - __Pyx_XDECREF(__pyx_v_exc); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":704 - * - * - * cdef int cb_on_body(cparser.http_parser* parser, # <<<<<<<<<<<<<< - * const char *at, size_t length) except -1: - * cdef HttpParser pyparser = parser.data - */ - -static int __pyx_f_7aiohttp_12_http_parser_cb_on_body(struct http_parser *__pyx_v_parser, char const *__pyx_v_at, size_t __pyx_v_length) { - struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_pyparser = 0; - PyObject *__pyx_v_body = 0; - PyObject *__pyx_v_exc = NULL; - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - int __pyx_t_8; - PyObject *__pyx_t_9 = NULL; - int __pyx_t_10; - int __pyx_t_11; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - PyObject *__pyx_t_15 = NULL; - int __pyx_t_16; - char const *__pyx_t_17; - PyObject *__pyx_t_18 = NULL; - PyObject *__pyx_t_19 = NULL; - PyObject *__pyx_t_20 = NULL; - PyObject *__pyx_t_21 = NULL; - PyObject *__pyx_t_22 = NULL; - PyObject *__pyx_t_23 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("cb_on_body", 0); - - /* "aiohttp/_http_parser.pyx":706 - * cdef int cb_on_body(cparser.http_parser* parser, - * const char *at, size_t length) except -1: - * cdef HttpParser pyparser = parser.data # <<<<<<<<<<<<<< - * cdef bytes body = at[:length] - * try: - */ - __pyx_t_1 = ((PyObject *)__pyx_v_parser->data); - __Pyx_INCREF(__pyx_t_1); - __pyx_v_pyparser = ((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":707 - * const char *at, size_t length) except -1: - * cdef HttpParser pyparser = parser.data - * cdef bytes body = at[:length] # <<<<<<<<<<<<<< - * try: - * pyparser._payload.feed_data(body, length) - */ - __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_at + 0, __pyx_v_length - 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 707, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_body = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":708 - * cdef HttpParser pyparser = parser.data - * cdef bytes body = at[:length] - * try: # <<<<<<<<<<<<<< - * pyparser._payload.feed_data(body, length) - * except BaseException as exc: - */ - { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_4); - /*try:*/ { - - /* "aiohttp/_http_parser.pyx":709 - * cdef bytes body = at[:length] - * try: - * pyparser._payload.feed_data(body, length) # <<<<<<<<<<<<<< - * except BaseException as exc: - * if pyparser._payload_exception is not None: - */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_pyparser->_payload, __pyx_n_s_feed_data); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 709, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = __Pyx_PyInt_FromSize_t(__pyx_v_length); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 709, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = NULL; - __pyx_t_8 = 0; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) { - __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5); - if (likely(__pyx_t_7)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); - __Pyx_INCREF(__pyx_t_7); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_5, function); - __pyx_t_8 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_5)) { - PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_body, __pyx_t_6}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 709, __pyx_L3_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) { - PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_body, __pyx_t_6}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 709, __pyx_L3_error) - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } else - #endif - { - __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 709, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_9); - if (__pyx_t_7) { - __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL; - } - __Pyx_INCREF(__pyx_v_body); - __Pyx_GIVEREF(__pyx_v_body); - PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_v_body); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_t_6); - __pyx_t_6 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 709, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - } - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":708 - * cdef HttpParser pyparser = parser.data - * cdef bytes body = at[:length] - * try: # <<<<<<<<<<<<<< - * pyparser._payload.feed_data(body, length) - * except BaseException as exc: - */ - } - - /* "aiohttp/_http_parser.pyx":718 - * return -1 - * else: - * return 0 # <<<<<<<<<<<<<< - * - * - */ - /*else:*/ { - __pyx_r = 0; - goto __pyx_L6_except_return; - } - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - - /* "aiohttp/_http_parser.pyx":710 - * try: - * pyparser._payload.feed_data(body, length) - * except BaseException as exc: # <<<<<<<<<<<<<< - * if pyparser._payload_exception is not None: - * pyparser._payload.set_exception(pyparser._payload_exception(str(exc))) - */ - __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_BaseException); - if (__pyx_t_8) { - __Pyx_AddTraceback("aiohttp._http_parser.cb_on_body", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_5, &__pyx_t_9) < 0) __PYX_ERR(0, 710, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GOTREF(__pyx_t_9); - __Pyx_INCREF(__pyx_t_5); - __pyx_v_exc = __pyx_t_5; - /*try:*/ { - - /* "aiohttp/_http_parser.pyx":711 - * pyparser._payload.feed_data(body, length) - * except BaseException as exc: - * if pyparser._payload_exception is not None: # <<<<<<<<<<<<<< - * pyparser._payload.set_exception(pyparser._payload_exception(str(exc))) - * else: - */ - __pyx_t_10 = (__pyx_v_pyparser->_payload_exception != Py_None); - __pyx_t_11 = (__pyx_t_10 != 0); - if (__pyx_t_11) { - - /* "aiohttp/_http_parser.pyx":712 - * except BaseException as exc: - * if pyparser._payload_exception is not None: - * pyparser._payload.set_exception(pyparser._payload_exception(str(exc))) # <<<<<<<<<<<<<< - * else: - * pyparser._payload.set_exception(exc) - */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_pyparser->_payload, __pyx_n_s_set_exception); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 712, __pyx_L14_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_13 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), __pyx_v_exc); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 712, __pyx_L14_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_INCREF(__pyx_v_pyparser->_payload_exception); - __pyx_t_14 = __pyx_v_pyparser->_payload_exception; __pyx_t_15 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_14))) { - __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_14); - if (likely(__pyx_t_15)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14); - __Pyx_INCREF(__pyx_t_15); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_14, function); - } - } - __pyx_t_12 = (__pyx_t_15) ? __Pyx_PyObject_Call2Args(__pyx_t_14, __pyx_t_15, __pyx_t_13) : __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_t_13); - __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; - __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; - if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 712, __pyx_L14_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0; - __pyx_t_14 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_14)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_14); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - } - } - __pyx_t_6 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_14, __pyx_t_12) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_12); - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0; - if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 712, __pyx_L14_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - - /* "aiohttp/_http_parser.pyx":711 - * pyparser._payload.feed_data(body, length) - * except BaseException as exc: - * if pyparser._payload_exception is not None: # <<<<<<<<<<<<<< - * pyparser._payload.set_exception(pyparser._payload_exception(str(exc))) - * else: - */ - goto __pyx_L16; - } - - /* "aiohttp/_http_parser.pyx":714 - * pyparser._payload.set_exception(pyparser._payload_exception(str(exc))) - * else: - * pyparser._payload.set_exception(exc) # <<<<<<<<<<<<<< - * pyparser._payload_error = 1 - * return -1 - */ - /*else*/ { - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_pyparser->_payload, __pyx_n_s_set_exception); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 714, __pyx_L14_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_12 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_12)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_12); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - } - } - __pyx_t_6 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_12, __pyx_v_exc) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_v_exc); - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 714, __pyx_L14_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } - __pyx_L16:; - - /* "aiohttp/_http_parser.pyx":715 - * else: - * pyparser._payload.set_exception(exc) - * pyparser._payload_error = 1 # <<<<<<<<<<<<<< - * return -1 - * else: - */ - __pyx_v_pyparser->_payload_error = 1; - - /* "aiohttp/_http_parser.pyx":716 - * pyparser._payload.set_exception(exc) - * pyparser._payload_error = 1 - * return -1 # <<<<<<<<<<<<<< - * else: - * return 0 - */ - __pyx_r = -1; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; - goto __pyx_L13_return; - } - - /* "aiohttp/_http_parser.pyx":710 - * try: - * pyparser._payload.feed_data(body, length) - * except BaseException as exc: # <<<<<<<<<<<<<< - * if pyparser._payload_exception is not None: - * pyparser._payload.set_exception(pyparser._payload_exception(str(exc))) - */ - /*finally:*/ { - __pyx_L14_error:; - /*exception exit:*/{ - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; - __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0; - __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0; - __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0; - __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_21, &__pyx_t_22, &__pyx_t_23); - if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20) < 0)) __Pyx_ErrFetch(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20); - __Pyx_XGOTREF(__pyx_t_18); - __Pyx_XGOTREF(__pyx_t_19); - __Pyx_XGOTREF(__pyx_t_20); - __Pyx_XGOTREF(__pyx_t_21); - __Pyx_XGOTREF(__pyx_t_22); - __Pyx_XGOTREF(__pyx_t_23); - __pyx_t_8 = __pyx_lineno; __pyx_t_16 = __pyx_clineno; __pyx_t_17 = __pyx_filename; - { - __Pyx_DECREF(__pyx_v_exc); - __pyx_v_exc = NULL; - } - if (PY_MAJOR_VERSION >= 3) { - __Pyx_XGIVEREF(__pyx_t_21); - __Pyx_XGIVEREF(__pyx_t_22); - __Pyx_XGIVEREF(__pyx_t_23); - __Pyx_ExceptionReset(__pyx_t_21, __pyx_t_22, __pyx_t_23); - } - __Pyx_XGIVEREF(__pyx_t_18); - __Pyx_XGIVEREF(__pyx_t_19); - __Pyx_XGIVEREF(__pyx_t_20); - __Pyx_ErrRestore(__pyx_t_18, __pyx_t_19, __pyx_t_20); - __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; - __pyx_lineno = __pyx_t_8; __pyx_clineno = __pyx_t_16; __pyx_filename = __pyx_t_17; - goto __pyx_L5_except_error; - } - __pyx_L13_return: { - __pyx_t_16 = __pyx_r; - __Pyx_DECREF(__pyx_v_exc); - __pyx_v_exc = NULL; - __pyx_r = __pyx_t_16; - goto __pyx_L6_except_return; - } - } - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - - /* "aiohttp/_http_parser.pyx":708 - * cdef HttpParser pyparser = parser.data - * cdef bytes body = at[:length] - * try: # <<<<<<<<<<<<<< - * pyparser._payload.feed_data(body, length) - * except BaseException as exc: - */ - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); - goto __pyx_L1_error; - __pyx_L6_except_return:; - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); - goto __pyx_L0; - } - - /* "aiohttp/_http_parser.pyx":704 - * - * - * cdef int cb_on_body(cparser.http_parser* parser, # <<<<<<<<<<<<<< - * const char *at, size_t length) except -1: - * cdef HttpParser pyparser = parser.data - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_12); - __Pyx_XDECREF(__pyx_t_13); - __Pyx_XDECREF(__pyx_t_14); - __Pyx_XDECREF(__pyx_t_15); - __Pyx_AddTraceback("aiohttp._http_parser.cb_on_body", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_pyparser); - __Pyx_XDECREF(__pyx_v_body); - __Pyx_XDECREF(__pyx_v_exc); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":721 - * - * - * cdef int cb_on_message_complete(cparser.http_parser* parser) except -1: # <<<<<<<<<<<<<< - * cdef HttpParser pyparser = parser.data - * try: - */ - -static int __pyx_f_7aiohttp_12_http_parser_cb_on_message_complete(struct http_parser *__pyx_v_parser) { - struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_pyparser = 0; - PyObject *__pyx_v_exc = NULL; - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("cb_on_message_complete", 0); - - /* "aiohttp/_http_parser.pyx":722 - * - * cdef int cb_on_message_complete(cparser.http_parser* parser) except -1: - * cdef HttpParser pyparser = parser.data # <<<<<<<<<<<<<< - * try: - * pyparser._started = False - */ - __pyx_t_1 = ((PyObject *)__pyx_v_parser->data); - __Pyx_INCREF(__pyx_t_1); - __pyx_v_pyparser = ((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":723 - * cdef int cb_on_message_complete(cparser.http_parser* parser) except -1: - * cdef HttpParser pyparser = parser.data - * try: # <<<<<<<<<<<<<< - * pyparser._started = False - * pyparser._on_message_complete() - */ - { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_4); - /*try:*/ { - - /* "aiohttp/_http_parser.pyx":724 - * cdef HttpParser pyparser = parser.data - * try: - * pyparser._started = False # <<<<<<<<<<<<<< - * pyparser._on_message_complete() - * except BaseException as exc: - */ - __pyx_v_pyparser->_started = 0; - - /* "aiohttp/_http_parser.pyx":725 - * try: - * pyparser._started = False - * pyparser._on_message_complete() # <<<<<<<<<<<<<< - * except BaseException as exc: - * pyparser._last_error = exc - */ - __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser *)__pyx_v_pyparser->__pyx_vtab)->_on_message_complete(__pyx_v_pyparser); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 725, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":723 - * cdef int cb_on_message_complete(cparser.http_parser* parser) except -1: - * cdef HttpParser pyparser = parser.data - * try: # <<<<<<<<<<<<<< - * pyparser._started = False - * pyparser._on_message_complete() - */ - } - - /* "aiohttp/_http_parser.pyx":730 - * return -1 - * else: - * return 0 # <<<<<<<<<<<<<< - * - * - */ - /*else:*/ { - __pyx_r = 0; - goto __pyx_L6_except_return; - } - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":726 - * pyparser._started = False - * pyparser._on_message_complete() - * except BaseException as exc: # <<<<<<<<<<<<<< - * pyparser._last_error = exc - * return -1 - */ - __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_BaseException); - if (__pyx_t_5) { - __Pyx_AddTraceback("aiohttp._http_parser.cb_on_message_complete", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(0, 726, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_t_6); - __pyx_v_exc = __pyx_t_6; - /*try:*/ { - - /* "aiohttp/_http_parser.pyx":727 - * pyparser._on_message_complete() - * except BaseException as exc: - * pyparser._last_error = exc # <<<<<<<<<<<<<< - * return -1 - * else: - */ - __Pyx_INCREF(__pyx_v_exc); - __Pyx_GIVEREF(__pyx_v_exc); - __Pyx_GOTREF(__pyx_v_pyparser->_last_error); - __Pyx_DECREF(__pyx_v_pyparser->_last_error); - __pyx_v_pyparser->_last_error = __pyx_v_exc; - - /* "aiohttp/_http_parser.pyx":728 - * except BaseException as exc: - * pyparser._last_error = exc - * return -1 # <<<<<<<<<<<<<< - * else: - * return 0 - */ - __pyx_r = -1; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L13_return; - } - - /* "aiohttp/_http_parser.pyx":726 - * pyparser._started = False - * pyparser._on_message_complete() - * except BaseException as exc: # <<<<<<<<<<<<<< - * pyparser._last_error = exc - * return -1 - */ - /*finally:*/ { - __pyx_L13_return: { - __pyx_t_5 = __pyx_r; - __Pyx_DECREF(__pyx_v_exc); - __pyx_v_exc = NULL; - __pyx_r = __pyx_t_5; - goto __pyx_L6_except_return; - } - } - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - - /* "aiohttp/_http_parser.pyx":723 - * cdef int cb_on_message_complete(cparser.http_parser* parser) except -1: - * cdef HttpParser pyparser = parser.data - * try: # <<<<<<<<<<<<<< - * pyparser._started = False - * pyparser._on_message_complete() - */ - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); - goto __pyx_L1_error; - __pyx_L6_except_return:; - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); - goto __pyx_L0; - } - - /* "aiohttp/_http_parser.pyx":721 - * - * - * cdef int cb_on_message_complete(cparser.http_parser* parser) except -1: # <<<<<<<<<<<<<< - * cdef HttpParser pyparser = parser.data - * try: - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_AddTraceback("aiohttp._http_parser.cb_on_message_complete", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_pyparser); - __Pyx_XDECREF(__pyx_v_exc); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":733 - * - * - * cdef int cb_on_chunk_header(cparser.http_parser* parser) except -1: # <<<<<<<<<<<<<< - * cdef HttpParser pyparser = parser.data - * try: - */ - -static int __pyx_f_7aiohttp_12_http_parser_cb_on_chunk_header(struct http_parser *__pyx_v_parser) { - struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_pyparser = 0; - PyObject *__pyx_v_exc = NULL; - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("cb_on_chunk_header", 0); - - /* "aiohttp/_http_parser.pyx":734 - * - * cdef int cb_on_chunk_header(cparser.http_parser* parser) except -1: - * cdef HttpParser pyparser = parser.data # <<<<<<<<<<<<<< - * try: - * pyparser._on_chunk_header() - */ - __pyx_t_1 = ((PyObject *)__pyx_v_parser->data); - __Pyx_INCREF(__pyx_t_1); - __pyx_v_pyparser = ((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":735 - * cdef int cb_on_chunk_header(cparser.http_parser* parser) except -1: - * cdef HttpParser pyparser = parser.data - * try: # <<<<<<<<<<<<<< - * pyparser._on_chunk_header() - * except BaseException as exc: - */ - { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_4); - /*try:*/ { - - /* "aiohttp/_http_parser.pyx":736 - * cdef HttpParser pyparser = parser.data - * try: - * pyparser._on_chunk_header() # <<<<<<<<<<<<<< - * except BaseException as exc: - * pyparser._last_error = exc - */ - __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser *)__pyx_v_pyparser->__pyx_vtab)->_on_chunk_header(__pyx_v_pyparser); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 736, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":735 - * cdef int cb_on_chunk_header(cparser.http_parser* parser) except -1: - * cdef HttpParser pyparser = parser.data - * try: # <<<<<<<<<<<<<< - * pyparser._on_chunk_header() - * except BaseException as exc: - */ - } - - /* "aiohttp/_http_parser.pyx":741 - * return -1 - * else: - * return 0 # <<<<<<<<<<<<<< - * - * - */ - /*else:*/ { - __pyx_r = 0; - goto __pyx_L6_except_return; - } - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":737 - * try: - * pyparser._on_chunk_header() - * except BaseException as exc: # <<<<<<<<<<<<<< - * pyparser._last_error = exc - * return -1 - */ - __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_BaseException); - if (__pyx_t_5) { - __Pyx_AddTraceback("aiohttp._http_parser.cb_on_chunk_header", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(0, 737, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_t_6); - __pyx_v_exc = __pyx_t_6; - /*try:*/ { - - /* "aiohttp/_http_parser.pyx":738 - * pyparser._on_chunk_header() - * except BaseException as exc: - * pyparser._last_error = exc # <<<<<<<<<<<<<< - * return -1 - * else: - */ - __Pyx_INCREF(__pyx_v_exc); - __Pyx_GIVEREF(__pyx_v_exc); - __Pyx_GOTREF(__pyx_v_pyparser->_last_error); - __Pyx_DECREF(__pyx_v_pyparser->_last_error); - __pyx_v_pyparser->_last_error = __pyx_v_exc; - - /* "aiohttp/_http_parser.pyx":739 - * except BaseException as exc: - * pyparser._last_error = exc - * return -1 # <<<<<<<<<<<<<< - * else: - * return 0 - */ - __pyx_r = -1; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L13_return; - } - - /* "aiohttp/_http_parser.pyx":737 - * try: - * pyparser._on_chunk_header() - * except BaseException as exc: # <<<<<<<<<<<<<< - * pyparser._last_error = exc - * return -1 - */ - /*finally:*/ { - __pyx_L13_return: { - __pyx_t_5 = __pyx_r; - __Pyx_DECREF(__pyx_v_exc); - __pyx_v_exc = NULL; - __pyx_r = __pyx_t_5; - goto __pyx_L6_except_return; - } - } - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - - /* "aiohttp/_http_parser.pyx":735 - * cdef int cb_on_chunk_header(cparser.http_parser* parser) except -1: - * cdef HttpParser pyparser = parser.data - * try: # <<<<<<<<<<<<<< - * pyparser._on_chunk_header() - * except BaseException as exc: - */ - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); - goto __pyx_L1_error; - __pyx_L6_except_return:; - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); - goto __pyx_L0; - } - - /* "aiohttp/_http_parser.pyx":733 - * - * - * cdef int cb_on_chunk_header(cparser.http_parser* parser) except -1: # <<<<<<<<<<<<<< - * cdef HttpParser pyparser = parser.data - * try: - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_AddTraceback("aiohttp._http_parser.cb_on_chunk_header", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_pyparser); - __Pyx_XDECREF(__pyx_v_exc); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":744 - * - * - * cdef int cb_on_chunk_complete(cparser.http_parser* parser) except -1: # <<<<<<<<<<<<<< - * cdef HttpParser pyparser = parser.data - * try: - */ - -static int __pyx_f_7aiohttp_12_http_parser_cb_on_chunk_complete(struct http_parser *__pyx_v_parser) { - struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *__pyx_v_pyparser = 0; - PyObject *__pyx_v_exc = NULL; - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("cb_on_chunk_complete", 0); - - /* "aiohttp/_http_parser.pyx":745 - * - * cdef int cb_on_chunk_complete(cparser.http_parser* parser) except -1: - * cdef HttpParser pyparser = parser.data # <<<<<<<<<<<<<< - * try: - * pyparser._on_chunk_complete() - */ - __pyx_t_1 = ((PyObject *)__pyx_v_parser->data); - __Pyx_INCREF(__pyx_t_1); - __pyx_v_pyparser = ((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":746 - * cdef int cb_on_chunk_complete(cparser.http_parser* parser) except -1: - * cdef HttpParser pyparser = parser.data - * try: # <<<<<<<<<<<<<< - * pyparser._on_chunk_complete() - * except BaseException as exc: - */ - { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4); - __Pyx_XGOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_t_3); - __Pyx_XGOTREF(__pyx_t_4); - /*try:*/ { - - /* "aiohttp/_http_parser.pyx":747 - * cdef HttpParser pyparser = parser.data - * try: - * pyparser._on_chunk_complete() # <<<<<<<<<<<<<< - * except BaseException as exc: - * pyparser._last_error = exc - */ - __pyx_t_1 = ((struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser *)__pyx_v_pyparser->__pyx_vtab)->_on_chunk_complete(__pyx_v_pyparser); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 747, __pyx_L3_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":746 - * cdef int cb_on_chunk_complete(cparser.http_parser* parser) except -1: - * cdef HttpParser pyparser = parser.data - * try: # <<<<<<<<<<<<<< - * pyparser._on_chunk_complete() - * except BaseException as exc: - */ - } - - /* "aiohttp/_http_parser.pyx":752 - * return -1 - * else: - * return 0 # <<<<<<<<<<<<<< - * - * - */ - /*else:*/ { - __pyx_r = 0; - goto __pyx_L6_except_return; - } - __pyx_L3_error:; - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":748 - * try: - * pyparser._on_chunk_complete() - * except BaseException as exc: # <<<<<<<<<<<<<< - * pyparser._last_error = exc - * return -1 - */ - __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_BaseException); - if (__pyx_t_5) { - __Pyx_AddTraceback("aiohttp._http_parser.cb_on_chunk_complete", __pyx_clineno, __pyx_lineno, __pyx_filename); - if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(0, 748, __pyx_L5_except_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_INCREF(__pyx_t_6); - __pyx_v_exc = __pyx_t_6; - /*try:*/ { - - /* "aiohttp/_http_parser.pyx":749 - * pyparser._on_chunk_complete() - * except BaseException as exc: - * pyparser._last_error = exc # <<<<<<<<<<<<<< - * return -1 - * else: - */ - __Pyx_INCREF(__pyx_v_exc); - __Pyx_GIVEREF(__pyx_v_exc); - __Pyx_GOTREF(__pyx_v_pyparser->_last_error); - __Pyx_DECREF(__pyx_v_pyparser->_last_error); - __pyx_v_pyparser->_last_error = __pyx_v_exc; - - /* "aiohttp/_http_parser.pyx":750 - * except BaseException as exc: - * pyparser._last_error = exc - * return -1 # <<<<<<<<<<<<<< - * else: - * return 0 - */ - __pyx_r = -1; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L13_return; - } - - /* "aiohttp/_http_parser.pyx":748 - * try: - * pyparser._on_chunk_complete() - * except BaseException as exc: # <<<<<<<<<<<<<< - * pyparser._last_error = exc - * return -1 - */ - /*finally:*/ { - __pyx_L13_return: { - __pyx_t_5 = __pyx_r; - __Pyx_DECREF(__pyx_v_exc); - __pyx_v_exc = NULL; - __pyx_r = __pyx_t_5; - goto __pyx_L6_except_return; - } - } - } - goto __pyx_L5_except_error; - __pyx_L5_except_error:; - - /* "aiohttp/_http_parser.pyx":746 - * cdef int cb_on_chunk_complete(cparser.http_parser* parser) except -1: - * cdef HttpParser pyparser = parser.data - * try: # <<<<<<<<<<<<<< - * pyparser._on_chunk_complete() - * except BaseException as exc: - */ - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); - goto __pyx_L1_error; - __pyx_L6_except_return:; - __Pyx_XGIVEREF(__pyx_t_2); - __Pyx_XGIVEREF(__pyx_t_3); - __Pyx_XGIVEREF(__pyx_t_4); - __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4); - goto __pyx_L0; - } - - /* "aiohttp/_http_parser.pyx":744 - * - * - * cdef int cb_on_chunk_complete(cparser.http_parser* parser) except -1: # <<<<<<<<<<<<<< - * cdef HttpParser pyparser = parser.data - * try: - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_AddTraceback("aiohttp._http_parser.cb_on_chunk_complete", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = -1; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_pyparser); - __Pyx_XDECREF(__pyx_v_exc); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":755 - * - * - * cdef parser_error_from_errno(cparser.http_errno errno): # <<<<<<<<<<<<<< - * cdef bytes desc = cparser.http_errno_description(errno) - * - */ - -static PyObject *__pyx_f_7aiohttp_12_http_parser_parser_error_from_errno(enum http_errno __pyx_v_errno) { - PyObject *__pyx_v_desc = 0; - PyObject *__pyx_v_cls = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("parser_error_from_errno", 0); - - /* "aiohttp/_http_parser.pyx":756 - * - * cdef parser_error_from_errno(cparser.http_errno errno): - * cdef bytes desc = cparser.http_errno_description(errno) # <<<<<<<<<<<<<< - * - * if errno in (cparser.HPE_CB_message_begin, - */ - __pyx_t_1 = __Pyx_PyBytes_FromString(http_errno_description(__pyx_v_errno)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 756, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_desc = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":758 - * cdef bytes desc = cparser.http_errno_description(errno) - * - * if errno in (cparser.HPE_CB_message_begin, # <<<<<<<<<<<<<< - * cparser.HPE_CB_url, - * cparser.HPE_CB_header_field, - */ - switch (__pyx_v_errno) { - case HPE_CB_message_begin: - case HPE_CB_url: - - /* "aiohttp/_http_parser.pyx":759 - * - * if errno in (cparser.HPE_CB_message_begin, - * cparser.HPE_CB_url, # <<<<<<<<<<<<<< - * cparser.HPE_CB_header_field, - * cparser.HPE_CB_header_value, - */ - case HPE_CB_header_field: - - /* "aiohttp/_http_parser.pyx":760 - * if errno in (cparser.HPE_CB_message_begin, - * cparser.HPE_CB_url, - * cparser.HPE_CB_header_field, # <<<<<<<<<<<<<< - * cparser.HPE_CB_header_value, - * cparser.HPE_CB_headers_complete, - */ - case HPE_CB_header_value: - - /* "aiohttp/_http_parser.pyx":761 - * cparser.HPE_CB_url, - * cparser.HPE_CB_header_field, - * cparser.HPE_CB_header_value, # <<<<<<<<<<<<<< - * cparser.HPE_CB_headers_complete, - * cparser.HPE_CB_body, - */ - case HPE_CB_headers_complete: - - /* "aiohttp/_http_parser.pyx":762 - * cparser.HPE_CB_header_field, - * cparser.HPE_CB_header_value, - * cparser.HPE_CB_headers_complete, # <<<<<<<<<<<<<< - * cparser.HPE_CB_body, - * cparser.HPE_CB_message_complete, - */ - case HPE_CB_body: - - /* "aiohttp/_http_parser.pyx":763 - * cparser.HPE_CB_header_value, - * cparser.HPE_CB_headers_complete, - * cparser.HPE_CB_body, # <<<<<<<<<<<<<< - * cparser.HPE_CB_message_complete, - * cparser.HPE_CB_status, - */ - case HPE_CB_message_complete: - - /* "aiohttp/_http_parser.pyx":764 - * cparser.HPE_CB_headers_complete, - * cparser.HPE_CB_body, - * cparser.HPE_CB_message_complete, # <<<<<<<<<<<<<< - * cparser.HPE_CB_status, - * cparser.HPE_CB_chunk_header, - */ - case HPE_CB_status: - - /* "aiohttp/_http_parser.pyx":765 - * cparser.HPE_CB_body, - * cparser.HPE_CB_message_complete, - * cparser.HPE_CB_status, # <<<<<<<<<<<<<< - * cparser.HPE_CB_chunk_header, - * cparser.HPE_CB_chunk_complete): - */ - case HPE_CB_chunk_header: - - /* "aiohttp/_http_parser.pyx":766 - * cparser.HPE_CB_message_complete, - * cparser.HPE_CB_status, - * cparser.HPE_CB_chunk_header, # <<<<<<<<<<<<<< - * cparser.HPE_CB_chunk_complete): - * cls = BadHttpMessage - */ - case HPE_CB_chunk_complete: - - /* "aiohttp/_http_parser.pyx":768 - * cparser.HPE_CB_chunk_header, - * cparser.HPE_CB_chunk_complete): - * cls = BadHttpMessage # <<<<<<<<<<<<<< - * - * elif errno == cparser.HPE_INVALID_STATUS: - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_BadHttpMessage); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 768, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_cls = __pyx_t_1; - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":758 - * cdef bytes desc = cparser.http_errno_description(errno) - * - * if errno in (cparser.HPE_CB_message_begin, # <<<<<<<<<<<<<< - * cparser.HPE_CB_url, - * cparser.HPE_CB_header_field, - */ - break; - case HPE_INVALID_STATUS: - - /* "aiohttp/_http_parser.pyx":771 - * - * elif errno == cparser.HPE_INVALID_STATUS: - * cls = BadStatusLine # <<<<<<<<<<<<<< - * - * elif errno == cparser.HPE_INVALID_METHOD: - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_BadStatusLine); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 771, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_cls = __pyx_t_1; - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":770 - * cls = BadHttpMessage - * - * elif errno == cparser.HPE_INVALID_STATUS: # <<<<<<<<<<<<<< - * cls = BadStatusLine - * - */ - break; - case HPE_INVALID_METHOD: - - /* "aiohttp/_http_parser.pyx":774 - * - * elif errno == cparser.HPE_INVALID_METHOD: - * cls = BadStatusLine # <<<<<<<<<<<<<< - * - * elif errno == cparser.HPE_INVALID_URL: - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_BadStatusLine); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 774, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_cls = __pyx_t_1; - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":773 - * cls = BadStatusLine - * - * elif errno == cparser.HPE_INVALID_METHOD: # <<<<<<<<<<<<<< - * cls = BadStatusLine - * - */ - break; - case HPE_INVALID_URL: - - /* "aiohttp/_http_parser.pyx":777 - * - * elif errno == cparser.HPE_INVALID_URL: - * cls = InvalidURLError # <<<<<<<<<<<<<< - * - * else: - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_InvalidURLError); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 777, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_cls = __pyx_t_1; - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":776 - * cls = BadStatusLine - * - * elif errno == cparser.HPE_INVALID_URL: # <<<<<<<<<<<<<< - * cls = InvalidURLError - * - */ - break; - default: - - /* "aiohttp/_http_parser.pyx":780 - * - * else: - * cls = BadHttpMessage # <<<<<<<<<<<<<< - * - * return cls(desc.decode('latin-1')) - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_BadHttpMessage); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 780, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_cls = __pyx_t_1; - __pyx_t_1 = 0; - break; - } - - /* "aiohttp/_http_parser.pyx":782 - * cls = BadHttpMessage - * - * return cls(desc.decode('latin-1')) # <<<<<<<<<<<<<< - * - * - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __Pyx_decode_bytes(__pyx_v_desc, 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeLatin1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 782, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_cls); - __pyx_t_3 = __pyx_v_cls; __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - } - } - __pyx_t_1 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 782, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "aiohttp/_http_parser.pyx":755 - * - * - * cdef parser_error_from_errno(cparser.http_errno errno): # <<<<<<<<<<<<<< - * cdef bytes desc = cparser.http_errno_description(errno) - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("aiohttp._http_parser.parser_error_from_errno", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_desc); - __Pyx_XDECREF(__pyx_v_cls); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":785 - * - * - * def parse_url(url): # <<<<<<<<<<<<<< - * cdef: - * Py_buffer py_buf - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_1parse_url(PyObject *__pyx_self, PyObject *__pyx_v_url); /*proto*/ -static PyMethodDef __pyx_mdef_7aiohttp_12_http_parser_1parse_url = {"parse_url", (PyCFunction)__pyx_pw_7aiohttp_12_http_parser_1parse_url, METH_O, 0}; -static PyObject *__pyx_pw_7aiohttp_12_http_parser_1parse_url(PyObject *__pyx_self, PyObject *__pyx_v_url) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("parse_url (wrapper)", 0); - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_parse_url(__pyx_self, ((PyObject *)__pyx_v_url)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_parse_url(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_url) { - Py_buffer __pyx_v_py_buf; - char *__pyx_v_buf_data; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - int __pyx_t_3; - char const *__pyx_t_4; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("parse_url", 0); - - /* "aiohttp/_http_parser.pyx":790 - * char* buf_data - * - * PyObject_GetBuffer(url, &py_buf, PyBUF_SIMPLE) # <<<<<<<<<<<<<< - * try: - * buf_data = py_buf.buf - */ - __pyx_t_1 = PyObject_GetBuffer(__pyx_v_url, (&__pyx_v_py_buf), PyBUF_SIMPLE); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 790, __pyx_L1_error) - - /* "aiohttp/_http_parser.pyx":791 - * - * PyObject_GetBuffer(url, &py_buf, PyBUF_SIMPLE) - * try: # <<<<<<<<<<<<<< - * buf_data = py_buf.buf - * return _parse_url(buf_data, py_buf.len) - */ - /*try:*/ { - - /* "aiohttp/_http_parser.pyx":792 - * PyObject_GetBuffer(url, &py_buf, PyBUF_SIMPLE) - * try: - * buf_data = py_buf.buf # <<<<<<<<<<<<<< - * return _parse_url(buf_data, py_buf.len) - * finally: - */ - __pyx_v_buf_data = ((char *)__pyx_v_py_buf.buf); - - /* "aiohttp/_http_parser.pyx":793 - * try: - * buf_data = py_buf.buf - * return _parse_url(buf_data, py_buf.len) # <<<<<<<<<<<<<< - * finally: - * PyBuffer_Release(&py_buf) - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = __pyx_f_7aiohttp_12_http_parser__parse_url(__pyx_v_buf_data, __pyx_v_py_buf.len); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 793, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L3_return; - } - - /* "aiohttp/_http_parser.pyx":795 - * return _parse_url(buf_data, py_buf.len) - * finally: - * PyBuffer_Release(&py_buf) # <<<<<<<<<<<<<< - * - * - */ - /*finally:*/ { - __pyx_L4_error:; - /*exception exit:*/{ - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10); - if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0)) __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7); - __Pyx_XGOTREF(__pyx_t_5); - __Pyx_XGOTREF(__pyx_t_6); - __Pyx_XGOTREF(__pyx_t_7); - __Pyx_XGOTREF(__pyx_t_8); - __Pyx_XGOTREF(__pyx_t_9); - __Pyx_XGOTREF(__pyx_t_10); - __pyx_t_1 = __pyx_lineno; __pyx_t_3 = __pyx_clineno; __pyx_t_4 = __pyx_filename; - { - PyBuffer_Release((&__pyx_v_py_buf)); - } - if (PY_MAJOR_VERSION >= 3) { - __Pyx_XGIVEREF(__pyx_t_8); - __Pyx_XGIVEREF(__pyx_t_9); - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10); - } - __Pyx_XGIVEREF(__pyx_t_5); - __Pyx_XGIVEREF(__pyx_t_6); - __Pyx_XGIVEREF(__pyx_t_7); - __Pyx_ErrRestore(__pyx_t_5, __pyx_t_6, __pyx_t_7); - __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; - __pyx_lineno = __pyx_t_1; __pyx_clineno = __pyx_t_3; __pyx_filename = __pyx_t_4; - goto __pyx_L1_error; - } - __pyx_L3_return: { - __pyx_t_10 = __pyx_r; - __pyx_r = 0; - PyBuffer_Release((&__pyx_v_py_buf)); - __pyx_r = __pyx_t_10; - __pyx_t_10 = 0; - goto __pyx_L0; - } - } - - /* "aiohttp/_http_parser.pyx":785 - * - * - * def parse_url(url): # <<<<<<<<<<<<<< - * cdef: - * Py_buffer py_buf - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("aiohttp._http_parser.parse_url", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_parser.pyx":798 - * - * - * cdef _parse_url(char* buf_data, size_t length): # <<<<<<<<<<<<<< - * cdef: - * cparser.http_parser_url* parsed - */ - -static PyObject *__pyx_f_7aiohttp_12_http_parser__parse_url(char *__pyx_v_buf_data, size_t __pyx_v_length) { - struct http_parser_url *__pyx_v_parsed; - int __pyx_v_res; - PyObject *__pyx_v_schema = 0; - PyObject *__pyx_v_host = 0; - PyObject *__pyx_v_port = 0; - PyObject *__pyx_v_path = 0; - PyObject *__pyx_v_query = 0; - PyObject *__pyx_v_fragment = 0; - PyObject *__pyx_v_user = 0; - PyObject *__pyx_v_password = 0; - PyObject *__pyx_v_userinfo = 0; - CYTHON_UNUSED PyObject *__pyx_v_result = 0; - int __pyx_v_off; - int __pyx_v_ln; - CYTHON_UNUSED PyObject *__pyx_v_sep = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - uint16_t __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *(*__pyx_t_8)(PyObject *); - PyObject *__pyx_t_9 = NULL; - int __pyx_t_10; - int __pyx_t_11; - char const *__pyx_t_12; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - PyObject *__pyx_t_15 = NULL; - PyObject *__pyx_t_16 = NULL; - PyObject *__pyx_t_17 = NULL; - PyObject *__pyx_t_18 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_parse_url", 0); - - /* "aiohttp/_http_parser.pyx":802 - * cparser.http_parser_url* parsed - * int res - * str schema = None # <<<<<<<<<<<<<< - * str host = None - * object port = None - */ - __Pyx_INCREF(Py_None); - __pyx_v_schema = ((PyObject*)Py_None); - - /* "aiohttp/_http_parser.pyx":803 - * int res - * str schema = None - * str host = None # <<<<<<<<<<<<<< - * object port = None - * str path = None - */ - __Pyx_INCREF(Py_None); - __pyx_v_host = ((PyObject*)Py_None); - - /* "aiohttp/_http_parser.pyx":804 - * str schema = None - * str host = None - * object port = None # <<<<<<<<<<<<<< - * str path = None - * str query = None - */ - __Pyx_INCREF(Py_None); - __pyx_v_port = Py_None; - - /* "aiohttp/_http_parser.pyx":805 - * str host = None - * object port = None - * str path = None # <<<<<<<<<<<<<< - * str query = None - * str fragment = None - */ - __Pyx_INCREF(Py_None); - __pyx_v_path = ((PyObject*)Py_None); - - /* "aiohttp/_http_parser.pyx":806 - * object port = None - * str path = None - * str query = None # <<<<<<<<<<<<<< - * str fragment = None - * str user = None - */ - __Pyx_INCREF(Py_None); - __pyx_v_query = ((PyObject*)Py_None); - - /* "aiohttp/_http_parser.pyx":807 - * str path = None - * str query = None - * str fragment = None # <<<<<<<<<<<<<< - * str user = None - * str password = None - */ - __Pyx_INCREF(Py_None); - __pyx_v_fragment = ((PyObject*)Py_None); - - /* "aiohttp/_http_parser.pyx":808 - * str query = None - * str fragment = None - * str user = None # <<<<<<<<<<<<<< - * str password = None - * str userinfo = None - */ - __Pyx_INCREF(Py_None); - __pyx_v_user = ((PyObject*)Py_None); - - /* "aiohttp/_http_parser.pyx":809 - * str fragment = None - * str user = None - * str password = None # <<<<<<<<<<<<<< - * str userinfo = None - * object result = None - */ - __Pyx_INCREF(Py_None); - __pyx_v_password = ((PyObject*)Py_None); - - /* "aiohttp/_http_parser.pyx":810 - * str user = None - * str password = None - * str userinfo = None # <<<<<<<<<<<<<< - * object result = None - * int off - */ - __Pyx_INCREF(Py_None); - __pyx_v_userinfo = ((PyObject*)Py_None); - - /* "aiohttp/_http_parser.pyx":811 - * str password = None - * str userinfo = None - * object result = None # <<<<<<<<<<<<<< - * int off - * int ln - */ - __Pyx_INCREF(Py_None); - __pyx_v_result = Py_None; - - /* "aiohttp/_http_parser.pyx":815 - * int ln - * - * parsed = \ # <<<<<<<<<<<<<< - * PyMem_Malloc(sizeof(cparser.http_parser_url)) - * if parsed is NULL: - */ - __pyx_v_parsed = ((struct http_parser_url *)PyMem_Malloc((sizeof(struct http_parser_url)))); - - /* "aiohttp/_http_parser.pyx":817 - * parsed = \ - * PyMem_Malloc(sizeof(cparser.http_parser_url)) - * if parsed is NULL: # <<<<<<<<<<<<<< - * raise MemoryError() - * cparser.http_parser_url_init(parsed) - */ - __pyx_t_1 = ((__pyx_v_parsed == NULL) != 0); - if (unlikely(__pyx_t_1)) { - - /* "aiohttp/_http_parser.pyx":818 - * PyMem_Malloc(sizeof(cparser.http_parser_url)) - * if parsed is NULL: - * raise MemoryError() # <<<<<<<<<<<<<< - * cparser.http_parser_url_init(parsed) - * try: - */ - PyErr_NoMemory(); __PYX_ERR(0, 818, __pyx_L1_error) - - /* "aiohttp/_http_parser.pyx":817 - * parsed = \ - * PyMem_Malloc(sizeof(cparser.http_parser_url)) - * if parsed is NULL: # <<<<<<<<<<<<<< - * raise MemoryError() - * cparser.http_parser_url_init(parsed) - */ - } - - /* "aiohttp/_http_parser.pyx":819 - * if parsed is NULL: - * raise MemoryError() - * cparser.http_parser_url_init(parsed) # <<<<<<<<<<<<<< - * try: - * res = cparser.http_parser_parse_url(buf_data, length, 0, parsed) - */ - http_parser_url_init(__pyx_v_parsed); - - /* "aiohttp/_http_parser.pyx":820 - * raise MemoryError() - * cparser.http_parser_url_init(parsed) - * try: # <<<<<<<<<<<<<< - * res = cparser.http_parser_parse_url(buf_data, length, 0, parsed) - * - */ - /*try:*/ { - - /* "aiohttp/_http_parser.pyx":821 - * cparser.http_parser_url_init(parsed) - * try: - * res = cparser.http_parser_parse_url(buf_data, length, 0, parsed) # <<<<<<<<<<<<<< - * - * if res == 0: - */ - __pyx_v_res = http_parser_parse_url(__pyx_v_buf_data, __pyx_v_length, 0, __pyx_v_parsed); - - /* "aiohttp/_http_parser.pyx":823 - * res = cparser.http_parser_parse_url(buf_data, length, 0, parsed) - * - * if res == 0: # <<<<<<<<<<<<<< - * if parsed.field_set & (1 << cparser.UF_SCHEMA): - * off = parsed.field_data[cparser.UF_SCHEMA].off - */ - __pyx_t_1 = ((__pyx_v_res == 0) != 0); - if (likely(__pyx_t_1)) { - - /* "aiohttp/_http_parser.pyx":824 - * - * if res == 0: - * if parsed.field_set & (1 << cparser.UF_SCHEMA): # <<<<<<<<<<<<<< - * off = parsed.field_data[cparser.UF_SCHEMA].off - * ln = parsed.field_data[cparser.UF_SCHEMA].len - */ - __pyx_t_1 = ((__pyx_v_parsed->field_set & (1 << UF_SCHEMA)) != 0); - if (__pyx_t_1) { - - /* "aiohttp/_http_parser.pyx":825 - * if res == 0: - * if parsed.field_set & (1 << cparser.UF_SCHEMA): - * off = parsed.field_data[cparser.UF_SCHEMA].off # <<<<<<<<<<<<<< - * ln = parsed.field_data[cparser.UF_SCHEMA].len - * schema = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') - */ - __pyx_t_2 = (__pyx_v_parsed->field_data[((int)UF_SCHEMA)]).off; - __pyx_v_off = __pyx_t_2; - - /* "aiohttp/_http_parser.pyx":826 - * if parsed.field_set & (1 << cparser.UF_SCHEMA): - * off = parsed.field_data[cparser.UF_SCHEMA].off - * ln = parsed.field_data[cparser.UF_SCHEMA].len # <<<<<<<<<<<<<< - * schema = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') - * else: - */ - __pyx_t_2 = (__pyx_v_parsed->field_data[((int)UF_SCHEMA)]).len; - __pyx_v_ln = __pyx_t_2; - - /* "aiohttp/_http_parser.pyx":827 - * off = parsed.field_data[cparser.UF_SCHEMA].off - * ln = parsed.field_data[cparser.UF_SCHEMA].len - * schema = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') # <<<<<<<<<<<<<< - * else: - * schema = '' - */ - __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_buf_data, __pyx_v_off, (__pyx_v_off + __pyx_v_ln), NULL, ((char const *)"surrogateescape"), PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 827, __pyx_L5_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF_SET(__pyx_v_schema, ((PyObject*)__pyx_t_3)); - __pyx_t_3 = 0; - - /* "aiohttp/_http_parser.pyx":824 - * - * if res == 0: - * if parsed.field_set & (1 << cparser.UF_SCHEMA): # <<<<<<<<<<<<<< - * off = parsed.field_data[cparser.UF_SCHEMA].off - * ln = parsed.field_data[cparser.UF_SCHEMA].len - */ - goto __pyx_L8; - } - - /* "aiohttp/_http_parser.pyx":829 - * schema = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') - * else: - * schema = '' # <<<<<<<<<<<<<< - * - * if parsed.field_set & (1 << cparser.UF_HOST): - */ - /*else*/ { - __Pyx_INCREF(__pyx_kp_u__4); - __Pyx_DECREF_SET(__pyx_v_schema, __pyx_kp_u__4); - } - __pyx_L8:; - - /* "aiohttp/_http_parser.pyx":831 - * schema = '' - * - * if parsed.field_set & (1 << cparser.UF_HOST): # <<<<<<<<<<<<<< - * off = parsed.field_data[cparser.UF_HOST].off - * ln = parsed.field_data[cparser.UF_HOST].len - */ - __pyx_t_1 = ((__pyx_v_parsed->field_set & (1 << UF_HOST)) != 0); - if (__pyx_t_1) { - - /* "aiohttp/_http_parser.pyx":832 - * - * if parsed.field_set & (1 << cparser.UF_HOST): - * off = parsed.field_data[cparser.UF_HOST].off # <<<<<<<<<<<<<< - * ln = parsed.field_data[cparser.UF_HOST].len - * host = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') - */ - __pyx_t_2 = (__pyx_v_parsed->field_data[((int)UF_HOST)]).off; - __pyx_v_off = __pyx_t_2; - - /* "aiohttp/_http_parser.pyx":833 - * if parsed.field_set & (1 << cparser.UF_HOST): - * off = parsed.field_data[cparser.UF_HOST].off - * ln = parsed.field_data[cparser.UF_HOST].len # <<<<<<<<<<<<<< - * host = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') - * else: - */ - __pyx_t_2 = (__pyx_v_parsed->field_data[((int)UF_HOST)]).len; - __pyx_v_ln = __pyx_t_2; - - /* "aiohttp/_http_parser.pyx":834 - * off = parsed.field_data[cparser.UF_HOST].off - * ln = parsed.field_data[cparser.UF_HOST].len - * host = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') # <<<<<<<<<<<<<< - * else: - * host = '' - */ - __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_buf_data, __pyx_v_off, (__pyx_v_off + __pyx_v_ln), NULL, ((char const *)"surrogateescape"), PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 834, __pyx_L5_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF_SET(__pyx_v_host, ((PyObject*)__pyx_t_3)); - __pyx_t_3 = 0; - - /* "aiohttp/_http_parser.pyx":831 - * schema = '' - * - * if parsed.field_set & (1 << cparser.UF_HOST): # <<<<<<<<<<<<<< - * off = parsed.field_data[cparser.UF_HOST].off - * ln = parsed.field_data[cparser.UF_HOST].len - */ - goto __pyx_L9; - } - - /* "aiohttp/_http_parser.pyx":836 - * host = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') - * else: - * host = '' # <<<<<<<<<<<<<< - * - * if parsed.field_set & (1 << cparser.UF_PORT): - */ - /*else*/ { - __Pyx_INCREF(__pyx_kp_u__4); - __Pyx_DECREF_SET(__pyx_v_host, __pyx_kp_u__4); - } - __pyx_L9:; - - /* "aiohttp/_http_parser.pyx":838 - * host = '' - * - * if parsed.field_set & (1 << cparser.UF_PORT): # <<<<<<<<<<<<<< - * port = parsed.port - * - */ - __pyx_t_1 = ((__pyx_v_parsed->field_set & (1 << UF_PORT)) != 0); - if (__pyx_t_1) { - - /* "aiohttp/_http_parser.pyx":839 - * - * if parsed.field_set & (1 << cparser.UF_PORT): - * port = parsed.port # <<<<<<<<<<<<<< - * - * if parsed.field_set & (1 << cparser.UF_PATH): - */ - __pyx_t_3 = __Pyx_PyInt_From_uint16_t(__pyx_v_parsed->port); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 839, __pyx_L5_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF_SET(__pyx_v_port, __pyx_t_3); - __pyx_t_3 = 0; - - /* "aiohttp/_http_parser.pyx":838 - * host = '' - * - * if parsed.field_set & (1 << cparser.UF_PORT): # <<<<<<<<<<<<<< - * port = parsed.port - * - */ - } - - /* "aiohttp/_http_parser.pyx":841 - * port = parsed.port - * - * if parsed.field_set & (1 << cparser.UF_PATH): # <<<<<<<<<<<<<< - * off = parsed.field_data[cparser.UF_PATH].off - * ln = parsed.field_data[cparser.UF_PATH].len - */ - __pyx_t_1 = ((__pyx_v_parsed->field_set & (1 << UF_PATH)) != 0); - if (__pyx_t_1) { - - /* "aiohttp/_http_parser.pyx":842 - * - * if parsed.field_set & (1 << cparser.UF_PATH): - * off = parsed.field_data[cparser.UF_PATH].off # <<<<<<<<<<<<<< - * ln = parsed.field_data[cparser.UF_PATH].len - * path = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') - */ - __pyx_t_2 = (__pyx_v_parsed->field_data[((int)UF_PATH)]).off; - __pyx_v_off = __pyx_t_2; - - /* "aiohttp/_http_parser.pyx":843 - * if parsed.field_set & (1 << cparser.UF_PATH): - * off = parsed.field_data[cparser.UF_PATH].off - * ln = parsed.field_data[cparser.UF_PATH].len # <<<<<<<<<<<<<< - * path = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') - * else: - */ - __pyx_t_2 = (__pyx_v_parsed->field_data[((int)UF_PATH)]).len; - __pyx_v_ln = __pyx_t_2; - - /* "aiohttp/_http_parser.pyx":844 - * off = parsed.field_data[cparser.UF_PATH].off - * ln = parsed.field_data[cparser.UF_PATH].len - * path = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') # <<<<<<<<<<<<<< - * else: - * path = '' - */ - __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_buf_data, __pyx_v_off, (__pyx_v_off + __pyx_v_ln), NULL, ((char const *)"surrogateescape"), PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 844, __pyx_L5_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF_SET(__pyx_v_path, ((PyObject*)__pyx_t_3)); - __pyx_t_3 = 0; - - /* "aiohttp/_http_parser.pyx":841 - * port = parsed.port - * - * if parsed.field_set & (1 << cparser.UF_PATH): # <<<<<<<<<<<<<< - * off = parsed.field_data[cparser.UF_PATH].off - * ln = parsed.field_data[cparser.UF_PATH].len - */ - goto __pyx_L11; - } - - /* "aiohttp/_http_parser.pyx":846 - * path = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') - * else: - * path = '' # <<<<<<<<<<<<<< - * - * if parsed.field_set & (1 << cparser.UF_QUERY): - */ - /*else*/ { - __Pyx_INCREF(__pyx_kp_u__4); - __Pyx_DECREF_SET(__pyx_v_path, __pyx_kp_u__4); - } - __pyx_L11:; - - /* "aiohttp/_http_parser.pyx":848 - * path = '' - * - * if parsed.field_set & (1 << cparser.UF_QUERY): # <<<<<<<<<<<<<< - * off = parsed.field_data[cparser.UF_QUERY].off - * ln = parsed.field_data[cparser.UF_QUERY].len - */ - __pyx_t_1 = ((__pyx_v_parsed->field_set & (1 << UF_QUERY)) != 0); - if (__pyx_t_1) { - - /* "aiohttp/_http_parser.pyx":849 - * - * if parsed.field_set & (1 << cparser.UF_QUERY): - * off = parsed.field_data[cparser.UF_QUERY].off # <<<<<<<<<<<<<< - * ln = parsed.field_data[cparser.UF_QUERY].len - * query = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') - */ - __pyx_t_2 = (__pyx_v_parsed->field_data[((int)UF_QUERY)]).off; - __pyx_v_off = __pyx_t_2; - - /* "aiohttp/_http_parser.pyx":850 - * if parsed.field_set & (1 << cparser.UF_QUERY): - * off = parsed.field_data[cparser.UF_QUERY].off - * ln = parsed.field_data[cparser.UF_QUERY].len # <<<<<<<<<<<<<< - * query = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') - * else: - */ - __pyx_t_2 = (__pyx_v_parsed->field_data[((int)UF_QUERY)]).len; - __pyx_v_ln = __pyx_t_2; - - /* "aiohttp/_http_parser.pyx":851 - * off = parsed.field_data[cparser.UF_QUERY].off - * ln = parsed.field_data[cparser.UF_QUERY].len - * query = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') # <<<<<<<<<<<<<< - * else: - * query = '' - */ - __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_buf_data, __pyx_v_off, (__pyx_v_off + __pyx_v_ln), NULL, ((char const *)"surrogateescape"), PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 851, __pyx_L5_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF_SET(__pyx_v_query, ((PyObject*)__pyx_t_3)); - __pyx_t_3 = 0; - - /* "aiohttp/_http_parser.pyx":848 - * path = '' - * - * if parsed.field_set & (1 << cparser.UF_QUERY): # <<<<<<<<<<<<<< - * off = parsed.field_data[cparser.UF_QUERY].off - * ln = parsed.field_data[cparser.UF_QUERY].len - */ - goto __pyx_L12; - } - - /* "aiohttp/_http_parser.pyx":853 - * query = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') - * else: - * query = '' # <<<<<<<<<<<<<< - * - * if parsed.field_set & (1 << cparser.UF_FRAGMENT): - */ - /*else*/ { - __Pyx_INCREF(__pyx_kp_u__4); - __Pyx_DECREF_SET(__pyx_v_query, __pyx_kp_u__4); - } - __pyx_L12:; - - /* "aiohttp/_http_parser.pyx":855 - * query = '' - * - * if parsed.field_set & (1 << cparser.UF_FRAGMENT): # <<<<<<<<<<<<<< - * off = parsed.field_data[cparser.UF_FRAGMENT].off - * ln = parsed.field_data[cparser.UF_FRAGMENT].len - */ - __pyx_t_1 = ((__pyx_v_parsed->field_set & (1 << UF_FRAGMENT)) != 0); - if (__pyx_t_1) { - - /* "aiohttp/_http_parser.pyx":856 - * - * if parsed.field_set & (1 << cparser.UF_FRAGMENT): - * off = parsed.field_data[cparser.UF_FRAGMENT].off # <<<<<<<<<<<<<< - * ln = parsed.field_data[cparser.UF_FRAGMENT].len - * fragment = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') - */ - __pyx_t_2 = (__pyx_v_parsed->field_data[((int)UF_FRAGMENT)]).off; - __pyx_v_off = __pyx_t_2; - - /* "aiohttp/_http_parser.pyx":857 - * if parsed.field_set & (1 << cparser.UF_FRAGMENT): - * off = parsed.field_data[cparser.UF_FRAGMENT].off - * ln = parsed.field_data[cparser.UF_FRAGMENT].len # <<<<<<<<<<<<<< - * fragment = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') - * else: - */ - __pyx_t_2 = (__pyx_v_parsed->field_data[((int)UF_FRAGMENT)]).len; - __pyx_v_ln = __pyx_t_2; - - /* "aiohttp/_http_parser.pyx":858 - * off = parsed.field_data[cparser.UF_FRAGMENT].off - * ln = parsed.field_data[cparser.UF_FRAGMENT].len - * fragment = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') # <<<<<<<<<<<<<< - * else: - * fragment = '' - */ - __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_buf_data, __pyx_v_off, (__pyx_v_off + __pyx_v_ln), NULL, ((char const *)"surrogateescape"), PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 858, __pyx_L5_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF_SET(__pyx_v_fragment, ((PyObject*)__pyx_t_3)); - __pyx_t_3 = 0; - - /* "aiohttp/_http_parser.pyx":855 - * query = '' - * - * if parsed.field_set & (1 << cparser.UF_FRAGMENT): # <<<<<<<<<<<<<< - * off = parsed.field_data[cparser.UF_FRAGMENT].off - * ln = parsed.field_data[cparser.UF_FRAGMENT].len - */ - goto __pyx_L13; - } - - /* "aiohttp/_http_parser.pyx":860 - * fragment = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') - * else: - * fragment = '' # <<<<<<<<<<<<<< - * - * if parsed.field_set & (1 << cparser.UF_USERINFO): - */ - /*else*/ { - __Pyx_INCREF(__pyx_kp_u__4); - __Pyx_DECREF_SET(__pyx_v_fragment, __pyx_kp_u__4); - } - __pyx_L13:; - - /* "aiohttp/_http_parser.pyx":862 - * fragment = '' - * - * if parsed.field_set & (1 << cparser.UF_USERINFO): # <<<<<<<<<<<<<< - * off = parsed.field_data[cparser.UF_USERINFO].off - * ln = parsed.field_data[cparser.UF_USERINFO].len - */ - __pyx_t_1 = ((__pyx_v_parsed->field_set & (1 << UF_USERINFO)) != 0); - if (__pyx_t_1) { - - /* "aiohttp/_http_parser.pyx":863 - * - * if parsed.field_set & (1 << cparser.UF_USERINFO): - * off = parsed.field_data[cparser.UF_USERINFO].off # <<<<<<<<<<<<<< - * ln = parsed.field_data[cparser.UF_USERINFO].len - * userinfo = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') - */ - __pyx_t_2 = (__pyx_v_parsed->field_data[((int)UF_USERINFO)]).off; - __pyx_v_off = __pyx_t_2; - - /* "aiohttp/_http_parser.pyx":864 - * if parsed.field_set & (1 << cparser.UF_USERINFO): - * off = parsed.field_data[cparser.UF_USERINFO].off - * ln = parsed.field_data[cparser.UF_USERINFO].len # <<<<<<<<<<<<<< - * userinfo = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') - * - */ - __pyx_t_2 = (__pyx_v_parsed->field_data[((int)UF_USERINFO)]).len; - __pyx_v_ln = __pyx_t_2; - - /* "aiohttp/_http_parser.pyx":865 - * off = parsed.field_data[cparser.UF_USERINFO].off - * ln = parsed.field_data[cparser.UF_USERINFO].len - * userinfo = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') # <<<<<<<<<<<<<< - * - * user, sep, password = userinfo.partition(':') - */ - __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_buf_data, __pyx_v_off, (__pyx_v_off + __pyx_v_ln), NULL, ((char const *)"surrogateescape"), PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 865, __pyx_L5_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF_SET(__pyx_v_userinfo, ((PyObject*)__pyx_t_3)); - __pyx_t_3 = 0; - - /* "aiohttp/_http_parser.pyx":867 - * userinfo = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') - * - * user, sep, password = userinfo.partition(':') # <<<<<<<<<<<<<< - * - * return URL_build(scheme=schema, - */ - __pyx_t_3 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyUnicode_Type_partition, __pyx_v_userinfo, __pyx_kp_u__11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 867, __pyx_L5_error) - __Pyx_GOTREF(__pyx_t_3); - if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { - PyObject* sequence = __pyx_t_3; - Py_ssize_t size = __Pyx_PySequence_SIZE(sequence); - if (unlikely(size != 3)) { - if (size > 3) __Pyx_RaiseTooManyValuesError(3); - else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); - __PYX_ERR(0, 867, __pyx_L5_error) - } - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - if (likely(PyTuple_CheckExact(sequence))) { - __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); - __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); - __pyx_t_6 = PyTuple_GET_ITEM(sequence, 2); - } else { - __pyx_t_4 = PyList_GET_ITEM(sequence, 0); - __pyx_t_5 = PyList_GET_ITEM(sequence, 1); - __pyx_t_6 = PyList_GET_ITEM(sequence, 2); - } - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(__pyx_t_6); - #else - __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 867, __pyx_L5_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 867, __pyx_L5_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 867, __pyx_L5_error) - __Pyx_GOTREF(__pyx_t_6); - #endif - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } else { - Py_ssize_t index = -1; - __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 867, __pyx_L5_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext; - index = 0; __pyx_t_4 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_4)) goto __pyx_L15_unpacking_failed; - __Pyx_GOTREF(__pyx_t_4); - index = 1; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L15_unpacking_failed; - __Pyx_GOTREF(__pyx_t_5); - index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L15_unpacking_failed; - __Pyx_GOTREF(__pyx_t_6); - if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(0, 867, __pyx_L5_error) - __pyx_t_8 = NULL; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - goto __pyx_L16_unpacking_done; - __pyx_L15_unpacking_failed:; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __pyx_t_8 = NULL; - if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); - __PYX_ERR(0, 867, __pyx_L5_error) - __pyx_L16_unpacking_done:; - } - if (!(likely(PyUnicode_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(0, 867, __pyx_L5_error) - if (!(likely(PyUnicode_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_6)->tp_name), 0))) __PYX_ERR(0, 867, __pyx_L5_error) - __Pyx_DECREF_SET(__pyx_v_user, ((PyObject*)__pyx_t_4)); - __pyx_t_4 = 0; - __pyx_v_sep = __pyx_t_5; - __pyx_t_5 = 0; - __Pyx_DECREF_SET(__pyx_v_password, ((PyObject*)__pyx_t_6)); - __pyx_t_6 = 0; - - /* "aiohttp/_http_parser.pyx":862 - * fragment = '' - * - * if parsed.field_set & (1 << cparser.UF_USERINFO): # <<<<<<<<<<<<<< - * off = parsed.field_data[cparser.UF_USERINFO].off - * ln = parsed.field_data[cparser.UF_USERINFO].len - */ - } - - /* "aiohttp/_http_parser.pyx":869 - * user, sep, password = userinfo.partition(':') - * - * return URL_build(scheme=schema, # <<<<<<<<<<<<<< - * user=user, password=password, host=host, port=port, - * path=path, query_string=query, fragment=fragment, encoded=True) - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = __Pyx_PyDict_NewPresized(9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 869, __pyx_L5_error) - __Pyx_GOTREF(__pyx_t_3); - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_scheme, __pyx_v_schema) < 0) __PYX_ERR(0, 869, __pyx_L5_error) - - /* "aiohttp/_http_parser.pyx":870 - * - * return URL_build(scheme=schema, - * user=user, password=password, host=host, port=port, # <<<<<<<<<<<<<< - * path=path, query_string=query, fragment=fragment, encoded=True) - * else: - */ - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_user, __pyx_v_user) < 0) __PYX_ERR(0, 869, __pyx_L5_error) - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_password, __pyx_v_password) < 0) __PYX_ERR(0, 869, __pyx_L5_error) - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_host, __pyx_v_host) < 0) __PYX_ERR(0, 869, __pyx_L5_error) - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_port, __pyx_v_port) < 0) __PYX_ERR(0, 869, __pyx_L5_error) - - /* "aiohttp/_http_parser.pyx":871 - * return URL_build(scheme=schema, - * user=user, password=password, host=host, port=port, - * path=path, query_string=query, fragment=fragment, encoded=True) # <<<<<<<<<<<<<< - * else: - * raise InvalidURLError("invalid url {!r}".format(buf_data)) - */ - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_path, __pyx_v_path) < 0) __PYX_ERR(0, 869, __pyx_L5_error) - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_query_string, __pyx_v_query) < 0) __PYX_ERR(0, 869, __pyx_L5_error) - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_fragment, __pyx_v_fragment) < 0) __PYX_ERR(0, 869, __pyx_L5_error) - if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_encoded, Py_True) < 0) __PYX_ERR(0, 869, __pyx_L5_error) - - /* "aiohttp/_http_parser.pyx":869 - * user, sep, password = userinfo.partition(':') - * - * return URL_build(scheme=schema, # <<<<<<<<<<<<<< - * user=user, password=password, host=host, port=port, - * path=path, query_string=query, fragment=fragment, encoded=True) - */ - __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_7aiohttp_12_http_parser_URL_build, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 869, __pyx_L5_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __pyx_r = __pyx_t_6; - __pyx_t_6 = 0; - goto __pyx_L4_return; - - /* "aiohttp/_http_parser.pyx":823 - * res = cparser.http_parser_parse_url(buf_data, length, 0, parsed) - * - * if res == 0: # <<<<<<<<<<<<<< - * if parsed.field_set & (1 << cparser.UF_SCHEMA): - * off = parsed.field_data[cparser.UF_SCHEMA].off - */ - } - - /* "aiohttp/_http_parser.pyx":873 - * path=path, query_string=query, fragment=fragment, encoded=True) - * else: - * raise InvalidURLError("invalid url {!r}".format(buf_data)) # <<<<<<<<<<<<<< - * finally: - * PyMem_Free(parsed) - */ - /*else*/ { - __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_InvalidURLError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 873, __pyx_L5_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_invalid_url_r, __pyx_n_s_format); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 873, __pyx_L5_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_7 = __Pyx_PyBytes_FromString(__pyx_v_buf_data); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 873, __pyx_L5_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_9 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_9)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_9); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - } - } - __pyx_t_5 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_9, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_7); - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 873, __pyx_L5_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_3, function); - } - } - __pyx_t_6 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 873, __pyx_L5_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_Raise(__pyx_t_6, 0, 0, 0); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - __PYX_ERR(0, 873, __pyx_L5_error) - } - } - - /* "aiohttp/_http_parser.pyx":875 - * raise InvalidURLError("invalid url {!r}".format(buf_data)) - * finally: - * PyMem_Free(parsed) # <<<<<<<<<<<<<< - */ - /*finally:*/ { - __pyx_L5_error:; - /*exception exit:*/{ - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18); - if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15) < 0)) __Pyx_ErrFetch(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15); - __Pyx_XGOTREF(__pyx_t_13); - __Pyx_XGOTREF(__pyx_t_14); - __Pyx_XGOTREF(__pyx_t_15); - __Pyx_XGOTREF(__pyx_t_16); - __Pyx_XGOTREF(__pyx_t_17); - __Pyx_XGOTREF(__pyx_t_18); - __pyx_t_10 = __pyx_lineno; __pyx_t_11 = __pyx_clineno; __pyx_t_12 = __pyx_filename; - { - PyMem_Free(__pyx_v_parsed); - } - if (PY_MAJOR_VERSION >= 3) { - __Pyx_XGIVEREF(__pyx_t_16); - __Pyx_XGIVEREF(__pyx_t_17); - __Pyx_XGIVEREF(__pyx_t_18); - __Pyx_ExceptionReset(__pyx_t_16, __pyx_t_17, __pyx_t_18); - } - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_XGIVEREF(__pyx_t_15); - __Pyx_ErrRestore(__pyx_t_13, __pyx_t_14, __pyx_t_15); - __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; - __pyx_lineno = __pyx_t_10; __pyx_clineno = __pyx_t_11; __pyx_filename = __pyx_t_12; - goto __pyx_L1_error; - } - __pyx_L4_return: { - __pyx_t_18 = __pyx_r; - __pyx_r = 0; - PyMem_Free(__pyx_v_parsed); - __pyx_r = __pyx_t_18; - __pyx_t_18 = 0; - goto __pyx_L0; - } - } - - /* "aiohttp/_http_parser.pyx":798 - * - * - * cdef _parse_url(char* buf_data, size_t length): # <<<<<<<<<<<<<< - * cdef: - * cparser.http_parser_url* parsed - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_AddTraceback("aiohttp._http_parser._parse_url", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_schema); - __Pyx_XDECREF(__pyx_v_host); - __Pyx_XDECREF(__pyx_v_port); - __Pyx_XDECREF(__pyx_v_path); - __Pyx_XDECREF(__pyx_v_query); - __Pyx_XDECREF(__pyx_v_fragment); - __Pyx_XDECREF(__pyx_v_user); - __Pyx_XDECREF(__pyx_v_password); - __Pyx_XDECREF(__pyx_v_userinfo); - __Pyx_XDECREF(__pyx_v_result); - __Pyx_XDECREF(__pyx_v_sep); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":1 - * def __pyx_unpickle_RawRequestMessage(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_3__pyx_unpickle_RawRequestMessage(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_7aiohttp_12_http_parser_3__pyx_unpickle_RawRequestMessage = {"__pyx_unpickle_RawRequestMessage", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7aiohttp_12_http_parser_3__pyx_unpickle_RawRequestMessage, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_7aiohttp_12_http_parser_3__pyx_unpickle_RawRequestMessage(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v___pyx_type = 0; - long __pyx_v___pyx_checksum; - PyObject *__pyx_v___pyx_state = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__pyx_unpickle_RawRequestMessage (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_RawRequestMessage", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_RawRequestMessage", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_RawRequestMessage") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - } - __pyx_v___pyx_type = values[0]; - __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) - __pyx_v___pyx_state = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_RawRequestMessage", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("aiohttp._http_parser.__pyx_unpickle_RawRequestMessage", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_2__pyx_unpickle_RawRequestMessage(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_2__pyx_unpickle_RawRequestMessage(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_v___pyx_PickleError = 0; - PyObject *__pyx_v___pyx_result = 0; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_RawRequestMessage", 0); - - /* "(tree fragment)":4 - * cdef object __pyx_PickleError - * cdef object __pyx_result - * if __pyx_checksum != 0x1408252: # <<<<<<<<<<<<<< - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x1408252 = (chunked, compression, headers, method, path, raw_headers, should_close, upgrade, url, version))" % __pyx_checksum) - */ - __pyx_t_1 = ((__pyx_v___pyx_checksum != 0x1408252) != 0); - if (__pyx_t_1) { - - /* "(tree fragment)":5 - * cdef object __pyx_result - * if __pyx_checksum != 0x1408252: - * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x1408252 = (chunked, compression, headers, method, path, raw_headers, should_close, upgrade, url, version))" % __pyx_checksum) - * __pyx_result = RawRequestMessage.__new__(__pyx_type) - */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_n_s_PickleError); - __Pyx_GIVEREF(__pyx_n_s_PickleError); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError); - __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_t_2); - __pyx_v___pyx_PickleError = __pyx_t_2; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "(tree fragment)":6 - * if __pyx_checksum != 0x1408252: - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x1408252 = (chunked, compression, headers, method, path, raw_headers, should_close, upgrade, url, version))" % __pyx_checksum) # <<<<<<<<<<<<<< - * __pyx_result = RawRequestMessage.__new__(__pyx_type) - * if __pyx_state is not None: - */ - __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0x14, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_INCREF(__pyx_v___pyx_PickleError); - __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __PYX_ERR(1, 6, __pyx_L1_error) - - /* "(tree fragment)":4 - * cdef object __pyx_PickleError - * cdef object __pyx_result - * if __pyx_checksum != 0x1408252: # <<<<<<<<<<<<<< - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x1408252 = (chunked, compression, headers, method, path, raw_headers, should_close, upgrade, url, version))" % __pyx_checksum) - */ - } - - /* "(tree fragment)":7 - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x1408252 = (chunked, compression, headers, method, path, raw_headers, should_close, upgrade, url, version))" % __pyx_checksum) - * __pyx_result = RawRequestMessage.__new__(__pyx_type) # <<<<<<<<<<<<<< - * if __pyx_state is not None: - * __pyx_unpickle_RawRequestMessage__set_state( __pyx_result, __pyx_state) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_7aiohttp_12_http_parser_RawRequestMessage), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v___pyx_result = __pyx_t_3; - __pyx_t_3 = 0; - - /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x1408252 = (chunked, compression, headers, method, path, raw_headers, should_close, upgrade, url, version))" % __pyx_checksum) - * __pyx_result = RawRequestMessage.__new__(__pyx_type) - * if __pyx_state is not None: # <<<<<<<<<<<<<< - * __pyx_unpickle_RawRequestMessage__set_state( __pyx_result, __pyx_state) - * return __pyx_result - */ - __pyx_t_1 = (__pyx_v___pyx_state != Py_None); - __pyx_t_6 = (__pyx_t_1 != 0); - if (__pyx_t_6) { - - /* "(tree fragment)":9 - * __pyx_result = RawRequestMessage.__new__(__pyx_type) - * if __pyx_state is not None: - * __pyx_unpickle_RawRequestMessage__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< - * return __pyx_result - * cdef __pyx_unpickle_RawRequestMessage__set_state(RawRequestMessage __pyx_result, tuple __pyx_state): - */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error) - __pyx_t_3 = __pyx_f_7aiohttp_12_http_parser___pyx_unpickle_RawRequestMessage__set_state(((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (%s vs 0x1408252 = (chunked, compression, headers, method, path, raw_headers, should_close, upgrade, url, version))" % __pyx_checksum) - * __pyx_result = RawRequestMessage.__new__(__pyx_type) - * if __pyx_state is not None: # <<<<<<<<<<<<<< - * __pyx_unpickle_RawRequestMessage__set_state( __pyx_result, __pyx_state) - * return __pyx_result - */ - } - - /* "(tree fragment)":10 - * if __pyx_state is not None: - * __pyx_unpickle_RawRequestMessage__set_state( __pyx_result, __pyx_state) - * return __pyx_result # <<<<<<<<<<<<<< - * cdef __pyx_unpickle_RawRequestMessage__set_state(RawRequestMessage __pyx_result, tuple __pyx_state): - * __pyx_result.chunked = __pyx_state[0]; __pyx_result.compression = __pyx_state[1]; __pyx_result.headers = __pyx_state[2]; __pyx_result.method = __pyx_state[3]; __pyx_result.path = __pyx_state[4]; __pyx_result.raw_headers = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.url = __pyx_state[8]; __pyx_result.version = __pyx_state[9] - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v___pyx_result); - __pyx_r = __pyx_v___pyx_result; - goto __pyx_L0; - - /* "(tree fragment)":1 - * def __pyx_unpickle_RawRequestMessage(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("aiohttp._http_parser.__pyx_unpickle_RawRequestMessage", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v___pyx_PickleError); - __Pyx_XDECREF(__pyx_v___pyx_result); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":11 - * __pyx_unpickle_RawRequestMessage__set_state( __pyx_result, __pyx_state) - * return __pyx_result - * cdef __pyx_unpickle_RawRequestMessage__set_state(RawRequestMessage __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< - * __pyx_result.chunked = __pyx_state[0]; __pyx_result.compression = __pyx_state[1]; __pyx_result.headers = __pyx_state[2]; __pyx_result.method = __pyx_state[3]; __pyx_result.path = __pyx_state[4]; __pyx_result.raw_headers = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.url = __pyx_state[8]; __pyx_result.version = __pyx_state[9] - * if len(__pyx_state) > 10 and hasattr(__pyx_result, '__dict__'): - */ - -static PyObject *__pyx_f_7aiohttp_12_http_parser___pyx_unpickle_RawRequestMessage__set_state(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - Py_ssize_t __pyx_t_3; - int __pyx_t_4; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_RawRequestMessage__set_state", 0); - - /* "(tree fragment)":12 - * return __pyx_result - * cdef __pyx_unpickle_RawRequestMessage__set_state(RawRequestMessage __pyx_result, tuple __pyx_state): - * __pyx_result.chunked = __pyx_state[0]; __pyx_result.compression = __pyx_state[1]; __pyx_result.headers = __pyx_state[2]; __pyx_result.method = __pyx_state[3]; __pyx_result.path = __pyx_state[4]; __pyx_result.raw_headers = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.url = __pyx_state[8]; __pyx_result.version = __pyx_state[9] # <<<<<<<<<<<<<< - * if len(__pyx_state) > 10 and hasattr(__pyx_result, '__dict__'): - * __pyx_result.__dict__.update(__pyx_state[10]) - */ - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 12, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v___pyx_result->chunked); - __Pyx_DECREF(__pyx_v___pyx_result->chunked); - __pyx_v___pyx_result->chunked = __pyx_t_1; - __pyx_t_1 = 0; - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 12, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v___pyx_result->compression); - __Pyx_DECREF(__pyx_v___pyx_result->compression); - __pyx_v___pyx_result->compression = __pyx_t_1; - __pyx_t_1 = 0; - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 12, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v___pyx_result->headers); - __Pyx_DECREF(__pyx_v___pyx_result->headers); - __pyx_v___pyx_result->headers = __pyx_t_1; - __pyx_t_1 = 0; - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 12, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v___pyx_result->method); - __Pyx_DECREF(__pyx_v___pyx_result->method); - __pyx_v___pyx_result->method = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 12, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v___pyx_result->path); - __Pyx_DECREF(__pyx_v___pyx_result->path); - __pyx_v___pyx_result->path = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 12, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 5, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v___pyx_result->raw_headers); - __Pyx_DECREF(__pyx_v___pyx_result->raw_headers); - __pyx_v___pyx_result->raw_headers = __pyx_t_1; - __pyx_t_1 = 0; - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 12, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 6, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v___pyx_result->should_close); - __Pyx_DECREF(__pyx_v___pyx_result->should_close); - __pyx_v___pyx_result->should_close = __pyx_t_1; - __pyx_t_1 = 0; - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 12, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 7, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v___pyx_result->upgrade); - __Pyx_DECREF(__pyx_v___pyx_result->upgrade); - __pyx_v___pyx_result->upgrade = __pyx_t_1; - __pyx_t_1 = 0; - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 12, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 8, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v___pyx_result->url); - __Pyx_DECREF(__pyx_v___pyx_result->url); - __pyx_v___pyx_result->url = __pyx_t_1; - __pyx_t_1 = 0; - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 12, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 9, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v___pyx_result->version); - __Pyx_DECREF(__pyx_v___pyx_result->version); - __pyx_v___pyx_result->version = __pyx_t_1; - __pyx_t_1 = 0; - - /* "(tree fragment)":13 - * cdef __pyx_unpickle_RawRequestMessage__set_state(RawRequestMessage __pyx_result, tuple __pyx_state): - * __pyx_result.chunked = __pyx_state[0]; __pyx_result.compression = __pyx_state[1]; __pyx_result.headers = __pyx_state[2]; __pyx_result.method = __pyx_state[3]; __pyx_result.path = __pyx_state[4]; __pyx_result.raw_headers = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.url = __pyx_state[8]; __pyx_result.version = __pyx_state[9] - * if len(__pyx_state) > 10 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< - * __pyx_result.__dict__.update(__pyx_state[10]) - */ - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(1, 13, __pyx_L1_error) - } - __pyx_t_3 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) - __pyx_t_4 = ((__pyx_t_3 > 10) != 0); - if (__pyx_t_4) { - } else { - __pyx_t_2 = __pyx_t_4; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) - __pyx_t_5 = (__pyx_t_4 != 0); - __pyx_t_2 = __pyx_t_5; - __pyx_L4_bool_binop_done:; - if (__pyx_t_2) { - - /* "(tree fragment)":14 - * __pyx_result.chunked = __pyx_state[0]; __pyx_result.compression = __pyx_state[1]; __pyx_result.headers = __pyx_state[2]; __pyx_result.method = __pyx_state[3]; __pyx_result.path = __pyx_state[4]; __pyx_result.raw_headers = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.url = __pyx_state[8]; __pyx_result.version = __pyx_state[9] - * if len(__pyx_state) > 10 and hasattr(__pyx_result, '__dict__'): - * __pyx_result.__dict__.update(__pyx_state[10]) # <<<<<<<<<<<<<< - */ - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 14, __pyx_L1_error) - } - __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 10, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_8 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) { - __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7); - if (likely(__pyx_t_8)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7); - __Pyx_INCREF(__pyx_t_8); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_7, function); - } - } - __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6); - __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "(tree fragment)":13 - * cdef __pyx_unpickle_RawRequestMessage__set_state(RawRequestMessage __pyx_result, tuple __pyx_state): - * __pyx_result.chunked = __pyx_state[0]; __pyx_result.compression = __pyx_state[1]; __pyx_result.headers = __pyx_state[2]; __pyx_result.method = __pyx_state[3]; __pyx_result.path = __pyx_state[4]; __pyx_result.raw_headers = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.url = __pyx_state[8]; __pyx_result.version = __pyx_state[9] - * if len(__pyx_state) > 10 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< - * __pyx_result.__dict__.update(__pyx_state[10]) - */ - } - - /* "(tree fragment)":11 - * __pyx_unpickle_RawRequestMessage__set_state( __pyx_result, __pyx_state) - * return __pyx_result - * cdef __pyx_unpickle_RawRequestMessage__set_state(RawRequestMessage __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< - * __pyx_result.chunked = __pyx_state[0]; __pyx_result.compression = __pyx_state[1]; __pyx_result.headers = __pyx_state[2]; __pyx_result.method = __pyx_state[3]; __pyx_result.path = __pyx_state[4]; __pyx_result.raw_headers = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.url = __pyx_state[8]; __pyx_result.version = __pyx_state[9] - * if len(__pyx_state) > 10 and hasattr(__pyx_result, '__dict__'): - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("aiohttp._http_parser.__pyx_unpickle_RawRequestMessage__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":1 - * def __pyx_unpickle_RawResponseMessage(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_parser_5__pyx_unpickle_RawResponseMessage(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_7aiohttp_12_http_parser_5__pyx_unpickle_RawResponseMessage = {"__pyx_unpickle_RawResponseMessage", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7aiohttp_12_http_parser_5__pyx_unpickle_RawResponseMessage, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_7aiohttp_12_http_parser_5__pyx_unpickle_RawResponseMessage(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v___pyx_type = 0; - long __pyx_v___pyx_checksum; - PyObject *__pyx_v___pyx_state = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__pyx_unpickle_RawResponseMessage (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0}; - PyObject* values[3] = {0,0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_RawResponseMessage", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_RawResponseMessage", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_RawResponseMessage") < 0)) __PYX_ERR(1, 1, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 3) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - } - __pyx_v___pyx_type = values[0]; - __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error) - __pyx_v___pyx_state = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_RawResponseMessage", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("aiohttp._http_parser.__pyx_unpickle_RawResponseMessage", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_7aiohttp_12_http_parser_4__pyx_unpickle_RawResponseMessage(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_parser_4__pyx_unpickle_RawResponseMessage(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_v___pyx_PickleError = 0; - PyObject *__pyx_v___pyx_result = 0; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_t_6; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_RawResponseMessage", 0); - - /* "(tree fragment)":4 - * cdef object __pyx_PickleError - * cdef object __pyx_result - * if __pyx_checksum != 0xc7706dc: # <<<<<<<<<<<<<< - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0xc7706dc = (chunked, code, compression, headers, raw_headers, reason, should_close, upgrade, version))" % __pyx_checksum) - */ - __pyx_t_1 = ((__pyx_v___pyx_checksum != 0xc7706dc) != 0); - if (__pyx_t_1) { - - /* "(tree fragment)":5 - * cdef object __pyx_result - * if __pyx_checksum != 0xc7706dc: - * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<< - * raise __pyx_PickleError("Incompatible checksums (%s vs 0xc7706dc = (chunked, code, compression, headers, raw_headers, reason, should_close, upgrade, version))" % __pyx_checksum) - * __pyx_result = RawResponseMessage.__new__(__pyx_type) - */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_n_s_PickleError); - __Pyx_GIVEREF(__pyx_n_s_PickleError); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError); - __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_t_2); - __pyx_v___pyx_PickleError = __pyx_t_2; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "(tree fragment)":6 - * if __pyx_checksum != 0xc7706dc: - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0xc7706dc = (chunked, code, compression, headers, raw_headers, reason, should_close, upgrade, version))" % __pyx_checksum) # <<<<<<<<<<<<<< - * __pyx_result = RawResponseMessage.__new__(__pyx_type) - * if __pyx_state is not None: - */ - __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0xc7, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_INCREF(__pyx_v___pyx_PickleError); - __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_Raise(__pyx_t_3, 0, 0, 0); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __PYX_ERR(1, 6, __pyx_L1_error) - - /* "(tree fragment)":4 - * cdef object __pyx_PickleError - * cdef object __pyx_result - * if __pyx_checksum != 0xc7706dc: # <<<<<<<<<<<<<< - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0xc7706dc = (chunked, code, compression, headers, raw_headers, reason, should_close, upgrade, version))" % __pyx_checksum) - */ - } - - /* "(tree fragment)":7 - * from pickle import PickleError as __pyx_PickleError - * raise __pyx_PickleError("Incompatible checksums (%s vs 0xc7706dc = (chunked, code, compression, headers, raw_headers, reason, should_close, upgrade, version))" % __pyx_checksum) - * __pyx_result = RawResponseMessage.__new__(__pyx_type) # <<<<<<<<<<<<<< - * if __pyx_state is not None: - * __pyx_unpickle_RawResponseMessage__set_state( __pyx_result, __pyx_state) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_7aiohttp_12_http_parser_RawResponseMessage), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type); - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v___pyx_result = __pyx_t_3; - __pyx_t_3 = 0; - - /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (%s vs 0xc7706dc = (chunked, code, compression, headers, raw_headers, reason, should_close, upgrade, version))" % __pyx_checksum) - * __pyx_result = RawResponseMessage.__new__(__pyx_type) - * if __pyx_state is not None: # <<<<<<<<<<<<<< - * __pyx_unpickle_RawResponseMessage__set_state( __pyx_result, __pyx_state) - * return __pyx_result - */ - __pyx_t_1 = (__pyx_v___pyx_state != Py_None); - __pyx_t_6 = (__pyx_t_1 != 0); - if (__pyx_t_6) { - - /* "(tree fragment)":9 - * __pyx_result = RawResponseMessage.__new__(__pyx_type) - * if __pyx_state is not None: - * __pyx_unpickle_RawResponseMessage__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<< - * return __pyx_result - * cdef __pyx_unpickle_RawResponseMessage__set_state(RawResponseMessage __pyx_result, tuple __pyx_state): - */ - if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error) - __pyx_t_3 = __pyx_f_7aiohttp_12_http_parser___pyx_unpickle_RawResponseMessage__set_state(((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 9, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - - /* "(tree fragment)":8 - * raise __pyx_PickleError("Incompatible checksums (%s vs 0xc7706dc = (chunked, code, compression, headers, raw_headers, reason, should_close, upgrade, version))" % __pyx_checksum) - * __pyx_result = RawResponseMessage.__new__(__pyx_type) - * if __pyx_state is not None: # <<<<<<<<<<<<<< - * __pyx_unpickle_RawResponseMessage__set_state( __pyx_result, __pyx_state) - * return __pyx_result - */ - } - - /* "(tree fragment)":10 - * if __pyx_state is not None: - * __pyx_unpickle_RawResponseMessage__set_state( __pyx_result, __pyx_state) - * return __pyx_result # <<<<<<<<<<<<<< - * cdef __pyx_unpickle_RawResponseMessage__set_state(RawResponseMessage __pyx_result, tuple __pyx_state): - * __pyx_result.chunked = __pyx_state[0]; __pyx_result.code = __pyx_state[1]; __pyx_result.compression = __pyx_state[2]; __pyx_result.headers = __pyx_state[3]; __pyx_result.raw_headers = __pyx_state[4]; __pyx_result.reason = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.version = __pyx_state[8] - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v___pyx_result); - __pyx_r = __pyx_v___pyx_result; - goto __pyx_L0; - - /* "(tree fragment)":1 - * def __pyx_unpickle_RawResponseMessage(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("aiohttp._http_parser.__pyx_unpickle_RawResponseMessage", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v___pyx_PickleError); - __Pyx_XDECREF(__pyx_v___pyx_result); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "(tree fragment)":11 - * __pyx_unpickle_RawResponseMessage__set_state( __pyx_result, __pyx_state) - * return __pyx_result - * cdef __pyx_unpickle_RawResponseMessage__set_state(RawResponseMessage __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< - * __pyx_result.chunked = __pyx_state[0]; __pyx_result.code = __pyx_state[1]; __pyx_result.compression = __pyx_state[2]; __pyx_result.headers = __pyx_state[3]; __pyx_result.raw_headers = __pyx_state[4]; __pyx_result.reason = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.version = __pyx_state[8] - * if len(__pyx_state) > 9 and hasattr(__pyx_result, '__dict__'): - */ - -static PyObject *__pyx_f_7aiohttp_12_http_parser___pyx_unpickle_RawResponseMessage__set_state(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - int __pyx_t_3; - Py_ssize_t __pyx_t_4; - int __pyx_t_5; - int __pyx_t_6; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__pyx_unpickle_RawResponseMessage__set_state", 0); - - /* "(tree fragment)":12 - * return __pyx_result - * cdef __pyx_unpickle_RawResponseMessage__set_state(RawResponseMessage __pyx_result, tuple __pyx_state): - * __pyx_result.chunked = __pyx_state[0]; __pyx_result.code = __pyx_state[1]; __pyx_result.compression = __pyx_state[2]; __pyx_result.headers = __pyx_state[3]; __pyx_result.raw_headers = __pyx_state[4]; __pyx_result.reason = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.version = __pyx_state[8] # <<<<<<<<<<<<<< - * if len(__pyx_state) > 9 and hasattr(__pyx_result, '__dict__'): - * __pyx_result.__dict__.update(__pyx_state[9]) - */ - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 12, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v___pyx_result->chunked); - __Pyx_DECREF(__pyx_v___pyx_result->chunked); - __pyx_v___pyx_result->chunked = __pyx_t_1; - __pyx_t_1 = 0; - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 12, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v___pyx_result->code = __pyx_t_2; - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 12, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v___pyx_result->compression); - __Pyx_DECREF(__pyx_v___pyx_result->compression); - __pyx_v___pyx_result->compression = __pyx_t_1; - __pyx_t_1 = 0; - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 12, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v___pyx_result->headers); - __Pyx_DECREF(__pyx_v___pyx_result->headers); - __pyx_v___pyx_result->headers = __pyx_t_1; - __pyx_t_1 = 0; - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 12, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v___pyx_result->raw_headers); - __Pyx_DECREF(__pyx_v___pyx_result->raw_headers); - __pyx_v___pyx_result->raw_headers = __pyx_t_1; - __pyx_t_1 = 0; - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 12, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 5, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v___pyx_result->reason); - __Pyx_DECREF(__pyx_v___pyx_result->reason); - __pyx_v___pyx_result->reason = ((PyObject*)__pyx_t_1); - __pyx_t_1 = 0; - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 12, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 6, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v___pyx_result->should_close); - __Pyx_DECREF(__pyx_v___pyx_result->should_close); - __pyx_v___pyx_result->should_close = __pyx_t_1; - __pyx_t_1 = 0; - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 12, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 7, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v___pyx_result->upgrade); - __Pyx_DECREF(__pyx_v___pyx_result->upgrade); - __pyx_v___pyx_result->upgrade = __pyx_t_1; - __pyx_t_1 = 0; - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 12, __pyx_L1_error) - } - __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 8, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __Pyx_GOTREF(__pyx_v___pyx_result->version); - __Pyx_DECREF(__pyx_v___pyx_result->version); - __pyx_v___pyx_result->version = __pyx_t_1; - __pyx_t_1 = 0; - - /* "(tree fragment)":13 - * cdef __pyx_unpickle_RawResponseMessage__set_state(RawResponseMessage __pyx_result, tuple __pyx_state): - * __pyx_result.chunked = __pyx_state[0]; __pyx_result.code = __pyx_state[1]; __pyx_result.compression = __pyx_state[2]; __pyx_result.headers = __pyx_state[3]; __pyx_result.raw_headers = __pyx_state[4]; __pyx_result.reason = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.version = __pyx_state[8] - * if len(__pyx_state) > 9 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< - * __pyx_result.__dict__.update(__pyx_state[9]) - */ - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()"); - __PYX_ERR(1, 13, __pyx_L1_error) - } - __pyx_t_4 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error) - __pyx_t_5 = ((__pyx_t_4 > 9) != 0); - if (__pyx_t_5) { - } else { - __pyx_t_3 = __pyx_t_5; - goto __pyx_L4_bool_binop_done; - } - __pyx_t_5 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error) - __pyx_t_6 = (__pyx_t_5 != 0); - __pyx_t_3 = __pyx_t_6; - __pyx_L4_bool_binop_done:; - if (__pyx_t_3) { - - /* "(tree fragment)":14 - * __pyx_result.chunked = __pyx_state[0]; __pyx_result.code = __pyx_state[1]; __pyx_result.compression = __pyx_state[2]; __pyx_result.headers = __pyx_state[3]; __pyx_result.raw_headers = __pyx_state[4]; __pyx_result.reason = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.version = __pyx_state[8] - * if len(__pyx_state) > 9 and hasattr(__pyx_result, '__dict__'): - * __pyx_result.__dict__.update(__pyx_state[9]) # <<<<<<<<<<<<<< - */ - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_update); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(__pyx_v___pyx_state == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(1, 14, __pyx_L1_error) - } - __pyx_t_7 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 9, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_9 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) { - __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8); - if (likely(__pyx_t_9)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8); - __Pyx_INCREF(__pyx_t_9); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_8, function); - } - } - __pyx_t_1 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_9, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_7); - __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0; - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "(tree fragment)":13 - * cdef __pyx_unpickle_RawResponseMessage__set_state(RawResponseMessage __pyx_result, tuple __pyx_state): - * __pyx_result.chunked = __pyx_state[0]; __pyx_result.code = __pyx_state[1]; __pyx_result.compression = __pyx_state[2]; __pyx_result.headers = __pyx_state[3]; __pyx_result.raw_headers = __pyx_state[4]; __pyx_result.reason = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.version = __pyx_state[8] - * if len(__pyx_state) > 9 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<< - * __pyx_result.__dict__.update(__pyx_state[9]) - */ - } - - /* "(tree fragment)":11 - * __pyx_unpickle_RawResponseMessage__set_state( __pyx_result, __pyx_state) - * return __pyx_result - * cdef __pyx_unpickle_RawResponseMessage__set_state(RawResponseMessage __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< - * __pyx_result.chunked = __pyx_state[0]; __pyx_result.code = __pyx_state[1]; __pyx_result.compression = __pyx_state[2]; __pyx_result.headers = __pyx_state[3]; __pyx_result.raw_headers = __pyx_state[4]; __pyx_result.reason = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.version = __pyx_state[8] - * if len(__pyx_state) > 9 and hasattr(__pyx_result, '__dict__'): - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_AddTraceback("aiohttp._http_parser.__pyx_unpickle_RawResponseMessage__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *__pyx_freelist_7aiohttp_12_http_parser_RawRequestMessage[250]; -static int __pyx_freecount_7aiohttp_12_http_parser_RawRequestMessage = 0; - -static PyObject *__pyx_tp_new_7aiohttp_12_http_parser_RawRequestMessage(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { - struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *p; - PyObject *o; - if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_7aiohttp_12_http_parser_RawRequestMessage > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage)) & ((t->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)) == 0))) { - o = (PyObject*)__pyx_freelist_7aiohttp_12_http_parser_RawRequestMessage[--__pyx_freecount_7aiohttp_12_http_parser_RawRequestMessage]; - memset(o, 0, sizeof(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage)); - (void) PyObject_INIT(o, t); - PyObject_GC_Track(o); - } else { - if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { - o = (*t->tp_alloc)(t, 0); - } else { - o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); - } - if (unlikely(!o)) return 0; - } - p = ((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)o); - p->method = ((PyObject*)Py_None); Py_INCREF(Py_None); - p->path = ((PyObject*)Py_None); Py_INCREF(Py_None); - p->version = Py_None; Py_INCREF(Py_None); - p->headers = Py_None; Py_INCREF(Py_None); - p->raw_headers = Py_None; Py_INCREF(Py_None); - p->should_close = Py_None; Py_INCREF(Py_None); - p->compression = Py_None; Py_INCREF(Py_None); - p->upgrade = Py_None; Py_INCREF(Py_None); - p->chunked = Py_None; Py_INCREF(Py_None); - p->url = Py_None; Py_INCREF(Py_None); - return o; -} - -static void __pyx_tp_dealloc_7aiohttp_12_http_parser_RawRequestMessage(PyObject *o) { - struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *p = (struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)o; - #if CYTHON_USE_TP_FINALIZE - if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { - if (PyObject_CallFinalizerFromDealloc(o)) return; - } - #endif - PyObject_GC_UnTrack(o); - Py_CLEAR(p->method); - Py_CLEAR(p->path); - Py_CLEAR(p->version); - Py_CLEAR(p->headers); - Py_CLEAR(p->raw_headers); - Py_CLEAR(p->should_close); - Py_CLEAR(p->compression); - Py_CLEAR(p->upgrade); - Py_CLEAR(p->chunked); - Py_CLEAR(p->url); - if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_7aiohttp_12_http_parser_RawRequestMessage < 250) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage)) & ((Py_TYPE(o)->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)) == 0))) { - __pyx_freelist_7aiohttp_12_http_parser_RawRequestMessage[__pyx_freecount_7aiohttp_12_http_parser_RawRequestMessage++] = ((struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)o); - } else { - (*Py_TYPE(o)->tp_free)(o); - } -} - -static int __pyx_tp_traverse_7aiohttp_12_http_parser_RawRequestMessage(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *p = (struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)o; - if (p->version) { - e = (*v)(p->version, a); if (e) return e; - } - if (p->headers) { - e = (*v)(p->headers, a); if (e) return e; - } - if (p->raw_headers) { - e = (*v)(p->raw_headers, a); if (e) return e; - } - if (p->should_close) { - e = (*v)(p->should_close, a); if (e) return e; - } - if (p->compression) { - e = (*v)(p->compression, a); if (e) return e; - } - if (p->upgrade) { - e = (*v)(p->upgrade, a); if (e) return e; - } - if (p->chunked) { - e = (*v)(p->chunked, a); if (e) return e; - } - if (p->url) { - e = (*v)(p->url, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_7aiohttp_12_http_parser_RawRequestMessage(PyObject *o) { - PyObject* tmp; - struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *p = (struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage *)o; - tmp = ((PyObject*)p->version); - p->version = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->headers); - p->headers = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->raw_headers); - p->raw_headers = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->should_close); - p->should_close = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->compression); - p->compression = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->upgrade); - p->upgrade = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->chunked); - p->chunked = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->url); - p->url = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - return 0; -} - -static PyObject *__pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_method(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_6method_1__get__(o); -} - -static PyObject *__pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_path(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_4path_1__get__(o); -} - -static PyObject *__pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_version(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7version_1__get__(o); -} - -static PyObject *__pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_headers(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7headers_1__get__(o); -} - -static PyObject *__pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_raw_headers(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_11raw_headers_1__get__(o); -} - -static PyObject *__pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_should_close(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_12should_close_1__get__(o); -} - -static PyObject *__pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_compression(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_11compression_1__get__(o); -} - -static PyObject *__pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_upgrade(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7upgrade_1__get__(o); -} - -static PyObject *__pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_chunked(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7chunked_1__get__(o); -} - -static PyObject *__pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_url(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_3url_1__get__(o); -} - -static PyMethodDef __pyx_methods_7aiohttp_12_http_parser_RawRequestMessage[] = { - {"_replace", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_5_replace, METH_VARARGS|METH_KEYWORDS, 0}, - {"__reduce_cython__", (PyCFunction)__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_7__reduce_cython__, METH_NOARGS, 0}, - {"__setstate_cython__", (PyCFunction)__pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_9__setstate_cython__, METH_O, 0}, - {0, 0, 0, 0} -}; - -static struct PyGetSetDef __pyx_getsets_7aiohttp_12_http_parser_RawRequestMessage[] = { - {(char *)"method", __pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_method, 0, (char *)0, 0}, - {(char *)"path", __pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_path, 0, (char *)0, 0}, - {(char *)"version", __pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_version, 0, (char *)0, 0}, - {(char *)"headers", __pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_headers, 0, (char *)0, 0}, - {(char *)"raw_headers", __pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_raw_headers, 0, (char *)0, 0}, - {(char *)"should_close", __pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_should_close, 0, (char *)0, 0}, - {(char *)"compression", __pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_compression, 0, (char *)0, 0}, - {(char *)"upgrade", __pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_upgrade, 0, (char *)0, 0}, - {(char *)"chunked", __pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_chunked, 0, (char *)0, 0}, - {(char *)"url", __pyx_getprop_7aiohttp_12_http_parser_17RawRequestMessage_url, 0, (char *)0, 0}, - {0, 0, 0, 0, 0} -}; - -static PyTypeObject __pyx_type_7aiohttp_12_http_parser_RawRequestMessage = { - PyVarObject_HEAD_INIT(0, 0) - "aiohttp._http_parser.RawRequestMessage", /*tp_name*/ - sizeof(struct __pyx_obj_7aiohttp_12_http_parser_RawRequestMessage), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_7aiohttp_12_http_parser_RawRequestMessage, /*tp_dealloc*/ - #if PY_VERSION_HEX < 0x030800b4 - 0, /*tp_print*/ - #endif - #if PY_VERSION_HEX >= 0x030800b4 - 0, /*tp_vectorcall_offset*/ - #endif - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #endif - #if PY_MAJOR_VERSION >= 3 - 0, /*tp_as_async*/ - #endif - __pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_3__repr__, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_7aiohttp_12_http_parser_RawRequestMessage, /*tp_traverse*/ - __pyx_tp_clear_7aiohttp_12_http_parser_RawRequestMessage, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - __pyx_methods_7aiohttp_12_http_parser_RawRequestMessage, /*tp_methods*/ - 0, /*tp_members*/ - __pyx_getsets_7aiohttp_12_http_parser_RawRequestMessage, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - __pyx_pw_7aiohttp_12_http_parser_17RawRequestMessage_1__init__, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_7aiohttp_12_http_parser_RawRequestMessage, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - 0, /*tp_version_tag*/ - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif - #if PY_VERSION_HEX >= 0x030800b1 - 0, /*tp_vectorcall*/ - #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 - 0, /*tp_print*/ - #endif -}; - -static struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *__pyx_freelist_7aiohttp_12_http_parser_RawResponseMessage[250]; -static int __pyx_freecount_7aiohttp_12_http_parser_RawResponseMessage = 0; - -static PyObject *__pyx_tp_new_7aiohttp_12_http_parser_RawResponseMessage(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { - struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *p; - PyObject *o; - if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_7aiohttp_12_http_parser_RawResponseMessage > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage)) & ((t->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)) == 0))) { - o = (PyObject*)__pyx_freelist_7aiohttp_12_http_parser_RawResponseMessage[--__pyx_freecount_7aiohttp_12_http_parser_RawResponseMessage]; - memset(o, 0, sizeof(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage)); - (void) PyObject_INIT(o, t); - PyObject_GC_Track(o); - } else { - if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { - o = (*t->tp_alloc)(t, 0); - } else { - o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); - } - if (unlikely(!o)) return 0; - } - p = ((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)o); - p->version = Py_None; Py_INCREF(Py_None); - p->reason = ((PyObject*)Py_None); Py_INCREF(Py_None); - p->headers = Py_None; Py_INCREF(Py_None); - p->raw_headers = Py_None; Py_INCREF(Py_None); - p->should_close = Py_None; Py_INCREF(Py_None); - p->compression = Py_None; Py_INCREF(Py_None); - p->upgrade = Py_None; Py_INCREF(Py_None); - p->chunked = Py_None; Py_INCREF(Py_None); - return o; -} - -static void __pyx_tp_dealloc_7aiohttp_12_http_parser_RawResponseMessage(PyObject *o) { - struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *p = (struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)o; - #if CYTHON_USE_TP_FINALIZE - if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { - if (PyObject_CallFinalizerFromDealloc(o)) return; - } - #endif - PyObject_GC_UnTrack(o); - Py_CLEAR(p->version); - Py_CLEAR(p->reason); - Py_CLEAR(p->headers); - Py_CLEAR(p->raw_headers); - Py_CLEAR(p->should_close); - Py_CLEAR(p->compression); - Py_CLEAR(p->upgrade); - Py_CLEAR(p->chunked); - if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_7aiohttp_12_http_parser_RawResponseMessage < 250) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage)) & ((Py_TYPE(o)->tp_flags & (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)) == 0))) { - __pyx_freelist_7aiohttp_12_http_parser_RawResponseMessage[__pyx_freecount_7aiohttp_12_http_parser_RawResponseMessage++] = ((struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)o); - } else { - (*Py_TYPE(o)->tp_free)(o); - } -} - -static int __pyx_tp_traverse_7aiohttp_12_http_parser_RawResponseMessage(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *p = (struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)o; - if (p->version) { - e = (*v)(p->version, a); if (e) return e; - } - if (p->headers) { - e = (*v)(p->headers, a); if (e) return e; - } - if (p->raw_headers) { - e = (*v)(p->raw_headers, a); if (e) return e; - } - if (p->should_close) { - e = (*v)(p->should_close, a); if (e) return e; - } - if (p->compression) { - e = (*v)(p->compression, a); if (e) return e; - } - if (p->upgrade) { - e = (*v)(p->upgrade, a); if (e) return e; - } - if (p->chunked) { - e = (*v)(p->chunked, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_7aiohttp_12_http_parser_RawResponseMessage(PyObject *o) { - PyObject* tmp; - struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *p = (struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage *)o; - tmp = ((PyObject*)p->version); - p->version = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->headers); - p->headers = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->raw_headers); - p->raw_headers = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->should_close); - p->should_close = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->compression); - p->compression = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->upgrade); - p->upgrade = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->chunked); - p->chunked = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - return 0; -} - -static PyObject *__pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_version(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7version_1__get__(o); -} - -static PyObject *__pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_code(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_4code_1__get__(o); -} - -static PyObject *__pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_reason(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_6reason_1__get__(o); -} - -static PyObject *__pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_headers(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7headers_1__get__(o); -} - -static PyObject *__pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_raw_headers(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_11raw_headers_1__get__(o); -} - -static PyObject *__pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_should_close(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_12should_close_1__get__(o); -} - -static PyObject *__pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_compression(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_11compression_1__get__(o); -} - -static PyObject *__pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_upgrade(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7upgrade_1__get__(o); -} - -static PyObject *__pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_chunked(PyObject *o, CYTHON_UNUSED void *x) { - return __pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7chunked_1__get__(o); -} - -static PyMethodDef __pyx_methods_7aiohttp_12_http_parser_RawResponseMessage[] = { - {"__reduce_cython__", (PyCFunction)__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_5__reduce_cython__, METH_NOARGS, 0}, - {"__setstate_cython__", (PyCFunction)__pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_7__setstate_cython__, METH_O, 0}, - {0, 0, 0, 0} -}; - -static struct PyGetSetDef __pyx_getsets_7aiohttp_12_http_parser_RawResponseMessage[] = { - {(char *)"version", __pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_version, 0, (char *)0, 0}, - {(char *)"code", __pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_code, 0, (char *)0, 0}, - {(char *)"reason", __pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_reason, 0, (char *)0, 0}, - {(char *)"headers", __pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_headers, 0, (char *)0, 0}, - {(char *)"raw_headers", __pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_raw_headers, 0, (char *)0, 0}, - {(char *)"should_close", __pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_should_close, 0, (char *)0, 0}, - {(char *)"compression", __pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_compression, 0, (char *)0, 0}, - {(char *)"upgrade", __pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_upgrade, 0, (char *)0, 0}, - {(char *)"chunked", __pyx_getprop_7aiohttp_12_http_parser_18RawResponseMessage_chunked, 0, (char *)0, 0}, - {0, 0, 0, 0, 0} -}; - -static PyTypeObject __pyx_type_7aiohttp_12_http_parser_RawResponseMessage = { - PyVarObject_HEAD_INIT(0, 0) - "aiohttp._http_parser.RawResponseMessage", /*tp_name*/ - sizeof(struct __pyx_obj_7aiohttp_12_http_parser_RawResponseMessage), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_7aiohttp_12_http_parser_RawResponseMessage, /*tp_dealloc*/ - #if PY_VERSION_HEX < 0x030800b4 - 0, /*tp_print*/ - #endif - #if PY_VERSION_HEX >= 0x030800b4 - 0, /*tp_vectorcall_offset*/ - #endif - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #endif - #if PY_MAJOR_VERSION >= 3 - 0, /*tp_as_async*/ - #endif - __pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_3__repr__, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_7aiohttp_12_http_parser_RawResponseMessage, /*tp_traverse*/ - __pyx_tp_clear_7aiohttp_12_http_parser_RawResponseMessage, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - __pyx_methods_7aiohttp_12_http_parser_RawResponseMessage, /*tp_methods*/ - 0, /*tp_members*/ - __pyx_getsets_7aiohttp_12_http_parser_RawResponseMessage, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - __pyx_pw_7aiohttp_12_http_parser_18RawResponseMessage_1__init__, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_7aiohttp_12_http_parser_RawResponseMessage, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - 0, /*tp_version_tag*/ - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif - #if PY_VERSION_HEX >= 0x030800b1 - 0, /*tp_vectorcall*/ - #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 - 0, /*tp_print*/ - #endif -}; -static struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser __pyx_vtable_7aiohttp_12_http_parser_HttpParser; - -static PyObject *__pyx_tp_new_7aiohttp_12_http_parser_HttpParser(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { - struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *p; - PyObject *o; - if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) { - o = (*t->tp_alloc)(t, 0); - } else { - o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0); - } - if (unlikely(!o)) return 0; - p = ((struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)o); - p->__pyx_vtab = __pyx_vtabptr_7aiohttp_12_http_parser_HttpParser; - p->_raw_name = ((PyObject*)Py_None); Py_INCREF(Py_None); - p->_raw_value = ((PyObject*)Py_None); Py_INCREF(Py_None); - p->_protocol = Py_None; Py_INCREF(Py_None); - p->_loop = Py_None; Py_INCREF(Py_None); - p->_timer = Py_None; Py_INCREF(Py_None); - p->_url = Py_None; Py_INCREF(Py_None); - p->_buf = ((PyObject*)Py_None); Py_INCREF(Py_None); - p->_path = ((PyObject*)Py_None); Py_INCREF(Py_None); - p->_reason = ((PyObject*)Py_None); Py_INCREF(Py_None); - p->_headers = Py_None; Py_INCREF(Py_None); - p->_raw_headers = ((PyObject*)Py_None); Py_INCREF(Py_None); - p->_messages = ((PyObject*)Py_None); Py_INCREF(Py_None); - p->_payload = Py_None; Py_INCREF(Py_None); - p->_payload_exception = Py_None; Py_INCREF(Py_None); - p->_last_error = Py_None; Py_INCREF(Py_None); - p->_content_encoding = ((PyObject*)Py_None); Py_INCREF(Py_None); - p->py_buf.obj = NULL; - if (unlikely(__pyx_pw_7aiohttp_12_http_parser_10HttpParser_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad; - return o; - bad: - Py_DECREF(o); o = 0; - return NULL; -} - -static void __pyx_tp_dealloc_7aiohttp_12_http_parser_HttpParser(PyObject *o) { - struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *p = (struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)o; - #if CYTHON_USE_TP_FINALIZE - if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) { - if (PyObject_CallFinalizerFromDealloc(o)) return; - } - #endif - PyObject_GC_UnTrack(o); - { - PyObject *etype, *eval, *etb; - PyErr_Fetch(&etype, &eval, &etb); - __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1); - __pyx_pw_7aiohttp_12_http_parser_10HttpParser_3__dealloc__(o); - __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1); - PyErr_Restore(etype, eval, etb); - } - Py_CLEAR(p->_raw_name); - Py_CLEAR(p->_raw_value); - Py_CLEAR(p->_protocol); - Py_CLEAR(p->_loop); - Py_CLEAR(p->_timer); - Py_CLEAR(p->_url); - Py_CLEAR(p->_buf); - Py_CLEAR(p->_path); - Py_CLEAR(p->_reason); - Py_CLEAR(p->_headers); - Py_CLEAR(p->_raw_headers); - Py_CLEAR(p->_messages); - Py_CLEAR(p->_payload); - Py_CLEAR(p->_payload_exception); - Py_CLEAR(p->_last_error); - Py_CLEAR(p->_content_encoding); - (*Py_TYPE(o)->tp_free)(o); -} - -static int __pyx_tp_traverse_7aiohttp_12_http_parser_HttpParser(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *p = (struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)o; - if (p->_protocol) { - e = (*v)(p->_protocol, a); if (e) return e; - } - if (p->_loop) { - e = (*v)(p->_loop, a); if (e) return e; - } - if (p->_timer) { - e = (*v)(p->_timer, a); if (e) return e; - } - if (p->_url) { - e = (*v)(p->_url, a); if (e) return e; - } - if (p->_headers) { - e = (*v)(p->_headers, a); if (e) return e; - } - if (p->_raw_headers) { - e = (*v)(p->_raw_headers, a); if (e) return e; - } - if (p->_messages) { - e = (*v)(p->_messages, a); if (e) return e; - } - if (p->_payload) { - e = (*v)(p->_payload, a); if (e) return e; - } - if (p->_payload_exception) { - e = (*v)(p->_payload_exception, a); if (e) return e; - } - if (p->_last_error) { - e = (*v)(p->_last_error, a); if (e) return e; - } - if (p->py_buf.obj) { - e = (*v)(p->py_buf.obj, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_7aiohttp_12_http_parser_HttpParser(PyObject *o) { - PyObject* tmp; - struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *p = (struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *)o; - tmp = ((PyObject*)p->_protocol); - p->_protocol = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->_loop); - p->_loop = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->_timer); - p->_timer = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->_url); - p->_url = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->_headers); - p->_headers = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->_raw_headers); - p->_raw_headers = ((PyObject*)Py_None); Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->_messages); - p->_messages = ((PyObject*)Py_None); Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->_payload); - p->_payload = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->_payload_exception); - p->_payload_exception = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - tmp = ((PyObject*)p->_last_error); - p->_last_error = Py_None; Py_INCREF(Py_None); - Py_XDECREF(tmp); - Py_CLEAR(p->py_buf.obj); - return 0; -} - -static PyMethodDef __pyx_methods_7aiohttp_12_http_parser_HttpParser[] = { - {"feed_eof", (PyCFunction)__pyx_pw_7aiohttp_12_http_parser_10HttpParser_5feed_eof, METH_NOARGS, 0}, - {"feed_data", (PyCFunction)__pyx_pw_7aiohttp_12_http_parser_10HttpParser_7feed_data, METH_O, 0}, - {"set_upgraded", (PyCFunction)__pyx_pw_7aiohttp_12_http_parser_10HttpParser_9set_upgraded, METH_O, 0}, - {"__reduce_cython__", (PyCFunction)__pyx_pw_7aiohttp_12_http_parser_10HttpParser_11__reduce_cython__, METH_NOARGS, 0}, - {"__setstate_cython__", (PyCFunction)__pyx_pw_7aiohttp_12_http_parser_10HttpParser_13__setstate_cython__, METH_O, 0}, - {0, 0, 0, 0} -}; - -static PyTypeObject __pyx_type_7aiohttp_12_http_parser_HttpParser = { - PyVarObject_HEAD_INIT(0, 0) - "aiohttp._http_parser.HttpParser", /*tp_name*/ - sizeof(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_7aiohttp_12_http_parser_HttpParser, /*tp_dealloc*/ - #if PY_VERSION_HEX < 0x030800b4 - 0, /*tp_print*/ - #endif - #if PY_VERSION_HEX >= 0x030800b4 - 0, /*tp_vectorcall_offset*/ - #endif - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #endif - #if PY_MAJOR_VERSION >= 3 - 0, /*tp_as_async*/ - #endif - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_7aiohttp_12_http_parser_HttpParser, /*tp_traverse*/ - __pyx_tp_clear_7aiohttp_12_http_parser_HttpParser, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - __pyx_methods_7aiohttp_12_http_parser_HttpParser, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_7aiohttp_12_http_parser_HttpParser, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - 0, /*tp_version_tag*/ - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif - #if PY_VERSION_HEX >= 0x030800b1 - 0, /*tp_vectorcall*/ - #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 - 0, /*tp_print*/ - #endif -}; -static struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpRequestParser __pyx_vtable_7aiohttp_12_http_parser_HttpRequestParser; - -static PyObject *__pyx_tp_new_7aiohttp_12_http_parser_HttpRequestParser(PyTypeObject *t, PyObject *a, PyObject *k) { - struct __pyx_obj_7aiohttp_12_http_parser_HttpRequestParser *p; - PyObject *o = __pyx_tp_new_7aiohttp_12_http_parser_HttpParser(t, a, k); - if (unlikely(!o)) return 0; - p = ((struct __pyx_obj_7aiohttp_12_http_parser_HttpRequestParser *)o); - p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser*)__pyx_vtabptr_7aiohttp_12_http_parser_HttpRequestParser; - return o; -} - -static PyMethodDef __pyx_methods_7aiohttp_12_http_parser_HttpRequestParser[] = { - {"__reduce_cython__", (PyCFunction)__pyx_pw_7aiohttp_12_http_parser_17HttpRequestParser_3__reduce_cython__, METH_NOARGS, 0}, - {"__setstate_cython__", (PyCFunction)__pyx_pw_7aiohttp_12_http_parser_17HttpRequestParser_5__setstate_cython__, METH_O, 0}, - {0, 0, 0, 0} -}; - -static PyTypeObject __pyx_type_7aiohttp_12_http_parser_HttpRequestParser = { - PyVarObject_HEAD_INIT(0, 0) - "aiohttp._http_parser.HttpRequestParser", /*tp_name*/ - sizeof(struct __pyx_obj_7aiohttp_12_http_parser_HttpRequestParser), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_7aiohttp_12_http_parser_HttpParser, /*tp_dealloc*/ - #if PY_VERSION_HEX < 0x030800b4 - 0, /*tp_print*/ - #endif - #if PY_VERSION_HEX >= 0x030800b4 - 0, /*tp_vectorcall_offset*/ - #endif - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #endif - #if PY_MAJOR_VERSION >= 3 - 0, /*tp_as_async*/ - #endif - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_7aiohttp_12_http_parser_HttpParser, /*tp_traverse*/ - __pyx_tp_clear_7aiohttp_12_http_parser_HttpParser, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - __pyx_methods_7aiohttp_12_http_parser_HttpRequestParser, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - __pyx_pw_7aiohttp_12_http_parser_17HttpRequestParser_1__init__, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_7aiohttp_12_http_parser_HttpRequestParser, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - 0, /*tp_version_tag*/ - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif - #if PY_VERSION_HEX >= 0x030800b1 - 0, /*tp_vectorcall*/ - #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 - 0, /*tp_print*/ - #endif -}; -static struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpResponseParser __pyx_vtable_7aiohttp_12_http_parser_HttpResponseParser; - -static PyObject *__pyx_tp_new_7aiohttp_12_http_parser_HttpResponseParser(PyTypeObject *t, PyObject *a, PyObject *k) { - struct __pyx_obj_7aiohttp_12_http_parser_HttpResponseParser *p; - PyObject *o = __pyx_tp_new_7aiohttp_12_http_parser_HttpParser(t, a, k); - if (unlikely(!o)) return 0; - p = ((struct __pyx_obj_7aiohttp_12_http_parser_HttpResponseParser *)o); - p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_7aiohttp_12_http_parser_HttpParser*)__pyx_vtabptr_7aiohttp_12_http_parser_HttpResponseParser; - return o; -} - -static PyMethodDef __pyx_methods_7aiohttp_12_http_parser_HttpResponseParser[] = { - {"__reduce_cython__", (PyCFunction)__pyx_pw_7aiohttp_12_http_parser_18HttpResponseParser_3__reduce_cython__, METH_NOARGS, 0}, - {"__setstate_cython__", (PyCFunction)__pyx_pw_7aiohttp_12_http_parser_18HttpResponseParser_5__setstate_cython__, METH_O, 0}, - {0, 0, 0, 0} -}; - -static PyTypeObject __pyx_type_7aiohttp_12_http_parser_HttpResponseParser = { - PyVarObject_HEAD_INIT(0, 0) - "aiohttp._http_parser.HttpResponseParser", /*tp_name*/ - sizeof(struct __pyx_obj_7aiohttp_12_http_parser_HttpResponseParser), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_7aiohttp_12_http_parser_HttpParser, /*tp_dealloc*/ - #if PY_VERSION_HEX < 0x030800b4 - 0, /*tp_print*/ - #endif - #if PY_VERSION_HEX >= 0x030800b4 - 0, /*tp_vectorcall_offset*/ - #endif - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #endif - #if PY_MAJOR_VERSION >= 3 - 0, /*tp_as_async*/ - #endif - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_7aiohttp_12_http_parser_HttpParser, /*tp_traverse*/ - __pyx_tp_clear_7aiohttp_12_http_parser_HttpParser, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - __pyx_methods_7aiohttp_12_http_parser_HttpResponseParser, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - __pyx_pw_7aiohttp_12_http_parser_18HttpResponseParser_1__init__, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_7aiohttp_12_http_parser_HttpResponseParser, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - 0, /*tp_version_tag*/ - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif - #if PY_VERSION_HEX >= 0x030800b1 - 0, /*tp_vectorcall*/ - #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 - 0, /*tp_print*/ - #endif -}; - -static struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__ *__pyx_freelist_7aiohttp_12_http_parser___pyx_scope_struct____repr__[8]; -static int __pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct____repr__ = 0; - -static PyObject *__pyx_tp_new_7aiohttp_12_http_parser___pyx_scope_struct____repr__(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { - PyObject *o; - if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct____repr__ > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__)))) { - o = (PyObject*)__pyx_freelist_7aiohttp_12_http_parser___pyx_scope_struct____repr__[--__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct____repr__]; - memset(o, 0, sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__)); - (void) PyObject_INIT(o, t); - PyObject_GC_Track(o); - } else { - o = (*t->tp_alloc)(t, 0); - if (unlikely(!o)) return 0; - } - return o; -} - -static void __pyx_tp_dealloc_7aiohttp_12_http_parser___pyx_scope_struct____repr__(PyObject *o) { - struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__ *p = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__ *)o; - PyObject_GC_UnTrack(o); - Py_CLEAR(p->__pyx_v_info); - if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct____repr__ < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__)))) { - __pyx_freelist_7aiohttp_12_http_parser___pyx_scope_struct____repr__[__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct____repr__++] = ((struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__ *)o); - } else { - (*Py_TYPE(o)->tp_free)(o); - } -} - -static int __pyx_tp_traverse_7aiohttp_12_http_parser___pyx_scope_struct____repr__(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__ *p = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__ *)o; - if (p->__pyx_v_info) { - e = (*v)(p->__pyx_v_info, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_7aiohttp_12_http_parser___pyx_scope_struct____repr__(PyObject *o) { - PyObject* tmp; - struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__ *p = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__ *)o; - tmp = ((PyObject*)p->__pyx_v_info); - p->__pyx_v_info = ((PyObject*)Py_None); Py_INCREF(Py_None); - Py_XDECREF(tmp); - return 0; -} - -static PyTypeObject __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct____repr__ = { - PyVarObject_HEAD_INIT(0, 0) - "aiohttp._http_parser.__pyx_scope_struct____repr__", /*tp_name*/ - sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct____repr__), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_7aiohttp_12_http_parser___pyx_scope_struct____repr__, /*tp_dealloc*/ - #if PY_VERSION_HEX < 0x030800b4 - 0, /*tp_print*/ - #endif - #if PY_VERSION_HEX >= 0x030800b4 - 0, /*tp_vectorcall_offset*/ - #endif - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #endif - #if PY_MAJOR_VERSION >= 3 - 0, /*tp_as_async*/ - #endif - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_7aiohttp_12_http_parser___pyx_scope_struct____repr__, /*tp_traverse*/ - __pyx_tp_clear_7aiohttp_12_http_parser___pyx_scope_struct____repr__, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - 0, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_7aiohttp_12_http_parser___pyx_scope_struct____repr__, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - 0, /*tp_version_tag*/ - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif - #if PY_VERSION_HEX >= 0x030800b1 - 0, /*tp_vectorcall*/ - #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 - 0, /*tp_print*/ - #endif -}; - -static struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr *__pyx_freelist_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr[8]; -static int __pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr = 0; - -static PyObject *__pyx_tp_new_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { - PyObject *o; - if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr)))) { - o = (PyObject*)__pyx_freelist_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr[--__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr]; - memset(o, 0, sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr)); - (void) PyObject_INIT(o, t); - PyObject_GC_Track(o); - } else { - o = (*t->tp_alloc)(t, 0); - if (unlikely(!o)) return 0; - } - return o; -} - -static void __pyx_tp_dealloc_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr(PyObject *o) { - struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr *p = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr *)o; - PyObject_GC_UnTrack(o); - Py_CLEAR(p->__pyx_outer_scope); - Py_CLEAR(p->__pyx_v_name); - Py_CLEAR(p->__pyx_v_val); - if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr)))) { - __pyx_freelist_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr[__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr++] = ((struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr *)o); - } else { - (*Py_TYPE(o)->tp_free)(o); - } -} - -static int __pyx_tp_traverse_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr *p = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr *)o; - if (p->__pyx_outer_scope) { - e = (*v)(((PyObject *)p->__pyx_outer_scope), a); if (e) return e; - } - if (p->__pyx_v_name) { - e = (*v)(p->__pyx_v_name, a); if (e) return e; - } - if (p->__pyx_v_val) { - e = (*v)(p->__pyx_v_val, a); if (e) return e; - } - return 0; -} - -static PyTypeObject __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr = { - PyVarObject_HEAD_INIT(0, 0) - "aiohttp._http_parser.__pyx_scope_struct_1_genexpr", /*tp_name*/ - sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr, /*tp_dealloc*/ - #if PY_VERSION_HEX < 0x030800b4 - 0, /*tp_print*/ - #endif - #if PY_VERSION_HEX >= 0x030800b4 - 0, /*tp_vectorcall_offset*/ - #endif - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #endif - #if PY_MAJOR_VERSION >= 3 - 0, /*tp_as_async*/ - #endif - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - 0, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - 0, /*tp_version_tag*/ - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif - #if PY_VERSION_HEX >= 0x030800b1 - 0, /*tp_vectorcall*/ - #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 - 0, /*tp_print*/ - #endif -}; - -static struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ *__pyx_freelist_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__[8]; -static int __pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ = 0; - -static PyObject *__pyx_tp_new_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { - PyObject *o; - if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__)))) { - o = (PyObject*)__pyx_freelist_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__[--__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__]; - memset(o, 0, sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__)); - (void) PyObject_INIT(o, t); - PyObject_GC_Track(o); - } else { - o = (*t->tp_alloc)(t, 0); - if (unlikely(!o)) return 0; - } - return o; -} - -static void __pyx_tp_dealloc_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__(PyObject *o) { - struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ *p = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ *)o; - PyObject_GC_UnTrack(o); - Py_CLEAR(p->__pyx_v_info); - if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__)))) { - __pyx_freelist_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__[__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__++] = ((struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ *)o); - } else { - (*Py_TYPE(o)->tp_free)(o); - } -} - -static int __pyx_tp_traverse_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ *p = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ *)o; - if (p->__pyx_v_info) { - e = (*v)(p->__pyx_v_info, a); if (e) return e; - } - return 0; -} - -static int __pyx_tp_clear_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__(PyObject *o) { - PyObject* tmp; - struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ *p = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ *)o; - tmp = ((PyObject*)p->__pyx_v_info); - p->__pyx_v_info = ((PyObject*)Py_None); Py_INCREF(Py_None); - Py_XDECREF(tmp); - return 0; -} - -static PyTypeObject __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ = { - PyVarObject_HEAD_INIT(0, 0) - "aiohttp._http_parser.__pyx_scope_struct_2___repr__", /*tp_name*/ - sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__, /*tp_dealloc*/ - #if PY_VERSION_HEX < 0x030800b4 - 0, /*tp_print*/ - #endif - #if PY_VERSION_HEX >= 0x030800b4 - 0, /*tp_vectorcall_offset*/ - #endif - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #endif - #if PY_MAJOR_VERSION >= 3 - 0, /*tp_as_async*/ - #endif - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__, /*tp_traverse*/ - __pyx_tp_clear_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - 0, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - 0, /*tp_version_tag*/ - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif - #if PY_VERSION_HEX >= 0x030800b1 - 0, /*tp_vectorcall*/ - #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 - 0, /*tp_print*/ - #endif -}; - -static struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr *__pyx_freelist_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr[8]; -static int __pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr = 0; - -static PyObject *__pyx_tp_new_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) { - PyObject *o; - if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr)))) { - o = (PyObject*)__pyx_freelist_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr[--__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr]; - memset(o, 0, sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr)); - (void) PyObject_INIT(o, t); - PyObject_GC_Track(o); - } else { - o = (*t->tp_alloc)(t, 0); - if (unlikely(!o)) return 0; - } - return o; -} - -static void __pyx_tp_dealloc_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr(PyObject *o) { - struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr *p = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr *)o; - PyObject_GC_UnTrack(o); - Py_CLEAR(p->__pyx_outer_scope); - Py_CLEAR(p->__pyx_v_name); - Py_CLEAR(p->__pyx_v_val); - if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr)))) { - __pyx_freelist_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr[__pyx_freecount_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr++] = ((struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr *)o); - } else { - (*Py_TYPE(o)->tp_free)(o); - } -} - -static int __pyx_tp_traverse_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr(PyObject *o, visitproc v, void *a) { - int e; - struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr *p = (struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr *)o; - if (p->__pyx_outer_scope) { - e = (*v)(((PyObject *)p->__pyx_outer_scope), a); if (e) return e; - } - if (p->__pyx_v_name) { - e = (*v)(p->__pyx_v_name, a); if (e) return e; - } - if (p->__pyx_v_val) { - e = (*v)(p->__pyx_v_val, a); if (e) return e; - } - return 0; -} - -static PyTypeObject __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr = { - PyVarObject_HEAD_INIT(0, 0) - "aiohttp._http_parser.__pyx_scope_struct_3_genexpr", /*tp_name*/ - sizeof(struct __pyx_obj_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - __pyx_tp_dealloc_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr, /*tp_dealloc*/ - #if PY_VERSION_HEX < 0x030800b4 - 0, /*tp_print*/ - #endif - #if PY_VERSION_HEX >= 0x030800b4 - 0, /*tp_vectorcall_offset*/ - #endif - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - #if PY_MAJOR_VERSION < 3 - 0, /*tp_compare*/ - #endif - #if PY_MAJOR_VERSION >= 3 - 0, /*tp_as_async*/ - #endif - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash*/ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/ - 0, /*tp_doc*/ - __pyx_tp_traverse_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr, /*tp_traverse*/ - 0, /*tp_clear*/ - 0, /*tp_richcompare*/ - 0, /*tp_weaklistoffset*/ - 0, /*tp_iter*/ - 0, /*tp_iternext*/ - 0, /*tp_methods*/ - 0, /*tp_members*/ - 0, /*tp_getset*/ - 0, /*tp_base*/ - 0, /*tp_dict*/ - 0, /*tp_descr_get*/ - 0, /*tp_descr_set*/ - 0, /*tp_dictoffset*/ - 0, /*tp_init*/ - 0, /*tp_alloc*/ - __pyx_tp_new_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr, /*tp_new*/ - 0, /*tp_free*/ - 0, /*tp_is_gc*/ - 0, /*tp_bases*/ - 0, /*tp_mro*/ - 0, /*tp_cache*/ - 0, /*tp_subclasses*/ - 0, /*tp_weaklist*/ - 0, /*tp_del*/ - 0, /*tp_version_tag*/ - #if PY_VERSION_HEX >= 0x030400a1 - 0, /*tp_finalize*/ - #endif - #if PY_VERSION_HEX >= 0x030800b1 - 0, /*tp_vectorcall*/ - #endif - #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 - 0, /*tp_print*/ - #endif -}; - -static PyMethodDef __pyx_methods[] = { - {0, 0, 0, 0} -}; - -#if PY_MAJOR_VERSION >= 3 -#if CYTHON_PEP489_MULTI_PHASE_INIT -static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ -static int __pyx_pymod_exec__http_parser(PyObject* module); /*proto*/ -static PyModuleDef_Slot __pyx_moduledef_slots[] = { - {Py_mod_create, (void*)__pyx_pymod_create}, - {Py_mod_exec, (void*)__pyx_pymod_exec__http_parser}, - {0, NULL} -}; -#endif - -static struct PyModuleDef __pyx_moduledef = { - PyModuleDef_HEAD_INIT, - "_http_parser", - 0, /* m_doc */ - #if CYTHON_PEP489_MULTI_PHASE_INIT - 0, /* m_size */ - #else - -1, /* m_size */ - #endif - __pyx_methods /* m_methods */, - #if CYTHON_PEP489_MULTI_PHASE_INIT - __pyx_moduledef_slots, /* m_slots */ - #else - NULL, /* m_reload */ - #endif - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL /* m_free */ -}; -#endif -#ifndef CYTHON_SMALL_CODE -#if defined(__clang__) - #define CYTHON_SMALL_CODE -#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) - #define CYTHON_SMALL_CODE __attribute__((cold)) -#else - #define CYTHON_SMALL_CODE -#endif -#endif - -static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_kp_u_, __pyx_k_, sizeof(__pyx_k_), 0, 1, 0, 0}, - {&__pyx_n_s_ACCEPT, __pyx_k_ACCEPT, sizeof(__pyx_k_ACCEPT), 0, 0, 1, 1}, - {&__pyx_n_s_ACCEPT_CHARSET, __pyx_k_ACCEPT_CHARSET, sizeof(__pyx_k_ACCEPT_CHARSET), 0, 0, 1, 1}, - {&__pyx_n_s_ACCEPT_ENCODING, __pyx_k_ACCEPT_ENCODING, sizeof(__pyx_k_ACCEPT_ENCODING), 0, 0, 1, 1}, - {&__pyx_n_s_ACCEPT_LANGUAGE, __pyx_k_ACCEPT_LANGUAGE, sizeof(__pyx_k_ACCEPT_LANGUAGE), 0, 0, 1, 1}, - {&__pyx_n_s_ACCEPT_RANGES, __pyx_k_ACCEPT_RANGES, sizeof(__pyx_k_ACCEPT_RANGES), 0, 0, 1, 1}, - {&__pyx_n_s_ACCESS_CONTROL_ALLOW_CREDENTIALS, __pyx_k_ACCESS_CONTROL_ALLOW_CREDENTIALS, sizeof(__pyx_k_ACCESS_CONTROL_ALLOW_CREDENTIALS), 0, 0, 1, 1}, - {&__pyx_n_s_ACCESS_CONTROL_ALLOW_HEADERS, __pyx_k_ACCESS_CONTROL_ALLOW_HEADERS, sizeof(__pyx_k_ACCESS_CONTROL_ALLOW_HEADERS), 0, 0, 1, 1}, - {&__pyx_n_s_ACCESS_CONTROL_ALLOW_METHODS, __pyx_k_ACCESS_CONTROL_ALLOW_METHODS, sizeof(__pyx_k_ACCESS_CONTROL_ALLOW_METHODS), 0, 0, 1, 1}, - {&__pyx_n_s_ACCESS_CONTROL_ALLOW_ORIGIN, __pyx_k_ACCESS_CONTROL_ALLOW_ORIGIN, sizeof(__pyx_k_ACCESS_CONTROL_ALLOW_ORIGIN), 0, 0, 1, 1}, - {&__pyx_n_s_ACCESS_CONTROL_EXPOSE_HEADERS, __pyx_k_ACCESS_CONTROL_EXPOSE_HEADERS, sizeof(__pyx_k_ACCESS_CONTROL_EXPOSE_HEADERS), 0, 0, 1, 1}, - {&__pyx_n_s_ACCESS_CONTROL_MAX_AGE, __pyx_k_ACCESS_CONTROL_MAX_AGE, sizeof(__pyx_k_ACCESS_CONTROL_MAX_AGE), 0, 0, 1, 1}, - {&__pyx_n_s_ACCESS_CONTROL_REQUEST_HEADERS, __pyx_k_ACCESS_CONTROL_REQUEST_HEADERS, sizeof(__pyx_k_ACCESS_CONTROL_REQUEST_HEADERS), 0, 0, 1, 1}, - {&__pyx_n_s_ACCESS_CONTROL_REQUEST_METHOD, __pyx_k_ACCESS_CONTROL_REQUEST_METHOD, sizeof(__pyx_k_ACCESS_CONTROL_REQUEST_METHOD), 0, 0, 1, 1}, - {&__pyx_n_s_AGE, __pyx_k_AGE, sizeof(__pyx_k_AGE), 0, 0, 1, 1}, - {&__pyx_n_s_ALLOW, __pyx_k_ALLOW, sizeof(__pyx_k_ALLOW), 0, 0, 1, 1}, - {&__pyx_n_s_AUTHORIZATION, __pyx_k_AUTHORIZATION, sizeof(__pyx_k_AUTHORIZATION), 0, 0, 1, 1}, - {&__pyx_n_s_BadHttpMessage, __pyx_k_BadHttpMessage, sizeof(__pyx_k_BadHttpMessage), 0, 0, 1, 1}, - {&__pyx_n_s_BadStatusLine, __pyx_k_BadStatusLine, sizeof(__pyx_k_BadStatusLine), 0, 0, 1, 1}, - {&__pyx_n_s_BaseException, __pyx_k_BaseException, sizeof(__pyx_k_BaseException), 0, 0, 1, 1}, - {&__pyx_n_s_CACHE_CONTROL, __pyx_k_CACHE_CONTROL, sizeof(__pyx_k_CACHE_CONTROL), 0, 0, 1, 1}, - {&__pyx_n_s_CIMultiDict, __pyx_k_CIMultiDict, sizeof(__pyx_k_CIMultiDict), 0, 0, 1, 1}, - {&__pyx_n_s_CIMultiDictProxy, __pyx_k_CIMultiDictProxy, sizeof(__pyx_k_CIMultiDictProxy), 0, 0, 1, 1}, - {&__pyx_n_s_CIMultiDictProxy_2, __pyx_k_CIMultiDictProxy_2, sizeof(__pyx_k_CIMultiDictProxy_2), 0, 0, 1, 1}, - {&__pyx_n_s_CIMultiDict_2, __pyx_k_CIMultiDict_2, sizeof(__pyx_k_CIMultiDict_2), 0, 0, 1, 1}, - {&__pyx_n_s_CONNECTION, __pyx_k_CONNECTION, sizeof(__pyx_k_CONNECTION), 0, 0, 1, 1}, - {&__pyx_n_s_CONTENT_DISPOSITION, __pyx_k_CONTENT_DISPOSITION, sizeof(__pyx_k_CONTENT_DISPOSITION), 0, 0, 1, 1}, - {&__pyx_n_s_CONTENT_ENCODING, __pyx_k_CONTENT_ENCODING, sizeof(__pyx_k_CONTENT_ENCODING), 0, 0, 1, 1}, - {&__pyx_n_s_CONTENT_LANGUAGE, __pyx_k_CONTENT_LANGUAGE, sizeof(__pyx_k_CONTENT_LANGUAGE), 0, 0, 1, 1}, - {&__pyx_n_s_CONTENT_LENGTH, __pyx_k_CONTENT_LENGTH, sizeof(__pyx_k_CONTENT_LENGTH), 0, 0, 1, 1}, - {&__pyx_n_s_CONTENT_LOCATION, __pyx_k_CONTENT_LOCATION, sizeof(__pyx_k_CONTENT_LOCATION), 0, 0, 1, 1}, - {&__pyx_n_s_CONTENT_MD5, __pyx_k_CONTENT_MD5, sizeof(__pyx_k_CONTENT_MD5), 0, 0, 1, 1}, - {&__pyx_n_s_CONTENT_RANGE, __pyx_k_CONTENT_RANGE, sizeof(__pyx_k_CONTENT_RANGE), 0, 0, 1, 1}, - {&__pyx_n_s_CONTENT_TRANSFER_ENCODING, __pyx_k_CONTENT_TRANSFER_ENCODING, sizeof(__pyx_k_CONTENT_TRANSFER_ENCODING), 0, 0, 1, 1}, - {&__pyx_n_s_CONTENT_TYPE, __pyx_k_CONTENT_TYPE, sizeof(__pyx_k_CONTENT_TYPE), 0, 0, 1, 1}, - {&__pyx_n_s_COOKIE, __pyx_k_COOKIE, sizeof(__pyx_k_COOKIE), 0, 0, 1, 1}, - {&__pyx_n_s_ContentLengthError, __pyx_k_ContentLengthError, sizeof(__pyx_k_ContentLengthError), 0, 0, 1, 1}, - {&__pyx_n_s_DATE, __pyx_k_DATE, sizeof(__pyx_k_DATE), 0, 0, 1, 1}, - {&__pyx_n_s_DESTINATION, __pyx_k_DESTINATION, sizeof(__pyx_k_DESTINATION), 0, 0, 1, 1}, - {&__pyx_n_s_DIGEST, __pyx_k_DIGEST, sizeof(__pyx_k_DIGEST), 0, 0, 1, 1}, - {&__pyx_n_s_DeflateBuffer, __pyx_k_DeflateBuffer, sizeof(__pyx_k_DeflateBuffer), 0, 0, 1, 1}, - {&__pyx_n_s_DeflateBuffer_2, __pyx_k_DeflateBuffer_2, sizeof(__pyx_k_DeflateBuffer_2), 0, 0, 1, 1}, - {&__pyx_n_s_EMPTY_PAYLOAD, __pyx_k_EMPTY_PAYLOAD, sizeof(__pyx_k_EMPTY_PAYLOAD), 0, 0, 1, 1}, - {&__pyx_n_s_EMPTY_PAYLOAD_2, __pyx_k_EMPTY_PAYLOAD_2, sizeof(__pyx_k_EMPTY_PAYLOAD_2), 0, 0, 1, 1}, - {&__pyx_n_s_ETAG, __pyx_k_ETAG, sizeof(__pyx_k_ETAG), 0, 0, 1, 1}, - {&__pyx_n_s_EXPECT, __pyx_k_EXPECT, sizeof(__pyx_k_EXPECT), 0, 0, 1, 1}, - {&__pyx_n_s_EXPIRES, __pyx_k_EXPIRES, sizeof(__pyx_k_EXPIRES), 0, 0, 1, 1}, - {&__pyx_n_s_FORWARDED, __pyx_k_FORWARDED, sizeof(__pyx_k_FORWARDED), 0, 0, 1, 1}, - {&__pyx_n_s_FROM, __pyx_k_FROM, sizeof(__pyx_k_FROM), 0, 0, 1, 1}, - {&__pyx_n_s_HOST, __pyx_k_HOST, sizeof(__pyx_k_HOST), 0, 0, 1, 1}, - {&__pyx_kp_u_Header_name_is_too_long, __pyx_k_Header_name_is_too_long, sizeof(__pyx_k_Header_name_is_too_long), 0, 1, 0, 0}, - {&__pyx_kp_u_Header_value_is_too_long, __pyx_k_Header_value_is_too_long, sizeof(__pyx_k_Header_value_is_too_long), 0, 1, 0, 0}, - {&__pyx_n_s_HttpRequestParser, __pyx_k_HttpRequestParser, sizeof(__pyx_k_HttpRequestParser), 0, 0, 1, 1}, - {&__pyx_n_u_HttpRequestParser, __pyx_k_HttpRequestParser, sizeof(__pyx_k_HttpRequestParser), 0, 1, 0, 1}, - {&__pyx_n_s_HttpResponseParser, __pyx_k_HttpResponseParser, sizeof(__pyx_k_HttpResponseParser), 0, 0, 1, 1}, - {&__pyx_n_u_HttpResponseParser, __pyx_k_HttpResponseParser, sizeof(__pyx_k_HttpResponseParser), 0, 1, 0, 1}, - {&__pyx_n_s_HttpVersion, __pyx_k_HttpVersion, sizeof(__pyx_k_HttpVersion), 0, 0, 1, 1}, - {&__pyx_n_s_HttpVersion10, __pyx_k_HttpVersion10, sizeof(__pyx_k_HttpVersion10), 0, 0, 1, 1}, - {&__pyx_n_s_HttpVersion10_2, __pyx_k_HttpVersion10_2, sizeof(__pyx_k_HttpVersion10_2), 0, 0, 1, 1}, - {&__pyx_n_s_HttpVersion11, __pyx_k_HttpVersion11, sizeof(__pyx_k_HttpVersion11), 0, 0, 1, 1}, - {&__pyx_n_s_HttpVersion11_2, __pyx_k_HttpVersion11_2, sizeof(__pyx_k_HttpVersion11_2), 0, 0, 1, 1}, - {&__pyx_n_s_HttpVersion_2, __pyx_k_HttpVersion_2, sizeof(__pyx_k_HttpVersion_2), 0, 0, 1, 1}, - {&__pyx_n_s_IF_MATCH, __pyx_k_IF_MATCH, sizeof(__pyx_k_IF_MATCH), 0, 0, 1, 1}, - {&__pyx_n_s_IF_MODIFIED_SINCE, __pyx_k_IF_MODIFIED_SINCE, sizeof(__pyx_k_IF_MODIFIED_SINCE), 0, 0, 1, 1}, - {&__pyx_n_s_IF_NONE_MATCH, __pyx_k_IF_NONE_MATCH, sizeof(__pyx_k_IF_NONE_MATCH), 0, 0, 1, 1}, - {&__pyx_n_s_IF_RANGE, __pyx_k_IF_RANGE, sizeof(__pyx_k_IF_RANGE), 0, 0, 1, 1}, - {&__pyx_n_s_IF_UNMODIFIED_SINCE, __pyx_k_IF_UNMODIFIED_SINCE, sizeof(__pyx_k_IF_UNMODIFIED_SINCE), 0, 0, 1, 1}, - {&__pyx_kp_s_Incompatible_checksums_s_vs_0x14, __pyx_k_Incompatible_checksums_s_vs_0x14, sizeof(__pyx_k_Incompatible_checksums_s_vs_0x14), 0, 0, 1, 0}, - {&__pyx_kp_s_Incompatible_checksums_s_vs_0xc7, __pyx_k_Incompatible_checksums_s_vs_0xc7, sizeof(__pyx_k_Incompatible_checksums_s_vs_0xc7), 0, 0, 1, 0}, - {&__pyx_n_s_InvalidHeader, __pyx_k_InvalidHeader, sizeof(__pyx_k_InvalidHeader), 0, 0, 1, 1}, - {&__pyx_n_s_InvalidURLError, __pyx_k_InvalidURLError, sizeof(__pyx_k_InvalidURLError), 0, 0, 1, 1}, - {&__pyx_n_s_KEEP_ALIVE, __pyx_k_KEEP_ALIVE, sizeof(__pyx_k_KEEP_ALIVE), 0, 0, 1, 1}, - {&__pyx_n_s_LAST_EVENT_ID, __pyx_k_LAST_EVENT_ID, sizeof(__pyx_k_LAST_EVENT_ID), 0, 0, 1, 1}, - {&__pyx_n_s_LAST_MODIFIED, __pyx_k_LAST_MODIFIED, sizeof(__pyx_k_LAST_MODIFIED), 0, 0, 1, 1}, - {&__pyx_n_s_LINK, __pyx_k_LINK, sizeof(__pyx_k_LINK), 0, 0, 1, 1}, - {&__pyx_n_s_LOCATION, __pyx_k_LOCATION, sizeof(__pyx_k_LOCATION), 0, 0, 1, 1}, - {&__pyx_n_s_LineTooLong, __pyx_k_LineTooLong, sizeof(__pyx_k_LineTooLong), 0, 0, 1, 1}, - {&__pyx_n_s_MAX_FORWARDS, __pyx_k_MAX_FORWARDS, sizeof(__pyx_k_MAX_FORWARDS), 0, 0, 1, 1}, - {&__pyx_n_s_MemoryError, __pyx_k_MemoryError, sizeof(__pyx_k_MemoryError), 0, 0, 1, 1}, - {&__pyx_kp_u_Not_enough_data_for_satisfy_cont, __pyx_k_Not_enough_data_for_satisfy_cont, sizeof(__pyx_k_Not_enough_data_for_satisfy_cont), 0, 1, 0, 0}, - {&__pyx_kp_u_Not_enough_data_for_satisfy_tran, __pyx_k_Not_enough_data_for_satisfy_tran, sizeof(__pyx_k_Not_enough_data_for_satisfy_tran), 0, 1, 0, 0}, - {&__pyx_n_s_ORIGIN, __pyx_k_ORIGIN, sizeof(__pyx_k_ORIGIN), 0, 0, 1, 1}, - {&__pyx_n_s_PRAGMA, __pyx_k_PRAGMA, sizeof(__pyx_k_PRAGMA), 0, 0, 1, 1}, - {&__pyx_n_s_PROXY_AUTHENTICATE, __pyx_k_PROXY_AUTHENTICATE, sizeof(__pyx_k_PROXY_AUTHENTICATE), 0, 0, 1, 1}, - {&__pyx_n_s_PROXY_AUTHORIZATION, __pyx_k_PROXY_AUTHORIZATION, sizeof(__pyx_k_PROXY_AUTHORIZATION), 0, 0, 1, 1}, - {&__pyx_n_s_PayloadEncodingError, __pyx_k_PayloadEncodingError, sizeof(__pyx_k_PayloadEncodingError), 0, 0, 1, 1}, - {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1}, - {&__pyx_n_s_RANGE, __pyx_k_RANGE, sizeof(__pyx_k_RANGE), 0, 0, 1, 1}, - {&__pyx_n_s_REFERER, __pyx_k_REFERER, sizeof(__pyx_k_REFERER), 0, 0, 1, 1}, - {&__pyx_n_s_RETRY_AFTER, __pyx_k_RETRY_AFTER, sizeof(__pyx_k_RETRY_AFTER), 0, 0, 1, 1}, - {&__pyx_kp_u_RawRequestMessage, __pyx_k_RawRequestMessage, sizeof(__pyx_k_RawRequestMessage), 0, 1, 0, 0}, - {&__pyx_n_s_RawRequestMessage_2, __pyx_k_RawRequestMessage_2, sizeof(__pyx_k_RawRequestMessage_2), 0, 0, 1, 1}, - {&__pyx_n_u_RawRequestMessage_2, __pyx_k_RawRequestMessage_2, sizeof(__pyx_k_RawRequestMessage_2), 0, 1, 0, 1}, - {&__pyx_kp_u_RawResponseMessage, __pyx_k_RawResponseMessage, sizeof(__pyx_k_RawResponseMessage), 0, 1, 0, 0}, - {&__pyx_n_s_RawResponseMessage_2, __pyx_k_RawResponseMessage_2, sizeof(__pyx_k_RawResponseMessage_2), 0, 0, 1, 1}, - {&__pyx_n_u_RawResponseMessage_2, __pyx_k_RawResponseMessage_2, sizeof(__pyx_k_RawResponseMessage_2), 0, 1, 0, 1}, - {&__pyx_n_s_SEC_WEBSOCKET_ACCEPT, __pyx_k_SEC_WEBSOCKET_ACCEPT, sizeof(__pyx_k_SEC_WEBSOCKET_ACCEPT), 0, 0, 1, 1}, - {&__pyx_n_s_SEC_WEBSOCKET_EXTENSIONS, __pyx_k_SEC_WEBSOCKET_EXTENSIONS, sizeof(__pyx_k_SEC_WEBSOCKET_EXTENSIONS), 0, 0, 1, 1}, - {&__pyx_n_s_SEC_WEBSOCKET_KEY, __pyx_k_SEC_WEBSOCKET_KEY, sizeof(__pyx_k_SEC_WEBSOCKET_KEY), 0, 0, 1, 1}, - {&__pyx_n_s_SEC_WEBSOCKET_KEY1, __pyx_k_SEC_WEBSOCKET_KEY1, sizeof(__pyx_k_SEC_WEBSOCKET_KEY1), 0, 0, 1, 1}, - {&__pyx_n_s_SEC_WEBSOCKET_PROTOCOL, __pyx_k_SEC_WEBSOCKET_PROTOCOL, sizeof(__pyx_k_SEC_WEBSOCKET_PROTOCOL), 0, 0, 1, 1}, - {&__pyx_n_s_SEC_WEBSOCKET_VERSION, __pyx_k_SEC_WEBSOCKET_VERSION, sizeof(__pyx_k_SEC_WEBSOCKET_VERSION), 0, 0, 1, 1}, - {&__pyx_n_s_SERVER, __pyx_k_SERVER, sizeof(__pyx_k_SERVER), 0, 0, 1, 1}, - {&__pyx_n_s_SET_COOKIE, __pyx_k_SET_COOKIE, sizeof(__pyx_k_SET_COOKIE), 0, 0, 1, 1}, - {&__pyx_kp_u_Status_line_is_too_long, __pyx_k_Status_line_is_too_long, sizeof(__pyx_k_Status_line_is_too_long), 0, 1, 0, 0}, - {&__pyx_n_s_StreamReader, __pyx_k_StreamReader, sizeof(__pyx_k_StreamReader), 0, 0, 1, 1}, - {&__pyx_n_s_StreamReader_2, __pyx_k_StreamReader_2, sizeof(__pyx_k_StreamReader_2), 0, 0, 1, 1}, - {&__pyx_n_s_TE, __pyx_k_TE, sizeof(__pyx_k_TE), 0, 0, 1, 1}, - {&__pyx_n_s_TRAILER, __pyx_k_TRAILER, sizeof(__pyx_k_TRAILER), 0, 0, 1, 1}, - {&__pyx_n_s_TRANSFER_ENCODING, __pyx_k_TRANSFER_ENCODING, sizeof(__pyx_k_TRANSFER_ENCODING), 0, 0, 1, 1}, - {&__pyx_n_s_TransferEncodingError, __pyx_k_TransferEncodingError, sizeof(__pyx_k_TransferEncodingError), 0, 0, 1, 1}, - {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1}, - {&__pyx_n_s_UPGRADE, __pyx_k_UPGRADE, sizeof(__pyx_k_UPGRADE), 0, 0, 1, 1}, - {&__pyx_n_s_URI, __pyx_k_URI, sizeof(__pyx_k_URI), 0, 0, 1, 1}, - {&__pyx_n_s_URL, __pyx_k_URL, sizeof(__pyx_k_URL), 0, 0, 1, 1}, - {&__pyx_n_s_URL_2, __pyx_k_URL_2, sizeof(__pyx_k_URL_2), 0, 0, 1, 1}, - {&__pyx_n_s_USER_AGENT, __pyx_k_USER_AGENT, sizeof(__pyx_k_USER_AGENT), 0, 0, 1, 1}, - {&__pyx_n_s_VARY, __pyx_k_VARY, sizeof(__pyx_k_VARY), 0, 0, 1, 1}, - {&__pyx_n_s_VIA, __pyx_k_VIA, sizeof(__pyx_k_VIA), 0, 0, 1, 1}, - {&__pyx_n_s_WANT_DIGEST, __pyx_k_WANT_DIGEST, sizeof(__pyx_k_WANT_DIGEST), 0, 0, 1, 1}, - {&__pyx_n_s_WARNING, __pyx_k_WARNING, sizeof(__pyx_k_WARNING), 0, 0, 1, 1}, - {&__pyx_n_s_WWW_AUTHENTICATE, __pyx_k_WWW_AUTHENTICATE, sizeof(__pyx_k_WWW_AUTHENTICATE), 0, 0, 1, 1}, - {&__pyx_n_s_X_FORWARDED_FOR, __pyx_k_X_FORWARDED_FOR, sizeof(__pyx_k_X_FORWARDED_FOR), 0, 0, 1, 1}, - {&__pyx_n_s_X_FORWARDED_HOST, __pyx_k_X_FORWARDED_HOST, sizeof(__pyx_k_X_FORWARDED_HOST), 0, 0, 1, 1}, - {&__pyx_n_s_X_FORWARDED_PROTO, __pyx_k_X_FORWARDED_PROTO, sizeof(__pyx_k_X_FORWARDED_PROTO), 0, 0, 1, 1}, - {&__pyx_kp_u__11, __pyx_k__11, sizeof(__pyx_k__11), 0, 1, 0, 0}, - {&__pyx_kp_u__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 1, 0, 0}, - {&__pyx_kp_u__3, __pyx_k__3, sizeof(__pyx_k__3), 0, 1, 0, 0}, - {&__pyx_n_s__4, __pyx_k__4, sizeof(__pyx_k__4), 0, 0, 1, 1}, - {&__pyx_kp_b__4, __pyx_k__4, sizeof(__pyx_k__4), 0, 0, 0, 0}, - {&__pyx_kp_u__4, __pyx_k__4, sizeof(__pyx_k__4), 0, 1, 0, 0}, - {&__pyx_n_s_add, __pyx_k_add, sizeof(__pyx_k_add), 0, 0, 1, 1}, - {&__pyx_n_s_aiohttp, __pyx_k_aiohttp, sizeof(__pyx_k_aiohttp), 0, 0, 1, 1}, - {&__pyx_n_s_aiohttp__http_parser, __pyx_k_aiohttp__http_parser, sizeof(__pyx_k_aiohttp__http_parser), 0, 0, 1, 1}, - {&__pyx_kp_s_aiohttp__http_parser_pyx, __pyx_k_aiohttp__http_parser_pyx, sizeof(__pyx_k_aiohttp__http_parser_pyx), 0, 0, 1, 0}, - {&__pyx_n_s_all, __pyx_k_all, sizeof(__pyx_k_all), 0, 0, 1, 1}, - {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1}, - {&__pyx_n_s_auto_decompress, __pyx_k_auto_decompress, sizeof(__pyx_k_auto_decompress), 0, 0, 1, 1}, - {&__pyx_n_s_begin_http_chunk_receiving, __pyx_k_begin_http_chunk_receiving, sizeof(__pyx_k_begin_http_chunk_receiving), 0, 0, 1, 1}, - {&__pyx_n_u_br, __pyx_k_br, sizeof(__pyx_k_br), 0, 1, 0, 1}, - {&__pyx_n_s_buf_data, __pyx_k_buf_data, sizeof(__pyx_k_buf_data), 0, 0, 1, 1}, - {&__pyx_n_s_build, __pyx_k_build, sizeof(__pyx_k_build), 0, 0, 1, 1}, - {&__pyx_n_s_chunked, __pyx_k_chunked, sizeof(__pyx_k_chunked), 0, 0, 1, 1}, - {&__pyx_n_u_chunked, __pyx_k_chunked, sizeof(__pyx_k_chunked), 0, 1, 0, 1}, - {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, - {&__pyx_n_s_close, __pyx_k_close, sizeof(__pyx_k_close), 0, 0, 1, 1}, - {&__pyx_n_s_code, __pyx_k_code, sizeof(__pyx_k_code), 0, 0, 1, 1}, - {&__pyx_n_u_code, __pyx_k_code, sizeof(__pyx_k_code), 0, 1, 0, 1}, - {&__pyx_n_s_compression, __pyx_k_compression, sizeof(__pyx_k_compression), 0, 0, 1, 1}, - {&__pyx_n_u_compression, __pyx_k_compression, sizeof(__pyx_k_compression), 0, 1, 0, 1}, - {&__pyx_n_u_deflate, __pyx_k_deflate, sizeof(__pyx_k_deflate), 0, 1, 0, 1}, - {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1}, - {&__pyx_n_s_encoded, __pyx_k_encoded, sizeof(__pyx_k_encoded), 0, 0, 1, 1}, - {&__pyx_n_s_end_http_chunk_receiving, __pyx_k_end_http_chunk_receiving, sizeof(__pyx_k_end_http_chunk_receiving), 0, 0, 1, 1}, - {&__pyx_n_s_feed_data, __pyx_k_feed_data, sizeof(__pyx_k_feed_data), 0, 0, 1, 1}, - {&__pyx_n_s_feed_eof, __pyx_k_feed_eof, sizeof(__pyx_k_feed_eof), 0, 0, 1, 1}, - {&__pyx_n_s_format, __pyx_k_format, sizeof(__pyx_k_format), 0, 0, 1, 1}, - {&__pyx_n_s_fragment, __pyx_k_fragment, sizeof(__pyx_k_fragment), 0, 0, 1, 1}, - {&__pyx_n_s_genexpr, __pyx_k_genexpr, sizeof(__pyx_k_genexpr), 0, 0, 1, 1}, - {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1}, - {&__pyx_n_u_gzip, __pyx_k_gzip, sizeof(__pyx_k_gzip), 0, 1, 0, 1}, - {&__pyx_n_s_hdrs, __pyx_k_hdrs, sizeof(__pyx_k_hdrs), 0, 0, 1, 1}, - {&__pyx_n_s_headers, __pyx_k_headers, sizeof(__pyx_k_headers), 0, 0, 1, 1}, - {&__pyx_n_u_headers, __pyx_k_headers, sizeof(__pyx_k_headers), 0, 1, 0, 1}, - {&__pyx_n_s_host, __pyx_k_host, sizeof(__pyx_k_host), 0, 0, 1, 1}, - {&__pyx_n_s_http_exceptions, __pyx_k_http_exceptions, sizeof(__pyx_k_http_exceptions), 0, 0, 1, 1}, - {&__pyx_n_s_http_parser, __pyx_k_http_parser, sizeof(__pyx_k_http_parser), 0, 0, 1, 1}, - {&__pyx_n_s_http_writer, __pyx_k_http_writer, sizeof(__pyx_k_http_writer), 0, 0, 1, 1}, - {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1}, - {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, - {&__pyx_kp_u_invalid_url_r, __pyx_k_invalid_url_r, sizeof(__pyx_k_invalid_url_r), 0, 1, 0, 0}, - {&__pyx_n_s_limit, __pyx_k_limit, sizeof(__pyx_k_limit), 0, 0, 1, 1}, - {&__pyx_n_s_loop, __pyx_k_loop, sizeof(__pyx_k_loop), 0, 0, 1, 1}, - {&__pyx_n_s_lower, __pyx_k_lower, sizeof(__pyx_k_lower), 0, 0, 1, 1}, - {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, - {&__pyx_n_s_max_field_size, __pyx_k_max_field_size, sizeof(__pyx_k_max_field_size), 0, 0, 1, 1}, - {&__pyx_n_s_max_headers, __pyx_k_max_headers, sizeof(__pyx_k_max_headers), 0, 0, 1, 1}, - {&__pyx_n_s_max_line_size, __pyx_k_max_line_size, sizeof(__pyx_k_max_line_size), 0, 0, 1, 1}, - {&__pyx_n_s_method, __pyx_k_method, sizeof(__pyx_k_method), 0, 0, 1, 1}, - {&__pyx_n_u_method, __pyx_k_method, sizeof(__pyx_k_method), 0, 1, 0, 1}, - {&__pyx_n_s_multidict, __pyx_k_multidict, sizeof(__pyx_k_multidict), 0, 0, 1, 1}, - {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, - {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1}, - {&__pyx_kp_s_no_default___reduce___due_to_non, __pyx_k_no_default___reduce___due_to_non, sizeof(__pyx_k_no_default___reduce___due_to_non), 0, 0, 1, 0}, - {&__pyx_n_s_parse_url, __pyx_k_parse_url, sizeof(__pyx_k_parse_url), 0, 0, 1, 1}, - {&__pyx_n_s_partition, __pyx_k_partition, sizeof(__pyx_k_partition), 0, 0, 1, 1}, - {&__pyx_n_s_password, __pyx_k_password, sizeof(__pyx_k_password), 0, 0, 1, 1}, - {&__pyx_n_s_path, __pyx_k_path, sizeof(__pyx_k_path), 0, 0, 1, 1}, - {&__pyx_n_u_path, __pyx_k_path, sizeof(__pyx_k_path), 0, 1, 0, 1}, - {&__pyx_n_s_payload_exception, __pyx_k_payload_exception, sizeof(__pyx_k_payload_exception), 0, 0, 1, 1}, - {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1}, - {&__pyx_n_s_port, __pyx_k_port, sizeof(__pyx_k_port), 0, 0, 1, 1}, - {&__pyx_n_s_protocol, __pyx_k_protocol, sizeof(__pyx_k_protocol), 0, 0, 1, 1}, - {&__pyx_n_s_py_buf, __pyx_k_py_buf, sizeof(__pyx_k_py_buf), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_state, __pyx_k_pyx_state, sizeof(__pyx_k_pyx_state), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_type, __pyx_k_pyx_type, sizeof(__pyx_k_pyx_type), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_unpickle_RawRequestMessage, __pyx_k_pyx_unpickle_RawRequestMessage, sizeof(__pyx_k_pyx_unpickle_RawRequestMessage), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_unpickle_RawResponseMessag, __pyx_k_pyx_unpickle_RawResponseMessag, sizeof(__pyx_k_pyx_unpickle_RawResponseMessag), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1}, - {&__pyx_n_s_query_string, __pyx_k_query_string, sizeof(__pyx_k_query_string), 0, 0, 1, 1}, - {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, - {&__pyx_n_s_raw_headers, __pyx_k_raw_headers, sizeof(__pyx_k_raw_headers), 0, 0, 1, 1}, - {&__pyx_n_u_raw_headers, __pyx_k_raw_headers, sizeof(__pyx_k_raw_headers), 0, 1, 0, 1}, - {&__pyx_n_s_read_until_eof, __pyx_k_read_until_eof, sizeof(__pyx_k_read_until_eof), 0, 0, 1, 1}, - {&__pyx_n_s_reason, __pyx_k_reason, sizeof(__pyx_k_reason), 0, 0, 1, 1}, - {&__pyx_n_u_reason, __pyx_k_reason, sizeof(__pyx_k_reason), 0, 1, 0, 1}, - {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1}, - {&__pyx_n_s_reduce_cython, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1}, - {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1}, - {&__pyx_n_s_repr___locals_genexpr, __pyx_k_repr___locals_genexpr, sizeof(__pyx_k_repr___locals_genexpr), 0, 0, 1, 1}, - {&__pyx_n_s_response_with_body, __pyx_k_response_with_body, sizeof(__pyx_k_response_with_body), 0, 0, 1, 1}, - {&__pyx_n_s_scheme, __pyx_k_scheme, sizeof(__pyx_k_scheme), 0, 0, 1, 1}, - {&__pyx_n_s_send, __pyx_k_send, sizeof(__pyx_k_send), 0, 0, 1, 1}, - {&__pyx_n_s_set_exception, __pyx_k_set_exception, sizeof(__pyx_k_set_exception), 0, 0, 1, 1}, - {&__pyx_n_s_setstate, __pyx_k_setstate, sizeof(__pyx_k_setstate), 0, 0, 1, 1}, - {&__pyx_n_s_setstate_cython, __pyx_k_setstate_cython, sizeof(__pyx_k_setstate_cython), 0, 0, 1, 1}, - {&__pyx_n_s_should_close, __pyx_k_should_close, sizeof(__pyx_k_should_close), 0, 0, 1, 1}, - {&__pyx_n_u_should_close, __pyx_k_should_close, sizeof(__pyx_k_should_close), 0, 1, 0, 1}, - {&__pyx_n_s_streams, __pyx_k_streams, sizeof(__pyx_k_streams), 0, 0, 1, 1}, - {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0}, - {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, - {&__pyx_n_s_throw, __pyx_k_throw, sizeof(__pyx_k_throw), 0, 0, 1, 1}, - {&__pyx_n_s_timer, __pyx_k_timer, sizeof(__pyx_k_timer), 0, 0, 1, 1}, - {&__pyx_kp_u_unknown, __pyx_k_unknown, sizeof(__pyx_k_unknown), 0, 1, 0, 0}, - {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1}, - {&__pyx_n_s_upgrade, __pyx_k_upgrade, sizeof(__pyx_k_upgrade), 0, 0, 1, 1}, - {&__pyx_n_u_upgrade, __pyx_k_upgrade, sizeof(__pyx_k_upgrade), 0, 1, 0, 1}, - {&__pyx_n_s_url, __pyx_k_url, sizeof(__pyx_k_url), 0, 0, 1, 1}, - {&__pyx_n_u_url, __pyx_k_url, sizeof(__pyx_k_url), 0, 1, 0, 1}, - {&__pyx_n_s_user, __pyx_k_user, sizeof(__pyx_k_user), 0, 0, 1, 1}, - {&__pyx_n_s_version, __pyx_k_version, sizeof(__pyx_k_version), 0, 0, 1, 1}, - {&__pyx_n_u_version, __pyx_k_version, sizeof(__pyx_k_version), 0, 1, 0, 1}, - {&__pyx_n_s_yarl, __pyx_k_yarl, sizeof(__pyx_k_yarl), 0, 0, 1, 1}, - {0, 0, 0, 0, 0, 0, 0} -}; -static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 87, __pyx_L1_error) - __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(0, 316, __pyx_L1_error) - __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(1, 2, __pyx_L1_error) - __pyx_builtin_BaseException = __Pyx_GetBuiltinName(__pyx_n_s_BaseException); if (!__pyx_builtin_BaseException) __PYX_ERR(0, 631, __pyx_L1_error) - return 0; - __pyx_L1_error:; - return -1; -} - -static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); - - /* "(tree fragment)":2 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - */ - __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(1, 2, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__5); - __Pyx_GIVEREF(__pyx_tuple__5); - - /* "(tree fragment)":4 - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< - */ - __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(1, 4, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__6); - __Pyx_GIVEREF(__pyx_tuple__6); - - /* "(tree fragment)":2 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - */ - __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(1, 2, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__7); - __Pyx_GIVEREF(__pyx_tuple__7); - - /* "(tree fragment)":4 - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< - */ - __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(1, 4, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__8); - __Pyx_GIVEREF(__pyx_tuple__8); - - /* "(tree fragment)":2 - * def __reduce_cython__(self): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - */ - __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(1, 2, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__9); - __Pyx_GIVEREF(__pyx_tuple__9); - - /* "(tree fragment)":4 - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") - * def __setstate_cython__(self, __pyx_state): - * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<< - */ - __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(1, 4, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__10); - __Pyx_GIVEREF(__pyx_tuple__10); - - /* "aiohttp/_http_parser.pyx":57 - * char* PyByteArray_AsString(object) - * - * __all__ = ('HttpRequestParser', 'HttpResponseParser', # <<<<<<<<<<<<<< - * 'RawRequestMessage', 'RawResponseMessage') - * - */ - __pyx_tuple__12 = PyTuple_Pack(4, __pyx_n_u_HttpRequestParser, __pyx_n_u_HttpResponseParser, __pyx_n_u_RawRequestMessage_2, __pyx_n_u_RawResponseMessage_2); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(0, 57, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__12); - __Pyx_GIVEREF(__pyx_tuple__12); - - /* "aiohttp/_http_parser.pyx":785 - * - * - * def parse_url(url): # <<<<<<<<<<<<<< - * cdef: - * Py_buffer py_buf - */ - __pyx_tuple__13 = PyTuple_Pack(3, __pyx_n_s_url, __pyx_n_s_py_buf, __pyx_n_s_buf_data); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(0, 785, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__13); - __Pyx_GIVEREF(__pyx_tuple__13); - __pyx_codeobj__14 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__13, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_aiohttp__http_parser_pyx, __pyx_n_s_parse_url, 785, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__14)) __PYX_ERR(0, 785, __pyx_L1_error) - - /* "(tree fragment)":1 - * def __pyx_unpickle_RawRequestMessage(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result - */ - __pyx_tuple__15 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__15); - __Pyx_GIVEREF(__pyx_tuple__15); - __pyx_codeobj__16 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__15, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_RawRequestMessage, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__16)) __PYX_ERR(1, 1, __pyx_L1_error) - __pyx_tuple__17 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__17); - __Pyx_GIVEREF(__pyx_tuple__17); - __pyx_codeobj__18 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_RawResponseMessag, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__18)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_RefNannyFinishContext(); - return -1; -} - -static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { - __pyx_umethod_PyUnicode_Type_partition.type = (PyObject*)&PyUnicode_Type; - if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error); - __pyx_int_21004882 = PyInt_FromLong(21004882L); if (unlikely(!__pyx_int_21004882)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_int_209127132 = PyInt_FromLong(209127132L); if (unlikely(!__pyx_int_209127132)) __PYX_ERR(0, 1, __pyx_L1_error) - return 0; - __pyx_L1_error:; - return -1; -} - -static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ - -static int __Pyx_modinit_global_init_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); - /*--- Global init code ---*/ - __pyx_v_7aiohttp_12_http_parser_headers = ((PyObject*)Py_None); Py_INCREF(Py_None); - __pyx_v_7aiohttp_12_http_parser_URL = Py_None; Py_INCREF(Py_None); - __pyx_v_7aiohttp_12_http_parser_URL_build = Py_None; Py_INCREF(Py_None); - __pyx_v_7aiohttp_12_http_parser_CIMultiDict = Py_None; Py_INCREF(Py_None); - __pyx_v_7aiohttp_12_http_parser_CIMultiDictProxy = Py_None; Py_INCREF(Py_None); - __pyx_v_7aiohttp_12_http_parser_HttpVersion = Py_None; Py_INCREF(Py_None); - __pyx_v_7aiohttp_12_http_parser_HttpVersion10 = Py_None; Py_INCREF(Py_None); - __pyx_v_7aiohttp_12_http_parser_HttpVersion11 = Py_None; Py_INCREF(Py_None); - __pyx_v_7aiohttp_12_http_parser_SEC_WEBSOCKET_KEY1 = Py_None; Py_INCREF(Py_None); - __pyx_v_7aiohttp_12_http_parser_CONTENT_ENCODING = Py_None; Py_INCREF(Py_None); - __pyx_v_7aiohttp_12_http_parser_EMPTY_PAYLOAD = Py_None; Py_INCREF(Py_None); - __pyx_v_7aiohttp_12_http_parser_StreamReader = Py_None; Py_INCREF(Py_None); - __pyx_v_7aiohttp_12_http_parser_DeflateBuffer = Py_None; Py_INCREF(Py_None); - __pyx_v_7aiohttp_12_http_parser__http_method = ((PyObject*)Py_None); Py_INCREF(Py_None); - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_variable_export_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); - /*--- Variable export code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_function_export_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); - /*--- Function export code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_type_init_code(void) { - __Pyx_RefNannyDeclarations - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); - /*--- Type init code ---*/ - if (PyType_Ready(&__pyx_type_7aiohttp_12_http_parser_RawRequestMessage) < 0) __PYX_ERR(0, 110, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type_7aiohttp_12_http_parser_RawRequestMessage.tp_print = 0; - #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7aiohttp_12_http_parser_RawRequestMessage.tp_dictoffset && __pyx_type_7aiohttp_12_http_parser_RawRequestMessage.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type_7aiohttp_12_http_parser_RawRequestMessage.tp_getattro = __Pyx_PyObject_GenericGetAttr; - } - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_RawRequestMessage_2, (PyObject *)&__pyx_type_7aiohttp_12_http_parser_RawRequestMessage) < 0) __PYX_ERR(0, 110, __pyx_L1_error) - if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7aiohttp_12_http_parser_RawRequestMessage) < 0) __PYX_ERR(0, 110, __pyx_L1_error) - __pyx_ptype_7aiohttp_12_http_parser_RawRequestMessage = &__pyx_type_7aiohttp_12_http_parser_RawRequestMessage; - if (PyType_Ready(&__pyx_type_7aiohttp_12_http_parser_RawResponseMessage) < 0) __PYX_ERR(0, 210, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type_7aiohttp_12_http_parser_RawResponseMessage.tp_print = 0; - #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7aiohttp_12_http_parser_RawResponseMessage.tp_dictoffset && __pyx_type_7aiohttp_12_http_parser_RawResponseMessage.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type_7aiohttp_12_http_parser_RawResponseMessage.tp_getattro = __Pyx_PyObject_GenericGetAttr; - } - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_RawResponseMessage_2, (PyObject *)&__pyx_type_7aiohttp_12_http_parser_RawResponseMessage) < 0) __PYX_ERR(0, 210, __pyx_L1_error) - if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7aiohttp_12_http_parser_RawResponseMessage) < 0) __PYX_ERR(0, 210, __pyx_L1_error) - __pyx_ptype_7aiohttp_12_http_parser_RawResponseMessage = &__pyx_type_7aiohttp_12_http_parser_RawResponseMessage; - __pyx_vtabptr_7aiohttp_12_http_parser_HttpParser = &__pyx_vtable_7aiohttp_12_http_parser_HttpParser; - __pyx_vtable_7aiohttp_12_http_parser_HttpParser._init = (PyObject *(*)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *, enum http_parser_type, PyObject *, PyObject *, int, struct __pyx_opt_args_7aiohttp_12_http_parser_10HttpParser__init *__pyx_optional_args))__pyx_f_7aiohttp_12_http_parser_10HttpParser__init; - __pyx_vtable_7aiohttp_12_http_parser_HttpParser._process_header = (PyObject *(*)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *))__pyx_f_7aiohttp_12_http_parser_10HttpParser__process_header; - __pyx_vtable_7aiohttp_12_http_parser_HttpParser._on_header_field = (PyObject *(*)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *, char *, size_t))__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_header_field; - __pyx_vtable_7aiohttp_12_http_parser_HttpParser._on_header_value = (PyObject *(*)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *, char *, size_t))__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_header_value; - __pyx_vtable_7aiohttp_12_http_parser_HttpParser._on_headers_complete = (PyObject *(*)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *))__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_headers_complete; - __pyx_vtable_7aiohttp_12_http_parser_HttpParser._on_message_complete = (PyObject *(*)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *))__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_message_complete; - __pyx_vtable_7aiohttp_12_http_parser_HttpParser._on_chunk_header = (PyObject *(*)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *))__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_chunk_header; - __pyx_vtable_7aiohttp_12_http_parser_HttpParser._on_chunk_complete = (PyObject *(*)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *))__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_chunk_complete; - __pyx_vtable_7aiohttp_12_http_parser_HttpParser._on_status_complete = (PyObject *(*)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *))__pyx_f_7aiohttp_12_http_parser_10HttpParser__on_status_complete; - __pyx_vtable_7aiohttp_12_http_parser_HttpParser.http_version = (PyObject *(*)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *))__pyx_f_7aiohttp_12_http_parser_10HttpParser_http_version; - if (PyType_Ready(&__pyx_type_7aiohttp_12_http_parser_HttpParser) < 0) __PYX_ERR(0, 272, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type_7aiohttp_12_http_parser_HttpParser.tp_print = 0; - #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7aiohttp_12_http_parser_HttpParser.tp_dictoffset && __pyx_type_7aiohttp_12_http_parser_HttpParser.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type_7aiohttp_12_http_parser_HttpParser.tp_getattro = __Pyx_PyObject_GenericGetAttr; - } - if (__Pyx_SetVtable(__pyx_type_7aiohttp_12_http_parser_HttpParser.tp_dict, __pyx_vtabptr_7aiohttp_12_http_parser_HttpParser) < 0) __PYX_ERR(0, 272, __pyx_L1_error) - if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7aiohttp_12_http_parser_HttpParser) < 0) __PYX_ERR(0, 272, __pyx_L1_error) - __pyx_ptype_7aiohttp_12_http_parser_HttpParser = &__pyx_type_7aiohttp_12_http_parser_HttpParser; - __pyx_vtabptr_7aiohttp_12_http_parser_HttpRequestParser = &__pyx_vtable_7aiohttp_12_http_parser_HttpRequestParser; - __pyx_vtable_7aiohttp_12_http_parser_HttpRequestParser.__pyx_base = *__pyx_vtabptr_7aiohttp_12_http_parser_HttpParser; - __pyx_vtable_7aiohttp_12_http_parser_HttpRequestParser.__pyx_base._on_status_complete = (PyObject *(*)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *))__pyx_f_7aiohttp_12_http_parser_17HttpRequestParser__on_status_complete; - __pyx_type_7aiohttp_12_http_parser_HttpRequestParser.tp_base = __pyx_ptype_7aiohttp_12_http_parser_HttpParser; - if (PyType_Ready(&__pyx_type_7aiohttp_12_http_parser_HttpRequestParser) < 0) __PYX_ERR(0, 563, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type_7aiohttp_12_http_parser_HttpRequestParser.tp_print = 0; - #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7aiohttp_12_http_parser_HttpRequestParser.tp_dictoffset && __pyx_type_7aiohttp_12_http_parser_HttpRequestParser.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type_7aiohttp_12_http_parser_HttpRequestParser.tp_getattro = __Pyx_PyObject_GenericGetAttr; - } - if (__Pyx_SetVtable(__pyx_type_7aiohttp_12_http_parser_HttpRequestParser.tp_dict, __pyx_vtabptr_7aiohttp_12_http_parser_HttpRequestParser) < 0) __PYX_ERR(0, 563, __pyx_L1_error) - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_HttpRequestParser, (PyObject *)&__pyx_type_7aiohttp_12_http_parser_HttpRequestParser) < 0) __PYX_ERR(0, 563, __pyx_L1_error) - if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7aiohttp_12_http_parser_HttpRequestParser) < 0) __PYX_ERR(0, 563, __pyx_L1_error) - __pyx_ptype_7aiohttp_12_http_parser_HttpRequestParser = &__pyx_type_7aiohttp_12_http_parser_HttpRequestParser; - __pyx_vtabptr_7aiohttp_12_http_parser_HttpResponseParser = &__pyx_vtable_7aiohttp_12_http_parser_HttpResponseParser; - __pyx_vtable_7aiohttp_12_http_parser_HttpResponseParser.__pyx_base = *__pyx_vtabptr_7aiohttp_12_http_parser_HttpParser; - __pyx_vtable_7aiohttp_12_http_parser_HttpResponseParser.__pyx_base._on_status_complete = (PyObject *(*)(struct __pyx_obj_7aiohttp_12_http_parser_HttpParser *))__pyx_f_7aiohttp_12_http_parser_18HttpResponseParser__on_status_complete; - __pyx_type_7aiohttp_12_http_parser_HttpResponseParser.tp_base = __pyx_ptype_7aiohttp_12_http_parser_HttpParser; - if (PyType_Ready(&__pyx_type_7aiohttp_12_http_parser_HttpResponseParser) < 0) __PYX_ERR(0, 591, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type_7aiohttp_12_http_parser_HttpResponseParser.tp_print = 0; - #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7aiohttp_12_http_parser_HttpResponseParser.tp_dictoffset && __pyx_type_7aiohttp_12_http_parser_HttpResponseParser.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type_7aiohttp_12_http_parser_HttpResponseParser.tp_getattro = __Pyx_PyObject_GenericGetAttr; - } - if (__Pyx_SetVtable(__pyx_type_7aiohttp_12_http_parser_HttpResponseParser.tp_dict, __pyx_vtabptr_7aiohttp_12_http_parser_HttpResponseParser) < 0) __PYX_ERR(0, 591, __pyx_L1_error) - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_HttpResponseParser, (PyObject *)&__pyx_type_7aiohttp_12_http_parser_HttpResponseParser) < 0) __PYX_ERR(0, 591, __pyx_L1_error) - if (__Pyx_setup_reduce((PyObject*)&__pyx_type_7aiohttp_12_http_parser_HttpResponseParser) < 0) __PYX_ERR(0, 591, __pyx_L1_error) - __pyx_ptype_7aiohttp_12_http_parser_HttpResponseParser = &__pyx_type_7aiohttp_12_http_parser_HttpResponseParser; - if (PyType_Ready(&__pyx_type_7aiohttp_12_http_parser___pyx_scope_struct____repr__) < 0) __PYX_ERR(0, 135, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct____repr__.tp_print = 0; - #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7aiohttp_12_http_parser___pyx_scope_struct____repr__.tp_dictoffset && __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct____repr__.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct____repr__.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; - } - __pyx_ptype_7aiohttp_12_http_parser___pyx_scope_struct____repr__ = &__pyx_type_7aiohttp_12_http_parser___pyx_scope_struct____repr__; - if (PyType_Ready(&__pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr) < 0) __PYX_ERR(0, 147, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr.tp_print = 0; - #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr.tp_dictoffset && __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; - } - __pyx_ptype_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr = &__pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_1_genexpr; - if (PyType_Ready(&__pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__) < 0) __PYX_ERR(0, 233, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__.tp_print = 0; - #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__.tp_dictoffset && __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; - } - __pyx_ptype_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__ = &__pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_2___repr__; - if (PyType_Ready(&__pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr) < 0) __PYX_ERR(0, 244, __pyx_L1_error) - #if PY_VERSION_HEX < 0x030800B1 - __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr.tp_print = 0; - #endif - if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr.tp_dictoffset && __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr.tp_getattro == PyObject_GenericGetAttr)) { - __pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; - } - __pyx_ptype_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr = &__pyx_type_7aiohttp_12_http_parser___pyx_scope_struct_3_genexpr; - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_RefNannyFinishContext(); - return -1; -} - -static int __Pyx_modinit_type_import_code(void) { - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); - /*--- Type import code ---*/ - __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 9, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type", - #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000 - sizeof(PyTypeObject), - #else - sizeof(PyHeapTypeObject), - #endif - __Pyx_ImportType_CheckSize_Warn); - if (!__pyx_ptype_7cpython_4type_type) __PYX_ERR(2, 9, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_ptype_7cpython_4bool_bool = __Pyx_ImportType(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "bool", sizeof(PyBoolObject), __Pyx_ImportType_CheckSize_Warn); - if (!__pyx_ptype_7cpython_4bool_bool) __PYX_ERR(3, 8, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_ptype_7cpython_7complex_complex = __Pyx_ImportType(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "complex", sizeof(PyComplexObject), __Pyx_ImportType_CheckSize_Warn); - if (!__pyx_ptype_7cpython_7complex_complex) __PYX_ERR(4, 15, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_RefNannyFinishContext(); - return -1; -} - -static int __Pyx_modinit_variable_import_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); - /*--- Variable import code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_function_import_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); - /*--- Function import code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - - -#ifndef CYTHON_NO_PYINIT_EXPORT -#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC -#elif PY_MAJOR_VERSION < 3 -#ifdef __cplusplus -#define __Pyx_PyMODINIT_FUNC extern "C" void -#else -#define __Pyx_PyMODINIT_FUNC void -#endif -#else -#ifdef __cplusplus -#define __Pyx_PyMODINIT_FUNC extern "C" PyObject * -#else -#define __Pyx_PyMODINIT_FUNC PyObject * -#endif -#endif - - -#if PY_MAJOR_VERSION < 3 -__Pyx_PyMODINIT_FUNC init_http_parser(void) CYTHON_SMALL_CODE; /*proto*/ -__Pyx_PyMODINIT_FUNC init_http_parser(void) -#else -__Pyx_PyMODINIT_FUNC PyInit__http_parser(void) CYTHON_SMALL_CODE; /*proto*/ -__Pyx_PyMODINIT_FUNC PyInit__http_parser(void) -#if CYTHON_PEP489_MULTI_PHASE_INIT -{ - return PyModuleDef_Init(&__pyx_moduledef); -} -static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { - #if PY_VERSION_HEX >= 0x030700A1 - static PY_INT64_T main_interpreter_id = -1; - PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); - if (main_interpreter_id == -1) { - main_interpreter_id = current_id; - return (unlikely(current_id == -1)) ? -1 : 0; - } else if (unlikely(main_interpreter_id != current_id)) - #else - static PyInterpreterState *main_interpreter = NULL; - PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; - if (!main_interpreter) { - main_interpreter = current_interpreter; - } else if (unlikely(main_interpreter != current_interpreter)) - #endif - { - PyErr_SetString( - PyExc_ImportError, - "Interpreter change detected - this module can only be loaded into one interpreter per process."); - return -1; - } - return 0; -} -static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) { - PyObject *value = PyObject_GetAttrString(spec, from_name); - int result = 0; - if (likely(value)) { - if (allow_none || value != Py_None) { - result = PyDict_SetItemString(moddict, to_name, value); - } - Py_DECREF(value); - } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Clear(); - } else { - result = -1; - } - return result; -} -static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) { - PyObject *module = NULL, *moddict, *modname; - if (__Pyx_check_single_interpreter()) - return NULL; - if (__pyx_m) - return __Pyx_NewRef(__pyx_m); - modname = PyObject_GetAttrString(spec, "name"); - if (unlikely(!modname)) goto bad; - module = PyModule_NewObject(modname); - Py_DECREF(modname); - if (unlikely(!module)) goto bad; - moddict = PyModule_GetDict(module); - if (unlikely(!moddict)) goto bad; - if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; - if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; - if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; - if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; - return module; -bad: - Py_XDECREF(module); - return NULL; -} - - -static CYTHON_SMALL_CODE int __pyx_pymod_exec__http_parser(PyObject *__pyx_pyinit_module) -#endif -#endif -{ - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - PyObject *__pyx_t_9 = NULL; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - PyObject *__pyx_t_15 = NULL; - PyObject *__pyx_t_16 = NULL; - PyObject *__pyx_t_17 = NULL; - PyObject *__pyx_t_18 = NULL; - PyObject *__pyx_t_19 = NULL; - PyObject *__pyx_t_20 = NULL; - PyObject *__pyx_t_21 = NULL; - PyObject *__pyx_t_22 = NULL; - PyObject *__pyx_t_23 = NULL; - PyObject *__pyx_t_24 = NULL; - PyObject *__pyx_t_25 = NULL; - PyObject *__pyx_t_26 = NULL; - PyObject *__pyx_t_27 = NULL; - PyObject *__pyx_t_28 = NULL; - PyObject *__pyx_t_29 = NULL; - PyObject *__pyx_t_30 = NULL; - PyObject *__pyx_t_31 = NULL; - PyObject *__pyx_t_32 = NULL; - PyObject *__pyx_t_33 = NULL; - PyObject *__pyx_t_34 = NULL; - PyObject *__pyx_t_35 = NULL; - PyObject *__pyx_t_36 = NULL; - PyObject *__pyx_t_37 = NULL; - PyObject *__pyx_t_38 = NULL; - PyObject *__pyx_t_39 = NULL; - PyObject *__pyx_t_40 = NULL; - PyObject *__pyx_t_41 = NULL; - PyObject *__pyx_t_42 = NULL; - PyObject *__pyx_t_43 = NULL; - PyObject *__pyx_t_44 = NULL; - PyObject *__pyx_t_45 = NULL; - PyObject *__pyx_t_46 = NULL; - PyObject *__pyx_t_47 = NULL; - PyObject *__pyx_t_48 = NULL; - PyObject *__pyx_t_49 = NULL; - PyObject *__pyx_t_50 = NULL; - PyObject *__pyx_t_51 = NULL; - PyObject *__pyx_t_52 = NULL; - PyObject *__pyx_t_53 = NULL; - PyObject *__pyx_t_54 = NULL; - PyObject *__pyx_t_55 = NULL; - PyObject *__pyx_t_56 = NULL; - PyObject *__pyx_t_57 = NULL; - PyObject *__pyx_t_58 = NULL; - PyObject *__pyx_t_59 = NULL; - PyObject *__pyx_t_60 = NULL; - PyObject *__pyx_t_61 = NULL; - PyObject *__pyx_t_62 = NULL; - PyObject *__pyx_t_63 = NULL; - PyObject *__pyx_t_64 = NULL; - PyObject *__pyx_t_65 = NULL; - PyObject *__pyx_t_66 = NULL; - PyObject *__pyx_t_67 = NULL; - PyObject *__pyx_t_68 = NULL; - PyObject *__pyx_t_69 = NULL; - PyObject *__pyx_t_70 = NULL; - PyObject *__pyx_t_71 = NULL; - PyObject *__pyx_t_72 = NULL; - PyObject *__pyx_t_73 = NULL; - PyObject *__pyx_t_74 = NULL; - PyObject *__pyx_t_75 = NULL; - PyObject *__pyx_t_76 = NULL; - PyObject *__pyx_t_77 = NULL; - PyObject *__pyx_t_78 = NULL; - long __pyx_t_79; - enum http_method __pyx_t_80; - char const *__pyx_t_81; - int __pyx_t_82; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannyDeclarations - #if CYTHON_PEP489_MULTI_PHASE_INIT - if (__pyx_m) { - if (__pyx_m == __pyx_pyinit_module) return 0; - PyErr_SetString(PyExc_RuntimeError, "Module '_http_parser' has already been imported. Re-initialisation is not supported."); - return -1; - } - #elif PY_MAJOR_VERSION >= 3 - if (__pyx_m) return __Pyx_NewRef(__pyx_m); - #endif - #if CYTHON_REFNANNY -__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); -if (!__Pyx_RefNanny) { - PyErr_Clear(); - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); - if (!__Pyx_RefNanny) - Py_FatalError("failed to import 'refnanny' module"); -} -#endif - __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit__http_parser(void)", 0); - if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #ifdef __Pxy_PyFrame_Initialize_Offsets - __Pxy_PyFrame_Initialize_Offsets(); - #endif - __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) - #ifdef __Pyx_CyFunction_USED - if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_FusedFunction_USED - if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_Coroutine_USED - if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_Generator_USED - if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_AsyncGen_USED - if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_StopAsyncIteration_USED - if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - /*--- Library function declarations ---*/ - /*--- Threads initialization code ---*/ - #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS - #ifdef WITH_THREAD /* Python build with threading support? */ - PyEval_InitThreads(); - #endif - #endif - /*--- Module creation code ---*/ - #if CYTHON_PEP489_MULTI_PHASE_INIT - __pyx_m = __pyx_pyinit_module; - Py_INCREF(__pyx_m); - #else - #if PY_MAJOR_VERSION < 3 - __pyx_m = Py_InitModule4("_http_parser", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); - #else - __pyx_m = PyModule_Create(&__pyx_moduledef); - #endif - if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_d); - __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_b); - __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_cython_runtime); - if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error); - /*--- Initialize various global constants etc. ---*/ - if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) - if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - if (__pyx_module_is_main_aiohttp___http_parser) { - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - } - #if PY_MAJOR_VERSION >= 3 - { - PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) - if (!PyDict_GetItemString(modules, "aiohttp._http_parser")) { - if (unlikely(PyDict_SetItemString(modules, "aiohttp._http_parser", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error) - } - } - #endif - /*--- Builtin init code ---*/ - if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - /*--- Constants init code ---*/ - if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - /*--- Global type/function init code ---*/ - (void)__Pyx_modinit_global_init_code(); - (void)__Pyx_modinit_variable_export_code(); - (void)__Pyx_modinit_function_export_code(); - if (unlikely(__Pyx_modinit_type_init_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error) - if (unlikely(__Pyx_modinit_type_import_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error) - (void)__Pyx_modinit_variable_import_code(); - (void)__Pyx_modinit_function_import_code(); - /*--- Execution code ---*/ - #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) - if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - - /* "aiohttp/_http_parser.pyx":19 - * from libc.string cimport memcpy - * - * from multidict import CIMultiDict as _CIMultiDict, CIMultiDictProxy as _CIMultiDictProxy # <<<<<<<<<<<<<< - * from yarl import URL as _URL - * - */ - __pyx_t_1 = PyList_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s_CIMultiDict); - __Pyx_GIVEREF(__pyx_n_s_CIMultiDict); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_CIMultiDict); - __Pyx_INCREF(__pyx_n_s_CIMultiDictProxy); - __Pyx_GIVEREF(__pyx_n_s_CIMultiDictProxy); - PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_CIMultiDictProxy); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_multidict, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_CIMultiDict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_CIMultiDict_2, __pyx_t_1) < 0) __PYX_ERR(0, 19, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_CIMultiDictProxy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_CIMultiDictProxy_2, __pyx_t_1) < 0) __PYX_ERR(0, 19, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "aiohttp/_http_parser.pyx":20 - * - * from multidict import CIMultiDict as _CIMultiDict, CIMultiDictProxy as _CIMultiDictProxy - * from yarl import URL as _URL # <<<<<<<<<<<<<< - * - * from aiohttp import hdrs - */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_n_s_URL); - __Pyx_GIVEREF(__pyx_n_s_URL); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_URL); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_yarl, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 20, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_URL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_URL_2, __pyx_t_2) < 0) __PYX_ERR(0, 20, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":22 - * from yarl import URL as _URL - * - * from aiohttp import hdrs # <<<<<<<<<<<<<< - * - * from .http_exceptions import ( - */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 22, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s_hdrs); - __Pyx_GIVEREF(__pyx_n_s_hdrs); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_hdrs); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_aiohttp, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 22, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 22, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_hdrs, __pyx_t_1) < 0) __PYX_ERR(0, 22, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "aiohttp/_http_parser.pyx":25 - * - * from .http_exceptions import ( - * BadHttpMessage, # <<<<<<<<<<<<<< - * BadStatusLine, - * ContentLengthError, - */ - __pyx_t_2 = PyList_New(8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 25, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_n_s_BadHttpMessage); - __Pyx_GIVEREF(__pyx_n_s_BadHttpMessage); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_BadHttpMessage); - __Pyx_INCREF(__pyx_n_s_BadStatusLine); - __Pyx_GIVEREF(__pyx_n_s_BadStatusLine); - PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_BadStatusLine); - __Pyx_INCREF(__pyx_n_s_ContentLengthError); - __Pyx_GIVEREF(__pyx_n_s_ContentLengthError); - PyList_SET_ITEM(__pyx_t_2, 2, __pyx_n_s_ContentLengthError); - __Pyx_INCREF(__pyx_n_s_InvalidHeader); - __Pyx_GIVEREF(__pyx_n_s_InvalidHeader); - PyList_SET_ITEM(__pyx_t_2, 3, __pyx_n_s_InvalidHeader); - __Pyx_INCREF(__pyx_n_s_InvalidURLError); - __Pyx_GIVEREF(__pyx_n_s_InvalidURLError); - PyList_SET_ITEM(__pyx_t_2, 4, __pyx_n_s_InvalidURLError); - __Pyx_INCREF(__pyx_n_s_LineTooLong); - __Pyx_GIVEREF(__pyx_n_s_LineTooLong); - PyList_SET_ITEM(__pyx_t_2, 5, __pyx_n_s_LineTooLong); - __Pyx_INCREF(__pyx_n_s_PayloadEncodingError); - __Pyx_GIVEREF(__pyx_n_s_PayloadEncodingError); - PyList_SET_ITEM(__pyx_t_2, 6, __pyx_n_s_PayloadEncodingError); - __Pyx_INCREF(__pyx_n_s_TransferEncodingError); - __Pyx_GIVEREF(__pyx_n_s_TransferEncodingError); - PyList_SET_ITEM(__pyx_t_2, 7, __pyx_n_s_TransferEncodingError); - - /* "aiohttp/_http_parser.pyx":24 - * from aiohttp import hdrs - * - * from .http_exceptions import ( # <<<<<<<<<<<<<< - * BadHttpMessage, - * BadStatusLine, - */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_http_exceptions, __pyx_t_2, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 24, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_BadHttpMessage); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 24, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_BadHttpMessage, __pyx_t_2) < 0) __PYX_ERR(0, 25, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_BadStatusLine); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 24, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_BadStatusLine, __pyx_t_2) < 0) __PYX_ERR(0, 26, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_ContentLengthError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 24, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_ContentLengthError, __pyx_t_2) < 0) __PYX_ERR(0, 27, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_InvalidHeader); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 24, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_InvalidHeader, __pyx_t_2) < 0) __PYX_ERR(0, 28, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_InvalidURLError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 24, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_InvalidURLError, __pyx_t_2) < 0) __PYX_ERR(0, 29, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_LineTooLong); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 24, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_LineTooLong, __pyx_t_2) < 0) __PYX_ERR(0, 30, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_PayloadEncodingError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 24, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_PayloadEncodingError, __pyx_t_2) < 0) __PYX_ERR(0, 31, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_TransferEncodingError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 24, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_TransferEncodingError, __pyx_t_2) < 0) __PYX_ERR(0, 32, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":34 - * TransferEncodingError, - * ) - * from .http_parser import DeflateBuffer as _DeflateBuffer # <<<<<<<<<<<<<< - * from .http_writer import ( - * HttpVersion as _HttpVersion, - */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 34, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s_DeflateBuffer); - __Pyx_GIVEREF(__pyx_n_s_DeflateBuffer); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_DeflateBuffer); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_http_parser, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 34, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_DeflateBuffer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 34, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_DeflateBuffer_2, __pyx_t_1) < 0) __PYX_ERR(0, 34, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "aiohttp/_http_parser.pyx":36 - * from .http_parser import DeflateBuffer as _DeflateBuffer - * from .http_writer import ( - * HttpVersion as _HttpVersion, # <<<<<<<<<<<<<< - * HttpVersion10 as _HttpVersion10, - * HttpVersion11 as _HttpVersion11, - */ - __pyx_t_2 = PyList_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 36, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_n_s_HttpVersion); - __Pyx_GIVEREF(__pyx_n_s_HttpVersion); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_HttpVersion); - __Pyx_INCREF(__pyx_n_s_HttpVersion10); - __Pyx_GIVEREF(__pyx_n_s_HttpVersion10); - PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_HttpVersion10); - __Pyx_INCREF(__pyx_n_s_HttpVersion11); - __Pyx_GIVEREF(__pyx_n_s_HttpVersion11); - PyList_SET_ITEM(__pyx_t_2, 2, __pyx_n_s_HttpVersion11); - - /* "aiohttp/_http_parser.pyx":35 - * ) - * from .http_parser import DeflateBuffer as _DeflateBuffer - * from .http_writer import ( # <<<<<<<<<<<<<< - * HttpVersion as _HttpVersion, - * HttpVersion10 as _HttpVersion10, - */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_http_writer, __pyx_t_2, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 35, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_HttpVersion); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 35, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_HttpVersion_2, __pyx_t_2) < 0) __PYX_ERR(0, 36, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_HttpVersion10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 35, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_HttpVersion10_2, __pyx_t_2) < 0) __PYX_ERR(0, 37, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_HttpVersion11); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 35, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_HttpVersion11_2, __pyx_t_2) < 0) __PYX_ERR(0, 38, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":40 - * HttpVersion11 as _HttpVersion11, - * ) - * from .streams import EMPTY_PAYLOAD as _EMPTY_PAYLOAD, StreamReader as _StreamReader # <<<<<<<<<<<<<< - * - * cimport cython - */ - __pyx_t_1 = PyList_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 40, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s_EMPTY_PAYLOAD); - __Pyx_GIVEREF(__pyx_n_s_EMPTY_PAYLOAD); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_EMPTY_PAYLOAD); - __Pyx_INCREF(__pyx_n_s_StreamReader); - __Pyx_GIVEREF(__pyx_n_s_StreamReader); - PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_StreamReader); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_streams, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 40, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_EMPTY_PAYLOAD); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 40, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_EMPTY_PAYLOAD_2, __pyx_t_1) < 0) __PYX_ERR(0, 40, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_StreamReader); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 40, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_StreamReader_2, __pyx_t_1) < 0) __PYX_ERR(0, 40, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "aiohttp/_headers.pxi":4 - * # Run ./tools/gen.py to update it after the origin changing. - * - * from . import hdrs # <<<<<<<<<<<<<< - * cdef tuple headers = ( - * hdrs.ACCEPT, - */ - __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 4, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_n_s_hdrs); - __Pyx_GIVEREF(__pyx_n_s_hdrs); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_hdrs); - __pyx_t_1 = __Pyx_Import(__pyx_n_s__4, __pyx_t_2, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 4, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_hdrs, __pyx_t_2) < 0) __PYX_ERR(5, 4, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":6 - * from . import hdrs - * cdef tuple headers = ( - * hdrs.ACCEPT, # <<<<<<<<<<<<<< - * hdrs.ACCEPT_CHARSET, - * hdrs.ACCEPT_ENCODING, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ACCEPT); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":7 - * cdef tuple headers = ( - * hdrs.ACCEPT, - * hdrs.ACCEPT_CHARSET, # <<<<<<<<<<<<<< - * hdrs.ACCEPT_ENCODING, - * hdrs.ACCEPT_LANGUAGE, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ACCEPT_CHARSET); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 7, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":8 - * hdrs.ACCEPT, - * hdrs.ACCEPT_CHARSET, - * hdrs.ACCEPT_ENCODING, # <<<<<<<<<<<<<< - * hdrs.ACCEPT_LANGUAGE, - * hdrs.ACCEPT_RANGES, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ACCEPT_ENCODING); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":9 - * hdrs.ACCEPT_CHARSET, - * hdrs.ACCEPT_ENCODING, - * hdrs.ACCEPT_LANGUAGE, # <<<<<<<<<<<<<< - * hdrs.ACCEPT_RANGES, - * hdrs.ACCESS_CONTROL_ALLOW_CREDENTIALS, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 9, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ACCEPT_LANGUAGE); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":10 - * hdrs.ACCEPT_ENCODING, - * hdrs.ACCEPT_LANGUAGE, - * hdrs.ACCEPT_RANGES, # <<<<<<<<<<<<<< - * hdrs.ACCESS_CONTROL_ALLOW_CREDENTIALS, - * hdrs.ACCESS_CONTROL_ALLOW_HEADERS, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 10, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ACCEPT_RANGES); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 10, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":11 - * hdrs.ACCEPT_LANGUAGE, - * hdrs.ACCEPT_RANGES, - * hdrs.ACCESS_CONTROL_ALLOW_CREDENTIALS, # <<<<<<<<<<<<<< - * hdrs.ACCESS_CONTROL_ALLOW_HEADERS, - * hdrs.ACCESS_CONTROL_ALLOW_METHODS, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 11, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ACCESS_CONTROL_ALLOW_CREDENTIALS); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 11, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":12 - * hdrs.ACCEPT_RANGES, - * hdrs.ACCESS_CONTROL_ALLOW_CREDENTIALS, - * hdrs.ACCESS_CONTROL_ALLOW_HEADERS, # <<<<<<<<<<<<<< - * hdrs.ACCESS_CONTROL_ALLOW_METHODS, - * hdrs.ACCESS_CONTROL_ALLOW_ORIGIN, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ACCESS_CONTROL_ALLOW_HEADERS); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 12, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":13 - * hdrs.ACCESS_CONTROL_ALLOW_CREDENTIALS, - * hdrs.ACCESS_CONTROL_ALLOW_HEADERS, - * hdrs.ACCESS_CONTROL_ALLOW_METHODS, # <<<<<<<<<<<<<< - * hdrs.ACCESS_CONTROL_ALLOW_ORIGIN, - * hdrs.ACCESS_CONTROL_EXPOSE_HEADERS, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ACCESS_CONTROL_ALLOW_METHODS); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_9); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":14 - * hdrs.ACCESS_CONTROL_ALLOW_HEADERS, - * hdrs.ACCESS_CONTROL_ALLOW_METHODS, - * hdrs.ACCESS_CONTROL_ALLOW_ORIGIN, # <<<<<<<<<<<<<< - * hdrs.ACCESS_CONTROL_EXPOSE_HEADERS, - * hdrs.ACCESS_CONTROL_MAX_AGE, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ACCESS_CONTROL_ALLOW_ORIGIN); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_10); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":15 - * hdrs.ACCESS_CONTROL_ALLOW_METHODS, - * hdrs.ACCESS_CONTROL_ALLOW_ORIGIN, - * hdrs.ACCESS_CONTROL_EXPOSE_HEADERS, # <<<<<<<<<<<<<< - * hdrs.ACCESS_CONTROL_MAX_AGE, - * hdrs.ACCESS_CONTROL_REQUEST_HEADERS, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ACCESS_CONTROL_EXPOSE_HEADERS); if (unlikely(!__pyx_t_11)) __PYX_ERR(5, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_11); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":16 - * hdrs.ACCESS_CONTROL_ALLOW_ORIGIN, - * hdrs.ACCESS_CONTROL_EXPOSE_HEADERS, - * hdrs.ACCESS_CONTROL_MAX_AGE, # <<<<<<<<<<<<<< - * hdrs.ACCESS_CONTROL_REQUEST_HEADERS, - * hdrs.ACCESS_CONTROL_REQUEST_METHOD, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 16, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ACCESS_CONTROL_MAX_AGE); if (unlikely(!__pyx_t_12)) __PYX_ERR(5, 16, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_12); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":17 - * hdrs.ACCESS_CONTROL_EXPOSE_HEADERS, - * hdrs.ACCESS_CONTROL_MAX_AGE, - * hdrs.ACCESS_CONTROL_REQUEST_HEADERS, # <<<<<<<<<<<<<< - * hdrs.ACCESS_CONTROL_REQUEST_METHOD, - * hdrs.AGE, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 17, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ACCESS_CONTROL_REQUEST_HEADERS); if (unlikely(!__pyx_t_13)) __PYX_ERR(5, 17, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_13); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":18 - * hdrs.ACCESS_CONTROL_MAX_AGE, - * hdrs.ACCESS_CONTROL_REQUEST_HEADERS, - * hdrs.ACCESS_CONTROL_REQUEST_METHOD, # <<<<<<<<<<<<<< - * hdrs.AGE, - * hdrs.ALLOW, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 18, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ACCESS_CONTROL_REQUEST_METHOD); if (unlikely(!__pyx_t_14)) __PYX_ERR(5, 18, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_14); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":19 - * hdrs.ACCESS_CONTROL_REQUEST_HEADERS, - * hdrs.ACCESS_CONTROL_REQUEST_METHOD, - * hdrs.AGE, # <<<<<<<<<<<<<< - * hdrs.ALLOW, - * hdrs.AUTHORIZATION, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 19, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_AGE); if (unlikely(!__pyx_t_15)) __PYX_ERR(5, 19, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_15); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":20 - * hdrs.ACCESS_CONTROL_REQUEST_METHOD, - * hdrs.AGE, - * hdrs.ALLOW, # <<<<<<<<<<<<<< - * hdrs.AUTHORIZATION, - * hdrs.CACHE_CONTROL, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 20, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ALLOW); if (unlikely(!__pyx_t_16)) __PYX_ERR(5, 20, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_16); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":21 - * hdrs.AGE, - * hdrs.ALLOW, - * hdrs.AUTHORIZATION, # <<<<<<<<<<<<<< - * hdrs.CACHE_CONTROL, - * hdrs.CONNECTION, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 21, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_17 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_AUTHORIZATION); if (unlikely(!__pyx_t_17)) __PYX_ERR(5, 21, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":22 - * hdrs.ALLOW, - * hdrs.AUTHORIZATION, - * hdrs.CACHE_CONTROL, # <<<<<<<<<<<<<< - * hdrs.CONNECTION, - * hdrs.CONTENT_DISPOSITION, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 22, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_18 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_CACHE_CONTROL); if (unlikely(!__pyx_t_18)) __PYX_ERR(5, 22, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_18); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":23 - * hdrs.AUTHORIZATION, - * hdrs.CACHE_CONTROL, - * hdrs.CONNECTION, # <<<<<<<<<<<<<< - * hdrs.CONTENT_DISPOSITION, - * hdrs.CONTENT_ENCODING, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 23, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_19 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_CONNECTION); if (unlikely(!__pyx_t_19)) __PYX_ERR(5, 23, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_19); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":24 - * hdrs.CACHE_CONTROL, - * hdrs.CONNECTION, - * hdrs.CONTENT_DISPOSITION, # <<<<<<<<<<<<<< - * hdrs.CONTENT_ENCODING, - * hdrs.CONTENT_LANGUAGE, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 24, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_20 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_CONTENT_DISPOSITION); if (unlikely(!__pyx_t_20)) __PYX_ERR(5, 24, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_20); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":25 - * hdrs.CONNECTION, - * hdrs.CONTENT_DISPOSITION, - * hdrs.CONTENT_ENCODING, # <<<<<<<<<<<<<< - * hdrs.CONTENT_LANGUAGE, - * hdrs.CONTENT_LENGTH, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 25, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_21 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_CONTENT_ENCODING); if (unlikely(!__pyx_t_21)) __PYX_ERR(5, 25, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_21); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":26 - * hdrs.CONTENT_DISPOSITION, - * hdrs.CONTENT_ENCODING, - * hdrs.CONTENT_LANGUAGE, # <<<<<<<<<<<<<< - * hdrs.CONTENT_LENGTH, - * hdrs.CONTENT_LOCATION, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 26, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_22 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_CONTENT_LANGUAGE); if (unlikely(!__pyx_t_22)) __PYX_ERR(5, 26, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_22); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":27 - * hdrs.CONTENT_ENCODING, - * hdrs.CONTENT_LANGUAGE, - * hdrs.CONTENT_LENGTH, # <<<<<<<<<<<<<< - * hdrs.CONTENT_LOCATION, - * hdrs.CONTENT_MD5, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 27, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_23 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_CONTENT_LENGTH); if (unlikely(!__pyx_t_23)) __PYX_ERR(5, 27, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_23); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":28 - * hdrs.CONTENT_LANGUAGE, - * hdrs.CONTENT_LENGTH, - * hdrs.CONTENT_LOCATION, # <<<<<<<<<<<<<< - * hdrs.CONTENT_MD5, - * hdrs.CONTENT_RANGE, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 28, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_24 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_CONTENT_LOCATION); if (unlikely(!__pyx_t_24)) __PYX_ERR(5, 28, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_24); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":29 - * hdrs.CONTENT_LENGTH, - * hdrs.CONTENT_LOCATION, - * hdrs.CONTENT_MD5, # <<<<<<<<<<<<<< - * hdrs.CONTENT_RANGE, - * hdrs.CONTENT_TRANSFER_ENCODING, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 29, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_25 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_CONTENT_MD5); if (unlikely(!__pyx_t_25)) __PYX_ERR(5, 29, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_25); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":30 - * hdrs.CONTENT_LOCATION, - * hdrs.CONTENT_MD5, - * hdrs.CONTENT_RANGE, # <<<<<<<<<<<<<< - * hdrs.CONTENT_TRANSFER_ENCODING, - * hdrs.CONTENT_TYPE, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 30, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_26 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_CONTENT_RANGE); if (unlikely(!__pyx_t_26)) __PYX_ERR(5, 30, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_26); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":31 - * hdrs.CONTENT_MD5, - * hdrs.CONTENT_RANGE, - * hdrs.CONTENT_TRANSFER_ENCODING, # <<<<<<<<<<<<<< - * hdrs.CONTENT_TYPE, - * hdrs.COOKIE, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 31, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_27 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_CONTENT_TRANSFER_ENCODING); if (unlikely(!__pyx_t_27)) __PYX_ERR(5, 31, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_27); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":32 - * hdrs.CONTENT_RANGE, - * hdrs.CONTENT_TRANSFER_ENCODING, - * hdrs.CONTENT_TYPE, # <<<<<<<<<<<<<< - * hdrs.COOKIE, - * hdrs.DATE, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 32, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_28 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_CONTENT_TYPE); if (unlikely(!__pyx_t_28)) __PYX_ERR(5, 32, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_28); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":33 - * hdrs.CONTENT_TRANSFER_ENCODING, - * hdrs.CONTENT_TYPE, - * hdrs.COOKIE, # <<<<<<<<<<<<<< - * hdrs.DATE, - * hdrs.DESTINATION, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 33, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_29 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_COOKIE); if (unlikely(!__pyx_t_29)) __PYX_ERR(5, 33, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_29); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":34 - * hdrs.CONTENT_TYPE, - * hdrs.COOKIE, - * hdrs.DATE, # <<<<<<<<<<<<<< - * hdrs.DESTINATION, - * hdrs.DIGEST, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 34, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_30 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_DATE); if (unlikely(!__pyx_t_30)) __PYX_ERR(5, 34, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_30); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":35 - * hdrs.COOKIE, - * hdrs.DATE, - * hdrs.DESTINATION, # <<<<<<<<<<<<<< - * hdrs.DIGEST, - * hdrs.ETAG, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 35, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_31 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_DESTINATION); if (unlikely(!__pyx_t_31)) __PYX_ERR(5, 35, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_31); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":36 - * hdrs.DATE, - * hdrs.DESTINATION, - * hdrs.DIGEST, # <<<<<<<<<<<<<< - * hdrs.ETAG, - * hdrs.EXPECT, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 36, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_32 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_DIGEST); if (unlikely(!__pyx_t_32)) __PYX_ERR(5, 36, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_32); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":37 - * hdrs.DESTINATION, - * hdrs.DIGEST, - * hdrs.ETAG, # <<<<<<<<<<<<<< - * hdrs.EXPECT, - * hdrs.EXPIRES, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 37, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_33 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ETAG); if (unlikely(!__pyx_t_33)) __PYX_ERR(5, 37, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_33); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":38 - * hdrs.DIGEST, - * hdrs.ETAG, - * hdrs.EXPECT, # <<<<<<<<<<<<<< - * hdrs.EXPIRES, - * hdrs.FORWARDED, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 38, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_34 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_EXPECT); if (unlikely(!__pyx_t_34)) __PYX_ERR(5, 38, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_34); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":39 - * hdrs.ETAG, - * hdrs.EXPECT, - * hdrs.EXPIRES, # <<<<<<<<<<<<<< - * hdrs.FORWARDED, - * hdrs.FROM, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 39, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_35 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_EXPIRES); if (unlikely(!__pyx_t_35)) __PYX_ERR(5, 39, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_35); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":40 - * hdrs.EXPECT, - * hdrs.EXPIRES, - * hdrs.FORWARDED, # <<<<<<<<<<<<<< - * hdrs.FROM, - * hdrs.HOST, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 40, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_36 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_FORWARDED); if (unlikely(!__pyx_t_36)) __PYX_ERR(5, 40, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_36); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":41 - * hdrs.EXPIRES, - * hdrs.FORWARDED, - * hdrs.FROM, # <<<<<<<<<<<<<< - * hdrs.HOST, - * hdrs.IF_MATCH, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 41, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_37 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_FROM); if (unlikely(!__pyx_t_37)) __PYX_ERR(5, 41, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_37); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":42 - * hdrs.FORWARDED, - * hdrs.FROM, - * hdrs.HOST, # <<<<<<<<<<<<<< - * hdrs.IF_MATCH, - * hdrs.IF_MODIFIED_SINCE, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 42, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_38 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_HOST); if (unlikely(!__pyx_t_38)) __PYX_ERR(5, 42, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_38); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":43 - * hdrs.FROM, - * hdrs.HOST, - * hdrs.IF_MATCH, # <<<<<<<<<<<<<< - * hdrs.IF_MODIFIED_SINCE, - * hdrs.IF_NONE_MATCH, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 43, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_39 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_IF_MATCH); if (unlikely(!__pyx_t_39)) __PYX_ERR(5, 43, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_39); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":44 - * hdrs.HOST, - * hdrs.IF_MATCH, - * hdrs.IF_MODIFIED_SINCE, # <<<<<<<<<<<<<< - * hdrs.IF_NONE_MATCH, - * hdrs.IF_RANGE, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 44, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_40 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_IF_MODIFIED_SINCE); if (unlikely(!__pyx_t_40)) __PYX_ERR(5, 44, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_40); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":45 - * hdrs.IF_MATCH, - * hdrs.IF_MODIFIED_SINCE, - * hdrs.IF_NONE_MATCH, # <<<<<<<<<<<<<< - * hdrs.IF_RANGE, - * hdrs.IF_UNMODIFIED_SINCE, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 45, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_41 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_IF_NONE_MATCH); if (unlikely(!__pyx_t_41)) __PYX_ERR(5, 45, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_41); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":46 - * hdrs.IF_MODIFIED_SINCE, - * hdrs.IF_NONE_MATCH, - * hdrs.IF_RANGE, # <<<<<<<<<<<<<< - * hdrs.IF_UNMODIFIED_SINCE, - * hdrs.KEEP_ALIVE, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 46, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_42 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_IF_RANGE); if (unlikely(!__pyx_t_42)) __PYX_ERR(5, 46, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_42); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":47 - * hdrs.IF_NONE_MATCH, - * hdrs.IF_RANGE, - * hdrs.IF_UNMODIFIED_SINCE, # <<<<<<<<<<<<<< - * hdrs.KEEP_ALIVE, - * hdrs.LAST_EVENT_ID, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 47, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_43 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_IF_UNMODIFIED_SINCE); if (unlikely(!__pyx_t_43)) __PYX_ERR(5, 47, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_43); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":48 - * hdrs.IF_RANGE, - * hdrs.IF_UNMODIFIED_SINCE, - * hdrs.KEEP_ALIVE, # <<<<<<<<<<<<<< - * hdrs.LAST_EVENT_ID, - * hdrs.LAST_MODIFIED, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 48, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_44 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_KEEP_ALIVE); if (unlikely(!__pyx_t_44)) __PYX_ERR(5, 48, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_44); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":49 - * hdrs.IF_UNMODIFIED_SINCE, - * hdrs.KEEP_ALIVE, - * hdrs.LAST_EVENT_ID, # <<<<<<<<<<<<<< - * hdrs.LAST_MODIFIED, - * hdrs.LINK, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 49, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_45 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_LAST_EVENT_ID); if (unlikely(!__pyx_t_45)) __PYX_ERR(5, 49, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_45); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":50 - * hdrs.KEEP_ALIVE, - * hdrs.LAST_EVENT_ID, - * hdrs.LAST_MODIFIED, # <<<<<<<<<<<<<< - * hdrs.LINK, - * hdrs.LOCATION, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 50, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_46 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_LAST_MODIFIED); if (unlikely(!__pyx_t_46)) __PYX_ERR(5, 50, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_46); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":51 - * hdrs.LAST_EVENT_ID, - * hdrs.LAST_MODIFIED, - * hdrs.LINK, # <<<<<<<<<<<<<< - * hdrs.LOCATION, - * hdrs.MAX_FORWARDS, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 51, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_47 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_LINK); if (unlikely(!__pyx_t_47)) __PYX_ERR(5, 51, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_47); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":52 - * hdrs.LAST_MODIFIED, - * hdrs.LINK, - * hdrs.LOCATION, # <<<<<<<<<<<<<< - * hdrs.MAX_FORWARDS, - * hdrs.ORIGIN, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 52, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_48 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_LOCATION); if (unlikely(!__pyx_t_48)) __PYX_ERR(5, 52, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_48); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":53 - * hdrs.LINK, - * hdrs.LOCATION, - * hdrs.MAX_FORWARDS, # <<<<<<<<<<<<<< - * hdrs.ORIGIN, - * hdrs.PRAGMA, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 53, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_49 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_MAX_FORWARDS); if (unlikely(!__pyx_t_49)) __PYX_ERR(5, 53, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_49); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":54 - * hdrs.LOCATION, - * hdrs.MAX_FORWARDS, - * hdrs.ORIGIN, # <<<<<<<<<<<<<< - * hdrs.PRAGMA, - * hdrs.PROXY_AUTHENTICATE, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 54, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_50 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ORIGIN); if (unlikely(!__pyx_t_50)) __PYX_ERR(5, 54, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_50); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":55 - * hdrs.MAX_FORWARDS, - * hdrs.ORIGIN, - * hdrs.PRAGMA, # <<<<<<<<<<<<<< - * hdrs.PROXY_AUTHENTICATE, - * hdrs.PROXY_AUTHORIZATION, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 55, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_51 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_PRAGMA); if (unlikely(!__pyx_t_51)) __PYX_ERR(5, 55, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_51); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":56 - * hdrs.ORIGIN, - * hdrs.PRAGMA, - * hdrs.PROXY_AUTHENTICATE, # <<<<<<<<<<<<<< - * hdrs.PROXY_AUTHORIZATION, - * hdrs.RANGE, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 56, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_52 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_PROXY_AUTHENTICATE); if (unlikely(!__pyx_t_52)) __PYX_ERR(5, 56, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_52); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":57 - * hdrs.PRAGMA, - * hdrs.PROXY_AUTHENTICATE, - * hdrs.PROXY_AUTHORIZATION, # <<<<<<<<<<<<<< - * hdrs.RANGE, - * hdrs.REFERER, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 57, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_53 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_PROXY_AUTHORIZATION); if (unlikely(!__pyx_t_53)) __PYX_ERR(5, 57, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_53); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":58 - * hdrs.PROXY_AUTHENTICATE, - * hdrs.PROXY_AUTHORIZATION, - * hdrs.RANGE, # <<<<<<<<<<<<<< - * hdrs.REFERER, - * hdrs.RETRY_AFTER, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 58, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_54 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_RANGE); if (unlikely(!__pyx_t_54)) __PYX_ERR(5, 58, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_54); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":59 - * hdrs.PROXY_AUTHORIZATION, - * hdrs.RANGE, - * hdrs.REFERER, # <<<<<<<<<<<<<< - * hdrs.RETRY_AFTER, - * hdrs.SEC_WEBSOCKET_ACCEPT, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 59, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_55 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_REFERER); if (unlikely(!__pyx_t_55)) __PYX_ERR(5, 59, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_55); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":60 - * hdrs.RANGE, - * hdrs.REFERER, - * hdrs.RETRY_AFTER, # <<<<<<<<<<<<<< - * hdrs.SEC_WEBSOCKET_ACCEPT, - * hdrs.SEC_WEBSOCKET_EXTENSIONS, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 60, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_56 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_RETRY_AFTER); if (unlikely(!__pyx_t_56)) __PYX_ERR(5, 60, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_56); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":61 - * hdrs.REFERER, - * hdrs.RETRY_AFTER, - * hdrs.SEC_WEBSOCKET_ACCEPT, # <<<<<<<<<<<<<< - * hdrs.SEC_WEBSOCKET_EXTENSIONS, - * hdrs.SEC_WEBSOCKET_KEY, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 61, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_57 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_SEC_WEBSOCKET_ACCEPT); if (unlikely(!__pyx_t_57)) __PYX_ERR(5, 61, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_57); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":62 - * hdrs.RETRY_AFTER, - * hdrs.SEC_WEBSOCKET_ACCEPT, - * hdrs.SEC_WEBSOCKET_EXTENSIONS, # <<<<<<<<<<<<<< - * hdrs.SEC_WEBSOCKET_KEY, - * hdrs.SEC_WEBSOCKET_KEY1, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 62, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_58 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_SEC_WEBSOCKET_EXTENSIONS); if (unlikely(!__pyx_t_58)) __PYX_ERR(5, 62, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_58); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":63 - * hdrs.SEC_WEBSOCKET_ACCEPT, - * hdrs.SEC_WEBSOCKET_EXTENSIONS, - * hdrs.SEC_WEBSOCKET_KEY, # <<<<<<<<<<<<<< - * hdrs.SEC_WEBSOCKET_KEY1, - * hdrs.SEC_WEBSOCKET_PROTOCOL, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 63, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_59 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_SEC_WEBSOCKET_KEY); if (unlikely(!__pyx_t_59)) __PYX_ERR(5, 63, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_59); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":64 - * hdrs.SEC_WEBSOCKET_EXTENSIONS, - * hdrs.SEC_WEBSOCKET_KEY, - * hdrs.SEC_WEBSOCKET_KEY1, # <<<<<<<<<<<<<< - * hdrs.SEC_WEBSOCKET_PROTOCOL, - * hdrs.SEC_WEBSOCKET_VERSION, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 64, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_60 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_SEC_WEBSOCKET_KEY1); if (unlikely(!__pyx_t_60)) __PYX_ERR(5, 64, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_60); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":65 - * hdrs.SEC_WEBSOCKET_KEY, - * hdrs.SEC_WEBSOCKET_KEY1, - * hdrs.SEC_WEBSOCKET_PROTOCOL, # <<<<<<<<<<<<<< - * hdrs.SEC_WEBSOCKET_VERSION, - * hdrs.SERVER, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 65, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_61 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_SEC_WEBSOCKET_PROTOCOL); if (unlikely(!__pyx_t_61)) __PYX_ERR(5, 65, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_61); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":66 - * hdrs.SEC_WEBSOCKET_KEY1, - * hdrs.SEC_WEBSOCKET_PROTOCOL, - * hdrs.SEC_WEBSOCKET_VERSION, # <<<<<<<<<<<<<< - * hdrs.SERVER, - * hdrs.SET_COOKIE, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 66, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_62 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_SEC_WEBSOCKET_VERSION); if (unlikely(!__pyx_t_62)) __PYX_ERR(5, 66, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_62); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":67 - * hdrs.SEC_WEBSOCKET_PROTOCOL, - * hdrs.SEC_WEBSOCKET_VERSION, - * hdrs.SERVER, # <<<<<<<<<<<<<< - * hdrs.SET_COOKIE, - * hdrs.TE, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 67, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_63 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_SERVER); if (unlikely(!__pyx_t_63)) __PYX_ERR(5, 67, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_63); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":68 - * hdrs.SEC_WEBSOCKET_VERSION, - * hdrs.SERVER, - * hdrs.SET_COOKIE, # <<<<<<<<<<<<<< - * hdrs.TE, - * hdrs.TRAILER, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 68, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_64 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_SET_COOKIE); if (unlikely(!__pyx_t_64)) __PYX_ERR(5, 68, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_64); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":69 - * hdrs.SERVER, - * hdrs.SET_COOKIE, - * hdrs.TE, # <<<<<<<<<<<<<< - * hdrs.TRAILER, - * hdrs.TRANSFER_ENCODING, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 69, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_65 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_TE); if (unlikely(!__pyx_t_65)) __PYX_ERR(5, 69, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_65); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":70 - * hdrs.SET_COOKIE, - * hdrs.TE, - * hdrs.TRAILER, # <<<<<<<<<<<<<< - * hdrs.TRANSFER_ENCODING, - * hdrs.URI, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 70, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_66 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_TRAILER); if (unlikely(!__pyx_t_66)) __PYX_ERR(5, 70, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_66); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":71 - * hdrs.TE, - * hdrs.TRAILER, - * hdrs.TRANSFER_ENCODING, # <<<<<<<<<<<<<< - * hdrs.URI, - * hdrs.UPGRADE, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 71, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_67 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_TRANSFER_ENCODING); if (unlikely(!__pyx_t_67)) __PYX_ERR(5, 71, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_67); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":72 - * hdrs.TRAILER, - * hdrs.TRANSFER_ENCODING, - * hdrs.URI, # <<<<<<<<<<<<<< - * hdrs.UPGRADE, - * hdrs.USER_AGENT, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 72, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_68 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_URI); if (unlikely(!__pyx_t_68)) __PYX_ERR(5, 72, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_68); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":73 - * hdrs.TRANSFER_ENCODING, - * hdrs.URI, - * hdrs.UPGRADE, # <<<<<<<<<<<<<< - * hdrs.USER_AGENT, - * hdrs.VARY, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 73, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_69 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_UPGRADE); if (unlikely(!__pyx_t_69)) __PYX_ERR(5, 73, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_69); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":74 - * hdrs.URI, - * hdrs.UPGRADE, - * hdrs.USER_AGENT, # <<<<<<<<<<<<<< - * hdrs.VARY, - * hdrs.VIA, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 74, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_70 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_USER_AGENT); if (unlikely(!__pyx_t_70)) __PYX_ERR(5, 74, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_70); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":75 - * hdrs.UPGRADE, - * hdrs.USER_AGENT, - * hdrs.VARY, # <<<<<<<<<<<<<< - * hdrs.VIA, - * hdrs.WWW_AUTHENTICATE, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 75, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_71 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_VARY); if (unlikely(!__pyx_t_71)) __PYX_ERR(5, 75, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_71); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":76 - * hdrs.USER_AGENT, - * hdrs.VARY, - * hdrs.VIA, # <<<<<<<<<<<<<< - * hdrs.WWW_AUTHENTICATE, - * hdrs.WANT_DIGEST, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 76, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_72 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_VIA); if (unlikely(!__pyx_t_72)) __PYX_ERR(5, 76, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_72); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":77 - * hdrs.VARY, - * hdrs.VIA, - * hdrs.WWW_AUTHENTICATE, # <<<<<<<<<<<<<< - * hdrs.WANT_DIGEST, - * hdrs.WARNING, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 77, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_73 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_WWW_AUTHENTICATE); if (unlikely(!__pyx_t_73)) __PYX_ERR(5, 77, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_73); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":78 - * hdrs.VIA, - * hdrs.WWW_AUTHENTICATE, - * hdrs.WANT_DIGEST, # <<<<<<<<<<<<<< - * hdrs.WARNING, - * hdrs.X_FORWARDED_FOR, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 78, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_74 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_WANT_DIGEST); if (unlikely(!__pyx_t_74)) __PYX_ERR(5, 78, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_74); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":79 - * hdrs.WWW_AUTHENTICATE, - * hdrs.WANT_DIGEST, - * hdrs.WARNING, # <<<<<<<<<<<<<< - * hdrs.X_FORWARDED_FOR, - * hdrs.X_FORWARDED_HOST, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 79, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_75 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_WARNING); if (unlikely(!__pyx_t_75)) __PYX_ERR(5, 79, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_75); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":80 - * hdrs.WANT_DIGEST, - * hdrs.WARNING, - * hdrs.X_FORWARDED_FOR, # <<<<<<<<<<<<<< - * hdrs.X_FORWARDED_HOST, - * hdrs.X_FORWARDED_PROTO, - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 80, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_76 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_X_FORWARDED_FOR); if (unlikely(!__pyx_t_76)) __PYX_ERR(5, 80, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_76); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":81 - * hdrs.WARNING, - * hdrs.X_FORWARDED_FOR, - * hdrs.X_FORWARDED_HOST, # <<<<<<<<<<<<<< - * hdrs.X_FORWARDED_PROTO, - * ) - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 81, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_77 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_X_FORWARDED_HOST); if (unlikely(!__pyx_t_77)) __PYX_ERR(5, 81, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_77); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":82 - * hdrs.X_FORWARDED_FOR, - * hdrs.X_FORWARDED_HOST, - * hdrs.X_FORWARDED_PROTO, # <<<<<<<<<<<<<< - * ) - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 82, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_78 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_X_FORWARDED_PROTO); if (unlikely(!__pyx_t_78)) __PYX_ERR(5, 82, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_78); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_headers.pxi":6 - * from . import hdrs - * cdef tuple headers = ( - * hdrs.ACCEPT, # <<<<<<<<<<<<<< - * hdrs.ACCEPT_CHARSET, - * hdrs.ACCEPT_ENCODING, - */ - __pyx_t_1 = PyTuple_New(77); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_t_7); - __Pyx_GIVEREF(__pyx_t_8); - PyTuple_SET_ITEM(__pyx_t_1, 6, __pyx_t_8); - __Pyx_GIVEREF(__pyx_t_9); - PyTuple_SET_ITEM(__pyx_t_1, 7, __pyx_t_9); - __Pyx_GIVEREF(__pyx_t_10); - PyTuple_SET_ITEM(__pyx_t_1, 8, __pyx_t_10); - __Pyx_GIVEREF(__pyx_t_11); - PyTuple_SET_ITEM(__pyx_t_1, 9, __pyx_t_11); - __Pyx_GIVEREF(__pyx_t_12); - PyTuple_SET_ITEM(__pyx_t_1, 10, __pyx_t_12); - __Pyx_GIVEREF(__pyx_t_13); - PyTuple_SET_ITEM(__pyx_t_1, 11, __pyx_t_13); - __Pyx_GIVEREF(__pyx_t_14); - PyTuple_SET_ITEM(__pyx_t_1, 12, __pyx_t_14); - __Pyx_GIVEREF(__pyx_t_15); - PyTuple_SET_ITEM(__pyx_t_1, 13, __pyx_t_15); - __Pyx_GIVEREF(__pyx_t_16); - PyTuple_SET_ITEM(__pyx_t_1, 14, __pyx_t_16); - __Pyx_GIVEREF(__pyx_t_17); - PyTuple_SET_ITEM(__pyx_t_1, 15, __pyx_t_17); - __Pyx_GIVEREF(__pyx_t_18); - PyTuple_SET_ITEM(__pyx_t_1, 16, __pyx_t_18); - __Pyx_GIVEREF(__pyx_t_19); - PyTuple_SET_ITEM(__pyx_t_1, 17, __pyx_t_19); - __Pyx_GIVEREF(__pyx_t_20); - PyTuple_SET_ITEM(__pyx_t_1, 18, __pyx_t_20); - __Pyx_GIVEREF(__pyx_t_21); - PyTuple_SET_ITEM(__pyx_t_1, 19, __pyx_t_21); - __Pyx_GIVEREF(__pyx_t_22); - PyTuple_SET_ITEM(__pyx_t_1, 20, __pyx_t_22); - __Pyx_GIVEREF(__pyx_t_23); - PyTuple_SET_ITEM(__pyx_t_1, 21, __pyx_t_23); - __Pyx_GIVEREF(__pyx_t_24); - PyTuple_SET_ITEM(__pyx_t_1, 22, __pyx_t_24); - __Pyx_GIVEREF(__pyx_t_25); - PyTuple_SET_ITEM(__pyx_t_1, 23, __pyx_t_25); - __Pyx_GIVEREF(__pyx_t_26); - PyTuple_SET_ITEM(__pyx_t_1, 24, __pyx_t_26); - __Pyx_GIVEREF(__pyx_t_27); - PyTuple_SET_ITEM(__pyx_t_1, 25, __pyx_t_27); - __Pyx_GIVEREF(__pyx_t_28); - PyTuple_SET_ITEM(__pyx_t_1, 26, __pyx_t_28); - __Pyx_GIVEREF(__pyx_t_29); - PyTuple_SET_ITEM(__pyx_t_1, 27, __pyx_t_29); - __Pyx_GIVEREF(__pyx_t_30); - PyTuple_SET_ITEM(__pyx_t_1, 28, __pyx_t_30); - __Pyx_GIVEREF(__pyx_t_31); - PyTuple_SET_ITEM(__pyx_t_1, 29, __pyx_t_31); - __Pyx_GIVEREF(__pyx_t_32); - PyTuple_SET_ITEM(__pyx_t_1, 30, __pyx_t_32); - __Pyx_GIVEREF(__pyx_t_33); - PyTuple_SET_ITEM(__pyx_t_1, 31, __pyx_t_33); - __Pyx_GIVEREF(__pyx_t_34); - PyTuple_SET_ITEM(__pyx_t_1, 32, __pyx_t_34); - __Pyx_GIVEREF(__pyx_t_35); - PyTuple_SET_ITEM(__pyx_t_1, 33, __pyx_t_35); - __Pyx_GIVEREF(__pyx_t_36); - PyTuple_SET_ITEM(__pyx_t_1, 34, __pyx_t_36); - __Pyx_GIVEREF(__pyx_t_37); - PyTuple_SET_ITEM(__pyx_t_1, 35, __pyx_t_37); - __Pyx_GIVEREF(__pyx_t_38); - PyTuple_SET_ITEM(__pyx_t_1, 36, __pyx_t_38); - __Pyx_GIVEREF(__pyx_t_39); - PyTuple_SET_ITEM(__pyx_t_1, 37, __pyx_t_39); - __Pyx_GIVEREF(__pyx_t_40); - PyTuple_SET_ITEM(__pyx_t_1, 38, __pyx_t_40); - __Pyx_GIVEREF(__pyx_t_41); - PyTuple_SET_ITEM(__pyx_t_1, 39, __pyx_t_41); - __Pyx_GIVEREF(__pyx_t_42); - PyTuple_SET_ITEM(__pyx_t_1, 40, __pyx_t_42); - __Pyx_GIVEREF(__pyx_t_43); - PyTuple_SET_ITEM(__pyx_t_1, 41, __pyx_t_43); - __Pyx_GIVEREF(__pyx_t_44); - PyTuple_SET_ITEM(__pyx_t_1, 42, __pyx_t_44); - __Pyx_GIVEREF(__pyx_t_45); - PyTuple_SET_ITEM(__pyx_t_1, 43, __pyx_t_45); - __Pyx_GIVEREF(__pyx_t_46); - PyTuple_SET_ITEM(__pyx_t_1, 44, __pyx_t_46); - __Pyx_GIVEREF(__pyx_t_47); - PyTuple_SET_ITEM(__pyx_t_1, 45, __pyx_t_47); - __Pyx_GIVEREF(__pyx_t_48); - PyTuple_SET_ITEM(__pyx_t_1, 46, __pyx_t_48); - __Pyx_GIVEREF(__pyx_t_49); - PyTuple_SET_ITEM(__pyx_t_1, 47, __pyx_t_49); - __Pyx_GIVEREF(__pyx_t_50); - PyTuple_SET_ITEM(__pyx_t_1, 48, __pyx_t_50); - __Pyx_GIVEREF(__pyx_t_51); - PyTuple_SET_ITEM(__pyx_t_1, 49, __pyx_t_51); - __Pyx_GIVEREF(__pyx_t_52); - PyTuple_SET_ITEM(__pyx_t_1, 50, __pyx_t_52); - __Pyx_GIVEREF(__pyx_t_53); - PyTuple_SET_ITEM(__pyx_t_1, 51, __pyx_t_53); - __Pyx_GIVEREF(__pyx_t_54); - PyTuple_SET_ITEM(__pyx_t_1, 52, __pyx_t_54); - __Pyx_GIVEREF(__pyx_t_55); - PyTuple_SET_ITEM(__pyx_t_1, 53, __pyx_t_55); - __Pyx_GIVEREF(__pyx_t_56); - PyTuple_SET_ITEM(__pyx_t_1, 54, __pyx_t_56); - __Pyx_GIVEREF(__pyx_t_57); - PyTuple_SET_ITEM(__pyx_t_1, 55, __pyx_t_57); - __Pyx_GIVEREF(__pyx_t_58); - PyTuple_SET_ITEM(__pyx_t_1, 56, __pyx_t_58); - __Pyx_GIVEREF(__pyx_t_59); - PyTuple_SET_ITEM(__pyx_t_1, 57, __pyx_t_59); - __Pyx_GIVEREF(__pyx_t_60); - PyTuple_SET_ITEM(__pyx_t_1, 58, __pyx_t_60); - __Pyx_GIVEREF(__pyx_t_61); - PyTuple_SET_ITEM(__pyx_t_1, 59, __pyx_t_61); - __Pyx_GIVEREF(__pyx_t_62); - PyTuple_SET_ITEM(__pyx_t_1, 60, __pyx_t_62); - __Pyx_GIVEREF(__pyx_t_63); - PyTuple_SET_ITEM(__pyx_t_1, 61, __pyx_t_63); - __Pyx_GIVEREF(__pyx_t_64); - PyTuple_SET_ITEM(__pyx_t_1, 62, __pyx_t_64); - __Pyx_GIVEREF(__pyx_t_65); - PyTuple_SET_ITEM(__pyx_t_1, 63, __pyx_t_65); - __Pyx_GIVEREF(__pyx_t_66); - PyTuple_SET_ITEM(__pyx_t_1, 64, __pyx_t_66); - __Pyx_GIVEREF(__pyx_t_67); - PyTuple_SET_ITEM(__pyx_t_1, 65, __pyx_t_67); - __Pyx_GIVEREF(__pyx_t_68); - PyTuple_SET_ITEM(__pyx_t_1, 66, __pyx_t_68); - __Pyx_GIVEREF(__pyx_t_69); - PyTuple_SET_ITEM(__pyx_t_1, 67, __pyx_t_69); - __Pyx_GIVEREF(__pyx_t_70); - PyTuple_SET_ITEM(__pyx_t_1, 68, __pyx_t_70); - __Pyx_GIVEREF(__pyx_t_71); - PyTuple_SET_ITEM(__pyx_t_1, 69, __pyx_t_71); - __Pyx_GIVEREF(__pyx_t_72); - PyTuple_SET_ITEM(__pyx_t_1, 70, __pyx_t_72); - __Pyx_GIVEREF(__pyx_t_73); - PyTuple_SET_ITEM(__pyx_t_1, 71, __pyx_t_73); - __Pyx_GIVEREF(__pyx_t_74); - PyTuple_SET_ITEM(__pyx_t_1, 72, __pyx_t_74); - __Pyx_GIVEREF(__pyx_t_75); - PyTuple_SET_ITEM(__pyx_t_1, 73, __pyx_t_75); - __Pyx_GIVEREF(__pyx_t_76); - PyTuple_SET_ITEM(__pyx_t_1, 74, __pyx_t_76); - __Pyx_GIVEREF(__pyx_t_77); - PyTuple_SET_ITEM(__pyx_t_1, 75, __pyx_t_77); - __Pyx_GIVEREF(__pyx_t_78); - PyTuple_SET_ITEM(__pyx_t_1, 76, __pyx_t_78); - __pyx_t_2 = 0; - __pyx_t_3 = 0; - __pyx_t_4 = 0; - __pyx_t_5 = 0; - __pyx_t_6 = 0; - __pyx_t_7 = 0; - __pyx_t_8 = 0; - __pyx_t_9 = 0; - __pyx_t_10 = 0; - __pyx_t_11 = 0; - __pyx_t_12 = 0; - __pyx_t_13 = 0; - __pyx_t_14 = 0; - __pyx_t_15 = 0; - __pyx_t_16 = 0; - __pyx_t_17 = 0; - __pyx_t_18 = 0; - __pyx_t_19 = 0; - __pyx_t_20 = 0; - __pyx_t_21 = 0; - __pyx_t_22 = 0; - __pyx_t_23 = 0; - __pyx_t_24 = 0; - __pyx_t_25 = 0; - __pyx_t_26 = 0; - __pyx_t_27 = 0; - __pyx_t_28 = 0; - __pyx_t_29 = 0; - __pyx_t_30 = 0; - __pyx_t_31 = 0; - __pyx_t_32 = 0; - __pyx_t_33 = 0; - __pyx_t_34 = 0; - __pyx_t_35 = 0; - __pyx_t_36 = 0; - __pyx_t_37 = 0; - __pyx_t_38 = 0; - __pyx_t_39 = 0; - __pyx_t_40 = 0; - __pyx_t_41 = 0; - __pyx_t_42 = 0; - __pyx_t_43 = 0; - __pyx_t_44 = 0; - __pyx_t_45 = 0; - __pyx_t_46 = 0; - __pyx_t_47 = 0; - __pyx_t_48 = 0; - __pyx_t_49 = 0; - __pyx_t_50 = 0; - __pyx_t_51 = 0; - __pyx_t_52 = 0; - __pyx_t_53 = 0; - __pyx_t_54 = 0; - __pyx_t_55 = 0; - __pyx_t_56 = 0; - __pyx_t_57 = 0; - __pyx_t_58 = 0; - __pyx_t_59 = 0; - __pyx_t_60 = 0; - __pyx_t_61 = 0; - __pyx_t_62 = 0; - __pyx_t_63 = 0; - __pyx_t_64 = 0; - __pyx_t_65 = 0; - __pyx_t_66 = 0; - __pyx_t_67 = 0; - __pyx_t_68 = 0; - __pyx_t_69 = 0; - __pyx_t_70 = 0; - __pyx_t_71 = 0; - __pyx_t_72 = 0; - __pyx_t_73 = 0; - __pyx_t_74 = 0; - __pyx_t_75 = 0; - __pyx_t_76 = 0; - __pyx_t_77 = 0; - __pyx_t_78 = 0; - __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_parser_headers); - __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_parser_headers, ((PyObject*)__pyx_t_1)); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":57 - * char* PyByteArray_AsString(object) - * - * __all__ = ('HttpRequestParser', 'HttpResponseParser', # <<<<<<<<<<<<<< - * 'RawRequestMessage', 'RawResponseMessage') - * - */ - if (PyDict_SetItem(__pyx_d, __pyx_n_s_all, __pyx_tuple__12) < 0) __PYX_ERR(0, 57, __pyx_L1_error) - - /* "aiohttp/_http_parser.pyx":60 - * 'RawRequestMessage', 'RawResponseMessage') - * - * cdef object URL = _URL # <<<<<<<<<<<<<< - * cdef object URL_build = URL.build - * cdef object CIMultiDict = _CIMultiDict - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_URL_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 60, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_parser_URL); - __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_parser_URL, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":61 - * - * cdef object URL = _URL - * cdef object URL_build = URL.build # <<<<<<<<<<<<<< - * cdef object CIMultiDict = _CIMultiDict - * cdef object CIMultiDictProxy = _CIMultiDictProxy - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_7aiohttp_12_http_parser_URL, __pyx_n_s_build); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 61, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_parser_URL_build); - __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_parser_URL_build, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":62 - * cdef object URL = _URL - * cdef object URL_build = URL.build - * cdef object CIMultiDict = _CIMultiDict # <<<<<<<<<<<<<< - * cdef object CIMultiDictProxy = _CIMultiDictProxy - * cdef object HttpVersion = _HttpVersion - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_CIMultiDict_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 62, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_parser_CIMultiDict); - __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_parser_CIMultiDict, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":63 - * cdef object URL_build = URL.build - * cdef object CIMultiDict = _CIMultiDict - * cdef object CIMultiDictProxy = _CIMultiDictProxy # <<<<<<<<<<<<<< - * cdef object HttpVersion = _HttpVersion - * cdef object HttpVersion10 = _HttpVersion10 - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_CIMultiDictProxy_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 63, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_parser_CIMultiDictProxy); - __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_parser_CIMultiDictProxy, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":64 - * cdef object CIMultiDict = _CIMultiDict - * cdef object CIMultiDictProxy = _CIMultiDictProxy - * cdef object HttpVersion = _HttpVersion # <<<<<<<<<<<<<< - * cdef object HttpVersion10 = _HttpVersion10 - * cdef object HttpVersion11 = _HttpVersion11 - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_HttpVersion_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 64, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_parser_HttpVersion); - __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_parser_HttpVersion, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":65 - * cdef object CIMultiDictProxy = _CIMultiDictProxy - * cdef object HttpVersion = _HttpVersion - * cdef object HttpVersion10 = _HttpVersion10 # <<<<<<<<<<<<<< - * cdef object HttpVersion11 = _HttpVersion11 - * cdef object SEC_WEBSOCKET_KEY1 = hdrs.SEC_WEBSOCKET_KEY1 - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_HttpVersion10_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 65, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_parser_HttpVersion10); - __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_parser_HttpVersion10, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":66 - * cdef object HttpVersion = _HttpVersion - * cdef object HttpVersion10 = _HttpVersion10 - * cdef object HttpVersion11 = _HttpVersion11 # <<<<<<<<<<<<<< - * cdef object SEC_WEBSOCKET_KEY1 = hdrs.SEC_WEBSOCKET_KEY1 - * cdef object CONTENT_ENCODING = hdrs.CONTENT_ENCODING - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_HttpVersion11_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 66, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_parser_HttpVersion11); - __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_parser_HttpVersion11, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":67 - * cdef object HttpVersion10 = _HttpVersion10 - * cdef object HttpVersion11 = _HttpVersion11 - * cdef object SEC_WEBSOCKET_KEY1 = hdrs.SEC_WEBSOCKET_KEY1 # <<<<<<<<<<<<<< - * cdef object CONTENT_ENCODING = hdrs.CONTENT_ENCODING - * cdef object EMPTY_PAYLOAD = _EMPTY_PAYLOAD - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 67, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_78 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_SEC_WEBSOCKET_KEY1); if (unlikely(!__pyx_t_78)) __PYX_ERR(0, 67, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_78); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_parser_SEC_WEBSOCKET_KEY1); - __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_parser_SEC_WEBSOCKET_KEY1, __pyx_t_78); - __Pyx_GIVEREF(__pyx_t_78); - __pyx_t_78 = 0; - - /* "aiohttp/_http_parser.pyx":68 - * cdef object HttpVersion11 = _HttpVersion11 - * cdef object SEC_WEBSOCKET_KEY1 = hdrs.SEC_WEBSOCKET_KEY1 - * cdef object CONTENT_ENCODING = hdrs.CONTENT_ENCODING # <<<<<<<<<<<<<< - * cdef object EMPTY_PAYLOAD = _EMPTY_PAYLOAD - * cdef object StreamReader = _StreamReader - */ - __Pyx_GetModuleGlobalName(__pyx_t_78, __pyx_n_s_hdrs); if (unlikely(!__pyx_t_78)) __PYX_ERR(0, 68, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_78); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_78, __pyx_n_s_CONTENT_ENCODING); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 68, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_78); __pyx_t_78 = 0; - __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_parser_CONTENT_ENCODING); - __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_parser_CONTENT_ENCODING, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":69 - * cdef object SEC_WEBSOCKET_KEY1 = hdrs.SEC_WEBSOCKET_KEY1 - * cdef object CONTENT_ENCODING = hdrs.CONTENT_ENCODING - * cdef object EMPTY_PAYLOAD = _EMPTY_PAYLOAD # <<<<<<<<<<<<<< - * cdef object StreamReader = _StreamReader - * cdef object DeflateBuffer = _DeflateBuffer - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_EMPTY_PAYLOAD_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 69, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_parser_EMPTY_PAYLOAD); - __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_parser_EMPTY_PAYLOAD, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":70 - * cdef object CONTENT_ENCODING = hdrs.CONTENT_ENCODING - * cdef object EMPTY_PAYLOAD = _EMPTY_PAYLOAD - * cdef object StreamReader = _StreamReader # <<<<<<<<<<<<<< - * cdef object DeflateBuffer = _DeflateBuffer - * - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_StreamReader_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 70, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_parser_StreamReader); - __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_parser_StreamReader, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":71 - * cdef object EMPTY_PAYLOAD = _EMPTY_PAYLOAD - * cdef object StreamReader = _StreamReader - * cdef object DeflateBuffer = _DeflateBuffer # <<<<<<<<<<<<<< - * - * - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_DeflateBuffer_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 71, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_parser_DeflateBuffer); - __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_parser_DeflateBuffer, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":85 - * DEF METHODS_COUNT = 34; - * - * cdef list _http_method = [] # <<<<<<<<<<<<<< - * - * for i in range(METHODS_COUNT): - */ - __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 85, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_parser__http_method); - __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_parser__http_method, ((PyObject*)__pyx_t_1)); - __Pyx_GIVEREF(__pyx_t_1); - __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":87 - * cdef list _http_method = [] - * - * for i in range(METHODS_COUNT): # <<<<<<<<<<<<<< - * _http_method.append( - * cparser.http_method_str( i).decode('ascii')) - */ - for (__pyx_t_79 = 0; __pyx_t_79 < 34; __pyx_t_79+=1) { - __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_t_79); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_i, __pyx_t_1) < 0) __PYX_ERR(0, 87, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":88 - * - * for i in range(METHODS_COUNT): - * _http_method.append( # <<<<<<<<<<<<<< - * cparser.http_method_str( i).decode('ascii')) - * - */ - if (unlikely(__pyx_v_7aiohttp_12_http_parser__http_method == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append"); - __PYX_ERR(0, 88, __pyx_L1_error) - } - - /* "aiohttp/_http_parser.pyx":89 - * for i in range(METHODS_COUNT): - * _http_method.append( - * cparser.http_method_str( i).decode('ascii')) # <<<<<<<<<<<<<< - * - * - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 89, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_80 = ((enum http_method)__Pyx_PyInt_As_enum__http_method(__pyx_t_1)); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 89, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_81 = http_method_str(((enum http_method)__pyx_t_80)); - __pyx_t_1 = __Pyx_decode_c_string(__pyx_t_81, 0, strlen(__pyx_t_81), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 89, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - - /* "aiohttp/_http_parser.pyx":88 - * - * for i in range(METHODS_COUNT): - * _http_method.append( # <<<<<<<<<<<<<< - * cparser.http_method_str( i).decode('ascii')) - * - */ - __pyx_t_82 = __Pyx_PyList_Append(__pyx_v_7aiohttp_12_http_parser__http_method, __pyx_t_1); if (unlikely(__pyx_t_82 == ((int)-1))) __PYX_ERR(0, 88, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - } - - /* "aiohttp/_http_parser.pyx":785 - * - * - * def parse_url(url): # <<<<<<<<<<<<<< - * cdef: - * Py_buffer py_buf - */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7aiohttp_12_http_parser_1parse_url, NULL, __pyx_n_s_aiohttp__http_parser); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 785, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_parse_url, __pyx_t_1) < 0) __PYX_ERR(0, 785, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "(tree fragment)":1 - * def __pyx_unpickle_RawRequestMessage(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<< - * cdef object __pyx_PickleError - * cdef object __pyx_result - */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7aiohttp_12_http_parser_3__pyx_unpickle_RawRequestMessage, NULL, __pyx_n_s_aiohttp__http_parser); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_RawRequestMessage, __pyx_t_1) < 0) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "(tree fragment)":11 - * __pyx_unpickle_RawRequestMessage__set_state( __pyx_result, __pyx_state) - * return __pyx_result - * cdef __pyx_unpickle_RawRequestMessage__set_state(RawRequestMessage __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<< - * __pyx_result.chunked = __pyx_state[0]; __pyx_result.compression = __pyx_state[1]; __pyx_result.headers = __pyx_state[2]; __pyx_result.method = __pyx_state[3]; __pyx_result.path = __pyx_state[4]; __pyx_result.raw_headers = __pyx_state[5]; __pyx_result.should_close = __pyx_state[6]; __pyx_result.upgrade = __pyx_state[7]; __pyx_result.url = __pyx_state[8]; __pyx_result.version = __pyx_state[9] - * if len(__pyx_state) > 10 and hasattr(__pyx_result, '__dict__'): - */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7aiohttp_12_http_parser_5__pyx_unpickle_RawResponseMessage, NULL, __pyx_n_s_aiohttp__http_parser); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_RawResponseMessag, __pyx_t_1) < 0) __PYX_ERR(1, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_parser.pyx":1 - * #cython: language_level=3 # <<<<<<<<<<<<<< - * # - * # Based on https://github.com/MagicStack/httptools - */ - __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /*--- Wrapped vars code ---*/ - - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_XDECREF(__pyx_t_9); - __Pyx_XDECREF(__pyx_t_10); - __Pyx_XDECREF(__pyx_t_11); - __Pyx_XDECREF(__pyx_t_12); - __Pyx_XDECREF(__pyx_t_13); - __Pyx_XDECREF(__pyx_t_14); - __Pyx_XDECREF(__pyx_t_15); - __Pyx_XDECREF(__pyx_t_16); - __Pyx_XDECREF(__pyx_t_17); - __Pyx_XDECREF(__pyx_t_18); - __Pyx_XDECREF(__pyx_t_19); - __Pyx_XDECREF(__pyx_t_20); - __Pyx_XDECREF(__pyx_t_21); - __Pyx_XDECREF(__pyx_t_22); - __Pyx_XDECREF(__pyx_t_23); - __Pyx_XDECREF(__pyx_t_24); - __Pyx_XDECREF(__pyx_t_25); - __Pyx_XDECREF(__pyx_t_26); - __Pyx_XDECREF(__pyx_t_27); - __Pyx_XDECREF(__pyx_t_28); - __Pyx_XDECREF(__pyx_t_29); - __Pyx_XDECREF(__pyx_t_30); - __Pyx_XDECREF(__pyx_t_31); - __Pyx_XDECREF(__pyx_t_32); - __Pyx_XDECREF(__pyx_t_33); - __Pyx_XDECREF(__pyx_t_34); - __Pyx_XDECREF(__pyx_t_35); - __Pyx_XDECREF(__pyx_t_36); - __Pyx_XDECREF(__pyx_t_37); - __Pyx_XDECREF(__pyx_t_38); - __Pyx_XDECREF(__pyx_t_39); - __Pyx_XDECREF(__pyx_t_40); - __Pyx_XDECREF(__pyx_t_41); - __Pyx_XDECREF(__pyx_t_42); - __Pyx_XDECREF(__pyx_t_43); - __Pyx_XDECREF(__pyx_t_44); - __Pyx_XDECREF(__pyx_t_45); - __Pyx_XDECREF(__pyx_t_46); - __Pyx_XDECREF(__pyx_t_47); - __Pyx_XDECREF(__pyx_t_48); - __Pyx_XDECREF(__pyx_t_49); - __Pyx_XDECREF(__pyx_t_50); - __Pyx_XDECREF(__pyx_t_51); - __Pyx_XDECREF(__pyx_t_52); - __Pyx_XDECREF(__pyx_t_53); - __Pyx_XDECREF(__pyx_t_54); - __Pyx_XDECREF(__pyx_t_55); - __Pyx_XDECREF(__pyx_t_56); - __Pyx_XDECREF(__pyx_t_57); - __Pyx_XDECREF(__pyx_t_58); - __Pyx_XDECREF(__pyx_t_59); - __Pyx_XDECREF(__pyx_t_60); - __Pyx_XDECREF(__pyx_t_61); - __Pyx_XDECREF(__pyx_t_62); - __Pyx_XDECREF(__pyx_t_63); - __Pyx_XDECREF(__pyx_t_64); - __Pyx_XDECREF(__pyx_t_65); - __Pyx_XDECREF(__pyx_t_66); - __Pyx_XDECREF(__pyx_t_67); - __Pyx_XDECREF(__pyx_t_68); - __Pyx_XDECREF(__pyx_t_69); - __Pyx_XDECREF(__pyx_t_70); - __Pyx_XDECREF(__pyx_t_71); - __Pyx_XDECREF(__pyx_t_72); - __Pyx_XDECREF(__pyx_t_73); - __Pyx_XDECREF(__pyx_t_74); - __Pyx_XDECREF(__pyx_t_75); - __Pyx_XDECREF(__pyx_t_76); - __Pyx_XDECREF(__pyx_t_77); - __Pyx_XDECREF(__pyx_t_78); - if (__pyx_m) { - if (__pyx_d) { - __Pyx_AddTraceback("init aiohttp._http_parser", __pyx_clineno, __pyx_lineno, __pyx_filename); - } - Py_CLEAR(__pyx_m); - } else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_ImportError, "init aiohttp._http_parser"); - } - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - #if CYTHON_PEP489_MULTI_PHASE_INIT - return (__pyx_m != NULL) ? 0 : -1; - #elif PY_MAJOR_VERSION >= 3 - return __pyx_m; - #else - return; - #endif -} - -/* --- Runtime support code --- */ -/* Refnanny */ -#if CYTHON_REFNANNY -static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { - PyObject *m = NULL, *p = NULL; - void *r = NULL; - m = PyImport_ImportModule(modname); - if (!m) goto end; - p = PyObject_GetAttrString(m, "RefNannyAPI"); - if (!p) goto end; - r = PyLong_AsVoidPtr(p); -end: - Py_XDECREF(p); - Py_XDECREF(m); - return (__Pyx_RefNannyAPIStruct *)r; -} -#endif - -/* PyObjectGetAttrStr */ -#if CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro)) - return tp->tp_getattro(obj, attr_name); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_getattr)) - return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); -#endif - return PyObject_GetAttr(obj, attr_name); -} -#endif - -/* GetBuiltinName */ -static PyObject *__Pyx_GetBuiltinName(PyObject *name) { - PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); - if (unlikely(!result)) { - PyErr_Format(PyExc_NameError, -#if PY_MAJOR_VERSION >= 3 - "name '%U' is not defined", name); -#else - "name '%.200s' is not defined", PyString_AS_STRING(name)); -#endif - } - return result; -} - -/* GetItemInt */ -static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { - PyObject *r; - if (!j) return NULL; - r = PyObject_GetItem(o, j); - Py_DECREF(j); - return r; -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, - CYTHON_NCP_UNUSED int wraparound, - CYTHON_NCP_UNUSED int boundscheck) { -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - Py_ssize_t wrapped_i = i; - if (wraparound & unlikely(i < 0)) { - wrapped_i += PyList_GET_SIZE(o); - } - if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { - PyObject *r = PyList_GET_ITEM(o, wrapped_i); - Py_INCREF(r); - return r; - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -#else - return PySequence_GetItem(o, i); -#endif -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, - CYTHON_NCP_UNUSED int wraparound, - CYTHON_NCP_UNUSED int boundscheck) { -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - Py_ssize_t wrapped_i = i; - if (wraparound & unlikely(i < 0)) { - wrapped_i += PyTuple_GET_SIZE(o); - } - if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); - Py_INCREF(r); - return r; - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -#else - return PySequence_GetItem(o, i); -#endif -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, - CYTHON_NCP_UNUSED int wraparound, - CYTHON_NCP_UNUSED int boundscheck) { -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS - if (is_list || PyList_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); - if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { - PyObject *r = PyList_GET_ITEM(o, n); - Py_INCREF(r); - return r; - } - } - else if (PyTuple_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); - if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, n); - Py_INCREF(r); - return r; - } - } else { - PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; - if (likely(m && m->sq_item)) { - if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { - Py_ssize_t l = m->sq_length(o); - if (likely(l >= 0)) { - i += l; - } else { - if (!PyErr_ExceptionMatches(PyExc_OverflowError)) - return NULL; - PyErr_Clear(); - } - } - return m->sq_item(o, i); - } - } -#else - if (is_list || PySequence_Check(o)) { - return PySequence_GetItem(o, i); - } -#endif - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -} - -/* decode_c_bytes */ -static CYTHON_INLINE PyObject* __Pyx_decode_c_bytes( - const char* cstring, Py_ssize_t length, Py_ssize_t start, Py_ssize_t stop, - const char* encoding, const char* errors, - PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) { - if (unlikely((start < 0) | (stop < 0))) { - if (start < 0) { - start += length; - if (start < 0) - start = 0; - } - if (stop < 0) - stop += length; - } - if (stop > length) - stop = length; - if (unlikely(stop <= start)) - return __Pyx_NewRef(__pyx_empty_unicode); - length = stop - start; - cstring += start; - if (decode_func) { - return decode_func(cstring, length, errors); - } else { - return PyUnicode_Decode(cstring, length, encoding, errors); - } -} - -/* RaiseArgTupleInvalid */ -static void __Pyx_RaiseArgtupleInvalid( - const char* func_name, - int exact, - Py_ssize_t num_min, - Py_ssize_t num_max, - Py_ssize_t num_found) -{ - Py_ssize_t num_expected; - const char *more_or_less; - if (num_found < num_min) { - num_expected = num_min; - more_or_less = "at least"; - } else { - num_expected = num_max; - more_or_less = "at most"; - } - if (exact) { - more_or_less = "exactly"; - } - PyErr_Format(PyExc_TypeError, - "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", - func_name, more_or_less, num_expected, - (num_expected == 1) ? "" : "s", num_found); -} - -/* RaiseDoubleKeywords */ -static void __Pyx_RaiseDoubleKeywordsError( - const char* func_name, - PyObject* kw_name) -{ - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION >= 3 - "%s() got multiple values for keyword argument '%U'", func_name, kw_name); - #else - "%s() got multiple values for keyword argument '%s'", func_name, - PyString_AsString(kw_name)); - #endif -} - -/* ParseKeywords */ -static int __Pyx_ParseOptionalKeywords( - PyObject *kwds, - PyObject **argnames[], - PyObject *kwds2, - PyObject *values[], - Py_ssize_t num_pos_args, - const char* function_name) -{ - PyObject *key = 0, *value = 0; - Py_ssize_t pos = 0; - PyObject*** name; - PyObject*** first_kw_arg = argnames + num_pos_args; - while (PyDict_Next(kwds, &pos, &key, &value)) { - name = first_kw_arg; - while (*name && (**name != key)) name++; - if (*name) { - values[name-argnames] = value; - continue; - } - name = first_kw_arg; - #if PY_MAJOR_VERSION < 3 - if (likely(PyString_Check(key))) { - while (*name) { - if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) - && _PyString_Eq(**name, key)) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - if ((**argname == key) || ( - (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) - && _PyString_Eq(**argname, key))) { - goto arg_passed_twice; - } - argname++; - } - } - } else - #endif - if (likely(PyUnicode_Check(key))) { - while (*name) { - int cmp = (**name == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : - #endif - PyUnicode_Compare(**name, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - int cmp = (**argname == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : - #endif - PyUnicode_Compare(**argname, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) goto arg_passed_twice; - argname++; - } - } - } else - goto invalid_keyword_type; - if (kwds2) { - if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; - } else { - goto invalid_keyword; - } - } - return 0; -arg_passed_twice: - __Pyx_RaiseDoubleKeywordsError(function_name, key); - goto bad; -invalid_keyword_type: - PyErr_Format(PyExc_TypeError, - "%.200s() keywords must be strings", function_name); - goto bad; -invalid_keyword: - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION < 3 - "%.200s() got an unexpected keyword argument '%.200s'", - function_name, PyString_AsString(key)); - #else - "%s() got an unexpected keyword argument '%U'", - function_name, key); - #endif -bad: - return -1; -} - -/* None */ -static CYTHON_INLINE void __Pyx_RaiseClosureNameError(const char *varname) { - PyErr_Format(PyExc_NameError, "free variable '%s' referenced before assignment in enclosing scope", varname); -} - -/* RaiseTooManyValuesToUnpack */ -static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { - PyErr_Format(PyExc_ValueError, - "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); -} - -/* RaiseNeedMoreValuesToUnpack */ -static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { - PyErr_Format(PyExc_ValueError, - "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", - index, (index == 1) ? "" : "s"); -} - -/* IterFinish */ -static CYTHON_INLINE int __Pyx_IterFinish(void) { -#if CYTHON_FAST_THREAD_STATE - PyThreadState *tstate = __Pyx_PyThreadState_Current; - PyObject* exc_type = tstate->curexc_type; - if (unlikely(exc_type)) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) { - PyObject *exc_value, *exc_tb; - exc_value = tstate->curexc_value; - exc_tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; - Py_DECREF(exc_type); - Py_XDECREF(exc_value); - Py_XDECREF(exc_tb); - return 0; - } else { - return -1; - } - } - return 0; -#else - if (unlikely(PyErr_Occurred())) { - if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) { - PyErr_Clear(); - return 0; - } else { - return -1; - } - } - return 0; -#endif -} - -/* UnpackItemEndCheck */ -static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { - if (unlikely(retval)) { - Py_DECREF(retval); - __Pyx_RaiseTooManyValuesError(expected); - return -1; - } else { - return __Pyx_IterFinish(); - } - return 0; -} - -/* KeywordStringCheck */ -static int __Pyx_CheckKeywordStrings( - PyObject *kwdict, - const char* function_name, - int kw_allowed) -{ - PyObject* key = 0; - Py_ssize_t pos = 0; -#if CYTHON_COMPILING_IN_PYPY - if (!kw_allowed && PyDict_Next(kwdict, &pos, &key, 0)) - goto invalid_keyword; - return 1; -#else - while (PyDict_Next(kwdict, &pos, &key, 0)) { - #if PY_MAJOR_VERSION < 3 - if (unlikely(!PyString_Check(key))) - #endif - if (unlikely(!PyUnicode_Check(key))) - goto invalid_keyword_type; - } - if ((!kw_allowed) && unlikely(key)) - goto invalid_keyword; - return 1; -invalid_keyword_type: - PyErr_Format(PyExc_TypeError, - "%.200s() keywords must be strings", function_name); - return 0; -#endif -invalid_keyword: - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION < 3 - "%.200s() got an unexpected keyword argument '%.200s'", - function_name, PyString_AsString(key)); - #else - "%s() got an unexpected keyword argument '%U'", - function_name, key); - #endif - return 0; -} - -/* ExtTypeTest */ -static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) { - if (unlikely(!type)) { - PyErr_SetString(PyExc_SystemError, "Missing type object"); - return 0; - } - if (likely(__Pyx_TypeCheck(obj, type))) - return 1; - PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s", - Py_TYPE(obj)->tp_name, type->tp_name); - return 0; -} - -/* DictGetItem */ -#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY -static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) { - PyObject *value; - value = PyDict_GetItemWithError(d, key); - if (unlikely(!value)) { - if (!PyErr_Occurred()) { - if (unlikely(PyTuple_Check(key))) { - PyObject* args = PyTuple_Pack(1, key); - if (likely(args)) { - PyErr_SetObject(PyExc_KeyError, args); - Py_DECREF(args); - } - } else { - PyErr_SetObject(PyExc_KeyError, key); - } - } - return NULL; - } - Py_INCREF(value); - return value; -} -#endif - -/* PyErrExceptionMatches */ -#if CYTHON_FAST_THREAD_STATE -static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { - Py_ssize_t i, n; - n = PyTuple_GET_SIZE(tuple); -#if PY_MAJOR_VERSION >= 3 - for (i=0; icurexc_type; - if (exc_type == err) return 1; - if (unlikely(!exc_type)) return 0; - if (unlikely(PyTuple_Check(err))) - return __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); - return __Pyx_PyErr_GivenExceptionMatches(exc_type, err); -} -#endif - -/* PyErrFetchRestore */ -#if CYTHON_FAST_THREAD_STATE -static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - tmp_type = tstate->curexc_type; - tmp_value = tstate->curexc_value; - tmp_tb = tstate->curexc_traceback; - tstate->curexc_type = type; - tstate->curexc_value = value; - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -} -static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { - *type = tstate->curexc_type; - *value = tstate->curexc_value; - *tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -} -#endif - -/* GetAttr */ -static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) { -#if CYTHON_USE_TYPE_SLOTS -#if PY_MAJOR_VERSION >= 3 - if (likely(PyUnicode_Check(n))) -#else - if (likely(PyString_Check(n))) -#endif - return __Pyx_PyObject_GetAttrStr(o, n); -#endif - return PyObject_GetAttr(o, n); -} - -/* GetAttr3 */ -static PyObject *__Pyx_GetAttr3Default(PyObject *d) { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) - return NULL; - __Pyx_PyErr_Clear(); - Py_INCREF(d); - return d; -} -static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) { - PyObject *r = __Pyx_GetAttr(o, n); - return (likely(r)) ? r : __Pyx_GetAttr3Default(d); -} - -/* PyDictVersioning */ -#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { - PyObject *dict = Py_TYPE(obj)->tp_dict; - return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; -} -static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { - PyObject **dictptr = NULL; - Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; - if (offset) { -#if CYTHON_COMPILING_IN_CPYTHON - dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); -#else - dictptr = _PyObject_GetDictPtr(obj); -#endif - } - return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; -} -static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { - PyObject *dict = Py_TYPE(obj)->tp_dict; - if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) - return 0; - return obj_dict_version == __Pyx_get_object_dict_version(obj); -} -#endif - -/* GetModuleGlobalName */ -#if CYTHON_USE_DICT_VERSIONS -static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) -#else -static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) -#endif -{ - PyObject *result; -#if !CYTHON_AVOID_BORROWED_REFS -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 - result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); - __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) - if (likely(result)) { - return __Pyx_NewRef(result); - } else if (unlikely(PyErr_Occurred())) { - return NULL; - } -#else - result = PyDict_GetItem(__pyx_d, name); - __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) - if (likely(result)) { - return __Pyx_NewRef(result); - } -#endif -#else - result = PyObject_GetItem(__pyx_d, name); - __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) - if (likely(result)) { - return __Pyx_NewRef(result); - } - PyErr_Clear(); -#endif - return __Pyx_GetBuiltinName(name); -} - -/* PyFunctionFastCall */ -#if CYTHON_FAST_PYCALL -static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, - PyObject *globals) { - PyFrameObject *f; - PyThreadState *tstate = __Pyx_PyThreadState_Current; - PyObject **fastlocals; - Py_ssize_t i; - PyObject *result; - assert(globals != NULL); - /* XXX Perhaps we should create a specialized - PyFrame_New() that doesn't take locals, but does - take builtins without sanity checking them. - */ - assert(tstate != NULL); - f = PyFrame_New(tstate, co, globals, NULL); - if (f == NULL) { - return NULL; - } - fastlocals = __Pyx_PyFrame_GetLocalsplus(f); - for (i = 0; i < na; i++) { - Py_INCREF(*args); - fastlocals[i] = *args++; - } - result = PyEval_EvalFrameEx(f,0); - ++tstate->recursion_depth; - Py_DECREF(f); - --tstate->recursion_depth; - return result; -} -#if 1 || PY_VERSION_HEX < 0x030600B1 -static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { - PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); - PyObject *globals = PyFunction_GET_GLOBALS(func); - PyObject *argdefs = PyFunction_GET_DEFAULTS(func); - PyObject *closure; -#if PY_MAJOR_VERSION >= 3 - PyObject *kwdefs; -#endif - PyObject *kwtuple, **k; - PyObject **d; - Py_ssize_t nd; - Py_ssize_t nk; - PyObject *result; - assert(kwargs == NULL || PyDict_Check(kwargs)); - nk = kwargs ? PyDict_Size(kwargs) : 0; - if (Py_EnterRecursiveCall((char*)" while calling a Python object")) { - return NULL; - } - if ( -#if PY_MAJOR_VERSION >= 3 - co->co_kwonlyargcount == 0 && -#endif - likely(kwargs == NULL || nk == 0) && - co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { - if (argdefs == NULL && co->co_argcount == nargs) { - result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); - goto done; - } - else if (nargs == 0 && argdefs != NULL - && co->co_argcount == Py_SIZE(argdefs)) { - /* function called with no arguments, but all parameters have - a default value: use default values as arguments .*/ - args = &PyTuple_GET_ITEM(argdefs, 0); - result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); - goto done; - } - } - if (kwargs != NULL) { - Py_ssize_t pos, i; - kwtuple = PyTuple_New(2 * nk); - if (kwtuple == NULL) { - result = NULL; - goto done; - } - k = &PyTuple_GET_ITEM(kwtuple, 0); - pos = i = 0; - while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { - Py_INCREF(k[i]); - Py_INCREF(k[i+1]); - i += 2; - } - nk = i / 2; - } - else { - kwtuple = NULL; - k = NULL; - } - closure = PyFunction_GET_CLOSURE(func); -#if PY_MAJOR_VERSION >= 3 - kwdefs = PyFunction_GET_KW_DEFAULTS(func); -#endif - if (argdefs != NULL) { - d = &PyTuple_GET_ITEM(argdefs, 0); - nd = Py_SIZE(argdefs); - } - else { - d = NULL; - nd = 0; - } -#if PY_MAJOR_VERSION >= 3 - result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, - args, (int)nargs, - k, (int)nk, - d, (int)nd, kwdefs, closure); -#else - result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, - args, (int)nargs, - k, (int)nk, - d, (int)nd, closure); -#endif - Py_XDECREF(kwtuple); -done: - Py_LeaveRecursiveCall(); - return result; -} -#endif -#endif - -/* PyObjectCall */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyObject *result; - ternaryfunc call = func->ob_type->tp_call; - if (unlikely(!call)) - return PyObject_Call(func, arg, kw); - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; - result = (*call)(func, arg, kw); - Py_LeaveRecursiveCall(); - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); - } - return result; -} -#endif - -/* PyObjectCallMethO */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { - PyObject *self, *result; - PyCFunction cfunc; - cfunc = PyCFunction_GET_FUNCTION(func); - self = PyCFunction_GET_SELF(func); - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; - result = cfunc(self, arg); - Py_LeaveRecursiveCall(); - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); - } - return result; -} -#endif - -/* PyObjectCallNoArg */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) { -#if CYTHON_FAST_PYCALL - if (PyFunction_Check(func)) { - return __Pyx_PyFunction_FastCall(func, NULL, 0); - } -#endif -#ifdef __Pyx_CyFunction_USED - if (likely(PyCFunction_Check(func) || __Pyx_CyFunction_Check(func))) -#else - if (likely(PyCFunction_Check(func))) -#endif - { - if (likely(PyCFunction_GET_FLAGS(func) & METH_NOARGS)) { - return __Pyx_PyObject_CallMethO(func, NULL); - } - } - return __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL); -} -#endif - -/* PyCFunctionFastCall */ -#if CYTHON_FAST_PYCCALL -static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) { - PyCFunctionObject *func = (PyCFunctionObject*)func_obj; - PyCFunction meth = PyCFunction_GET_FUNCTION(func); - PyObject *self = PyCFunction_GET_SELF(func); - int flags = PyCFunction_GET_FLAGS(func); - assert(PyCFunction_Check(func)); - assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))); - assert(nargs >= 0); - assert(nargs == 0 || args != NULL); - /* _PyCFunction_FastCallDict() must not be called with an exception set, - because it may clear it (directly or indirectly) and so the - caller loses its exception */ - assert(!PyErr_Occurred()); - if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) { - return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL); - } else { - return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs); - } -} -#endif - -/* PyObjectCallOneArg */ -#if CYTHON_COMPILING_IN_CPYTHON -static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) { - PyObject *result; - PyObject *args = PyTuple_New(1); - if (unlikely(!args)) return NULL; - Py_INCREF(arg); - PyTuple_SET_ITEM(args, 0, arg); - result = __Pyx_PyObject_Call(func, args, NULL); - Py_DECREF(args); - return result; -} -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { -#if CYTHON_FAST_PYCALL - if (PyFunction_Check(func)) { - return __Pyx_PyFunction_FastCall(func, &arg, 1); - } -#endif - if (likely(PyCFunction_Check(func))) { - if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) { - return __Pyx_PyObject_CallMethO(func, arg); -#if CYTHON_FAST_PYCCALL - } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) { - return __Pyx_PyCFunction_FastCall(func, &arg, 1); -#endif - } - } - return __Pyx__PyObject_CallOneArg(func, arg); -} -#else -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { - PyObject *result; - PyObject *args = PyTuple_Pack(1, arg); - if (unlikely(!args)) return NULL; - result = __Pyx_PyObject_Call(func, args, NULL); - Py_DECREF(args); - return result; -} -#endif - -/* PyObjectCall2Args */ -static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { - PyObject *args, *result = NULL; - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(function)) { - PyObject *args[2] = {arg1, arg2}; - return __Pyx_PyFunction_FastCall(function, args, 2); - } - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(function)) { - PyObject *args[2] = {arg1, arg2}; - return __Pyx_PyCFunction_FastCall(function, args, 2); - } - #endif - args = PyTuple_New(2); - if (unlikely(!args)) goto done; - Py_INCREF(arg1); - PyTuple_SET_ITEM(args, 0, arg1); - Py_INCREF(arg2); - PyTuple_SET_ITEM(args, 1, arg2); - Py_INCREF(function); - result = __Pyx_PyObject_Call(function, args, NULL); - Py_DECREF(args); - Py_DECREF(function); -done: - return result; -} - -/* RaiseException */ -#if PY_MAJOR_VERSION < 3 -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, - CYTHON_UNUSED PyObject *cause) { - __Pyx_PyThreadState_declare - Py_XINCREF(type); - if (!value || value == Py_None) - value = NULL; - else - Py_INCREF(value); - if (!tb || tb == Py_None) - tb = NULL; - else { - Py_INCREF(tb); - if (!PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto raise_error; - } - } - if (PyType_Check(type)) { -#if CYTHON_COMPILING_IN_PYPY - if (!value) { - Py_INCREF(Py_None); - value = Py_None; - } -#endif - PyErr_NormalizeException(&type, &value, &tb); - } else { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto raise_error; - } - value = type; - type = (PyObject*) Py_TYPE(type); - Py_INCREF(type); - if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto raise_error; - } - } - __Pyx_PyThreadState_assign - __Pyx_ErrRestore(type, value, tb); - return; -raise_error: - Py_XDECREF(value); - Py_XDECREF(type); - Py_XDECREF(tb); - return; -} -#else -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { - PyObject* owned_instance = NULL; - if (tb == Py_None) { - tb = 0; - } else if (tb && !PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto bad; - } - if (value == Py_None) - value = 0; - if (PyExceptionInstance_Check(type)) { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto bad; - } - value = type; - type = (PyObject*) Py_TYPE(value); - } else if (PyExceptionClass_Check(type)) { - PyObject *instance_class = NULL; - if (value && PyExceptionInstance_Check(value)) { - instance_class = (PyObject*) Py_TYPE(value); - if (instance_class != type) { - int is_subclass = PyObject_IsSubclass(instance_class, type); - if (!is_subclass) { - instance_class = NULL; - } else if (unlikely(is_subclass == -1)) { - goto bad; - } else { - type = instance_class; - } - } - } - if (!instance_class) { - PyObject *args; - if (!value) - args = PyTuple_New(0); - else if (PyTuple_Check(value)) { - Py_INCREF(value); - args = value; - } else - args = PyTuple_Pack(1, value); - if (!args) - goto bad; - owned_instance = PyObject_Call(type, args, NULL); - Py_DECREF(args); - if (!owned_instance) - goto bad; - value = owned_instance; - if (!PyExceptionInstance_Check(value)) { - PyErr_Format(PyExc_TypeError, - "calling %R should have returned an instance of " - "BaseException, not %R", - type, Py_TYPE(value)); - goto bad; - } - } - } else { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto bad; - } - if (cause) { - PyObject *fixed_cause; - if (cause == Py_None) { - fixed_cause = NULL; - } else if (PyExceptionClass_Check(cause)) { - fixed_cause = PyObject_CallObject(cause, NULL); - if (fixed_cause == NULL) - goto bad; - } else if (PyExceptionInstance_Check(cause)) { - fixed_cause = cause; - Py_INCREF(fixed_cause); - } else { - PyErr_SetString(PyExc_TypeError, - "exception causes must derive from " - "BaseException"); - goto bad; - } - PyException_SetCause(value, fixed_cause); - } - PyErr_SetObject(type, value); - if (tb) { -#if CYTHON_COMPILING_IN_PYPY - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); - Py_INCREF(tb); - PyErr_Restore(tmp_type, tmp_value, tb); - Py_XDECREF(tmp_tb); -#else - PyThreadState *tstate = __Pyx_PyThreadState_Current; - PyObject* tmp_tb = tstate->curexc_traceback; - if (tb != tmp_tb) { - Py_INCREF(tb); - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_tb); - } -#endif - } -bad: - Py_XDECREF(owned_instance); - return; -} -#endif - -/* BytesEquals */ -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else - if (s1 == s2) { - return (equals == Py_EQ); - } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { - const char *ps1, *ps2; - Py_ssize_t length = PyBytes_GET_SIZE(s1); - if (length != PyBytes_GET_SIZE(s2)) - return (equals == Py_NE); - ps1 = PyBytes_AS_STRING(s1); - ps2 = PyBytes_AS_STRING(s2); - if (ps1[0] != ps2[0]) { - return (equals == Py_NE); - } else if (length == 1) { - return (equals == Py_EQ); - } else { - int result; -#if CYTHON_USE_UNICODE_INTERNALS - Py_hash_t hash1, hash2; - hash1 = ((PyBytesObject*)s1)->ob_shash; - hash2 = ((PyBytesObject*)s2)->ob_shash; - if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { - return (equals == Py_NE); - } -#endif - result = memcmp(ps1, ps2, (size_t)length); - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { - return (equals == Py_NE); - } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { - return (equals == Py_NE); - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -#endif -} - -/* UnicodeEquals */ -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else -#if PY_MAJOR_VERSION < 3 - PyObject* owned_ref = NULL; -#endif - int s1_is_unicode, s2_is_unicode; - if (s1 == s2) { - goto return_eq; - } - s1_is_unicode = PyUnicode_CheckExact(s1); - s2_is_unicode = PyUnicode_CheckExact(s2); -#if PY_MAJOR_VERSION < 3 - if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { - owned_ref = PyUnicode_FromObject(s2); - if (unlikely(!owned_ref)) - return -1; - s2 = owned_ref; - s2_is_unicode = 1; - } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { - owned_ref = PyUnicode_FromObject(s1); - if (unlikely(!owned_ref)) - return -1; - s1 = owned_ref; - s1_is_unicode = 1; - } else if (((!s2_is_unicode) & (!s1_is_unicode))) { - return __Pyx_PyBytes_Equals(s1, s2, equals); - } -#endif - if (s1_is_unicode & s2_is_unicode) { - Py_ssize_t length; - int kind; - void *data1, *data2; - if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) - return -1; - length = __Pyx_PyUnicode_GET_LENGTH(s1); - if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { - goto return_ne; - } -#if CYTHON_USE_UNICODE_INTERNALS - { - Py_hash_t hash1, hash2; - #if CYTHON_PEP393_ENABLED - hash1 = ((PyASCIIObject*)s1)->hash; - hash2 = ((PyASCIIObject*)s2)->hash; - #else - hash1 = ((PyUnicodeObject*)s1)->hash; - hash2 = ((PyUnicodeObject*)s2)->hash; - #endif - if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { - goto return_ne; - } - } -#endif - kind = __Pyx_PyUnicode_KIND(s1); - if (kind != __Pyx_PyUnicode_KIND(s2)) { - goto return_ne; - } - data1 = __Pyx_PyUnicode_DATA(s1); - data2 = __Pyx_PyUnicode_DATA(s2); - if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { - goto return_ne; - } else if (length == 1) { - goto return_eq; - } else { - int result = memcmp(data1, data2, (size_t)(length * kind)); - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & s2_is_unicode) { - goto return_ne; - } else if ((s2 == Py_None) & s1_is_unicode) { - goto return_ne; - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -return_eq: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ); -return_ne: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_NE); -#endif -} - -/* SliceObject */ -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(PyObject* obj, - Py_ssize_t cstart, Py_ssize_t cstop, - PyObject** _py_start, PyObject** _py_stop, PyObject** _py_slice, - int has_cstart, int has_cstop, CYTHON_UNUSED int wraparound) { -#if CYTHON_USE_TYPE_SLOTS - PyMappingMethods* mp; -#if PY_MAJOR_VERSION < 3 - PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence; - if (likely(ms && ms->sq_slice)) { - if (!has_cstart) { - if (_py_start && (*_py_start != Py_None)) { - cstart = __Pyx_PyIndex_AsSsize_t(*_py_start); - if ((cstart == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; - } else - cstart = 0; - } - if (!has_cstop) { - if (_py_stop && (*_py_stop != Py_None)) { - cstop = __Pyx_PyIndex_AsSsize_t(*_py_stop); - if ((cstop == (Py_ssize_t)-1) && PyErr_Occurred()) goto bad; - } else - cstop = PY_SSIZE_T_MAX; - } - if (wraparound && unlikely((cstart < 0) | (cstop < 0)) && likely(ms->sq_length)) { - Py_ssize_t l = ms->sq_length(obj); - if (likely(l >= 0)) { - if (cstop < 0) { - cstop += l; - if (cstop < 0) cstop = 0; - } - if (cstart < 0) { - cstart += l; - if (cstart < 0) cstart = 0; - } - } else { - if (!PyErr_ExceptionMatches(PyExc_OverflowError)) - goto bad; - PyErr_Clear(); - } - } - return ms->sq_slice(obj, cstart, cstop); - } -#endif - mp = Py_TYPE(obj)->tp_as_mapping; - if (likely(mp && mp->mp_subscript)) -#endif - { - PyObject* result; - PyObject *py_slice, *py_start, *py_stop; - if (_py_slice) { - py_slice = *_py_slice; - } else { - PyObject* owned_start = NULL; - PyObject* owned_stop = NULL; - if (_py_start) { - py_start = *_py_start; - } else { - if (has_cstart) { - owned_start = py_start = PyInt_FromSsize_t(cstart); - if (unlikely(!py_start)) goto bad; - } else - py_start = Py_None; - } - if (_py_stop) { - py_stop = *_py_stop; - } else { - if (has_cstop) { - owned_stop = py_stop = PyInt_FromSsize_t(cstop); - if (unlikely(!py_stop)) { - Py_XDECREF(owned_start); - goto bad; - } - } else - py_stop = Py_None; - } - py_slice = PySlice_New(py_start, py_stop, Py_None); - Py_XDECREF(owned_start); - Py_XDECREF(owned_stop); - if (unlikely(!py_slice)) goto bad; - } -#if CYTHON_USE_TYPE_SLOTS - result = mp->mp_subscript(obj, py_slice); -#else - result = PyObject_GetItem(obj, py_slice); -#endif - if (!_py_slice) { - Py_DECREF(py_slice); - } - return result; - } - PyErr_Format(PyExc_TypeError, - "'%.200s' object is unsliceable", Py_TYPE(obj)->tp_name); -bad: - return NULL; -} - -/* GetException */ -#if CYTHON_FAST_THREAD_STATE -static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) -#else -static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) -#endif -{ - PyObject *local_type, *local_value, *local_tb; -#if CYTHON_FAST_THREAD_STATE - PyObject *tmp_type, *tmp_value, *tmp_tb; - local_type = tstate->curexc_type; - local_value = tstate->curexc_value; - local_tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -#else - PyErr_Fetch(&local_type, &local_value, &local_tb); -#endif - PyErr_NormalizeException(&local_type, &local_value, &local_tb); -#if CYTHON_FAST_THREAD_STATE - if (unlikely(tstate->curexc_type)) -#else - if (unlikely(PyErr_Occurred())) -#endif - goto bad; - #if PY_MAJOR_VERSION >= 3 - if (local_tb) { - if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) - goto bad; - } - #endif - Py_XINCREF(local_tb); - Py_XINCREF(local_type); - Py_XINCREF(local_value); - *type = local_type; - *value = local_value; - *tb = local_tb; -#if CYTHON_FAST_THREAD_STATE - #if CYTHON_USE_EXC_INFO_STACK - { - _PyErr_StackItem *exc_info = tstate->exc_info; - tmp_type = exc_info->exc_type; - tmp_value = exc_info->exc_value; - tmp_tb = exc_info->exc_traceback; - exc_info->exc_type = local_type; - exc_info->exc_value = local_value; - exc_info->exc_traceback = local_tb; - } - #else - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = local_type; - tstate->exc_value = local_value; - tstate->exc_traceback = local_tb; - #endif - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_SetExcInfo(local_type, local_value, local_tb); -#endif - return 0; -bad: - *type = 0; - *value = 0; - *tb = 0; - Py_XDECREF(local_type); - Py_XDECREF(local_value); - Py_XDECREF(local_tb); - return -1; -} - -/* SwapException */ -#if CYTHON_FAST_THREAD_STATE -static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - #if CYTHON_USE_EXC_INFO_STACK - _PyErr_StackItem *exc_info = tstate->exc_info; - tmp_type = exc_info->exc_type; - tmp_value = exc_info->exc_value; - tmp_tb = exc_info->exc_traceback; - exc_info->exc_type = *type; - exc_info->exc_value = *value; - exc_info->exc_traceback = *tb; - #else - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = *type; - tstate->exc_value = *value; - tstate->exc_traceback = *tb; - #endif - *type = tmp_type; - *value = tmp_value; - *tb = tmp_tb; -} -#else -static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb); - PyErr_SetExcInfo(*type, *value, *tb); - *type = tmp_type; - *value = tmp_value; - *tb = tmp_tb; -} -#endif - -/* GetTopmostException */ -#if CYTHON_USE_EXC_INFO_STACK -static _PyErr_StackItem * -__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) -{ - _PyErr_StackItem *exc_info = tstate->exc_info; - while ((exc_info->exc_type == NULL || exc_info->exc_type == Py_None) && - exc_info->previous_item != NULL) - { - exc_info = exc_info->previous_item; - } - return exc_info; -} -#endif - -/* SaveResetException */ -#if CYTHON_FAST_THREAD_STATE -static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { - #if CYTHON_USE_EXC_INFO_STACK - _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); - *type = exc_info->exc_type; - *value = exc_info->exc_value; - *tb = exc_info->exc_traceback; - #else - *type = tstate->exc_type; - *value = tstate->exc_value; - *tb = tstate->exc_traceback; - #endif - Py_XINCREF(*type); - Py_XINCREF(*value); - Py_XINCREF(*tb); -} -static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - #if CYTHON_USE_EXC_INFO_STACK - _PyErr_StackItem *exc_info = tstate->exc_info; - tmp_type = exc_info->exc_type; - tmp_value = exc_info->exc_value; - tmp_tb = exc_info->exc_traceback; - exc_info->exc_type = type; - exc_info->exc_value = value; - exc_info->exc_traceback = tb; - #else - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = type; - tstate->exc_value = value; - tstate->exc_traceback = tb; - #endif - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -} -#endif - -/* decode_c_string */ -static CYTHON_INLINE PyObject* __Pyx_decode_c_string( - const char* cstring, Py_ssize_t start, Py_ssize_t stop, - const char* encoding, const char* errors, - PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) { - Py_ssize_t length; - if (unlikely((start < 0) | (stop < 0))) { - size_t slen = strlen(cstring); - if (unlikely(slen > (size_t) PY_SSIZE_T_MAX)) { - PyErr_SetString(PyExc_OverflowError, - "c-string too long to convert to Python"); - return NULL; - } - length = (Py_ssize_t) slen; - if (start < 0) { - start += length; - if (start < 0) - start = 0; - } - if (stop < 0) - stop += length; - } - if (unlikely(stop <= start)) - return __Pyx_NewRef(__pyx_empty_unicode); - length = stop - start; - cstring += start; - if (decode_func) { - return decode_func(cstring, length, errors); - } else { - return PyUnicode_Decode(cstring, length, encoding, errors); - } -} - -/* UnpackUnboundCMethod */ -static int __Pyx_TryUnpackUnboundCMethod(__Pyx_CachedCFunction* target) { - PyObject *method; - method = __Pyx_PyObject_GetAttrStr(target->type, *target->method_name); - if (unlikely(!method)) - return -1; - target->method = method; -#if CYTHON_COMPILING_IN_CPYTHON - #if PY_MAJOR_VERSION >= 3 - if (likely(__Pyx_TypeCheck(method, &PyMethodDescr_Type))) - #endif - { - PyMethodDescrObject *descr = (PyMethodDescrObject*) method; - target->func = descr->d_method->ml_meth; - target->flag = descr->d_method->ml_flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_STACKLESS); - } -#endif - return 0; -} - -/* CallUnboundCMethod1 */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg) { - if (likely(cfunc->func)) { - int flag = cfunc->flag; - if (flag == METH_O) { - return (*(cfunc->func))(self, arg); - } else if (PY_VERSION_HEX >= 0x030600B1 && flag == METH_FASTCALL) { - if (PY_VERSION_HEX >= 0x030700A0) { - return (*(__Pyx_PyCFunctionFast)(void*)(PyCFunction)cfunc->func)(self, &arg, 1); - } else { - return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL); - } - } else if (PY_VERSION_HEX >= 0x030700A0 && flag == (METH_FASTCALL | METH_KEYWORDS)) { - return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL); - } - } - return __Pyx__CallUnboundCMethod1(cfunc, self, arg); -} -#endif -static PyObject* __Pyx__CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg){ - PyObject *args, *result = NULL; - if (unlikely(!cfunc->func && !cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL; -#if CYTHON_COMPILING_IN_CPYTHON - if (cfunc->func && (cfunc->flag & METH_VARARGS)) { - args = PyTuple_New(1); - if (unlikely(!args)) goto bad; - Py_INCREF(arg); - PyTuple_SET_ITEM(args, 0, arg); - if (cfunc->flag & METH_KEYWORDS) - result = (*(PyCFunctionWithKeywords)(void*)(PyCFunction)cfunc->func)(self, args, NULL); - else - result = (*cfunc->func)(self, args); - } else { - args = PyTuple_New(2); - if (unlikely(!args)) goto bad; - Py_INCREF(self); - PyTuple_SET_ITEM(args, 0, self); - Py_INCREF(arg); - PyTuple_SET_ITEM(args, 1, arg); - result = __Pyx_PyObject_Call(cfunc->method, args, NULL); - } -#else - args = PyTuple_Pack(2, self, arg); - if (unlikely(!args)) goto bad; - result = __Pyx_PyObject_Call(cfunc->method, args, NULL); -#endif -bad: - Py_XDECREF(args); - return result; -} - -/* Import */ -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { - PyObject *empty_list = 0; - PyObject *module = 0; - PyObject *global_dict = 0; - PyObject *empty_dict = 0; - PyObject *list; - #if PY_MAJOR_VERSION < 3 - PyObject *py_import; - py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); - if (!py_import) - goto bad; - #endif - if (from_list) - list = from_list; - else { - empty_list = PyList_New(0); - if (!empty_list) - goto bad; - list = empty_list; - } - global_dict = PyModule_GetDict(__pyx_m); - if (!global_dict) - goto bad; - empty_dict = PyDict_New(); - if (!empty_dict) - goto bad; - { - #if PY_MAJOR_VERSION >= 3 - if (level == -1) { - if ((1) && (strchr(__Pyx_MODULE_NAME, '.'))) { - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, 1); - if (!module) { - if (!PyErr_ExceptionMatches(PyExc_ImportError)) - goto bad; - PyErr_Clear(); - } - } - level = 0; - } - #endif - if (!module) { - #if PY_MAJOR_VERSION < 3 - PyObject *py_level = PyInt_FromLong(level); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, (PyObject *)NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, level); - #endif - } - } -bad: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(py_import); - #endif - Py_XDECREF(empty_list); - Py_XDECREF(empty_dict); - return module; -} - -/* ImportFrom */ -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { - PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); - if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Format(PyExc_ImportError, - #if PY_MAJOR_VERSION < 3 - "cannot import name %.230s", PyString_AS_STRING(name)); - #else - "cannot import name %S", name); - #endif - } - return value; -} - -/* HasAttr */ -static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) { - PyObject *r; - if (unlikely(!__Pyx_PyBaseString_Check(n))) { - PyErr_SetString(PyExc_TypeError, - "hasattr(): attribute name must be string"); - return -1; - } - r = __Pyx_GetAttr(o, n); - if (unlikely(!r)) { - PyErr_Clear(); - return 0; - } else { - Py_DECREF(r); - return 1; - } -} - -/* PyObject_GenericGetAttrNoDict */ -#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 -static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) { - PyErr_Format(PyExc_AttributeError, -#if PY_MAJOR_VERSION >= 3 - "'%.50s' object has no attribute '%U'", - tp->tp_name, attr_name); -#else - "'%.50s' object has no attribute '%.400s'", - tp->tp_name, PyString_AS_STRING(attr_name)); -#endif - return NULL; -} -static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) { - PyObject *descr; - PyTypeObject *tp = Py_TYPE(obj); - if (unlikely(!PyString_Check(attr_name))) { - return PyObject_GenericGetAttr(obj, attr_name); - } - assert(!tp->tp_dictoffset); - descr = _PyType_Lookup(tp, attr_name); - if (unlikely(!descr)) { - return __Pyx_RaiseGenericGetAttributeError(tp, attr_name); - } - Py_INCREF(descr); - #if PY_MAJOR_VERSION < 3 - if (likely(PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS))) - #endif - { - descrgetfunc f = Py_TYPE(descr)->tp_descr_get; - if (unlikely(f)) { - PyObject *res = f(descr, obj, (PyObject *)tp); - Py_DECREF(descr); - return res; - } - } - return descr; -} -#endif - -/* PyObject_GenericGetAttr */ -#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000 -static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name) { - if (unlikely(Py_TYPE(obj)->tp_dictoffset)) { - return PyObject_GenericGetAttr(obj, attr_name); - } - return __Pyx_PyObject_GenericGetAttrNoDict(obj, attr_name); -} -#endif - -/* PyObjectGetAttrStrNoError */ -static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError))) - __Pyx_PyErr_Clear(); -} -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) { - PyObject *result; -#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1 - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) { - return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1); - } -#endif - result = __Pyx_PyObject_GetAttrStr(obj, attr_name); - if (unlikely(!result)) { - __Pyx_PyObject_GetAttrStr_ClearAttributeError(); - } - return result; -} - -/* SetupReduce */ -static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) { - int ret; - PyObject *name_attr; - name_attr = __Pyx_PyObject_GetAttrStr(meth, __pyx_n_s_name); - if (likely(name_attr)) { - ret = PyObject_RichCompareBool(name_attr, name, Py_EQ); - } else { - ret = -1; - } - if (unlikely(ret < 0)) { - PyErr_Clear(); - ret = 0; - } - Py_XDECREF(name_attr); - return ret; -} -static int __Pyx_setup_reduce(PyObject* type_obj) { - int ret = 0; - PyObject *object_reduce = NULL; - PyObject *object_reduce_ex = NULL; - PyObject *reduce = NULL; - PyObject *reduce_ex = NULL; - PyObject *reduce_cython = NULL; - PyObject *setstate = NULL; - PyObject *setstate_cython = NULL; -#if CYTHON_USE_PYTYPE_LOOKUP - if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD; -#else - if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD; -#endif -#if CYTHON_USE_PYTYPE_LOOKUP - object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; -#else - object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD; -#endif - reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto __PYX_BAD; - if (reduce_ex == object_reduce_ex) { -#if CYTHON_USE_PYTYPE_LOOKUP - object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; -#else - object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD; -#endif - reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto __PYX_BAD; - if (reduce == object_reduce || __Pyx_setup_reduce_is_named(reduce, __pyx_n_s_reduce_cython)) { - reduce_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_reduce_cython); - if (likely(reduce_cython)) { - ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD; - ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD; - } else if (reduce == object_reduce || PyErr_Occurred()) { - goto __PYX_BAD; - } - setstate = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate); - if (!setstate) PyErr_Clear(); - if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_n_s_setstate_cython)) { - setstate_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_setstate_cython); - if (likely(setstate_cython)) { - ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD; - ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD; - } else if (!setstate || PyErr_Occurred()) { - goto __PYX_BAD; - } - } - PyType_Modified((PyTypeObject*)type_obj); - } - } - goto __PYX_GOOD; -__PYX_BAD: - if (!PyErr_Occurred()) - PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name); - ret = -1; -__PYX_GOOD: -#if !CYTHON_USE_PYTYPE_LOOKUP - Py_XDECREF(object_reduce); - Py_XDECREF(object_reduce_ex); -#endif - Py_XDECREF(reduce); - Py_XDECREF(reduce_ex); - Py_XDECREF(reduce_cython); - Py_XDECREF(setstate); - Py_XDECREF(setstate_cython); - return ret; -} - -/* SetVTable */ -static int __Pyx_SetVtable(PyObject *dict, void *vtable) { -#if PY_VERSION_HEX >= 0x02070000 - PyObject *ob = PyCapsule_New(vtable, 0, 0); -#else - PyObject *ob = PyCObject_FromVoidPtr(vtable, 0); -#endif - if (!ob) - goto bad; - if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0) - goto bad; - Py_DECREF(ob); - return 0; -bad: - Py_XDECREF(ob); - return -1; -} - -/* TypeImport */ -#ifndef __PYX_HAVE_RT_ImportType -#define __PYX_HAVE_RT_ImportType -static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name, const char *class_name, - size_t size, enum __Pyx_ImportType_CheckSize check_size) -{ - PyObject *result = 0; - char warning[200]; - Py_ssize_t basicsize; -#ifdef Py_LIMITED_API - PyObject *py_basicsize; -#endif - result = PyObject_GetAttrString(module, class_name); - if (!result) - goto bad; - if (!PyType_Check(result)) { - PyErr_Format(PyExc_TypeError, - "%.200s.%.200s is not a type object", - module_name, class_name); - goto bad; - } -#ifndef Py_LIMITED_API - basicsize = ((PyTypeObject *)result)->tp_basicsize; -#else - py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); - if (!py_basicsize) - goto bad; - basicsize = PyLong_AsSsize_t(py_basicsize); - Py_DECREF(py_basicsize); - py_basicsize = 0; - if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) - goto bad; -#endif - if ((size_t)basicsize < size) { - PyErr_Format(PyExc_ValueError, - "%.200s.%.200s size changed, may indicate binary incompatibility. " - "Expected %zd from C header, got %zd from PyObject", - module_name, class_name, size, basicsize); - goto bad; - } - if (check_size == __Pyx_ImportType_CheckSize_Error && (size_t)basicsize != size) { - PyErr_Format(PyExc_ValueError, - "%.200s.%.200s size changed, may indicate binary incompatibility. " - "Expected %zd from C header, got %zd from PyObject", - module_name, class_name, size, basicsize); - goto bad; - } - else if (check_size == __Pyx_ImportType_CheckSize_Warn && (size_t)basicsize > size) { - PyOS_snprintf(warning, sizeof(warning), - "%s.%s size changed, may indicate binary incompatibility. " - "Expected %zd from C header, got %zd from PyObject", - module_name, class_name, size, basicsize); - if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; - } - return (PyTypeObject *)result; -bad: - Py_XDECREF(result); - return NULL; -} -#endif - -/* CLineInTraceback */ -#ifndef CYTHON_CLINE_IN_TRACEBACK -static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int c_line) { - PyObject *use_cline; - PyObject *ptype, *pvalue, *ptraceback; -#if CYTHON_COMPILING_IN_CPYTHON - PyObject **cython_runtime_dict; -#endif - if (unlikely(!__pyx_cython_runtime)) { - return c_line; - } - __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); -#if CYTHON_COMPILING_IN_CPYTHON - cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); - if (likely(cython_runtime_dict)) { - __PYX_PY_DICT_LOOKUP_IF_MODIFIED( - use_cline, *cython_runtime_dict, - __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) - } else -#endif - { - PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); - if (use_cline_obj) { - use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; - Py_DECREF(use_cline_obj); - } else { - PyErr_Clear(); - use_cline = NULL; - } - } - if (!use_cline) { - c_line = 0; - PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); - } - else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { - c_line = 0; - } - __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); - return c_line; -} -#endif - -/* CodeObjectCache */ -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { - int start = 0, mid = 0, end = count - 1; - if (end >= 0 && code_line > entries[end].code_line) { - return count; - } - while (start < end) { - mid = start + (end - start) / 2; - if (code_line < entries[mid].code_line) { - end = mid; - } else if (code_line > entries[mid].code_line) { - start = mid + 1; - } else { - return mid; - } - } - if (code_line <= entries[mid].code_line) { - return mid; - } else { - return mid + 1; - } -} -static PyCodeObject *__pyx_find_code_object(int code_line) { - PyCodeObject* code_object; - int pos; - if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { - return NULL; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { - return NULL; - } - code_object = __pyx_code_cache.entries[pos].code_object; - Py_INCREF(code_object); - return code_object; -} -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { - int pos, i; - __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; - if (unlikely(!code_line)) { - return; - } - if (unlikely(!entries)) { - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); - if (likely(entries)) { - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = 64; - __pyx_code_cache.count = 1; - entries[0].code_line = code_line; - entries[0].code_object = code_object; - Py_INCREF(code_object); - } - return; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { - PyCodeObject* tmp = entries[pos].code_object; - entries[pos].code_object = code_object; - Py_DECREF(tmp); - return; - } - if (__pyx_code_cache.count == __pyx_code_cache.max_count) { - int new_max = __pyx_code_cache.max_count + 64; - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( - __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry)); - if (unlikely(!entries)) { - return; - } - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = new_max; - } - for (i=__pyx_code_cache.count; i>pos; i--) { - entries[i] = entries[i-1]; - } - entries[pos].code_line = code_line; - entries[pos].code_object = code_object; - __pyx_code_cache.count++; - Py_INCREF(code_object); -} - -/* AddTraceback */ -#include "compile.h" -#include "frameobject.h" -#include "traceback.h" -static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( - const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; - #if PY_MAJOR_VERSION < 3 - py_srcfile = PyString_FromString(filename); - #else - py_srcfile = PyUnicode_FromString(filename); - #endif - if (!py_srcfile) goto bad; - if (c_line) { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #else - py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #endif - } - else { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromString(funcname); - #else - py_funcname = PyUnicode_FromString(funcname); - #endif - } - if (!py_funcname) goto bad; - py_code = __Pyx_PyCode_New( - 0, - 0, - 0, - 0, - 0, - __pyx_empty_bytes, /*PyObject *code,*/ - __pyx_empty_tuple, /*PyObject *consts,*/ - __pyx_empty_tuple, /*PyObject *names,*/ - __pyx_empty_tuple, /*PyObject *varnames,*/ - __pyx_empty_tuple, /*PyObject *freevars,*/ - __pyx_empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - py_line, - __pyx_empty_bytes /*PyObject *lnotab*/ - ); - Py_DECREF(py_srcfile); - Py_DECREF(py_funcname); - return py_code; -bad: - Py_XDECREF(py_srcfile); - Py_XDECREF(py_funcname); - return NULL; -} -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyFrameObject *py_frame = 0; - PyThreadState *tstate = __Pyx_PyThreadState_Current; - if (c_line) { - c_line = __Pyx_CLineForTraceback(tstate, c_line); - } - py_code = __pyx_find_code_object(c_line ? -c_line : py_line); - if (!py_code) { - py_code = __Pyx_CreateCodeObjectForTraceback( - funcname, c_line, py_line, filename); - if (!py_code) goto bad; - __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); - } - py_frame = PyFrame_New( - tstate, /*PyThreadState *tstate,*/ - py_code, /*PyCodeObject *code,*/ - __pyx_d, /*PyObject *globals,*/ - 0 /*PyObject *locals*/ - ); - if (!py_frame) goto bad; - __Pyx_PyFrame_SetLineNumber(py_frame, py_line); - PyTraceBack_Here(py_frame); -bad: - Py_XDECREF(py_code); - Py_XDECREF(py_frame); -} - -/* CIntToPy */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { - const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(int) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(int) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { - return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); -#endif - } - } else { - if (sizeof(int) <= sizeof(long)) { - return PyInt_FromLong((long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { - return PyLong_FromLongLong((PY_LONG_LONG) value); -#endif - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(int), - little, !is_unsigned); - } -} - -/* CIntFromPyVerify */ -#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ - __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) -#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ - __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) -#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ - {\ - func_type value = func_value;\ - if (sizeof(target_type) < sizeof(func_type)) {\ - if (unlikely(value != (func_type) (target_type) value)) {\ - func_type zero = 0;\ - if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ - return (target_type) -1;\ - if (is_unsigned && unlikely(value < zero))\ - goto raise_neg_overflow;\ - else\ - goto raise_overflow;\ - }\ - }\ - return (target_type) value;\ - } - -/* CIntToPy */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_int(unsigned int value) { - const unsigned int neg_one = (unsigned int) ((unsigned int) 0 - (unsigned int) 1), const_zero = (unsigned int) 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(unsigned int) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(unsigned int) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(unsigned int) <= sizeof(unsigned PY_LONG_LONG)) { - return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); -#endif - } - } else { - if (sizeof(unsigned int) <= sizeof(long)) { - return PyInt_FromLong((long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(unsigned int) <= sizeof(PY_LONG_LONG)) { - return PyLong_FromLongLong((PY_LONG_LONG) value); -#endif - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(unsigned int), - little, !is_unsigned); - } -} - -/* CIntToPy */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_short(unsigned short value) { - const unsigned short neg_one = (unsigned short) ((unsigned short) 0 - (unsigned short) 1), const_zero = (unsigned short) 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(unsigned short) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(unsigned short) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(unsigned short) <= sizeof(unsigned PY_LONG_LONG)) { - return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); -#endif - } - } else { - if (sizeof(unsigned short) <= sizeof(long)) { - return PyInt_FromLong((long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(unsigned short) <= sizeof(PY_LONG_LONG)) { - return PyLong_FromLongLong((PY_LONG_LONG) value); -#endif - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(unsigned short), - little, !is_unsigned); - } -} - -/* CIntToPy */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { - const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(long) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { - return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); -#endif - } - } else { - if (sizeof(long) <= sizeof(long)) { - return PyInt_FromLong((long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { - return PyLong_FromLongLong((PY_LONG_LONG) value); -#endif - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(long), - little, !is_unsigned); - } -} - -/* CIntToPy */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint16_t(uint16_t value) { - const uint16_t neg_one = (uint16_t) ((uint16_t) 0 - (uint16_t) 1), const_zero = (uint16_t) 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(uint16_t) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(uint16_t) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(uint16_t) <= sizeof(unsigned PY_LONG_LONG)) { - return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); -#endif - } - } else { - if (sizeof(uint16_t) <= sizeof(long)) { - return PyInt_FromLong((long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(uint16_t) <= sizeof(PY_LONG_LONG)) { - return PyLong_FromLongLong((PY_LONG_LONG) value); -#endif - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(uint16_t), - little, !is_unsigned); - } -} - -/* CIntFromPy */ -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { - const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(int) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - goto raise_neg_overflow; - } - return (int) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (int) 0; - case 1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0]) - case 2: - if (8 * sizeof(int) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) { - return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); - } - } - break; - case 3: - if (8 * sizeof(int) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) { - return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); - } - } - break; - case 4: - if (8 * sizeof(int) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) { - return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); - } - } - break; - } -#endif -#if CYTHON_COMPILING_IN_CPYTHON - if (unlikely(Py_SIZE(x) < 0)) { - goto raise_neg_overflow; - } -#else - { - int result = PyObject_RichCompareBool(x, Py_False, Py_LT); - if (unlikely(result < 0)) - return (int) -1; - if (unlikely(result == 1)) - goto raise_neg_overflow; - } -#endif - if (sizeof(int) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) -#endif - } - } else { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (int) 0; - case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0])) - case 1: __PYX_VERIFY_RETURN_INT(int, digit, +digits[0]) - case -2: - if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case 2: - if (8 * sizeof(int) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case -3: - if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case 3: - if (8 * sizeof(int) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case -4: - if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case 4: - if (8 * sizeof(int) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { - return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - } -#endif - if (sizeof(int) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) -#endif - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - int val; - PyObject *v = __Pyx_PyNumber_IntOrLong(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (int) -1; - } - } else { - int val; - PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (int) -1; - val = __Pyx_PyInt_As_int(tmp); - Py_DECREF(tmp); - return val; - } -raise_overflow: - PyErr_SetString(PyExc_OverflowError, - "value too large to convert to int"); - return (int) -1; -raise_neg_overflow: - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; -} - -/* CIntFromPy */ -static CYTHON_INLINE enum http_method __Pyx_PyInt_As_enum__http_method(PyObject *x) { - const enum http_method neg_one = (enum http_method) ((enum http_method) 0 - (enum http_method) 1), const_zero = (enum http_method) 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(enum http_method) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(enum http_method, long, PyInt_AS_LONG(x)) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - goto raise_neg_overflow; - } - return (enum http_method) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (enum http_method) 0; - case 1: __PYX_VERIFY_RETURN_INT(enum http_method, digit, digits[0]) - case 2: - if (8 * sizeof(enum http_method) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(enum http_method, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(enum http_method) >= 2 * PyLong_SHIFT) { - return (enum http_method) (((((enum http_method)digits[1]) << PyLong_SHIFT) | (enum http_method)digits[0])); - } - } - break; - case 3: - if (8 * sizeof(enum http_method) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(enum http_method, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(enum http_method) >= 3 * PyLong_SHIFT) { - return (enum http_method) (((((((enum http_method)digits[2]) << PyLong_SHIFT) | (enum http_method)digits[1]) << PyLong_SHIFT) | (enum http_method)digits[0])); - } - } - break; - case 4: - if (8 * sizeof(enum http_method) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(enum http_method, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(enum http_method) >= 4 * PyLong_SHIFT) { - return (enum http_method) (((((((((enum http_method)digits[3]) << PyLong_SHIFT) | (enum http_method)digits[2]) << PyLong_SHIFT) | (enum http_method)digits[1]) << PyLong_SHIFT) | (enum http_method)digits[0])); - } - } - break; - } -#endif -#if CYTHON_COMPILING_IN_CPYTHON - if (unlikely(Py_SIZE(x) < 0)) { - goto raise_neg_overflow; - } -#else - { - int result = PyObject_RichCompareBool(x, Py_False, Py_LT); - if (unlikely(result < 0)) - return (enum http_method) -1; - if (unlikely(result == 1)) - goto raise_neg_overflow; - } -#endif - if (sizeof(enum http_method) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT_EXC(enum http_method, unsigned long, PyLong_AsUnsignedLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(enum http_method) <= sizeof(unsigned PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(enum http_method, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) -#endif - } - } else { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (enum http_method) 0; - case -1: __PYX_VERIFY_RETURN_INT(enum http_method, sdigit, (sdigit) (-(sdigit)digits[0])) - case 1: __PYX_VERIFY_RETURN_INT(enum http_method, digit, +digits[0]) - case -2: - if (8 * sizeof(enum http_method) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(enum http_method, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(enum http_method) - 1 > 2 * PyLong_SHIFT) { - return (enum http_method) (((enum http_method)-1)*(((((enum http_method)digits[1]) << PyLong_SHIFT) | (enum http_method)digits[0]))); - } - } - break; - case 2: - if (8 * sizeof(enum http_method) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(enum http_method, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(enum http_method) - 1 > 2 * PyLong_SHIFT) { - return (enum http_method) ((((((enum http_method)digits[1]) << PyLong_SHIFT) | (enum http_method)digits[0]))); - } - } - break; - case -3: - if (8 * sizeof(enum http_method) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(enum http_method, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(enum http_method) - 1 > 3 * PyLong_SHIFT) { - return (enum http_method) (((enum http_method)-1)*(((((((enum http_method)digits[2]) << PyLong_SHIFT) | (enum http_method)digits[1]) << PyLong_SHIFT) | (enum http_method)digits[0]))); - } - } - break; - case 3: - if (8 * sizeof(enum http_method) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(enum http_method, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(enum http_method) - 1 > 3 * PyLong_SHIFT) { - return (enum http_method) ((((((((enum http_method)digits[2]) << PyLong_SHIFT) | (enum http_method)digits[1]) << PyLong_SHIFT) | (enum http_method)digits[0]))); - } - } - break; - case -4: - if (8 * sizeof(enum http_method) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(enum http_method, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(enum http_method) - 1 > 4 * PyLong_SHIFT) { - return (enum http_method) (((enum http_method)-1)*(((((((((enum http_method)digits[3]) << PyLong_SHIFT) | (enum http_method)digits[2]) << PyLong_SHIFT) | (enum http_method)digits[1]) << PyLong_SHIFT) | (enum http_method)digits[0]))); - } - } - break; - case 4: - if (8 * sizeof(enum http_method) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(enum http_method, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(enum http_method) - 1 > 4 * PyLong_SHIFT) { - return (enum http_method) ((((((((((enum http_method)digits[3]) << PyLong_SHIFT) | (enum http_method)digits[2]) << PyLong_SHIFT) | (enum http_method)digits[1]) << PyLong_SHIFT) | (enum http_method)digits[0]))); - } - } - break; - } -#endif - if (sizeof(enum http_method) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT_EXC(enum http_method, long, PyLong_AsLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(enum http_method) <= sizeof(PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(enum http_method, PY_LONG_LONG, PyLong_AsLongLong(x)) -#endif - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - enum http_method val; - PyObject *v = __Pyx_PyNumber_IntOrLong(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (enum http_method) -1; - } - } else { - enum http_method val; - PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (enum http_method) -1; - val = __Pyx_PyInt_As_enum__http_method(tmp); - Py_DECREF(tmp); - return val; - } -raise_overflow: - PyErr_SetString(PyExc_OverflowError, - "value too large to convert to enum http_method"); - return (enum http_method) -1; -raise_neg_overflow: - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to enum http_method"); - return (enum http_method) -1; -} - -/* CIntFromPy */ -static CYTHON_INLINE size_t __Pyx_PyInt_As_size_t(PyObject *x) { - const size_t neg_one = (size_t) ((size_t) 0 - (size_t) 1), const_zero = (size_t) 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(size_t) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(size_t, long, PyInt_AS_LONG(x)) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - goto raise_neg_overflow; - } - return (size_t) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (size_t) 0; - case 1: __PYX_VERIFY_RETURN_INT(size_t, digit, digits[0]) - case 2: - if (8 * sizeof(size_t) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(size_t) >= 2 * PyLong_SHIFT) { - return (size_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - } - break; - case 3: - if (8 * sizeof(size_t) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(size_t) >= 3 * PyLong_SHIFT) { - return (size_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - } - break; - case 4: - if (8 * sizeof(size_t) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(size_t) >= 4 * PyLong_SHIFT) { - return (size_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - } - break; - } -#endif -#if CYTHON_COMPILING_IN_CPYTHON - if (unlikely(Py_SIZE(x) < 0)) { - goto raise_neg_overflow; - } -#else - { - int result = PyObject_RichCompareBool(x, Py_False, Py_LT); - if (unlikely(result < 0)) - return (size_t) -1; - if (unlikely(result == 1)) - goto raise_neg_overflow; - } -#endif - if (sizeof(size_t) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT_EXC(size_t, unsigned long, PyLong_AsUnsignedLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(size_t) <= sizeof(unsigned PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(size_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) -#endif - } - } else { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (size_t) 0; - case -1: __PYX_VERIFY_RETURN_INT(size_t, sdigit, (sdigit) (-(sdigit)digits[0])) - case 1: __PYX_VERIFY_RETURN_INT(size_t, digit, +digits[0]) - case -2: - if (8 * sizeof(size_t) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(size_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(size_t) - 1 > 2 * PyLong_SHIFT) { - return (size_t) (((size_t)-1)*(((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]))); - } - } - break; - case 2: - if (8 * sizeof(size_t) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(size_t) - 1 > 2 * PyLong_SHIFT) { - return (size_t) ((((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]))); - } - } - break; - case -3: - if (8 * sizeof(size_t) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(size_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(size_t) - 1 > 3 * PyLong_SHIFT) { - return (size_t) (((size_t)-1)*(((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]))); - } - } - break; - case 3: - if (8 * sizeof(size_t) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(size_t) - 1 > 3 * PyLong_SHIFT) { - return (size_t) ((((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]))); - } - } - break; - case -4: - if (8 * sizeof(size_t) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(size_t, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(size_t) - 1 > 4 * PyLong_SHIFT) { - return (size_t) (((size_t)-1)*(((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]))); - } - } - break; - case 4: - if (8 * sizeof(size_t) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(size_t) - 1 > 4 * PyLong_SHIFT) { - return (size_t) ((((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]))); - } - } - break; - } -#endif - if (sizeof(size_t) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT_EXC(size_t, long, PyLong_AsLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(size_t) <= sizeof(PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(size_t, PY_LONG_LONG, PyLong_AsLongLong(x)) -#endif - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - size_t val; - PyObject *v = __Pyx_PyNumber_IntOrLong(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (size_t) -1; - } - } else { - size_t val; - PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (size_t) -1; - val = __Pyx_PyInt_As_size_t(tmp); - Py_DECREF(tmp); - return val; - } -raise_overflow: - PyErr_SetString(PyExc_OverflowError, - "value too large to convert to size_t"); - return (size_t) -1; -raise_neg_overflow: - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to size_t"); - return (size_t) -1; -} - -/* CIntFromPy */ -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { - const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(long) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - goto raise_neg_overflow; - } - return (long) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (long) 0; - case 1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0]) - case 2: - if (8 * sizeof(long) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) { - return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); - } - } - break; - case 3: - if (8 * sizeof(long) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) { - return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); - } - } - break; - case 4: - if (8 * sizeof(long) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) { - return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); - } - } - break; - } -#endif -#if CYTHON_COMPILING_IN_CPYTHON - if (unlikely(Py_SIZE(x) < 0)) { - goto raise_neg_overflow; - } -#else - { - int result = PyObject_RichCompareBool(x, Py_False, Py_LT); - if (unlikely(result < 0)) - return (long) -1; - if (unlikely(result == 1)) - goto raise_neg_overflow; - } -#endif - if (sizeof(long) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) -#endif - } - } else { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (long) 0; - case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0])) - case 1: __PYX_VERIFY_RETURN_INT(long, digit, +digits[0]) - case -2: - if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case 2: - if (8 * sizeof(long) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case -3: - if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case 3: - if (8 * sizeof(long) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case -4: - if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case 4: - if (8 * sizeof(long) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - } -#endif - if (sizeof(long) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) -#endif - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - long val; - PyObject *v = __Pyx_PyNumber_IntOrLong(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (long) -1; - } - } else { - long val; - PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (long) -1; - val = __Pyx_PyInt_As_long(tmp); - Py_DECREF(tmp); - return val; - } -raise_overflow: - PyErr_SetString(PyExc_OverflowError, - "value too large to convert to long"); - return (long) -1; -raise_neg_overflow: - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; -} - -/* FastTypeChecks */ -#if CYTHON_COMPILING_IN_CPYTHON -static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { - while (a) { - a = a->tp_base; - if (a == b) - return 1; - } - return b == &PyBaseObject_Type; -} -static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { - PyObject *mro; - if (a == b) return 1; - mro = a->tp_mro; - if (likely(mro)) { - Py_ssize_t i, n; - n = PyTuple_GET_SIZE(mro); - for (i = 0; i < n; i++) { - if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) - return 1; - } - return 0; - } - return __Pyx_InBases(a, b); -} -#if PY_MAJOR_VERSION == 2 -static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { - PyObject *exception, *value, *tb; - int res; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&exception, &value, &tb); - res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; - if (unlikely(res == -1)) { - PyErr_WriteUnraisable(err); - res = 0; - } - if (!res) { - res = PyObject_IsSubclass(err, exc_type2); - if (unlikely(res == -1)) { - PyErr_WriteUnraisable(err); - res = 0; - } - } - __Pyx_ErrRestore(exception, value, tb); - return res; -} -#else -static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { - int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; - if (!res) { - res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); - } - return res; -} -#endif -static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { - Py_ssize_t i, n; - assert(PyExceptionClass_Check(exc_type)); - n = PyTuple_GET_SIZE(tuple); -#if PY_MAJOR_VERSION >= 3 - for (i=0; itp_name); - if (cached_type) { - if (!PyType_Check((PyObject*)cached_type)) { - PyErr_Format(PyExc_TypeError, - "Shared Cython type %.200s is not a type object", - type->tp_name); - goto bad; - } - if (cached_type->tp_basicsize != type->tp_basicsize) { - PyErr_Format(PyExc_TypeError, - "Shared Cython type %.200s has the wrong size, try recompiling", - type->tp_name); - goto bad; - } - } else { - if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; - PyErr_Clear(); - if (PyType_Ready(type) < 0) goto bad; - if (PyObject_SetAttrString(fake_module, type->tp_name, (PyObject*) type) < 0) - goto bad; - Py_INCREF(type); - cached_type = type; - } -done: - Py_DECREF(fake_module); - return cached_type; -bad: - Py_XDECREF(cached_type); - cached_type = NULL; - goto done; -} - -/* PyObjectGetMethod */ -static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) { - PyObject *attr; -#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP - PyTypeObject *tp = Py_TYPE(obj); - PyObject *descr; - descrgetfunc f = NULL; - PyObject **dictptr, *dict; - int meth_found = 0; - assert (*method == NULL); - if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) { - attr = __Pyx_PyObject_GetAttrStr(obj, name); - goto try_unpack; - } - if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) { - return 0; - } - descr = _PyType_Lookup(tp, name); - if (likely(descr != NULL)) { - Py_INCREF(descr); -#if PY_MAJOR_VERSION >= 3 - #ifdef __Pyx_CyFunction_USED - if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr))) - #else - if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type))) - #endif -#else - #ifdef __Pyx_CyFunction_USED - if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr))) - #else - if (likely(PyFunction_Check(descr))) - #endif -#endif - { - meth_found = 1; - } else { - f = Py_TYPE(descr)->tp_descr_get; - if (f != NULL && PyDescr_IsData(descr)) { - attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); - Py_DECREF(descr); - goto try_unpack; - } - } - } - dictptr = _PyObject_GetDictPtr(obj); - if (dictptr != NULL && (dict = *dictptr) != NULL) { - Py_INCREF(dict); - attr = __Pyx_PyDict_GetItemStr(dict, name); - if (attr != NULL) { - Py_INCREF(attr); - Py_DECREF(dict); - Py_XDECREF(descr); - goto try_unpack; - } - Py_DECREF(dict); - } - if (meth_found) { - *method = descr; - return 1; - } - if (f != NULL) { - attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); - Py_DECREF(descr); - goto try_unpack; - } - if (descr != NULL) { - *method = descr; - return 0; - } - PyErr_Format(PyExc_AttributeError, -#if PY_MAJOR_VERSION >= 3 - "'%.50s' object has no attribute '%U'", - tp->tp_name, name); -#else - "'%.50s' object has no attribute '%.400s'", - tp->tp_name, PyString_AS_STRING(name)); -#endif - return 0; -#else - attr = __Pyx_PyObject_GetAttrStr(obj, name); - goto try_unpack; -#endif -try_unpack: -#if CYTHON_UNPACK_METHODS - if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) { - PyObject *function = PyMethod_GET_FUNCTION(attr); - Py_INCREF(function); - Py_DECREF(attr); - *method = function; - return 1; - } -#endif - *method = attr; - return 0; -} - -/* PyObjectCallMethod1 */ -static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg) { - PyObject *result = __Pyx_PyObject_CallOneArg(method, arg); - Py_DECREF(method); - return result; -} -static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg) { - PyObject *method = NULL, *result; - int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); - if (likely(is_method)) { - result = __Pyx_PyObject_Call2Args(method, obj, arg); - Py_DECREF(method); - return result; - } - if (unlikely(!method)) return NULL; - return __Pyx__PyObject_CallMethod1(method, arg); -} - -/* CoroutineBase */ -#include -#include -#define __Pyx_Coroutine_Undelegate(gen) Py_CLEAR((gen)->yieldfrom) -static int __Pyx_PyGen__FetchStopIterationValue(CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject **pvalue) { - PyObject *et, *ev, *tb; - PyObject *value = NULL; - __Pyx_ErrFetch(&et, &ev, &tb); - if (!et) { - Py_XDECREF(tb); - Py_XDECREF(ev); - Py_INCREF(Py_None); - *pvalue = Py_None; - return 0; - } - if (likely(et == PyExc_StopIteration)) { - if (!ev) { - Py_INCREF(Py_None); - value = Py_None; - } -#if PY_VERSION_HEX >= 0x030300A0 - else if (Py_TYPE(ev) == (PyTypeObject*)PyExc_StopIteration) { - value = ((PyStopIterationObject *)ev)->value; - Py_INCREF(value); - Py_DECREF(ev); - } -#endif - else if (unlikely(PyTuple_Check(ev))) { - if (PyTuple_GET_SIZE(ev) >= 1) { -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - value = PyTuple_GET_ITEM(ev, 0); - Py_INCREF(value); -#else - value = PySequence_ITEM(ev, 0); -#endif - } else { - Py_INCREF(Py_None); - value = Py_None; - } - Py_DECREF(ev); - } - else if (!__Pyx_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration)) { - value = ev; - } - if (likely(value)) { - Py_XDECREF(tb); - Py_DECREF(et); - *pvalue = value; - return 0; - } - } else if (!__Pyx_PyErr_GivenExceptionMatches(et, PyExc_StopIteration)) { - __Pyx_ErrRestore(et, ev, tb); - return -1; - } - PyErr_NormalizeException(&et, &ev, &tb); - if (unlikely(!PyObject_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration))) { - __Pyx_ErrRestore(et, ev, tb); - return -1; - } - Py_XDECREF(tb); - Py_DECREF(et); -#if PY_VERSION_HEX >= 0x030300A0 - value = ((PyStopIterationObject *)ev)->value; - Py_INCREF(value); - Py_DECREF(ev); -#else - { - PyObject* args = __Pyx_PyObject_GetAttrStr(ev, __pyx_n_s_args); - Py_DECREF(ev); - if (likely(args)) { - value = PySequence_GetItem(args, 0); - Py_DECREF(args); - } - if (unlikely(!value)) { - __Pyx_ErrRestore(NULL, NULL, NULL); - Py_INCREF(Py_None); - value = Py_None; - } - } -#endif - *pvalue = value; - return 0; -} -static CYTHON_INLINE -void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *exc_state) { - PyObject *t, *v, *tb; - t = exc_state->exc_type; - v = exc_state->exc_value; - tb = exc_state->exc_traceback; - exc_state->exc_type = NULL; - exc_state->exc_value = NULL; - exc_state->exc_traceback = NULL; - Py_XDECREF(t); - Py_XDECREF(v); - Py_XDECREF(tb); -} -#define __Pyx_Coroutine_AlreadyRunningError(gen) (__Pyx__Coroutine_AlreadyRunningError(gen), (PyObject*)NULL) -static void __Pyx__Coroutine_AlreadyRunningError(CYTHON_UNUSED __pyx_CoroutineObject *gen) { - const char *msg; - if ((0)) { - #ifdef __Pyx_Coroutine_USED - } else if (__Pyx_Coroutine_Check((PyObject*)gen)) { - msg = "coroutine already executing"; - #endif - #ifdef __Pyx_AsyncGen_USED - } else if (__Pyx_AsyncGen_CheckExact((PyObject*)gen)) { - msg = "async generator already executing"; - #endif - } else { - msg = "generator already executing"; - } - PyErr_SetString(PyExc_ValueError, msg); -} -#define __Pyx_Coroutine_NotStartedError(gen) (__Pyx__Coroutine_NotStartedError(gen), (PyObject*)NULL) -static void __Pyx__Coroutine_NotStartedError(CYTHON_UNUSED PyObject *gen) { - const char *msg; - if ((0)) { - #ifdef __Pyx_Coroutine_USED - } else if (__Pyx_Coroutine_Check(gen)) { - msg = "can't send non-None value to a just-started coroutine"; - #endif - #ifdef __Pyx_AsyncGen_USED - } else if (__Pyx_AsyncGen_CheckExact(gen)) { - msg = "can't send non-None value to a just-started async generator"; - #endif - } else { - msg = "can't send non-None value to a just-started generator"; - } - PyErr_SetString(PyExc_TypeError, msg); -} -#define __Pyx_Coroutine_AlreadyTerminatedError(gen, value, closing) (__Pyx__Coroutine_AlreadyTerminatedError(gen, value, closing), (PyObject*)NULL) -static void __Pyx__Coroutine_AlreadyTerminatedError(CYTHON_UNUSED PyObject *gen, PyObject *value, CYTHON_UNUSED int closing) { - #ifdef __Pyx_Coroutine_USED - if (!closing && __Pyx_Coroutine_Check(gen)) { - PyErr_SetString(PyExc_RuntimeError, "cannot reuse already awaited coroutine"); - } else - #endif - if (value) { - #ifdef __Pyx_AsyncGen_USED - if (__Pyx_AsyncGen_CheckExact(gen)) - PyErr_SetNone(__Pyx_PyExc_StopAsyncIteration); - else - #endif - PyErr_SetNone(PyExc_StopIteration); - } -} -static -PyObject *__Pyx_Coroutine_SendEx(__pyx_CoroutineObject *self, PyObject *value, int closing) { - __Pyx_PyThreadState_declare - PyThreadState *tstate; - __Pyx_ExcInfoStruct *exc_state; - PyObject *retval; - assert(!self->is_running); - if (unlikely(self->resume_label == 0)) { - if (unlikely(value && value != Py_None)) { - return __Pyx_Coroutine_NotStartedError((PyObject*)self); - } - } - if (unlikely(self->resume_label == -1)) { - return __Pyx_Coroutine_AlreadyTerminatedError((PyObject*)self, value, closing); - } -#if CYTHON_FAST_THREAD_STATE - __Pyx_PyThreadState_assign - tstate = __pyx_tstate; -#else - tstate = __Pyx_PyThreadState_Current; -#endif - exc_state = &self->gi_exc_state; - if (exc_state->exc_type) { - #if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_PYSTON - #else - if (exc_state->exc_traceback) { - PyTracebackObject *tb = (PyTracebackObject *) exc_state->exc_traceback; - PyFrameObject *f = tb->tb_frame; - Py_XINCREF(tstate->frame); - assert(f->f_back == NULL); - f->f_back = tstate->frame; - } - #endif - } -#if CYTHON_USE_EXC_INFO_STACK - exc_state->previous_item = tstate->exc_info; - tstate->exc_info = exc_state; -#else - if (exc_state->exc_type) { - __Pyx_ExceptionSwap(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback); - } else { - __Pyx_Coroutine_ExceptionClear(exc_state); - __Pyx_ExceptionSave(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback); - } -#endif - self->is_running = 1; - retval = self->body((PyObject *) self, tstate, value); - self->is_running = 0; -#if CYTHON_USE_EXC_INFO_STACK - exc_state = &self->gi_exc_state; - tstate->exc_info = exc_state->previous_item; - exc_state->previous_item = NULL; - __Pyx_Coroutine_ResetFrameBackpointer(exc_state); -#endif - return retval; -} -static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state) { - PyObject *exc_tb = exc_state->exc_traceback; - if (likely(exc_tb)) { -#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_PYSTON -#else - PyTracebackObject *tb = (PyTracebackObject *) exc_tb; - PyFrameObject *f = tb->tb_frame; - Py_CLEAR(f->f_back); -#endif - } -} -static CYTHON_INLINE -PyObject *__Pyx_Coroutine_MethodReturn(CYTHON_UNUSED PyObject* gen, PyObject *retval) { - if (unlikely(!retval)) { - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - if (!__Pyx_PyErr_Occurred()) { - PyObject *exc = PyExc_StopIteration; - #ifdef __Pyx_AsyncGen_USED - if (__Pyx_AsyncGen_CheckExact(gen)) - exc = __Pyx_PyExc_StopAsyncIteration; - #endif - __Pyx_PyErr_SetNone(exc); - } - } - return retval; -} -static CYTHON_INLINE -PyObject *__Pyx_Coroutine_FinishDelegation(__pyx_CoroutineObject *gen) { - PyObject *ret; - PyObject *val = NULL; - __Pyx_Coroutine_Undelegate(gen); - __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, &val); - ret = __Pyx_Coroutine_SendEx(gen, val, 0); - Py_XDECREF(val); - return ret; -} -static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value) { - PyObject *retval; - __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self; - PyObject *yf = gen->yieldfrom; - if (unlikely(gen->is_running)) - return __Pyx_Coroutine_AlreadyRunningError(gen); - if (yf) { - PyObject *ret; - gen->is_running = 1; - #ifdef __Pyx_Generator_USED - if (__Pyx_Generator_CheckExact(yf)) { - ret = __Pyx_Coroutine_Send(yf, value); - } else - #endif - #ifdef __Pyx_Coroutine_USED - if (__Pyx_Coroutine_Check(yf)) { - ret = __Pyx_Coroutine_Send(yf, value); - } else - #endif - #ifdef __Pyx_AsyncGen_USED - if (__pyx_PyAsyncGenASend_CheckExact(yf)) { - ret = __Pyx_async_gen_asend_send(yf, value); - } else - #endif - #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) - if (PyGen_CheckExact(yf)) { - ret = _PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value); - } else - #endif - #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03050000 && defined(PyCoro_CheckExact) && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) - if (PyCoro_CheckExact(yf)) { - ret = _PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value); - } else - #endif - { - if (value == Py_None) - ret = Py_TYPE(yf)->tp_iternext(yf); - else - ret = __Pyx_PyObject_CallMethod1(yf, __pyx_n_s_send, value); - } - gen->is_running = 0; - if (likely(ret)) { - return ret; - } - retval = __Pyx_Coroutine_FinishDelegation(gen); - } else { - retval = __Pyx_Coroutine_SendEx(gen, value, 0); - } - return __Pyx_Coroutine_MethodReturn(self, retval); -} -static int __Pyx_Coroutine_CloseIter(__pyx_CoroutineObject *gen, PyObject *yf) { - PyObject *retval = NULL; - int err = 0; - #ifdef __Pyx_Generator_USED - if (__Pyx_Generator_CheckExact(yf)) { - retval = __Pyx_Coroutine_Close(yf); - if (!retval) - return -1; - } else - #endif - #ifdef __Pyx_Coroutine_USED - if (__Pyx_Coroutine_Check(yf)) { - retval = __Pyx_Coroutine_Close(yf); - if (!retval) - return -1; - } else - if (__Pyx_CoroutineAwait_CheckExact(yf)) { - retval = __Pyx_CoroutineAwait_Close((__pyx_CoroutineAwaitObject*)yf, NULL); - if (!retval) - return -1; - } else - #endif - #ifdef __Pyx_AsyncGen_USED - if (__pyx_PyAsyncGenASend_CheckExact(yf)) { - retval = __Pyx_async_gen_asend_close(yf, NULL); - } else - if (__pyx_PyAsyncGenAThrow_CheckExact(yf)) { - retval = __Pyx_async_gen_athrow_close(yf, NULL); - } else - #endif - { - PyObject *meth; - gen->is_running = 1; - meth = __Pyx_PyObject_GetAttrStr(yf, __pyx_n_s_close); - if (unlikely(!meth)) { - if (!PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_WriteUnraisable(yf); - } - PyErr_Clear(); - } else { - retval = PyObject_CallFunction(meth, NULL); - Py_DECREF(meth); - if (!retval) - err = -1; - } - gen->is_running = 0; - } - Py_XDECREF(retval); - return err; -} -static PyObject *__Pyx_Generator_Next(PyObject *self) { - __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self; - PyObject *yf = gen->yieldfrom; - if (unlikely(gen->is_running)) - return __Pyx_Coroutine_AlreadyRunningError(gen); - if (yf) { - PyObject *ret; - gen->is_running = 1; - #ifdef __Pyx_Generator_USED - if (__Pyx_Generator_CheckExact(yf)) { - ret = __Pyx_Generator_Next(yf); - } else - #endif - #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3) - if (PyGen_CheckExact(yf)) { - ret = _PyGen_Send((PyGenObject*)yf, NULL); - } else - #endif - #ifdef __Pyx_Coroutine_USED - if (__Pyx_Coroutine_Check(yf)) { - ret = __Pyx_Coroutine_Send(yf, Py_None); - } else - #endif - ret = Py_TYPE(yf)->tp_iternext(yf); - gen->is_running = 0; - if (likely(ret)) { - return ret; - } - return __Pyx_Coroutine_FinishDelegation(gen); - } - return __Pyx_Coroutine_SendEx(gen, Py_None, 0); -} -static PyObject *__Pyx_Coroutine_Close_Method(PyObject *self, CYTHON_UNUSED PyObject *arg) { - return __Pyx_Coroutine_Close(self); -} -static PyObject *__Pyx_Coroutine_Close(PyObject *self) { - __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; - PyObject *retval, *raised_exception; - PyObject *yf = gen->yieldfrom; - int err = 0; - if (unlikely(gen->is_running)) - return __Pyx_Coroutine_AlreadyRunningError(gen); - if (yf) { - Py_INCREF(yf); - err = __Pyx_Coroutine_CloseIter(gen, yf); - __Pyx_Coroutine_Undelegate(gen); - Py_DECREF(yf); - } - if (err == 0) - PyErr_SetNone(PyExc_GeneratorExit); - retval = __Pyx_Coroutine_SendEx(gen, NULL, 1); - if (unlikely(retval)) { - const char *msg; - Py_DECREF(retval); - if ((0)) { - #ifdef __Pyx_Coroutine_USED - } else if (__Pyx_Coroutine_Check(self)) { - msg = "coroutine ignored GeneratorExit"; - #endif - #ifdef __Pyx_AsyncGen_USED - } else if (__Pyx_AsyncGen_CheckExact(self)) { -#if PY_VERSION_HEX < 0x03060000 - msg = "async generator ignored GeneratorExit - might require Python 3.6+ finalisation (PEP 525)"; -#else - msg = "async generator ignored GeneratorExit"; -#endif - #endif - } else { - msg = "generator ignored GeneratorExit"; - } - PyErr_SetString(PyExc_RuntimeError, msg); - return NULL; - } - raised_exception = PyErr_Occurred(); - if (likely(!raised_exception || __Pyx_PyErr_GivenExceptionMatches2(raised_exception, PyExc_GeneratorExit, PyExc_StopIteration))) { - if (raised_exception) PyErr_Clear(); - Py_INCREF(Py_None); - return Py_None; - } - return NULL; -} -static PyObject *__Pyx__Coroutine_Throw(PyObject *self, PyObject *typ, PyObject *val, PyObject *tb, - PyObject *args, int close_on_genexit) { - __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; - PyObject *yf = gen->yieldfrom; - if (unlikely(gen->is_running)) - return __Pyx_Coroutine_AlreadyRunningError(gen); - if (yf) { - PyObject *ret; - Py_INCREF(yf); - if (__Pyx_PyErr_GivenExceptionMatches(typ, PyExc_GeneratorExit) && close_on_genexit) { - int err = __Pyx_Coroutine_CloseIter(gen, yf); - Py_DECREF(yf); - __Pyx_Coroutine_Undelegate(gen); - if (err < 0) - return __Pyx_Coroutine_MethodReturn(self, __Pyx_Coroutine_SendEx(gen, NULL, 0)); - goto throw_here; - } - gen->is_running = 1; - if (0 - #ifdef __Pyx_Generator_USED - || __Pyx_Generator_CheckExact(yf) - #endif - #ifdef __Pyx_Coroutine_USED - || __Pyx_Coroutine_Check(yf) - #endif - ) { - ret = __Pyx__Coroutine_Throw(yf, typ, val, tb, args, close_on_genexit); - #ifdef __Pyx_Coroutine_USED - } else if (__Pyx_CoroutineAwait_CheckExact(yf)) { - ret = __Pyx__Coroutine_Throw(((__pyx_CoroutineAwaitObject*)yf)->coroutine, typ, val, tb, args, close_on_genexit); - #endif - } else { - PyObject *meth = __Pyx_PyObject_GetAttrStr(yf, __pyx_n_s_throw); - if (unlikely(!meth)) { - Py_DECREF(yf); - if (!PyErr_ExceptionMatches(PyExc_AttributeError)) { - gen->is_running = 0; - return NULL; - } - PyErr_Clear(); - __Pyx_Coroutine_Undelegate(gen); - gen->is_running = 0; - goto throw_here; - } - if (likely(args)) { - ret = PyObject_CallObject(meth, args); - } else { - ret = PyObject_CallFunctionObjArgs(meth, typ, val, tb, NULL); - } - Py_DECREF(meth); - } - gen->is_running = 0; - Py_DECREF(yf); - if (!ret) { - ret = __Pyx_Coroutine_FinishDelegation(gen); - } - return __Pyx_Coroutine_MethodReturn(self, ret); - } -throw_here: - __Pyx_Raise(typ, val, tb, NULL); - return __Pyx_Coroutine_MethodReturn(self, __Pyx_Coroutine_SendEx(gen, NULL, 0)); -} -static PyObject *__Pyx_Coroutine_Throw(PyObject *self, PyObject *args) { - PyObject *typ; - PyObject *val = NULL; - PyObject *tb = NULL; - if (!PyArg_UnpackTuple(args, (char *)"throw", 1, 3, &typ, &val, &tb)) - return NULL; - return __Pyx__Coroutine_Throw(self, typ, val, tb, args, 1); -} -static CYTHON_INLINE int __Pyx_Coroutine_traverse_excstate(__Pyx_ExcInfoStruct *exc_state, visitproc visit, void *arg) { - Py_VISIT(exc_state->exc_type); - Py_VISIT(exc_state->exc_value); - Py_VISIT(exc_state->exc_traceback); - return 0; -} -static int __Pyx_Coroutine_traverse(__pyx_CoroutineObject *gen, visitproc visit, void *arg) { - Py_VISIT(gen->closure); - Py_VISIT(gen->classobj); - Py_VISIT(gen->yieldfrom); - return __Pyx_Coroutine_traverse_excstate(&gen->gi_exc_state, visit, arg); -} -static int __Pyx_Coroutine_clear(PyObject *self) { - __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; - Py_CLEAR(gen->closure); - Py_CLEAR(gen->classobj); - Py_CLEAR(gen->yieldfrom); - __Pyx_Coroutine_ExceptionClear(&gen->gi_exc_state); -#ifdef __Pyx_AsyncGen_USED - if (__Pyx_AsyncGen_CheckExact(self)) { - Py_CLEAR(((__pyx_PyAsyncGenObject*)gen)->ag_finalizer); - } -#endif - Py_CLEAR(gen->gi_code); - Py_CLEAR(gen->gi_name); - Py_CLEAR(gen->gi_qualname); - Py_CLEAR(gen->gi_modulename); - return 0; -} -static void __Pyx_Coroutine_dealloc(PyObject *self) { - __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; - PyObject_GC_UnTrack(gen); - if (gen->gi_weakreflist != NULL) - PyObject_ClearWeakRefs(self); - if (gen->resume_label >= 0) { - PyObject_GC_Track(self); -#if PY_VERSION_HEX >= 0x030400a1 && CYTHON_USE_TP_FINALIZE - if (PyObject_CallFinalizerFromDealloc(self)) -#else - Py_TYPE(gen)->tp_del(self); - if (self->ob_refcnt > 0) -#endif - { - return; - } - PyObject_GC_UnTrack(self); - } -#ifdef __Pyx_AsyncGen_USED - if (__Pyx_AsyncGen_CheckExact(self)) { - /* We have to handle this case for asynchronous generators - right here, because this code has to be between UNTRACK - and GC_Del. */ - Py_CLEAR(((__pyx_PyAsyncGenObject*)self)->ag_finalizer); - } -#endif - __Pyx_Coroutine_clear(self); - PyObject_GC_Del(gen); -} -static void __Pyx_Coroutine_del(PyObject *self) { - PyObject *error_type, *error_value, *error_traceback; - __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self; - __Pyx_PyThreadState_declare - if (gen->resume_label < 0) { - return; - } -#if !CYTHON_USE_TP_FINALIZE - assert(self->ob_refcnt == 0); - self->ob_refcnt = 1; -#endif - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&error_type, &error_value, &error_traceback); -#ifdef __Pyx_AsyncGen_USED - if (__Pyx_AsyncGen_CheckExact(self)) { - __pyx_PyAsyncGenObject *agen = (__pyx_PyAsyncGenObject*)self; - PyObject *finalizer = agen->ag_finalizer; - if (finalizer && !agen->ag_closed) { - PyObject *res = __Pyx_PyObject_CallOneArg(finalizer, self); - if (unlikely(!res)) { - PyErr_WriteUnraisable(self); - } else { - Py_DECREF(res); - } - __Pyx_ErrRestore(error_type, error_value, error_traceback); - return; - } - } -#endif - if (unlikely(gen->resume_label == 0 && !error_value)) { -#ifdef __Pyx_Coroutine_USED -#ifdef __Pyx_Generator_USED - if (!__Pyx_Generator_CheckExact(self)) -#endif - { - PyObject_GC_UnTrack(self); -#if PY_MAJOR_VERSION >= 3 || defined(PyErr_WarnFormat) - if (unlikely(PyErr_WarnFormat(PyExc_RuntimeWarning, 1, "coroutine '%.50S' was never awaited", gen->gi_qualname) < 0)) - PyErr_WriteUnraisable(self); -#else - {PyObject *msg; - char *cmsg; - #if CYTHON_COMPILING_IN_PYPY - msg = NULL; - cmsg = (char*) "coroutine was never awaited"; - #else - char *cname; - PyObject *qualname; - qualname = gen->gi_qualname; - cname = PyString_AS_STRING(qualname); - msg = PyString_FromFormat("coroutine '%.50s' was never awaited", cname); - if (unlikely(!msg)) { - PyErr_Clear(); - cmsg = (char*) "coroutine was never awaited"; - } else { - cmsg = PyString_AS_STRING(msg); - } - #endif - if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, cmsg, 1) < 0)) - PyErr_WriteUnraisable(self); - Py_XDECREF(msg);} -#endif - PyObject_GC_Track(self); - } -#endif - } else { - PyObject *res = __Pyx_Coroutine_Close(self); - if (unlikely(!res)) { - if (PyErr_Occurred()) - PyErr_WriteUnraisable(self); - } else { - Py_DECREF(res); - } - } - __Pyx_ErrRestore(error_type, error_value, error_traceback); -#if !CYTHON_USE_TP_FINALIZE - assert(self->ob_refcnt > 0); - if (--self->ob_refcnt == 0) { - return; - } - { - Py_ssize_t refcnt = self->ob_refcnt; - _Py_NewReference(self); - self->ob_refcnt = refcnt; - } -#if CYTHON_COMPILING_IN_CPYTHON - assert(PyType_IS_GC(self->ob_type) && - _Py_AS_GC(self)->gc.gc_refs != _PyGC_REFS_UNTRACKED); - _Py_DEC_REFTOTAL; -#endif -#ifdef COUNT_ALLOCS - --Py_TYPE(self)->tp_frees; - --Py_TYPE(self)->tp_allocs; -#endif -#endif -} -static PyObject * -__Pyx_Coroutine_get_name(__pyx_CoroutineObject *self, CYTHON_UNUSED void *context) -{ - PyObject *name = self->gi_name; - if (unlikely(!name)) name = Py_None; - Py_INCREF(name); - return name; -} -static int -__Pyx_Coroutine_set_name(__pyx_CoroutineObject *self, PyObject *value, CYTHON_UNUSED void *context) -{ - PyObject *tmp; -#if PY_MAJOR_VERSION >= 3 - if (unlikely(value == NULL || !PyUnicode_Check(value))) -#else - if (unlikely(value == NULL || !PyString_Check(value))) -#endif - { - PyErr_SetString(PyExc_TypeError, - "__name__ must be set to a string object"); - return -1; - } - tmp = self->gi_name; - Py_INCREF(value); - self->gi_name = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_Coroutine_get_qualname(__pyx_CoroutineObject *self, CYTHON_UNUSED void *context) -{ - PyObject *name = self->gi_qualname; - if (unlikely(!name)) name = Py_None; - Py_INCREF(name); - return name; -} -static int -__Pyx_Coroutine_set_qualname(__pyx_CoroutineObject *self, PyObject *value, CYTHON_UNUSED void *context) -{ - PyObject *tmp; -#if PY_MAJOR_VERSION >= 3 - if (unlikely(value == NULL || !PyUnicode_Check(value))) -#else - if (unlikely(value == NULL || !PyString_Check(value))) -#endif - { - PyErr_SetString(PyExc_TypeError, - "__qualname__ must be set to a string object"); - return -1; - } - tmp = self->gi_qualname; - Py_INCREF(value); - self->gi_qualname = value; - Py_XDECREF(tmp); - return 0; -} -static __pyx_CoroutineObject *__Pyx__Coroutine_New( - PyTypeObject* type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, - PyObject *name, PyObject *qualname, PyObject *module_name) { - __pyx_CoroutineObject *gen = PyObject_GC_New(__pyx_CoroutineObject, type); - if (unlikely(!gen)) - return NULL; - return __Pyx__Coroutine_NewInit(gen, body, code, closure, name, qualname, module_name); -} -static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit( - __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure, - PyObject *name, PyObject *qualname, PyObject *module_name) { - gen->body = body; - gen->closure = closure; - Py_XINCREF(closure); - gen->is_running = 0; - gen->resume_label = 0; - gen->classobj = NULL; - gen->yieldfrom = NULL; - gen->gi_exc_state.exc_type = NULL; - gen->gi_exc_state.exc_value = NULL; - gen->gi_exc_state.exc_traceback = NULL; -#if CYTHON_USE_EXC_INFO_STACK - gen->gi_exc_state.previous_item = NULL; -#endif - gen->gi_weakreflist = NULL; - Py_XINCREF(qualname); - gen->gi_qualname = qualname; - Py_XINCREF(name); - gen->gi_name = name; - Py_XINCREF(module_name); - gen->gi_modulename = module_name; - Py_XINCREF(code); - gen->gi_code = code; - PyObject_GC_Track(gen); - return gen; -} - -/* PatchModuleWithCoroutine */ -static PyObject* __Pyx_Coroutine_patch_module(PyObject* module, const char* py_code) { -#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) - int result; - PyObject *globals, *result_obj; - globals = PyDict_New(); if (unlikely(!globals)) goto ignore; - result = PyDict_SetItemString(globals, "_cython_coroutine_type", - #ifdef __Pyx_Coroutine_USED - (PyObject*)__pyx_CoroutineType); - #else - Py_None); - #endif - if (unlikely(result < 0)) goto ignore; - result = PyDict_SetItemString(globals, "_cython_generator_type", - #ifdef __Pyx_Generator_USED - (PyObject*)__pyx_GeneratorType); - #else - Py_None); - #endif - if (unlikely(result < 0)) goto ignore; - if (unlikely(PyDict_SetItemString(globals, "_module", module) < 0)) goto ignore; - if (unlikely(PyDict_SetItemString(globals, "__builtins__", __pyx_b) < 0)) goto ignore; - result_obj = PyRun_String(py_code, Py_file_input, globals, globals); - if (unlikely(!result_obj)) goto ignore; - Py_DECREF(result_obj); - Py_DECREF(globals); - return module; -ignore: - Py_XDECREF(globals); - PyErr_WriteUnraisable(module); - if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, "Cython module failed to patch module with custom type", 1) < 0)) { - Py_DECREF(module); - module = NULL; - } -#else - py_code++; -#endif - return module; -} - -/* PatchGeneratorABC */ -#ifndef CYTHON_REGISTER_ABCS -#define CYTHON_REGISTER_ABCS 1 -#endif -#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) -static PyObject* __Pyx_patch_abc_module(PyObject *module); -static PyObject* __Pyx_patch_abc_module(PyObject *module) { - module = __Pyx_Coroutine_patch_module( - module, "" -"if _cython_generator_type is not None:\n" -" try: Generator = _module.Generator\n" -" except AttributeError: pass\n" -" else: Generator.register(_cython_generator_type)\n" -"if _cython_coroutine_type is not None:\n" -" try: Coroutine = _module.Coroutine\n" -" except AttributeError: pass\n" -" else: Coroutine.register(_cython_coroutine_type)\n" - ); - return module; -} -#endif -static int __Pyx_patch_abc(void) { -#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) - static int abc_patched = 0; - if (CYTHON_REGISTER_ABCS && !abc_patched) { - PyObject *module; - module = PyImport_ImportModule((PY_MAJOR_VERSION >= 3) ? "collections.abc" : "collections"); - if (!module) { - PyErr_WriteUnraisable(NULL); - if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, - ((PY_MAJOR_VERSION >= 3) ? - "Cython module failed to register with collections.abc module" : - "Cython module failed to register with collections module"), 1) < 0)) { - return -1; - } - } else { - module = __Pyx_patch_abc_module(module); - abc_patched = 1; - if (unlikely(!module)) - return -1; - Py_DECREF(module); - } - module = PyImport_ImportModule("backports_abc"); - if (module) { - module = __Pyx_patch_abc_module(module); - Py_XDECREF(module); - } - if (!module) { - PyErr_Clear(); - } - } -#else - if ((0)) __Pyx_Coroutine_patch_module(NULL, NULL); -#endif - return 0; -} - -/* Generator */ -static PyMethodDef __pyx_Generator_methods[] = { - {"send", (PyCFunction) __Pyx_Coroutine_Send, METH_O, - (char*) PyDoc_STR("send(arg) -> send 'arg' into generator,\nreturn next yielded value or raise StopIteration.")}, - {"throw", (PyCFunction) __Pyx_Coroutine_Throw, METH_VARARGS, - (char*) PyDoc_STR("throw(typ[,val[,tb]]) -> raise exception in generator,\nreturn next yielded value or raise StopIteration.")}, - {"close", (PyCFunction) __Pyx_Coroutine_Close_Method, METH_NOARGS, - (char*) PyDoc_STR("close() -> raise GeneratorExit inside generator.")}, - {0, 0, 0, 0} -}; -static PyMemberDef __pyx_Generator_memberlist[] = { - {(char *) "gi_running", T_BOOL, offsetof(__pyx_CoroutineObject, is_running), READONLY, NULL}, - {(char*) "gi_yieldfrom", T_OBJECT, offsetof(__pyx_CoroutineObject, yieldfrom), READONLY, - (char*) PyDoc_STR("object being iterated by 'yield from', or None")}, - {(char*) "gi_code", T_OBJECT, offsetof(__pyx_CoroutineObject, gi_code), READONLY, NULL}, - {0, 0, 0, 0, 0} -}; -static PyGetSetDef __pyx_Generator_getsets[] = { - {(char *) "__name__", (getter)__Pyx_Coroutine_get_name, (setter)__Pyx_Coroutine_set_name, - (char*) PyDoc_STR("name of the generator"), 0}, - {(char *) "__qualname__", (getter)__Pyx_Coroutine_get_qualname, (setter)__Pyx_Coroutine_set_qualname, - (char*) PyDoc_STR("qualified name of the generator"), 0}, - {0, 0, 0, 0, 0} -}; -static PyTypeObject __pyx_GeneratorType_type = { - PyVarObject_HEAD_INIT(0, 0) - "generator", - sizeof(__pyx_CoroutineObject), - 0, - (destructor) __Pyx_Coroutine_dealloc, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE, - 0, - (traverseproc) __Pyx_Coroutine_traverse, - 0, - 0, - offsetof(__pyx_CoroutineObject, gi_weakreflist), - 0, - (iternextfunc) __Pyx_Generator_Next, - __pyx_Generator_methods, - __pyx_Generator_memberlist, - __pyx_Generator_getsets, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, -#if CYTHON_USE_TP_FINALIZE - 0, -#else - __Pyx_Coroutine_del, -#endif - 0, -#if CYTHON_USE_TP_FINALIZE - __Pyx_Coroutine_del, -#elif PY_VERSION_HEX >= 0x030400a1 - 0, -#endif -#if PY_VERSION_HEX >= 0x030800b1 - 0, -#endif -#if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 - 0, -#endif -}; -static int __pyx_Generator_init(void) { - __pyx_GeneratorType_type.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict; - __pyx_GeneratorType_type.tp_iter = PyObject_SelfIter; - __pyx_GeneratorType = __Pyx_FetchCommonType(&__pyx_GeneratorType_type); - if (unlikely(!__pyx_GeneratorType)) { - return -1; - } - return 0; -} - -/* CheckBinaryVersion */ -static int __Pyx_check_binary_version(void) { - char ctversion[4], rtversion[4]; - PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION); - PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion()); - if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) { - char message[200]; - PyOS_snprintf(message, sizeof(message), - "compiletime version %s of module '%.100s' " - "does not match runtime version %s", - ctversion, __Pyx_MODULE_NAME, rtversion); - return PyErr_WarnEx(NULL, message, 1); - } - return 0; -} - -/* InitStrings */ -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) { - while (t->p) { - #if PY_MAJOR_VERSION < 3 - if (t->is_unicode) { - *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); - } else if (t->intern) { - *t->p = PyString_InternFromString(t->s); - } else { - *t->p = PyString_FromStringAndSize(t->s, t->n - 1); - } - #else - if (t->is_unicode | t->is_str) { - if (t->intern) { - *t->p = PyUnicode_InternFromString(t->s); - } else if (t->encoding) { - *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); - } else { - *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); - } - } else { - *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); - } - #endif - if (!*t->p) - return -1; - if (PyObject_Hash(*t->p) == -1) - return -1; - ++t; - } - return 0; -} - -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { - return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); -} -static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { - Py_ssize_t ignore; - return __Pyx_PyObject_AsStringAndSize(o, &ignore); -} -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT -#if !CYTHON_PEP393_ENABLED -static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { - char* defenc_c; - PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); - if (!defenc) return NULL; - defenc_c = PyBytes_AS_STRING(defenc); -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - { - char* end = defenc_c + PyBytes_GET_SIZE(defenc); - char* c; - for (c = defenc_c; c < end; c++) { - if ((unsigned char) (*c) >= 128) { - PyUnicode_AsASCIIString(o); - return NULL; - } - } - } -#endif - *length = PyBytes_GET_SIZE(defenc); - return defenc_c; -} -#else -static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { - if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - if (likely(PyUnicode_IS_ASCII(o))) { - *length = PyUnicode_GET_LENGTH(o); - return PyUnicode_AsUTF8(o); - } else { - PyUnicode_AsASCIIString(o); - return NULL; - } -#else - return PyUnicode_AsUTF8AndSize(o, length); -#endif -} -#endif -#endif -static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT - if ( -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - __Pyx_sys_getdefaultencoding_not_ascii && -#endif - PyUnicode_Check(o)) { - return __Pyx_PyUnicode_AsStringAndSize(o, length); - } else -#endif -#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) - if (PyByteArray_Check(o)) { - *length = PyByteArray_GET_SIZE(o); - return PyByteArray_AS_STRING(o); - } else -#endif - { - char* result; - int r = PyBytes_AsStringAndSize(o, &result, length); - if (unlikely(r < 0)) { - return NULL; - } else { - return result; - } - } -} -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { - int is_true = x == Py_True; - if (is_true | (x == Py_False) | (x == Py_None)) return is_true; - else return PyObject_IsTrue(x); -} -static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { - int retval; - if (unlikely(!x)) return -1; - retval = __Pyx_PyObject_IsTrue(x); - Py_DECREF(x); - return retval; -} -static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { -#if PY_MAJOR_VERSION >= 3 - if (PyLong_Check(result)) { - if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, - "__int__ returned non-int (type %.200s). " - "The ability to return an instance of a strict subclass of int " - "is deprecated, and may be removed in a future version of Python.", - Py_TYPE(result)->tp_name)) { - Py_DECREF(result); - return NULL; - } - return result; - } -#endif - PyErr_Format(PyExc_TypeError, - "__%.4s__ returned non-%.4s (type %.200s)", - type_name, type_name, Py_TYPE(result)->tp_name); - Py_DECREF(result); - return NULL; -} -static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { -#if CYTHON_USE_TYPE_SLOTS - PyNumberMethods *m; -#endif - const char *name = NULL; - PyObject *res = NULL; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x) || PyLong_Check(x))) -#else - if (likely(PyLong_Check(x))) -#endif - return __Pyx_NewRef(x); -#if CYTHON_USE_TYPE_SLOTS - m = Py_TYPE(x)->tp_as_number; - #if PY_MAJOR_VERSION < 3 - if (m && m->nb_int) { - name = "int"; - res = m->nb_int(x); - } - else if (m && m->nb_long) { - name = "long"; - res = m->nb_long(x); - } - #else - if (likely(m && m->nb_int)) { - name = "int"; - res = m->nb_int(x); - } - #endif -#else - if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { - res = PyNumber_Int(x); - } -#endif - if (likely(res)) { -#if PY_MAJOR_VERSION < 3 - if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { -#else - if (unlikely(!PyLong_CheckExact(res))) { -#endif - return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); - } - } - else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_TypeError, - "an integer is required"); - } - return res; -} -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { - Py_ssize_t ival; - PyObject *x; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(b))) { - if (sizeof(Py_ssize_t) >= sizeof(long)) - return PyInt_AS_LONG(b); - else - return PyInt_AsSsize_t(b); - } -#endif - if (likely(PyLong_CheckExact(b))) { - #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)b)->ob_digit; - const Py_ssize_t size = Py_SIZE(b); - if (likely(__Pyx_sst_abs(size) <= 1)) { - ival = likely(size) ? digits[0] : 0; - if (size == -1) ival = -ival; - return ival; - } else { - switch (size) { - case 2: - if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { - return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case -2: - if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { - return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case 3: - if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { - return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case -3: - if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { - return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case 4: - if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { - return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case -4: - if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { - return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - } - } - #endif - return PyLong_AsSsize_t(b); - } - x = PyNumber_Index(b); - if (!x) return -1; - ival = PyInt_AsSsize_t(x); - Py_DECREF(x); - return ival; -} -static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { - return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); -} -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { - return PyInt_FromSize_t(ival); -} - - -#endif /* Py_PYTHON_H */ diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_http_parser.cp39-win_amd64.pyd b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_http_parser.cp39-win_amd64.pyd deleted file mode 100644 index 61fc6025f17cfb1c648ab3522c3aab95b64baa99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 235520 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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_http_parser.pyx b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_http_parser.pyx deleted file mode 100644 index c24e3105..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_http_parser.pyx +++ /dev/null @@ -1,875 +0,0 @@ -#cython: language_level=3 -# -# Based on https://github.com/MagicStack/httptools -# -from __future__ import absolute_import, print_function - -from cpython cimport ( - Py_buffer, - PyBUF_SIMPLE, - PyBuffer_Release, - PyBytes_AsString, - PyBytes_AsStringAndSize, - PyObject_GetBuffer, -) -from cpython.mem cimport PyMem_Free, PyMem_Malloc -from libc.limits cimport ULLONG_MAX -from libc.string cimport memcpy - -from multidict import CIMultiDict as _CIMultiDict, CIMultiDictProxy as _CIMultiDictProxy -from yarl import URL as _URL - -from aiohttp import hdrs - -from .http_exceptions import ( - BadHttpMessage, - BadStatusLine, - ContentLengthError, - InvalidHeader, - InvalidURLError, - LineTooLong, - PayloadEncodingError, - TransferEncodingError, -) -from .http_parser import DeflateBuffer as _DeflateBuffer -from .http_writer import ( - HttpVersion as _HttpVersion, - HttpVersion10 as _HttpVersion10, - HttpVersion11 as _HttpVersion11, -) -from .streams import EMPTY_PAYLOAD as _EMPTY_PAYLOAD, StreamReader as _StreamReader - -cimport cython - -from aiohttp cimport _cparser as cparser - -include "_headers.pxi" - -from aiohttp cimport _find_header - -DEF DEFAULT_FREELIST_SIZE = 250 - -cdef extern from "Python.h": - int PyByteArray_Resize(object, Py_ssize_t) except -1 - Py_ssize_t PyByteArray_Size(object) except -1 - char* PyByteArray_AsString(object) - -__all__ = ('HttpRequestParser', 'HttpResponseParser', - 'RawRequestMessage', 'RawResponseMessage') - -cdef object URL = _URL -cdef object URL_build = URL.build -cdef object CIMultiDict = _CIMultiDict -cdef object CIMultiDictProxy = _CIMultiDictProxy -cdef object HttpVersion = _HttpVersion -cdef object HttpVersion10 = _HttpVersion10 -cdef object HttpVersion11 = _HttpVersion11 -cdef object SEC_WEBSOCKET_KEY1 = hdrs.SEC_WEBSOCKET_KEY1 -cdef object CONTENT_ENCODING = hdrs.CONTENT_ENCODING -cdef object EMPTY_PAYLOAD = _EMPTY_PAYLOAD -cdef object StreamReader = _StreamReader -cdef object DeflateBuffer = _DeflateBuffer - - -cdef inline object extend(object buf, const char* at, size_t length): - cdef Py_ssize_t s - cdef char* ptr - s = PyByteArray_Size(buf) - PyByteArray_Resize(buf, s + length) - ptr = PyByteArray_AsString(buf) - memcpy(ptr + s, at, length) - - -DEF METHODS_COUNT = 34; - -cdef list _http_method = [] - -for i in range(METHODS_COUNT): - _http_method.append( - cparser.http_method_str( i).decode('ascii')) - - -cdef inline str http_method_str(int i): - if i < METHODS_COUNT: - return _http_method[i] - else: - return "" - -cdef inline object find_header(bytes raw_header): - cdef Py_ssize_t size - cdef char *buf - cdef int idx - PyBytes_AsStringAndSize(raw_header, &buf, &size) - idx = _find_header.find_header(buf, size) - if idx == -1: - return raw_header.decode('utf-8', 'surrogateescape') - return headers[idx] - - -@cython.freelist(DEFAULT_FREELIST_SIZE) -cdef class RawRequestMessage: - cdef readonly str method - cdef readonly str path - cdef readonly object version # HttpVersion - cdef readonly object headers # CIMultiDict - cdef readonly object raw_headers # tuple - cdef readonly object should_close - cdef readonly object compression - cdef readonly object upgrade - cdef readonly object chunked - cdef readonly object url # yarl.URL - - def __init__(self, method, path, version, headers, raw_headers, - should_close, compression, upgrade, chunked, url): - self.method = method - self.path = path - self.version = version - self.headers = headers - self.raw_headers = raw_headers - self.should_close = should_close - self.compression = compression - self.upgrade = upgrade - self.chunked = chunked - self.url = url - - def __repr__(self): - info = [] - info.append(("method", self.method)) - info.append(("path", self.path)) - info.append(("version", self.version)) - info.append(("headers", self.headers)) - info.append(("raw_headers", self.raw_headers)) - info.append(("should_close", self.should_close)) - info.append(("compression", self.compression)) - info.append(("upgrade", self.upgrade)) - info.append(("chunked", self.chunked)) - info.append(("url", self.url)) - sinfo = ', '.join(name + '=' + repr(val) for name, val in info) - return '' - - def _replace(self, **dct): - cdef RawRequestMessage ret - ret = _new_request_message(self.method, - self.path, - self.version, - self.headers, - self.raw_headers, - self.should_close, - self.compression, - self.upgrade, - self.chunked, - self.url) - if "method" in dct: - ret.method = dct["method"] - if "path" in dct: - ret.path = dct["path"] - if "version" in dct: - ret.version = dct["version"] - if "headers" in dct: - ret.headers = dct["headers"] - if "raw_headers" in dct: - ret.raw_headers = dct["raw_headers"] - if "should_close" in dct: - ret.should_close = dct["should_close"] - if "compression" in dct: - ret.compression = dct["compression"] - if "upgrade" in dct: - ret.upgrade = dct["upgrade"] - if "chunked" in dct: - ret.chunked = dct["chunked"] - if "url" in dct: - ret.url = dct["url"] - return ret - -cdef _new_request_message(str method, - str path, - object version, - object headers, - object raw_headers, - bint should_close, - object compression, - bint upgrade, - bint chunked, - object url): - cdef RawRequestMessage ret - ret = RawRequestMessage.__new__(RawRequestMessage) - ret.method = method - ret.path = path - ret.version = version - ret.headers = headers - ret.raw_headers = raw_headers - ret.should_close = should_close - ret.compression = compression - ret.upgrade = upgrade - ret.chunked = chunked - ret.url = url - return ret - - -@cython.freelist(DEFAULT_FREELIST_SIZE) -cdef class RawResponseMessage: - cdef readonly object version # HttpVersion - cdef readonly int code - cdef readonly str reason - cdef readonly object headers # CIMultiDict - cdef readonly object raw_headers # tuple - cdef readonly object should_close - cdef readonly object compression - cdef readonly object upgrade - cdef readonly object chunked - - def __init__(self, version, code, reason, headers, raw_headers, - should_close, compression, upgrade, chunked): - self.version = version - self.code = code - self.reason = reason - self.headers = headers - self.raw_headers = raw_headers - self.should_close = should_close - self.compression = compression - self.upgrade = upgrade - self.chunked = chunked - - def __repr__(self): - info = [] - info.append(("version", self.version)) - info.append(("code", self.code)) - info.append(("reason", self.reason)) - info.append(("headers", self.headers)) - info.append(("raw_headers", self.raw_headers)) - info.append(("should_close", self.should_close)) - info.append(("compression", self.compression)) - info.append(("upgrade", self.upgrade)) - info.append(("chunked", self.chunked)) - sinfo = ', '.join(name + '=' + repr(val) for name, val in info) - return '' - - -cdef _new_response_message(object version, - int code, - str reason, - object headers, - object raw_headers, - bint should_close, - object compression, - bint upgrade, - bint chunked): - cdef RawResponseMessage ret - ret = RawResponseMessage.__new__(RawResponseMessage) - ret.version = version - ret.code = code - ret.reason = reason - ret.headers = headers - ret.raw_headers = raw_headers - ret.should_close = should_close - ret.compression = compression - ret.upgrade = upgrade - ret.chunked = chunked - return ret - - -@cython.internal -cdef class HttpParser: - - cdef: - cparser.http_parser* _cparser - cparser.http_parser_settings* _csettings - - bytearray _raw_name - bytearray _raw_value - bint _has_value - - object _protocol - object _loop - object _timer - - size_t _max_line_size - size_t _max_field_size - size_t _max_headers - bint _response_with_body - bint _read_until_eof - - bint _started - object _url - bytearray _buf - str _path - str _reason - object _headers - list _raw_headers - bint _upgraded - list _messages - object _payload - bint _payload_error - object _payload_exception - object _last_error - bint _auto_decompress - int _limit - - str _content_encoding - - Py_buffer py_buf - - def __cinit__(self): - self._cparser = \ - PyMem_Malloc(sizeof(cparser.http_parser)) - if self._cparser is NULL: - raise MemoryError() - - self._csettings = \ - PyMem_Malloc(sizeof(cparser.http_parser_settings)) - if self._csettings is NULL: - raise MemoryError() - - def __dealloc__(self): - PyMem_Free(self._cparser) - PyMem_Free(self._csettings) - - cdef _init(self, cparser.http_parser_type mode, - object protocol, object loop, int limit, - object timer=None, - size_t max_line_size=8190, size_t max_headers=32768, - size_t max_field_size=8190, payload_exception=None, - bint response_with_body=True, bint read_until_eof=False, - bint auto_decompress=True): - cparser.http_parser_init(self._cparser, mode) - self._cparser.data = self - self._cparser.content_length = 0 - - cparser.http_parser_settings_init(self._csettings) - - self._protocol = protocol - self._loop = loop - self._timer = timer - - self._buf = bytearray() - self._payload = None - self._payload_error = 0 - self._payload_exception = payload_exception - self._messages = [] - - self._raw_name = bytearray() - self._raw_value = bytearray() - self._has_value = False - - self._max_line_size = max_line_size - self._max_headers = max_headers - self._max_field_size = max_field_size - self._response_with_body = response_with_body - self._read_until_eof = read_until_eof - self._upgraded = False - self._auto_decompress = auto_decompress - self._content_encoding = None - - self._csettings.on_url = cb_on_url - self._csettings.on_status = cb_on_status - self._csettings.on_header_field = cb_on_header_field - self._csettings.on_header_value = cb_on_header_value - self._csettings.on_headers_complete = cb_on_headers_complete - self._csettings.on_body = cb_on_body - self._csettings.on_message_begin = cb_on_message_begin - self._csettings.on_message_complete = cb_on_message_complete - self._csettings.on_chunk_header = cb_on_chunk_header - self._csettings.on_chunk_complete = cb_on_chunk_complete - - self._last_error = None - self._limit = limit - - cdef _process_header(self): - if self._raw_name: - raw_name = bytes(self._raw_name) - raw_value = bytes(self._raw_value) - - name = find_header(raw_name) - value = raw_value.decode('utf-8', 'surrogateescape') - - self._headers.add(name, value) - - if name is CONTENT_ENCODING: - self._content_encoding = value - - PyByteArray_Resize(self._raw_name, 0) - PyByteArray_Resize(self._raw_value, 0) - self._has_value = False - self._raw_headers.append((raw_name, raw_value)) - - cdef _on_header_field(self, char* at, size_t length): - cdef Py_ssize_t size - cdef char *buf - if self._has_value: - self._process_header() - - size = PyByteArray_Size(self._raw_name) - PyByteArray_Resize(self._raw_name, size + length) - buf = PyByteArray_AsString(self._raw_name) - memcpy(buf + size, at, length) - - cdef _on_header_value(self, char* at, size_t length): - cdef Py_ssize_t size - cdef char *buf - - size = PyByteArray_Size(self._raw_value) - PyByteArray_Resize(self._raw_value, size + length) - buf = PyByteArray_AsString(self._raw_value) - memcpy(buf + size, at, length) - self._has_value = True - - cdef _on_headers_complete(self): - self._process_header() - - method = http_method_str(self._cparser.method) - should_close = not cparser.http_should_keep_alive(self._cparser) - upgrade = self._cparser.upgrade - chunked = self._cparser.flags & cparser.F_CHUNKED - - raw_headers = tuple(self._raw_headers) - headers = CIMultiDictProxy(self._headers) - - if upgrade or self._cparser.method == 5: # cparser.CONNECT: - self._upgraded = True - - # do not support old websocket spec - if SEC_WEBSOCKET_KEY1 in headers: - raise InvalidHeader(SEC_WEBSOCKET_KEY1) - - encoding = None - enc = self._content_encoding - if enc is not None: - self._content_encoding = None - enc = enc.lower() - if enc in ('gzip', 'deflate', 'br'): - encoding = enc - - if self._cparser.type == cparser.HTTP_REQUEST: - msg = _new_request_message( - method, self._path, - self.http_version(), headers, raw_headers, - should_close, encoding, upgrade, chunked, self._url) - else: - msg = _new_response_message( - self.http_version(), self._cparser.status_code, self._reason, - headers, raw_headers, should_close, encoding, - upgrade, chunked) - - if (ULLONG_MAX > self._cparser.content_length > 0 or chunked or - self._cparser.method == 5 or # CONNECT: 5 - (self._cparser.status_code >= 199 and - self._cparser.content_length == ULLONG_MAX and - self._read_until_eof) - ): - payload = StreamReader( - self._protocol, timer=self._timer, loop=self._loop, - limit=self._limit) - else: - payload = EMPTY_PAYLOAD - - self._payload = payload - if encoding is not None and self._auto_decompress: - self._payload = DeflateBuffer(payload, encoding) - - if not self._response_with_body: - payload = EMPTY_PAYLOAD - - self._messages.append((msg, payload)) - - cdef _on_message_complete(self): - self._payload.feed_eof() - self._payload = None - - cdef _on_chunk_header(self): - self._payload.begin_http_chunk_receiving() - - cdef _on_chunk_complete(self): - self._payload.end_http_chunk_receiving() - - cdef object _on_status_complete(self): - pass - - cdef inline http_version(self): - cdef cparser.http_parser* parser = self._cparser - - if parser.http_major == 1: - if parser.http_minor == 0: - return HttpVersion10 - elif parser.http_minor == 1: - return HttpVersion11 - - return HttpVersion(parser.http_major, parser.http_minor) - - ### Public API ### - - def feed_eof(self): - cdef bytes desc - - if self._payload is not None: - if self._cparser.flags & cparser.F_CHUNKED: - raise TransferEncodingError( - "Not enough data for satisfy transfer length header.") - elif self._cparser.flags & cparser.F_CONTENTLENGTH: - raise ContentLengthError( - "Not enough data for satisfy content length header.") - elif self._cparser.http_errno != cparser.HPE_OK: - desc = cparser.http_errno_description( - self._cparser.http_errno) - raise PayloadEncodingError(desc.decode('latin-1')) - else: - self._payload.feed_eof() - elif self._started: - self._on_headers_complete() - if self._messages: - return self._messages[-1][0] - - def feed_data(self, data): - cdef: - size_t data_len - size_t nb - - PyObject_GetBuffer(data, &self.py_buf, PyBUF_SIMPLE) - data_len = self.py_buf.len - - nb = cparser.http_parser_execute( - self._cparser, - self._csettings, - self.py_buf.buf, - data_len) - - PyBuffer_Release(&self.py_buf) - - if (self._cparser.http_errno != cparser.HPE_OK): - if self._payload_error == 0: - if self._last_error is not None: - ex = self._last_error - self._last_error = None - else: - ex = parser_error_from_errno( - self._cparser.http_errno) - self._payload = None - raise ex - - if self._messages: - messages = self._messages - self._messages = [] - else: - messages = () - - if self._upgraded: - return messages, True, data[nb:] - else: - return messages, False, b'' - - def set_upgraded(self, val): - self._upgraded = val - - -cdef class HttpRequestParser(HttpParser): - - def __init__(self, protocol, loop, int limit, timer=None, - size_t max_line_size=8190, size_t max_headers=32768, - size_t max_field_size=8190, payload_exception=None, - bint response_with_body=True, bint read_until_eof=False, - ): - self._init(cparser.HTTP_REQUEST, protocol, loop, limit, timer, - max_line_size, max_headers, max_field_size, - payload_exception, response_with_body, read_until_eof) - - cdef object _on_status_complete(self): - cdef Py_buffer py_buf - if not self._buf: - return - self._path = self._buf.decode('utf-8', 'surrogateescape') - if self._cparser.method == 5: # CONNECT - self._url = URL(self._path) - else: - PyObject_GetBuffer(self._buf, &py_buf, PyBUF_SIMPLE) - try: - self._url = _parse_url(py_buf.buf, - py_buf.len) - finally: - PyBuffer_Release(&py_buf) - PyByteArray_Resize(self._buf, 0) - - -cdef class HttpResponseParser(HttpParser): - - def __init__(self, protocol, loop, int limit, timer=None, - size_t max_line_size=8190, size_t max_headers=32768, - size_t max_field_size=8190, payload_exception=None, - bint response_with_body=True, bint read_until_eof=False, - bint auto_decompress=True - ): - self._init(cparser.HTTP_RESPONSE, protocol, loop, limit, timer, - max_line_size, max_headers, max_field_size, - payload_exception, response_with_body, read_until_eof, - auto_decompress) - - cdef object _on_status_complete(self): - if self._buf: - self._reason = self._buf.decode('utf-8', 'surrogateescape') - PyByteArray_Resize(self._buf, 0) - else: - self._reason = self._reason or '' - -cdef int cb_on_message_begin(cparser.http_parser* parser) except -1: - cdef HttpParser pyparser = parser.data - - pyparser._started = True - pyparser._headers = CIMultiDict() - pyparser._raw_headers = [] - PyByteArray_Resize(pyparser._buf, 0) - pyparser._path = None - pyparser._reason = None - return 0 - - -cdef int cb_on_url(cparser.http_parser* parser, - const char *at, size_t length) except -1: - cdef HttpParser pyparser = parser.data - try: - if length > pyparser._max_line_size: - raise LineTooLong( - 'Status line is too long', pyparser._max_line_size, length) - extend(pyparser._buf, at, length) - except BaseException as ex: - pyparser._last_error = ex - return -1 - else: - return 0 - - -cdef int cb_on_status(cparser.http_parser* parser, - const char *at, size_t length) except -1: - cdef HttpParser pyparser = parser.data - cdef str reason - try: - if length > pyparser._max_line_size: - raise LineTooLong( - 'Status line is too long', pyparser._max_line_size, length) - extend(pyparser._buf, at, length) - except BaseException as ex: - pyparser._last_error = ex - return -1 - else: - return 0 - - -cdef int cb_on_header_field(cparser.http_parser* parser, - const char *at, size_t length) except -1: - cdef HttpParser pyparser = parser.data - cdef Py_ssize_t size - try: - pyparser._on_status_complete() - size = len(pyparser._raw_name) + length - if size > pyparser._max_field_size: - raise LineTooLong( - 'Header name is too long', pyparser._max_field_size, size) - pyparser._on_header_field(at, length) - except BaseException as ex: - pyparser._last_error = ex - return -1 - else: - return 0 - - -cdef int cb_on_header_value(cparser.http_parser* parser, - const char *at, size_t length) except -1: - cdef HttpParser pyparser = parser.data - cdef Py_ssize_t size - try: - size = len(pyparser._raw_value) + length - if size > pyparser._max_field_size: - raise LineTooLong( - 'Header value is too long', pyparser._max_field_size, size) - pyparser._on_header_value(at, length) - except BaseException as ex: - pyparser._last_error = ex - return -1 - else: - return 0 - - -cdef int cb_on_headers_complete(cparser.http_parser* parser) except -1: - cdef HttpParser pyparser = parser.data - try: - pyparser._on_status_complete() - pyparser._on_headers_complete() - except BaseException as exc: - pyparser._last_error = exc - return -1 - else: - if pyparser._cparser.upgrade or pyparser._cparser.method == 5: # CONNECT - return 2 - else: - return 0 - - -cdef int cb_on_body(cparser.http_parser* parser, - const char *at, size_t length) except -1: - cdef HttpParser pyparser = parser.data - cdef bytes body = at[:length] - try: - pyparser._payload.feed_data(body, length) - except BaseException as exc: - if pyparser._payload_exception is not None: - pyparser._payload.set_exception(pyparser._payload_exception(str(exc))) - else: - pyparser._payload.set_exception(exc) - pyparser._payload_error = 1 - return -1 - else: - return 0 - - -cdef int cb_on_message_complete(cparser.http_parser* parser) except -1: - cdef HttpParser pyparser = parser.data - try: - pyparser._started = False - pyparser._on_message_complete() - except BaseException as exc: - pyparser._last_error = exc - return -1 - else: - return 0 - - -cdef int cb_on_chunk_header(cparser.http_parser* parser) except -1: - cdef HttpParser pyparser = parser.data - try: - pyparser._on_chunk_header() - except BaseException as exc: - pyparser._last_error = exc - return -1 - else: - return 0 - - -cdef int cb_on_chunk_complete(cparser.http_parser* parser) except -1: - cdef HttpParser pyparser = parser.data - try: - pyparser._on_chunk_complete() - except BaseException as exc: - pyparser._last_error = exc - return -1 - else: - return 0 - - -cdef parser_error_from_errno(cparser.http_errno errno): - cdef bytes desc = cparser.http_errno_description(errno) - - if errno in (cparser.HPE_CB_message_begin, - cparser.HPE_CB_url, - cparser.HPE_CB_header_field, - cparser.HPE_CB_header_value, - cparser.HPE_CB_headers_complete, - cparser.HPE_CB_body, - cparser.HPE_CB_message_complete, - cparser.HPE_CB_status, - cparser.HPE_CB_chunk_header, - cparser.HPE_CB_chunk_complete): - cls = BadHttpMessage - - elif errno == cparser.HPE_INVALID_STATUS: - cls = BadStatusLine - - elif errno == cparser.HPE_INVALID_METHOD: - cls = BadStatusLine - - elif errno == cparser.HPE_INVALID_URL: - cls = InvalidURLError - - else: - cls = BadHttpMessage - - return cls(desc.decode('latin-1')) - - -def parse_url(url): - cdef: - Py_buffer py_buf - char* buf_data - - PyObject_GetBuffer(url, &py_buf, PyBUF_SIMPLE) - try: - buf_data = py_buf.buf - return _parse_url(buf_data, py_buf.len) - finally: - PyBuffer_Release(&py_buf) - - -cdef _parse_url(char* buf_data, size_t length): - cdef: - cparser.http_parser_url* parsed - int res - str schema = None - str host = None - object port = None - str path = None - str query = None - str fragment = None - str user = None - str password = None - str userinfo = None - object result = None - int off - int ln - - parsed = \ - PyMem_Malloc(sizeof(cparser.http_parser_url)) - if parsed is NULL: - raise MemoryError() - cparser.http_parser_url_init(parsed) - try: - res = cparser.http_parser_parse_url(buf_data, length, 0, parsed) - - if res == 0: - if parsed.field_set & (1 << cparser.UF_SCHEMA): - off = parsed.field_data[cparser.UF_SCHEMA].off - ln = parsed.field_data[cparser.UF_SCHEMA].len - schema = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') - else: - schema = '' - - if parsed.field_set & (1 << cparser.UF_HOST): - off = parsed.field_data[cparser.UF_HOST].off - ln = parsed.field_data[cparser.UF_HOST].len - host = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') - else: - host = '' - - if parsed.field_set & (1 << cparser.UF_PORT): - port = parsed.port - - if parsed.field_set & (1 << cparser.UF_PATH): - off = parsed.field_data[cparser.UF_PATH].off - ln = parsed.field_data[cparser.UF_PATH].len - path = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') - else: - path = '' - - if parsed.field_set & (1 << cparser.UF_QUERY): - off = parsed.field_data[cparser.UF_QUERY].off - ln = parsed.field_data[cparser.UF_QUERY].len - query = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') - else: - query = '' - - if parsed.field_set & (1 << cparser.UF_FRAGMENT): - off = parsed.field_data[cparser.UF_FRAGMENT].off - ln = parsed.field_data[cparser.UF_FRAGMENT].len - fragment = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') - else: - fragment = '' - - if parsed.field_set & (1 << cparser.UF_USERINFO): - off = parsed.field_data[cparser.UF_USERINFO].off - ln = parsed.field_data[cparser.UF_USERINFO].len - userinfo = buf_data[off:off+ln].decode('utf-8', 'surrogateescape') - - user, sep, password = userinfo.partition(':') - - return URL_build(scheme=schema, - user=user, password=password, host=host, port=port, - path=path, query_string=query, fragment=fragment, encoded=True) - else: - raise InvalidURLError("invalid url {!r}".format(buf_data)) - finally: - PyMem_Free(parsed) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_http_writer.c b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_http_writer.c deleted file mode 100644 index 770c93a7..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_http_writer.c +++ /dev/null @@ -1,5840 +0,0 @@ -/* Generated by Cython 0.29.21 */ - -#define PY_SSIZE_T_CLEAN -#include "Python.h" -#ifndef Py_PYTHON_H - #error Python headers needed to compile C extensions, please install development version of Python. -#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) - #error Cython requires Python 2.6+ or Python 3.3+. -#else -#define CYTHON_ABI "0_29_21" -#define CYTHON_HEX_VERSION 0x001D15F0 -#define CYTHON_FUTURE_DIVISION 1 -#include -#ifndef offsetof - #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) -#endif -#if !defined(WIN32) && !defined(MS_WINDOWS) - #ifndef __stdcall - #define __stdcall - #endif - #ifndef __cdecl - #define __cdecl - #endif - #ifndef __fastcall - #define __fastcall - #endif -#endif -#ifndef DL_IMPORT - #define DL_IMPORT(t) t -#endif -#ifndef DL_EXPORT - #define DL_EXPORT(t) t -#endif -#define __PYX_COMMA , -#ifndef HAVE_LONG_LONG - #if PY_VERSION_HEX >= 0x02070000 - #define HAVE_LONG_LONG - #endif -#endif -#ifndef PY_LONG_LONG - #define PY_LONG_LONG LONG_LONG -#endif -#ifndef Py_HUGE_VAL - #define Py_HUGE_VAL HUGE_VAL -#endif -#ifdef PYPY_VERSION - #define CYTHON_COMPILING_IN_PYPY 1 - #define CYTHON_COMPILING_IN_PYSTON 0 - #define CYTHON_COMPILING_IN_CPYTHON 0 - #undef CYTHON_USE_TYPE_SLOTS - #define CYTHON_USE_TYPE_SLOTS 0 - #undef CYTHON_USE_PYTYPE_LOOKUP - #define CYTHON_USE_PYTYPE_LOOKUP 0 - #if PY_VERSION_HEX < 0x03050000 - #undef CYTHON_USE_ASYNC_SLOTS - #define CYTHON_USE_ASYNC_SLOTS 0 - #elif !defined(CYTHON_USE_ASYNC_SLOTS) - #define CYTHON_USE_ASYNC_SLOTS 1 - #endif - #undef CYTHON_USE_PYLIST_INTERNALS - #define CYTHON_USE_PYLIST_INTERNALS 0 - #undef CYTHON_USE_UNICODE_INTERNALS - #define CYTHON_USE_UNICODE_INTERNALS 0 - #undef CYTHON_USE_UNICODE_WRITER - #define CYTHON_USE_UNICODE_WRITER 0 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 - #undef CYTHON_AVOID_BORROWED_REFS - #define CYTHON_AVOID_BORROWED_REFS 1 - #undef CYTHON_ASSUME_SAFE_MACROS - #define CYTHON_ASSUME_SAFE_MACROS 0 - #undef CYTHON_UNPACK_METHODS - #define CYTHON_UNPACK_METHODS 0 - #undef CYTHON_FAST_THREAD_STATE - #define CYTHON_FAST_THREAD_STATE 0 - #undef CYTHON_FAST_PYCALL - #define CYTHON_FAST_PYCALL 0 - #undef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT 0 - #undef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE 0 - #undef CYTHON_USE_DICT_VERSIONS - #define CYTHON_USE_DICT_VERSIONS 0 - #undef CYTHON_USE_EXC_INFO_STACK - #define CYTHON_USE_EXC_INFO_STACK 0 -#elif defined(PYSTON_VERSION) - #define CYTHON_COMPILING_IN_PYPY 0 - #define CYTHON_COMPILING_IN_PYSTON 1 - #define CYTHON_COMPILING_IN_CPYTHON 0 - #ifndef CYTHON_USE_TYPE_SLOTS - #define CYTHON_USE_TYPE_SLOTS 1 - #endif - #undef CYTHON_USE_PYTYPE_LOOKUP - #define CYTHON_USE_PYTYPE_LOOKUP 0 - #undef CYTHON_USE_ASYNC_SLOTS - #define CYTHON_USE_ASYNC_SLOTS 0 - #undef CYTHON_USE_PYLIST_INTERNALS - #define CYTHON_USE_PYLIST_INTERNALS 0 - #ifndef CYTHON_USE_UNICODE_INTERNALS - #define CYTHON_USE_UNICODE_INTERNALS 1 - #endif - #undef CYTHON_USE_UNICODE_WRITER - #define CYTHON_USE_UNICODE_WRITER 0 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 - #ifndef CYTHON_AVOID_BORROWED_REFS - #define CYTHON_AVOID_BORROWED_REFS 0 - #endif - #ifndef CYTHON_ASSUME_SAFE_MACROS - #define CYTHON_ASSUME_SAFE_MACROS 1 - #endif - #ifndef CYTHON_UNPACK_METHODS - #define CYTHON_UNPACK_METHODS 1 - #endif - #undef CYTHON_FAST_THREAD_STATE - #define CYTHON_FAST_THREAD_STATE 0 - #undef CYTHON_FAST_PYCALL - #define CYTHON_FAST_PYCALL 0 - #undef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT 0 - #undef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE 0 - #undef CYTHON_USE_DICT_VERSIONS - #define CYTHON_USE_DICT_VERSIONS 0 - #undef CYTHON_USE_EXC_INFO_STACK - #define CYTHON_USE_EXC_INFO_STACK 0 -#else - #define CYTHON_COMPILING_IN_PYPY 0 - #define CYTHON_COMPILING_IN_PYSTON 0 - #define CYTHON_COMPILING_IN_CPYTHON 1 - #ifndef CYTHON_USE_TYPE_SLOTS - #define CYTHON_USE_TYPE_SLOTS 1 - #endif - #if PY_VERSION_HEX < 0x02070000 - #undef CYTHON_USE_PYTYPE_LOOKUP - #define CYTHON_USE_PYTYPE_LOOKUP 0 - #elif !defined(CYTHON_USE_PYTYPE_LOOKUP) - #define CYTHON_USE_PYTYPE_LOOKUP 1 - #endif - #if PY_MAJOR_VERSION < 3 - #undef CYTHON_USE_ASYNC_SLOTS - #define CYTHON_USE_ASYNC_SLOTS 0 - #elif !defined(CYTHON_USE_ASYNC_SLOTS) - #define CYTHON_USE_ASYNC_SLOTS 1 - #endif - #if PY_VERSION_HEX < 0x02070000 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 - #elif !defined(CYTHON_USE_PYLONG_INTERNALS) - #define CYTHON_USE_PYLONG_INTERNALS 1 - #endif - #ifndef CYTHON_USE_PYLIST_INTERNALS - #define CYTHON_USE_PYLIST_INTERNALS 1 - #endif - #ifndef CYTHON_USE_UNICODE_INTERNALS - #define CYTHON_USE_UNICODE_INTERNALS 1 - #endif - #if PY_VERSION_HEX < 0x030300F0 - #undef CYTHON_USE_UNICODE_WRITER - #define CYTHON_USE_UNICODE_WRITER 0 - #elif !defined(CYTHON_USE_UNICODE_WRITER) - #define CYTHON_USE_UNICODE_WRITER 1 - #endif - #ifndef CYTHON_AVOID_BORROWED_REFS - #define CYTHON_AVOID_BORROWED_REFS 0 - #endif - #ifndef CYTHON_ASSUME_SAFE_MACROS - #define CYTHON_ASSUME_SAFE_MACROS 1 - #endif - #ifndef CYTHON_UNPACK_METHODS - #define CYTHON_UNPACK_METHODS 1 - #endif - #ifndef CYTHON_FAST_THREAD_STATE - #define CYTHON_FAST_THREAD_STATE 1 - #endif - #ifndef CYTHON_FAST_PYCALL - #define CYTHON_FAST_PYCALL 1 - #endif - #ifndef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) - #endif - #ifndef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1) - #endif - #ifndef CYTHON_USE_DICT_VERSIONS - #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1) - #endif - #ifndef CYTHON_USE_EXC_INFO_STACK - #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) - #endif -#endif -#if !defined(CYTHON_FAST_PYCCALL) -#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) -#endif -#if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #undef SHIFT - #undef BASE - #undef MASK - #ifdef SIZEOF_VOID_P - enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; - #endif -#endif -#ifndef __has_attribute - #define __has_attribute(x) 0 -#endif -#ifndef __has_cpp_attribute - #define __has_cpp_attribute(x) 0 -#endif -#ifndef CYTHON_RESTRICT - #if defined(__GNUC__) - #define CYTHON_RESTRICT __restrict__ - #elif defined(_MSC_VER) && _MSC_VER >= 1400 - #define CYTHON_RESTRICT __restrict - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_RESTRICT restrict - #else - #define CYTHON_RESTRICT - #endif -#endif -#ifndef CYTHON_UNUSED -# if defined(__GNUC__) -# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -#endif -#ifndef CYTHON_MAYBE_UNUSED_VAR -# if defined(__cplusplus) - template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { } -# else -# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x) -# endif -#endif -#ifndef CYTHON_NCP_UNUSED -# if CYTHON_COMPILING_IN_CPYTHON -# define CYTHON_NCP_UNUSED -# else -# define CYTHON_NCP_UNUSED CYTHON_UNUSED -# endif -#endif -#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) -#ifdef _MSC_VER - #ifndef _MSC_STDINT_H_ - #if _MSC_VER < 1300 - typedef unsigned char uint8_t; - typedef unsigned int uint32_t; - #else - typedef unsigned __int8 uint8_t; - typedef unsigned __int32 uint32_t; - #endif - #endif -#else - #include -#endif -#ifndef CYTHON_FALLTHROUGH - #if defined(__cplusplus) && __cplusplus >= 201103L - #if __has_cpp_attribute(fallthrough) - #define CYTHON_FALLTHROUGH [[fallthrough]] - #elif __has_cpp_attribute(clang::fallthrough) - #define CYTHON_FALLTHROUGH [[clang::fallthrough]] - #elif __has_cpp_attribute(gnu::fallthrough) - #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] - #endif - #endif - #ifndef CYTHON_FALLTHROUGH - #if __has_attribute(fallthrough) - #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) - #else - #define CYTHON_FALLTHROUGH - #endif - #endif - #if defined(__clang__ ) && defined(__apple_build_version__) - #if __apple_build_version__ < 7000000 - #undef CYTHON_FALLTHROUGH - #define CYTHON_FALLTHROUGH - #endif - #endif -#endif - -#ifndef CYTHON_INLINE - #if defined(__clang__) - #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) - #elif defined(__GNUC__) - #define CYTHON_INLINE __inline__ - #elif defined(_MSC_VER) - #define CYTHON_INLINE __inline - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_INLINE inline - #else - #define CYTHON_INLINE - #endif -#endif - -#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) - #define Py_OptimizeFlag 0 -#endif -#define __PYX_BUILD_PY_SSIZE_T "n" -#define CYTHON_FORMAT_SSIZE_T "z" -#if PY_MAJOR_VERSION < 3 - #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyClass_Type -#else - #define __Pyx_BUILTIN_MODULE_NAME "builtins" -#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2 - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) -#else - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) -#endif - #define __Pyx_DefaultClassType PyType_Type -#endif -#ifndef Py_TPFLAGS_CHECKTYPES - #define Py_TPFLAGS_CHECKTYPES 0 -#endif -#ifndef Py_TPFLAGS_HAVE_INDEX - #define Py_TPFLAGS_HAVE_INDEX 0 -#endif -#ifndef Py_TPFLAGS_HAVE_NEWBUFFER - #define Py_TPFLAGS_HAVE_NEWBUFFER 0 -#endif -#ifndef Py_TPFLAGS_HAVE_FINALIZE - #define Py_TPFLAGS_HAVE_FINALIZE 0 -#endif -#ifndef METH_STACKLESS - #define METH_STACKLESS 0 -#endif -#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) - #ifndef METH_FASTCALL - #define METH_FASTCALL 0x80 - #endif - typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); - typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, - Py_ssize_t nargs, PyObject *kwnames); -#else - #define __Pyx_PyCFunctionFast _PyCFunctionFast - #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords -#endif -#if CYTHON_FAST_PYCCALL -#define __Pyx_PyFastCFunction_Check(func)\ - ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))))) -#else -#define __Pyx_PyFastCFunction_Check(func) 0 -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) - #define PyObject_Malloc(s) PyMem_Malloc(s) - #define PyObject_Free(p) PyMem_Free(p) - #define PyObject_Realloc(p) PyMem_Realloc(p) -#endif -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1 - #define PyMem_RawMalloc(n) PyMem_Malloc(n) - #define PyMem_RawRealloc(p, n) PyMem_Realloc(p, n) - #define PyMem_RawFree(p) PyMem_Free(p) -#endif -#if CYTHON_COMPILING_IN_PYSTON - #define __Pyx_PyCode_HasFreeVars(co) PyCode_HasFreeVars(co) - #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno) -#else - #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) - #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) -#endif -#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000 - #define __Pyx_PyThreadState_Current PyThreadState_GET() -#elif PY_VERSION_HEX >= 0x03060000 - #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() -#elif PY_VERSION_HEX >= 0x03000000 - #define __Pyx_PyThreadState_Current PyThreadState_GET() -#else - #define __Pyx_PyThreadState_Current _PyThreadState_Current -#endif -#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) -#include "pythread.h" -#define Py_tss_NEEDS_INIT 0 -typedef int Py_tss_t; -static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { - *key = PyThread_create_key(); - return 0; -} -static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { - Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); - *key = Py_tss_NEEDS_INIT; - return key; -} -static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { - PyObject_Free(key); -} -static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { - return *key != Py_tss_NEEDS_INIT; -} -static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { - PyThread_delete_key(*key); - *key = Py_tss_NEEDS_INIT; -} -static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { - return PyThread_set_key_value(*key, value); -} -static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { - return PyThread_get_key_value(*key); -} -#endif -#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized) -#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) -#else -#define __Pyx_PyDict_NewPresized(n) PyDict_New() -#endif -#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION - #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) -#else - #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) -#endif -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS -#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) -#else -#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name) -#endif -#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) - #define CYTHON_PEP393_ENABLED 1 - #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ - 0 : _PyUnicode_Ready((PyObject *)(op))) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) - #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) - #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) - #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) - #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) - #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, ch) - #if defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE) - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) - #else - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) - #endif -#else - #define CYTHON_PEP393_ENABLED 0 - #define PyUnicode_1BYTE_KIND 1 - #define PyUnicode_2BYTE_KIND 2 - #define PyUnicode_4BYTE_KIND 4 - #define __Pyx_PyUnicode_READY(op) (0) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) - #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111) - #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) - #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) - #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) - #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = ch) - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) -#endif -#if CYTHON_COMPILING_IN_PYPY - #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) -#else - #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ - PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains) - #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check) - #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format) - #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) -#endif -#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) -#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) -#else - #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) -#endif -#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) - #define PyObject_ASCII(o) PyObject_Repr(o) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBaseString_Type PyUnicode_Type - #define PyStringObject PyUnicodeObject - #define PyString_Type PyUnicode_Type - #define PyString_Check PyUnicode_Check - #define PyString_CheckExact PyUnicode_CheckExact -#ifndef PyObject_Unicode - #define PyObject_Unicode PyObject_Str -#endif -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) - #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) -#else - #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) - #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) -#endif -#ifndef PySet_CheckExact - #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) -#endif -#if PY_VERSION_HEX >= 0x030900A4 - #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) - #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size) -#else - #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt) - #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size) -#endif -#if CYTHON_ASSUME_SAFE_MACROS - #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) -#else - #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyIntObject PyLongObject - #define PyInt_Type PyLong_Type - #define PyInt_Check(op) PyLong_Check(op) - #define PyInt_CheckExact(op) PyLong_CheckExact(op) - #define PyInt_FromString PyLong_FromString - #define PyInt_FromUnicode PyLong_FromUnicode - #define PyInt_FromLong PyLong_FromLong - #define PyInt_FromSize_t PyLong_FromSize_t - #define PyInt_FromSsize_t PyLong_FromSsize_t - #define PyInt_AsLong PyLong_AsLong - #define PyInt_AS_LONG PyLong_AS_LONG - #define PyInt_AsSsize_t PyLong_AsSsize_t - #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask - #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask - #define PyNumber_Int PyNumber_Long -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBoolObject PyLongObject -#endif -#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY - #ifndef PyUnicode_InternFromString - #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) - #endif -#endif -#if PY_VERSION_HEX < 0x030200A4 - typedef long Py_hash_t; - #define __Pyx_PyInt_FromHash_t PyInt_FromLong - #define __Pyx_PyInt_AsHash_t PyInt_AsLong -#else - #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t - #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyMethod_New(func, self, klass) ((self) ? ((void)(klass), PyMethod_New(func, self)) : __Pyx_NewRef(func)) -#else - #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) -#endif -#if CYTHON_USE_ASYNC_SLOTS - #if PY_VERSION_HEX >= 0x030500B1 - #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods - #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) - #else - #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) - #endif -#else - #define __Pyx_PyType_AsAsync(obj) NULL -#endif -#ifndef __Pyx_PyAsyncMethodsStruct - typedef struct { - unaryfunc am_await; - unaryfunc am_aiter; - unaryfunc am_anext; - } __Pyx_PyAsyncMethodsStruct; -#endif - -#if defined(WIN32) || defined(MS_WINDOWS) - #define _USE_MATH_DEFINES -#endif -#include -#ifdef NAN -#define __PYX_NAN() ((float) NAN) -#else -static CYTHON_INLINE float __PYX_NAN() { - float value; - memset(&value, 0xFF, sizeof(value)); - return value; -} -#endif -#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) -#define __Pyx_truncl trunc -#else -#define __Pyx_truncl truncl -#endif - -#define __PYX_MARK_ERR_POS(f_index, lineno) \ - { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } -#define __PYX_ERR(f_index, lineno, Ln_error) \ - { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } - -#ifndef __PYX_EXTERN_C - #ifdef __cplusplus - #define __PYX_EXTERN_C extern "C" - #else - #define __PYX_EXTERN_C extern - #endif -#endif - -#define __PYX_HAVE__aiohttp___http_writer -#define __PYX_HAVE_API__aiohttp___http_writer -/* Early includes */ -#include -#include -#include -#ifdef _OPENMP -#include -#endif /* _OPENMP */ - -#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) -#define CYTHON_WITHOUT_ASSERTIONS -#endif - -typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; - const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; - -#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 -#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 -#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) -#define __PYX_DEFAULT_STRING_ENCODING "" -#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString -#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#define __Pyx_uchar_cast(c) ((unsigned char)c) -#define __Pyx_long_cast(x) ((long)x) -#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ - (sizeof(type) < sizeof(Py_ssize_t)) ||\ - (sizeof(type) > sizeof(Py_ssize_t) &&\ - likely(v < (type)PY_SSIZE_T_MAX ||\ - v == (type)PY_SSIZE_T_MAX) &&\ - (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ - v == (type)PY_SSIZE_T_MIN))) ||\ - (sizeof(type) == sizeof(Py_ssize_t) &&\ - (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ - v == (type)PY_SSIZE_T_MAX))) ) -static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { - return (size_t) i < (size_t) limit; -} -#if defined (__cplusplus) && __cplusplus >= 201103L - #include - #define __Pyx_sst_abs(value) std::abs(value) -#elif SIZEOF_INT >= SIZEOF_SIZE_T - #define __Pyx_sst_abs(value) abs(value) -#elif SIZEOF_LONG >= SIZEOF_SIZE_T - #define __Pyx_sst_abs(value) labs(value) -#elif defined (_MSC_VER) - #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) -#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define __Pyx_sst_abs(value) llabs(value) -#elif defined (__GNUC__) - #define __Pyx_sst_abs(value) __builtin_llabs(value) -#else - #define __Pyx_sst_abs(value) ((value<0) ? -value : value) -#endif -static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); -static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); -#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) -#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) -#define __Pyx_PyBytes_FromString PyBytes_FromString -#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); -#if PY_MAJOR_VERSION < 3 - #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#else - #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize -#endif -#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyObject_AsWritableString(s) ((char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsWritableSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) -#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) -#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) -#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) -#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) -static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { - const Py_UNICODE *u_end = u; - while (*u_end++) ; - return (size_t)(u_end - u - 1); -} -#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) -#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode -#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode -#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) -#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) -static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); -static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); -static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); -#define __Pyx_PySequence_Tuple(obj)\ - (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); -#if CYTHON_ASSUME_SAFE_MACROS -#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) -#else -#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) -#endif -#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) -#if PY_MAJOR_VERSION >= 3 -#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) -#else -#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) -#endif -#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x)) -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII -static int __Pyx_sys_getdefaultencoding_not_ascii; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys; - PyObject* default_encoding = NULL; - PyObject* ascii_chars_u = NULL; - PyObject* ascii_chars_b = NULL; - const char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (!sys) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); - Py_DECREF(sys); - if (!default_encoding) goto bad; - default_encoding_c = PyBytes_AsString(default_encoding); - if (!default_encoding_c) goto bad; - if (strcmp(default_encoding_c, "ascii") == 0) { - __Pyx_sys_getdefaultencoding_not_ascii = 0; - } else { - char ascii_chars[128]; - int c; - for (c = 0; c < 128; c++) { - ascii_chars[c] = c; - } - __Pyx_sys_getdefaultencoding_not_ascii = 1; - ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); - if (!ascii_chars_u) goto bad; - ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); - if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { - PyErr_Format( - PyExc_ValueError, - "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", - default_encoding_c); - goto bad; - } - Py_DECREF(ascii_chars_u); - Py_DECREF(ascii_chars_b); - } - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return -1; -} -#endif -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) -#else -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT -static char* __PYX_DEFAULT_STRING_ENCODING; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys; - PyObject* default_encoding = NULL; - char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (!sys) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - Py_DECREF(sys); - if (!default_encoding) goto bad; - default_encoding_c = PyBytes_AsString(default_encoding); - if (!default_encoding_c) goto bad; - __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); - if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; - strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(default_encoding); - return -1; -} -#endif -#endif - - -/* Test for GCC > 2.95 */ -#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) -#else /* !__GNUC__ or GCC < 2.95 */ - #define likely(x) (x) - #define unlikely(x) (x) -#endif /* __GNUC__ */ -static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } - -static PyObject *__pyx_m = NULL; -static PyObject *__pyx_d; -static PyObject *__pyx_b; -static PyObject *__pyx_cython_runtime = NULL; -static PyObject *__pyx_empty_tuple; -static PyObject *__pyx_empty_bytes; -static PyObject *__pyx_empty_unicode; -static int __pyx_lineno; -static int __pyx_clineno = 0; -static const char * __pyx_cfilenm= __FILE__; -static const char *__pyx_filename; - - -static const char *__pyx_f[] = { - "aiohttp\\_http_writer.pyx", - "type.pxd", -}; - -/*--- Type declarations ---*/ -struct __pyx_t_7aiohttp_12_http_writer_Writer; - -/* "aiohttp/_http_writer.pyx":18 - * # ----------------- writer --------------------------- - * - * cdef struct Writer: # <<<<<<<<<<<<<< - * char *buf - * Py_ssize_t size - */ -struct __pyx_t_7aiohttp_12_http_writer_Writer { - char *buf; - Py_ssize_t size; - Py_ssize_t pos; -}; - -/* --- Runtime support code (head) --- */ -/* Refnanny.proto */ -#ifndef CYTHON_REFNANNY - #define CYTHON_REFNANNY 0 -#endif -#if CYTHON_REFNANNY - typedef struct { - void (*INCREF)(void*, PyObject*, int); - void (*DECREF)(void*, PyObject*, int); - void (*GOTREF)(void*, PyObject*, int); - void (*GIVEREF)(void*, PyObject*, int); - void* (*SetupContext)(const char*, int, const char*); - void (*FinishContext)(void**); - } __Pyx_RefNannyAPIStruct; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); - #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; -#ifdef WITH_THREAD - #define __Pyx_RefNannySetupContext(name, acquire_gil)\ - if (acquire_gil) {\ - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ - PyGILState_Release(__pyx_gilstate_save);\ - } else {\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ - } -#else - #define __Pyx_RefNannySetupContext(name, acquire_gil)\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) -#endif - #define __Pyx_RefNannyFinishContext()\ - __Pyx_RefNanny->FinishContext(&__pyx_refnanny) - #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) - #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) - #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) - #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) -#else - #define __Pyx_RefNannyDeclarations - #define __Pyx_RefNannySetupContext(name, acquire_gil) - #define __Pyx_RefNannyFinishContext() - #define __Pyx_INCREF(r) Py_INCREF(r) - #define __Pyx_DECREF(r) Py_DECREF(r) - #define __Pyx_GOTREF(r) - #define __Pyx_GIVEREF(r) - #define __Pyx_XINCREF(r) Py_XINCREF(r) - #define __Pyx_XDECREF(r) Py_XDECREF(r) - #define __Pyx_XGOTREF(r) - #define __Pyx_XGIVEREF(r) -#endif -#define __Pyx_XDECREF_SET(r, v) do {\ - PyObject *tmp = (PyObject *) r;\ - r = v; __Pyx_XDECREF(tmp);\ - } while (0) -#define __Pyx_DECREF_SET(r, v) do {\ - PyObject *tmp = (PyObject *) r;\ - r = v; __Pyx_DECREF(tmp);\ - } while (0) -#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) -#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) - -/* PyObjectGetAttrStr.proto */ -#if CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); -#else -#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) -#endif - -/* GetBuiltinName.proto */ -static PyObject *__Pyx_GetBuiltinName(PyObject *name); - -/* PyThreadStateGet.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; -#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; -#define __Pyx_PyErr_Occurred() __pyx_tstate->curexc_type -#else -#define __Pyx_PyThreadState_declare -#define __Pyx_PyThreadState_assign -#define __Pyx_PyErr_Occurred() PyErr_Occurred() -#endif - -/* PyErrFetchRestore.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) -#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) -#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) -#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) -#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) -static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); -static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); -#if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) -#else -#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) -#endif -#else -#define __Pyx_PyErr_Clear() PyErr_Clear() -#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) -#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) -#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) -#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) -#endif - -/* WriteUnraisableException.proto */ -static void __Pyx_WriteUnraisable(const char *name, int clineno, - int lineno, const char *filename, - int full_traceback, int nogil); - -/* unicode_iter.proto */ -static CYTHON_INLINE int __Pyx_init_unicode_iteration( - PyObject* ustring, Py_ssize_t *length, void** data, int *kind); - -/* PyCFunctionFastCall.proto */ -#if CYTHON_FAST_PYCCALL -static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs); -#else -#define __Pyx_PyCFunction_FastCall(func, args, nargs) (assert(0), NULL) -#endif - -/* PyFunctionFastCall.proto */ -#if CYTHON_FAST_PYCALL -#define __Pyx_PyFunction_FastCall(func, args, nargs)\ - __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) -#if 1 || PY_VERSION_HEX < 0x030600B1 -static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); -#else -#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs) -#endif -#define __Pyx_BUILD_ASSERT_EXPR(cond)\ - (sizeof(char [1 - 2*!(cond)]) - 1) -#ifndef Py_MEMBER_SIZE -#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) -#endif - static size_t __pyx_pyframe_localsplus_offset = 0; - #include "frameobject.h" - #define __Pxy_PyFrame_Initialize_Offsets()\ - ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ - (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) - #define __Pyx_PyFrame_GetLocalsplus(frame)\ - (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) -#endif - -/* PyObjectCall.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); -#else -#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) -#endif - -/* PyObjectCall2Args.proto */ -static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); - -/* PyObjectCallMethO.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); -#endif - -/* PyObjectCallOneArg.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); - -/* RaiseException.proto */ -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); - -/* RaiseArgTupleInvalid.proto */ -static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, - Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); - -/* RaiseDoubleKeywords.proto */ -static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); - -/* ParseKeywords.proto */ -static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\ - PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ - const char* function_name); - -/* ArgTypeTest.proto */ -#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\ - ((likely((Py_TYPE(obj) == type) | (none_allowed && (obj == Py_None)))) ? 1 :\ - __Pyx__ArgTypeTest(obj, type, name, exact)) -static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact); - -/* GetTopmostException.proto */ -#if CYTHON_USE_EXC_INFO_STACK -static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate); -#endif - -/* ReRaiseException.proto */ -static CYTHON_INLINE void __Pyx_ReraiseException(void); - -/* IterFinish.proto */ -static CYTHON_INLINE int __Pyx_IterFinish(void); - -/* PyObjectCallNoArg.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func); -#else -#define __Pyx_PyObject_CallNoArg(func) __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL) -#endif - -/* PyObjectGetMethod.proto */ -static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method); - -/* PyObjectCallMethod0.proto */ -static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name); - -/* RaiseNeedMoreValuesToUnpack.proto */ -static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index); - -/* RaiseTooManyValuesToUnpack.proto */ -static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected); - -/* UnpackItemEndCheck.proto */ -static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected); - -/* RaiseNoneIterError.proto */ -static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void); - -/* UnpackTupleError.proto */ -static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index); - -/* UnpackTuple2.proto */ -#define __Pyx_unpack_tuple2(tuple, value1, value2, is_tuple, has_known_size, decref_tuple)\ - (likely(is_tuple || PyTuple_Check(tuple)) ?\ - (likely(has_known_size || PyTuple_GET_SIZE(tuple) == 2) ?\ - __Pyx_unpack_tuple2_exact(tuple, value1, value2, decref_tuple) :\ - (__Pyx_UnpackTupleError(tuple, 2), -1)) :\ - __Pyx_unpack_tuple2_generic(tuple, value1, value2, has_known_size, decref_tuple)) -static CYTHON_INLINE int __Pyx_unpack_tuple2_exact( - PyObject* tuple, PyObject** value1, PyObject** value2, int decref_tuple); -static int __Pyx_unpack_tuple2_generic( - PyObject* tuple, PyObject** value1, PyObject** value2, int has_known_size, int decref_tuple); - -/* dict_iter.proto */ -static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* dict, int is_dict, PyObject* method_name, - Py_ssize_t* p_orig_length, int* p_is_dict); -static CYTHON_INLINE int __Pyx_dict_iter_next(PyObject* dict_or_iter, Py_ssize_t orig_length, Py_ssize_t* ppos, - PyObject** pkey, PyObject** pvalue, PyObject** pitem, int is_dict); - -/* GetException.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_GetException(type, value, tb) __Pyx__GetException(__pyx_tstate, type, value, tb) -static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); -#else -static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); -#endif - -/* SwapException.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb) -static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); -#else -static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); -#endif - -/* SaveResetException.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb) -static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); -#define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb) -static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); -#else -#define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb) -#define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb) -#endif - -/* TypeImport.proto */ -#ifndef __PYX_HAVE_RT_ImportType_proto -#define __PYX_HAVE_RT_ImportType_proto -enum __Pyx_ImportType_CheckSize { - __Pyx_ImportType_CheckSize_Error = 0, - __Pyx_ImportType_CheckSize_Warn = 1, - __Pyx_ImportType_CheckSize_Ignore = 2 -}; -static PyTypeObject *__Pyx_ImportType(PyObject* module, const char *module_name, const char *class_name, size_t size, enum __Pyx_ImportType_CheckSize check_size); -#endif - -/* Import.proto */ -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); - -/* ImportFrom.proto */ -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); - -/* PyDictVersioning.proto */ -#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS -#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) -#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) -#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ - (version_var) = __PYX_GET_DICT_VERSION(dict);\ - (cache_var) = (value); -#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ - static PY_UINT64_T __pyx_dict_version = 0;\ - static PyObject *__pyx_dict_cached_value = NULL;\ - if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ - (VAR) = __pyx_dict_cached_value;\ - } else {\ - (VAR) = __pyx_dict_cached_value = (LOOKUP);\ - __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ - }\ -} -static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); -static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); -static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); -#else -#define __PYX_GET_DICT_VERSION(dict) (0) -#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) -#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); -#endif - -/* GetModuleGlobalName.proto */ -#if CYTHON_USE_DICT_VERSIONS -#define __Pyx_GetModuleGlobalName(var, name) {\ - static PY_UINT64_T __pyx_dict_version = 0;\ - static PyObject *__pyx_dict_cached_value = NULL;\ - (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ - (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ - __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ -} -#define __Pyx_GetModuleGlobalNameUncached(var, name) {\ - PY_UINT64_T __pyx_dict_version;\ - PyObject *__pyx_dict_cached_value;\ - (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ -} -static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); -#else -#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) -#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) -static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); -#endif - -/* CLineInTraceback.proto */ -#ifdef CYTHON_CLINE_IN_TRACEBACK -#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) -#else -static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); -#endif - -/* CodeObjectCache.proto */ -typedef struct { - PyCodeObject* code_object; - int code_line; -} __Pyx_CodeObjectCacheEntry; -struct __Pyx_CodeObjectCache { - int count; - int max_count; - __Pyx_CodeObjectCacheEntry* entries; -}; -static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); -static PyCodeObject *__pyx_find_code_object(int code_line); -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); - -/* AddTraceback.proto */ -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename); - -/* CIntToPy.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); - -/* CIntFromPy.proto */ -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); - -/* CIntFromPy.proto */ -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); - -/* FastTypeChecks.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) -static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); -static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); -static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); -#else -#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) -#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) -#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) -#endif -#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) - -/* CheckBinaryVersion.proto */ -static int __Pyx_check_binary_version(void); - -/* InitStrings.proto */ -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); - - -/* Module declarations from 'libc.string' */ - -/* Module declarations from 'libc.stdio' */ - -/* Module declarations from '__builtin__' */ - -/* Module declarations from 'cpython.type' */ -static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0; - -/* Module declarations from 'cpython' */ - -/* Module declarations from 'cpython.object' */ - -/* Module declarations from 'cpython.bytes' */ - -/* Module declarations from 'cpython.exc' */ - -/* Module declarations from 'cpython.mem' */ - -/* Module declarations from 'libc.stdint' */ - -/* Module declarations from 'aiohttp._http_writer' */ -static char __pyx_v_7aiohttp_12_http_writer_BUFFER[0x4000]; -static PyObject *__pyx_v_7aiohttp_12_http_writer__istr = 0; -static CYTHON_INLINE void __pyx_f_7aiohttp_12_http_writer__init_writer(struct __pyx_t_7aiohttp_12_http_writer_Writer *); /*proto*/ -static CYTHON_INLINE void __pyx_f_7aiohttp_12_http_writer__release_writer(struct __pyx_t_7aiohttp_12_http_writer_Writer *); /*proto*/ -static CYTHON_INLINE int __pyx_f_7aiohttp_12_http_writer__write_byte(struct __pyx_t_7aiohttp_12_http_writer_Writer *, uint8_t); /*proto*/ -static CYTHON_INLINE int __pyx_f_7aiohttp_12_http_writer__write_utf8(struct __pyx_t_7aiohttp_12_http_writer_Writer *, Py_UCS4); /*proto*/ -static CYTHON_INLINE int __pyx_f_7aiohttp_12_http_writer__write_str(struct __pyx_t_7aiohttp_12_http_writer_Writer *, PyObject *); /*proto*/ -static PyObject *__pyx_f_7aiohttp_12_http_writer_to_str(PyObject *); /*proto*/ -#define __Pyx_MODULE_NAME "aiohttp._http_writer" -extern int __pyx_module_is_main_aiohttp___http_writer; -int __pyx_module_is_main_aiohttp___http_writer = 0; - -/* Implementation of 'aiohttp._http_writer' */ -static PyObject *__pyx_builtin_TypeError; -static const char __pyx_k_key[] = "key"; -static const char __pyx_k_ret[] = "ret"; -static const char __pyx_k_val[] = "val"; -static const char __pyx_k_istr[] = "istr"; -static const char __pyx_k_main[] = "__main__"; -static const char __pyx_k_name[] = "__name__"; -static const char __pyx_k_test[] = "__test__"; -static const char __pyx_k_items[] = "items"; -static const char __pyx_k_format[] = "format"; -static const char __pyx_k_import[] = "__import__"; -static const char __pyx_k_writer[] = "writer"; -static const char __pyx_k_headers[] = "headers"; -static const char __pyx_k_TypeError[] = "TypeError"; -static const char __pyx_k_multidict[] = "multidict"; -static const char __pyx_k_status_line[] = "status_line"; -static const char __pyx_k_serialize_headers[] = "_serialize_headers"; -static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; -static const char __pyx_k_aiohttp__http_writer[] = "aiohttp._http_writer"; -static const char __pyx_k_aiohttp__http_writer_pyx[] = "aiohttp\\_http_writer.pyx"; -static const char __pyx_k_Cannot_serialize_non_str_key_r[] = "Cannot serialize non-str key {!r}"; -static PyObject *__pyx_kp_u_Cannot_serialize_non_str_key_r; -static PyObject *__pyx_n_s_TypeError; -static PyObject *__pyx_n_s_aiohttp__http_writer; -static PyObject *__pyx_kp_s_aiohttp__http_writer_pyx; -static PyObject *__pyx_n_s_cline_in_traceback; -static PyObject *__pyx_n_s_format; -static PyObject *__pyx_n_s_headers; -static PyObject *__pyx_n_s_import; -static PyObject *__pyx_n_s_istr; -static PyObject *__pyx_n_s_items; -static PyObject *__pyx_n_s_key; -static PyObject *__pyx_n_s_main; -static PyObject *__pyx_n_s_multidict; -static PyObject *__pyx_n_s_name; -static PyObject *__pyx_n_s_ret; -static PyObject *__pyx_n_s_serialize_headers; -static PyObject *__pyx_n_s_status_line; -static PyObject *__pyx_n_s_test; -static PyObject *__pyx_n_s_val; -static PyObject *__pyx_n_s_writer; -static PyObject *__pyx_pf_7aiohttp_12_http_writer__serialize_headers(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_status_line, PyObject *__pyx_v_headers); /* proto */ -static PyObject *__pyx_tuple_; -static PyObject *__pyx_codeobj__2; -/* Late includes */ - -/* "aiohttp/_http_writer.pyx":24 - * - * - * cdef inline void _init_writer(Writer* writer): # <<<<<<<<<<<<<< - * writer.buf = &BUFFER[0] - * writer.size = BUF_SIZE - */ - -static CYTHON_INLINE void __pyx_f_7aiohttp_12_http_writer__init_writer(struct __pyx_t_7aiohttp_12_http_writer_Writer *__pyx_v_writer) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_init_writer", 0); - - /* "aiohttp/_http_writer.pyx":25 - * - * cdef inline void _init_writer(Writer* writer): - * writer.buf = &BUFFER[0] # <<<<<<<<<<<<<< - * writer.size = BUF_SIZE - * writer.pos = 0 - */ - __pyx_v_writer->buf = (&(__pyx_v_7aiohttp_12_http_writer_BUFFER[0])); - - /* "aiohttp/_http_writer.pyx":26 - * cdef inline void _init_writer(Writer* writer): - * writer.buf = &BUFFER[0] - * writer.size = BUF_SIZE # <<<<<<<<<<<<<< - * writer.pos = 0 - * - */ - __pyx_v_writer->size = 0x4000; - - /* "aiohttp/_http_writer.pyx":27 - * writer.buf = &BUFFER[0] - * writer.size = BUF_SIZE - * writer.pos = 0 # <<<<<<<<<<<<<< - * - * - */ - __pyx_v_writer->pos = 0; - - /* "aiohttp/_http_writer.pyx":24 - * - * - * cdef inline void _init_writer(Writer* writer): # <<<<<<<<<<<<<< - * writer.buf = &BUFFER[0] - * writer.size = BUF_SIZE - */ - - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -/* "aiohttp/_http_writer.pyx":30 - * - * - * cdef inline void _release_writer(Writer* writer): # <<<<<<<<<<<<<< - * if writer.buf != BUFFER: - * PyMem_Free(writer.buf) - */ - -static CYTHON_INLINE void __pyx_f_7aiohttp_12_http_writer__release_writer(struct __pyx_t_7aiohttp_12_http_writer_Writer *__pyx_v_writer) { - __Pyx_RefNannyDeclarations - int __pyx_t_1; - __Pyx_RefNannySetupContext("_release_writer", 0); - - /* "aiohttp/_http_writer.pyx":31 - * - * cdef inline void _release_writer(Writer* writer): - * if writer.buf != BUFFER: # <<<<<<<<<<<<<< - * PyMem_Free(writer.buf) - * - */ - __pyx_t_1 = ((__pyx_v_writer->buf != __pyx_v_7aiohttp_12_http_writer_BUFFER) != 0); - if (__pyx_t_1) { - - /* "aiohttp/_http_writer.pyx":32 - * cdef inline void _release_writer(Writer* writer): - * if writer.buf != BUFFER: - * PyMem_Free(writer.buf) # <<<<<<<<<<<<<< - * - * - */ - PyMem_Free(__pyx_v_writer->buf); - - /* "aiohttp/_http_writer.pyx":31 - * - * cdef inline void _release_writer(Writer* writer): - * if writer.buf != BUFFER: # <<<<<<<<<<<<<< - * PyMem_Free(writer.buf) - * - */ - } - - /* "aiohttp/_http_writer.pyx":30 - * - * - * cdef inline void _release_writer(Writer* writer): # <<<<<<<<<<<<<< - * if writer.buf != BUFFER: - * PyMem_Free(writer.buf) - */ - - /* function exit code */ - __Pyx_RefNannyFinishContext(); -} - -/* "aiohttp/_http_writer.pyx":35 - * - * - * cdef inline int _write_byte(Writer* writer, uint8_t ch): # <<<<<<<<<<<<<< - * cdef char * buf - * cdef Py_ssize_t size - */ - -static CYTHON_INLINE int __pyx_f_7aiohttp_12_http_writer__write_byte(struct __pyx_t_7aiohttp_12_http_writer_Writer *__pyx_v_writer, uint8_t __pyx_v_ch) { - char *__pyx_v_buf; - Py_ssize_t __pyx_v_size; - int __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_write_byte", 0); - - /* "aiohttp/_http_writer.pyx":39 - * cdef Py_ssize_t size - * - * if writer.pos == writer.size: # <<<<<<<<<<<<<< - * # reallocate - * size = writer.size + BUF_SIZE - */ - __pyx_t_1 = ((__pyx_v_writer->pos == __pyx_v_writer->size) != 0); - if (__pyx_t_1) { - - /* "aiohttp/_http_writer.pyx":41 - * if writer.pos == writer.size: - * # reallocate - * size = writer.size + BUF_SIZE # <<<<<<<<<<<<<< - * if writer.buf == BUFFER: - * buf = PyMem_Malloc(size) - */ - __pyx_v_size = (__pyx_v_writer->size + 0x4000); - - /* "aiohttp/_http_writer.pyx":42 - * # reallocate - * size = writer.size + BUF_SIZE - * if writer.buf == BUFFER: # <<<<<<<<<<<<<< - * buf = PyMem_Malloc(size) - * if buf == NULL: - */ - __pyx_t_1 = ((__pyx_v_writer->buf == __pyx_v_7aiohttp_12_http_writer_BUFFER) != 0); - if (__pyx_t_1) { - - /* "aiohttp/_http_writer.pyx":43 - * size = writer.size + BUF_SIZE - * if writer.buf == BUFFER: - * buf = PyMem_Malloc(size) # <<<<<<<<<<<<<< - * if buf == NULL: - * PyErr_NoMemory() - */ - __pyx_v_buf = ((char *)PyMem_Malloc(__pyx_v_size)); - - /* "aiohttp/_http_writer.pyx":44 - * if writer.buf == BUFFER: - * buf = PyMem_Malloc(size) - * if buf == NULL: # <<<<<<<<<<<<<< - * PyErr_NoMemory() - * return -1 - */ - __pyx_t_1 = ((__pyx_v_buf == NULL) != 0); - if (__pyx_t_1) { - - /* "aiohttp/_http_writer.pyx":45 - * buf = PyMem_Malloc(size) - * if buf == NULL: - * PyErr_NoMemory() # <<<<<<<<<<<<<< - * return -1 - * memcpy(buf, writer.buf, writer.size) - */ - __pyx_t_2 = PyErr_NoMemory(); if (unlikely(__pyx_t_2 == ((PyObject *)NULL))) __PYX_ERR(0, 45, __pyx_L1_error) - - /* "aiohttp/_http_writer.pyx":46 - * if buf == NULL: - * PyErr_NoMemory() - * return -1 # <<<<<<<<<<<<<< - * memcpy(buf, writer.buf, writer.size) - * else: - */ - __pyx_r = -1; - goto __pyx_L0; - - /* "aiohttp/_http_writer.pyx":44 - * if writer.buf == BUFFER: - * buf = PyMem_Malloc(size) - * if buf == NULL: # <<<<<<<<<<<<<< - * PyErr_NoMemory() - * return -1 - */ - } - - /* "aiohttp/_http_writer.pyx":47 - * PyErr_NoMemory() - * return -1 - * memcpy(buf, writer.buf, writer.size) # <<<<<<<<<<<<<< - * else: - * buf = PyMem_Realloc(writer.buf, size) - */ - (void)(memcpy(__pyx_v_buf, __pyx_v_writer->buf, __pyx_v_writer->size)); - - /* "aiohttp/_http_writer.pyx":42 - * # reallocate - * size = writer.size + BUF_SIZE - * if writer.buf == BUFFER: # <<<<<<<<<<<<<< - * buf = PyMem_Malloc(size) - * if buf == NULL: - */ - goto __pyx_L4; - } - - /* "aiohttp/_http_writer.pyx":49 - * memcpy(buf, writer.buf, writer.size) - * else: - * buf = PyMem_Realloc(writer.buf, size) # <<<<<<<<<<<<<< - * if buf == NULL: - * PyErr_NoMemory() - */ - /*else*/ { - __pyx_v_buf = ((char *)PyMem_Realloc(__pyx_v_writer->buf, __pyx_v_size)); - - /* "aiohttp/_http_writer.pyx":50 - * else: - * buf = PyMem_Realloc(writer.buf, size) - * if buf == NULL: # <<<<<<<<<<<<<< - * PyErr_NoMemory() - * return -1 - */ - __pyx_t_1 = ((__pyx_v_buf == NULL) != 0); - if (__pyx_t_1) { - - /* "aiohttp/_http_writer.pyx":51 - * buf = PyMem_Realloc(writer.buf, size) - * if buf == NULL: - * PyErr_NoMemory() # <<<<<<<<<<<<<< - * return -1 - * writer.buf = buf - */ - __pyx_t_2 = PyErr_NoMemory(); if (unlikely(__pyx_t_2 == ((PyObject *)NULL))) __PYX_ERR(0, 51, __pyx_L1_error) - - /* "aiohttp/_http_writer.pyx":52 - * if buf == NULL: - * PyErr_NoMemory() - * return -1 # <<<<<<<<<<<<<< - * writer.buf = buf - * writer.size = size - */ - __pyx_r = -1; - goto __pyx_L0; - - /* "aiohttp/_http_writer.pyx":50 - * else: - * buf = PyMem_Realloc(writer.buf, size) - * if buf == NULL: # <<<<<<<<<<<<<< - * PyErr_NoMemory() - * return -1 - */ - } - } - __pyx_L4:; - - /* "aiohttp/_http_writer.pyx":53 - * PyErr_NoMemory() - * return -1 - * writer.buf = buf # <<<<<<<<<<<<<< - * writer.size = size - * writer.buf[writer.pos] = ch - */ - __pyx_v_writer->buf = __pyx_v_buf; - - /* "aiohttp/_http_writer.pyx":54 - * return -1 - * writer.buf = buf - * writer.size = size # <<<<<<<<<<<<<< - * writer.buf[writer.pos] = ch - * writer.pos += 1 - */ - __pyx_v_writer->size = __pyx_v_size; - - /* "aiohttp/_http_writer.pyx":39 - * cdef Py_ssize_t size - * - * if writer.pos == writer.size: # <<<<<<<<<<<<<< - * # reallocate - * size = writer.size + BUF_SIZE - */ - } - - /* "aiohttp/_http_writer.pyx":55 - * writer.buf = buf - * writer.size = size - * writer.buf[writer.pos] = ch # <<<<<<<<<<<<<< - * writer.pos += 1 - * return 0 - */ - (__pyx_v_writer->buf[__pyx_v_writer->pos]) = ((char)__pyx_v_ch); - - /* "aiohttp/_http_writer.pyx":56 - * writer.size = size - * writer.buf[writer.pos] = ch - * writer.pos += 1 # <<<<<<<<<<<<<< - * return 0 - * - */ - __pyx_v_writer->pos = (__pyx_v_writer->pos + 1); - - /* "aiohttp/_http_writer.pyx":57 - * writer.buf[writer.pos] = ch - * writer.pos += 1 - * return 0 # <<<<<<<<<<<<<< - * - * - */ - __pyx_r = 0; - goto __pyx_L0; - - /* "aiohttp/_http_writer.pyx":35 - * - * - * cdef inline int _write_byte(Writer* writer, uint8_t ch): # <<<<<<<<<<<<<< - * cdef char * buf - * cdef Py_ssize_t size - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_WriteUnraisable("aiohttp._http_writer._write_byte", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0); - __pyx_r = 0; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_writer.pyx":60 - * - * - * cdef inline int _write_utf8(Writer* writer, Py_UCS4 symbol): # <<<<<<<<<<<<<< - * cdef uint64_t utf = symbol - * - */ - -static CYTHON_INLINE int __pyx_f_7aiohttp_12_http_writer__write_utf8(struct __pyx_t_7aiohttp_12_http_writer_Writer *__pyx_v_writer, Py_UCS4 __pyx_v_symbol) { - uint64_t __pyx_v_utf; - int __pyx_r; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - __Pyx_RefNannySetupContext("_write_utf8", 0); - - /* "aiohttp/_http_writer.pyx":61 - * - * cdef inline int _write_utf8(Writer* writer, Py_UCS4 symbol): - * cdef uint64_t utf = symbol # <<<<<<<<<<<<<< - * - * if utf < 0x80: - */ - __pyx_v_utf = ((uint64_t)__pyx_v_symbol); - - /* "aiohttp/_http_writer.pyx":63 - * cdef uint64_t utf = symbol - * - * if utf < 0x80: # <<<<<<<<<<<<<< - * return _write_byte(writer, utf) - * elif utf < 0x800: - */ - __pyx_t_1 = ((__pyx_v_utf < 0x80) != 0); - if (__pyx_t_1) { - - /* "aiohttp/_http_writer.pyx":64 - * - * if utf < 0x80: - * return _write_byte(writer, utf) # <<<<<<<<<<<<<< - * elif utf < 0x800: - * if _write_byte(writer, (0xc0 | (utf >> 6))) < 0: - */ - __pyx_r = __pyx_f_7aiohttp_12_http_writer__write_byte(__pyx_v_writer, ((uint8_t)__pyx_v_utf)); - goto __pyx_L0; - - /* "aiohttp/_http_writer.pyx":63 - * cdef uint64_t utf = symbol - * - * if utf < 0x80: # <<<<<<<<<<<<<< - * return _write_byte(writer, utf) - * elif utf < 0x800: - */ - } - - /* "aiohttp/_http_writer.pyx":65 - * if utf < 0x80: - * return _write_byte(writer, utf) - * elif utf < 0x800: # <<<<<<<<<<<<<< - * if _write_byte(writer, (0xc0 | (utf >> 6))) < 0: - * return -1 - */ - __pyx_t_1 = ((__pyx_v_utf < 0x800) != 0); - if (__pyx_t_1) { - - /* "aiohttp/_http_writer.pyx":66 - * return _write_byte(writer, utf) - * elif utf < 0x800: - * if _write_byte(writer, (0xc0 | (utf >> 6))) < 0: # <<<<<<<<<<<<<< - * return -1 - * return _write_byte(writer, (0x80 | (utf & 0x3f))) - */ - __pyx_t_1 = ((__pyx_f_7aiohttp_12_http_writer__write_byte(__pyx_v_writer, ((uint8_t)(0xc0 | (__pyx_v_utf >> 6)))) < 0) != 0); - if (__pyx_t_1) { - - /* "aiohttp/_http_writer.pyx":67 - * elif utf < 0x800: - * if _write_byte(writer, (0xc0 | (utf >> 6))) < 0: - * return -1 # <<<<<<<<<<<<<< - * return _write_byte(writer, (0x80 | (utf & 0x3f))) - * elif 0xD800 <= utf <= 0xDFFF: - */ - __pyx_r = -1; - goto __pyx_L0; - - /* "aiohttp/_http_writer.pyx":66 - * return _write_byte(writer, utf) - * elif utf < 0x800: - * if _write_byte(writer, (0xc0 | (utf >> 6))) < 0: # <<<<<<<<<<<<<< - * return -1 - * return _write_byte(writer, (0x80 | (utf & 0x3f))) - */ - } - - /* "aiohttp/_http_writer.pyx":68 - * if _write_byte(writer, (0xc0 | (utf >> 6))) < 0: - * return -1 - * return _write_byte(writer, (0x80 | (utf & 0x3f))) # <<<<<<<<<<<<<< - * elif 0xD800 <= utf <= 0xDFFF: - * # surogate pair, ignored - */ - __pyx_r = __pyx_f_7aiohttp_12_http_writer__write_byte(__pyx_v_writer, ((uint8_t)(0x80 | (__pyx_v_utf & 0x3f)))); - goto __pyx_L0; - - /* "aiohttp/_http_writer.pyx":65 - * if utf < 0x80: - * return _write_byte(writer, utf) - * elif utf < 0x800: # <<<<<<<<<<<<<< - * if _write_byte(writer, (0xc0 | (utf >> 6))) < 0: - * return -1 - */ - } - - /* "aiohttp/_http_writer.pyx":69 - * return -1 - * return _write_byte(writer, (0x80 | (utf & 0x3f))) - * elif 0xD800 <= utf <= 0xDFFF: # <<<<<<<<<<<<<< - * # surogate pair, ignored - * return 0 - */ - __pyx_t_1 = (0xD800 <= __pyx_v_utf); - if (__pyx_t_1) { - __pyx_t_1 = (__pyx_v_utf <= 0xDFFF); - } - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { - - /* "aiohttp/_http_writer.pyx":71 - * elif 0xD800 <= utf <= 0xDFFF: - * # surogate pair, ignored - * return 0 # <<<<<<<<<<<<<< - * elif utf < 0x10000: - * if _write_byte(writer, (0xe0 | (utf >> 12))) < 0: - */ - __pyx_r = 0; - goto __pyx_L0; - - /* "aiohttp/_http_writer.pyx":69 - * return -1 - * return _write_byte(writer, (0x80 | (utf & 0x3f))) - * elif 0xD800 <= utf <= 0xDFFF: # <<<<<<<<<<<<<< - * # surogate pair, ignored - * return 0 - */ - } - - /* "aiohttp/_http_writer.pyx":72 - * # surogate pair, ignored - * return 0 - * elif utf < 0x10000: # <<<<<<<<<<<<<< - * if _write_byte(writer, (0xe0 | (utf >> 12))) < 0: - * return -1 - */ - __pyx_t_2 = ((__pyx_v_utf < 0x10000) != 0); - if (__pyx_t_2) { - - /* "aiohttp/_http_writer.pyx":73 - * return 0 - * elif utf < 0x10000: - * if _write_byte(writer, (0xe0 | (utf >> 12))) < 0: # <<<<<<<<<<<<<< - * return -1 - * if _write_byte(writer, (0x80 | ((utf >> 6) & 0x3f))) < 0: - */ - __pyx_t_2 = ((__pyx_f_7aiohttp_12_http_writer__write_byte(__pyx_v_writer, ((uint8_t)(0xe0 | (__pyx_v_utf >> 12)))) < 0) != 0); - if (__pyx_t_2) { - - /* "aiohttp/_http_writer.pyx":74 - * elif utf < 0x10000: - * if _write_byte(writer, (0xe0 | (utf >> 12))) < 0: - * return -1 # <<<<<<<<<<<<<< - * if _write_byte(writer, (0x80 | ((utf >> 6) & 0x3f))) < 0: - * return -1 - */ - __pyx_r = -1; - goto __pyx_L0; - - /* "aiohttp/_http_writer.pyx":73 - * return 0 - * elif utf < 0x10000: - * if _write_byte(writer, (0xe0 | (utf >> 12))) < 0: # <<<<<<<<<<<<<< - * return -1 - * if _write_byte(writer, (0x80 | ((utf >> 6) & 0x3f))) < 0: - */ - } - - /* "aiohttp/_http_writer.pyx":75 - * if _write_byte(writer, (0xe0 | (utf >> 12))) < 0: - * return -1 - * if _write_byte(writer, (0x80 | ((utf >> 6) & 0x3f))) < 0: # <<<<<<<<<<<<<< - * return -1 - * return _write_byte(writer, (0x80 | (utf & 0x3f))) - */ - __pyx_t_2 = ((__pyx_f_7aiohttp_12_http_writer__write_byte(__pyx_v_writer, ((uint8_t)(0x80 | ((__pyx_v_utf >> 6) & 0x3f)))) < 0) != 0); - if (__pyx_t_2) { - - /* "aiohttp/_http_writer.pyx":76 - * return -1 - * if _write_byte(writer, (0x80 | ((utf >> 6) & 0x3f))) < 0: - * return -1 # <<<<<<<<<<<<<< - * return _write_byte(writer, (0x80 | (utf & 0x3f))) - * elif utf > 0x10FFFF: - */ - __pyx_r = -1; - goto __pyx_L0; - - /* "aiohttp/_http_writer.pyx":75 - * if _write_byte(writer, (0xe0 | (utf >> 12))) < 0: - * return -1 - * if _write_byte(writer, (0x80 | ((utf >> 6) & 0x3f))) < 0: # <<<<<<<<<<<<<< - * return -1 - * return _write_byte(writer, (0x80 | (utf & 0x3f))) - */ - } - - /* "aiohttp/_http_writer.pyx":77 - * if _write_byte(writer, (0x80 | ((utf >> 6) & 0x3f))) < 0: - * return -1 - * return _write_byte(writer, (0x80 | (utf & 0x3f))) # <<<<<<<<<<<<<< - * elif utf > 0x10FFFF: - * # symbol is too large - */ - __pyx_r = __pyx_f_7aiohttp_12_http_writer__write_byte(__pyx_v_writer, ((uint8_t)(0x80 | (__pyx_v_utf & 0x3f)))); - goto __pyx_L0; - - /* "aiohttp/_http_writer.pyx":72 - * # surogate pair, ignored - * return 0 - * elif utf < 0x10000: # <<<<<<<<<<<<<< - * if _write_byte(writer, (0xe0 | (utf >> 12))) < 0: - * return -1 - */ - } - - /* "aiohttp/_http_writer.pyx":78 - * return -1 - * return _write_byte(writer, (0x80 | (utf & 0x3f))) - * elif utf > 0x10FFFF: # <<<<<<<<<<<<<< - * # symbol is too large - * return 0 - */ - __pyx_t_2 = ((__pyx_v_utf > 0x10FFFF) != 0); - if (__pyx_t_2) { - - /* "aiohttp/_http_writer.pyx":80 - * elif utf > 0x10FFFF: - * # symbol is too large - * return 0 # <<<<<<<<<<<<<< - * else: - * if _write_byte(writer, (0xf0 | (utf >> 18))) < 0: - */ - __pyx_r = 0; - goto __pyx_L0; - - /* "aiohttp/_http_writer.pyx":78 - * return -1 - * return _write_byte(writer, (0x80 | (utf & 0x3f))) - * elif utf > 0x10FFFF: # <<<<<<<<<<<<<< - * # symbol is too large - * return 0 - */ - } - - /* "aiohttp/_http_writer.pyx":82 - * return 0 - * else: - * if _write_byte(writer, (0xf0 | (utf >> 18))) < 0: # <<<<<<<<<<<<<< - * return -1 - * if _write_byte(writer, - */ - /*else*/ { - __pyx_t_2 = ((__pyx_f_7aiohttp_12_http_writer__write_byte(__pyx_v_writer, ((uint8_t)(0xf0 | (__pyx_v_utf >> 18)))) < 0) != 0); - if (__pyx_t_2) { - - /* "aiohttp/_http_writer.pyx":83 - * else: - * if _write_byte(writer, (0xf0 | (utf >> 18))) < 0: - * return -1 # <<<<<<<<<<<<<< - * if _write_byte(writer, - * (0x80 | ((utf >> 12) & 0x3f))) < 0: - */ - __pyx_r = -1; - goto __pyx_L0; - - /* "aiohttp/_http_writer.pyx":82 - * return 0 - * else: - * if _write_byte(writer, (0xf0 | (utf >> 18))) < 0: # <<<<<<<<<<<<<< - * return -1 - * if _write_byte(writer, - */ - } - - /* "aiohttp/_http_writer.pyx":85 - * return -1 - * if _write_byte(writer, - * (0x80 | ((utf >> 12) & 0x3f))) < 0: # <<<<<<<<<<<<<< - * return -1 - * if _write_byte(writer, - */ - __pyx_t_2 = ((__pyx_f_7aiohttp_12_http_writer__write_byte(__pyx_v_writer, ((uint8_t)(0x80 | ((__pyx_v_utf >> 12) & 0x3f)))) < 0) != 0); - - /* "aiohttp/_http_writer.pyx":84 - * if _write_byte(writer, (0xf0 | (utf >> 18))) < 0: - * return -1 - * if _write_byte(writer, # <<<<<<<<<<<<<< - * (0x80 | ((utf >> 12) & 0x3f))) < 0: - * return -1 - */ - if (__pyx_t_2) { - - /* "aiohttp/_http_writer.pyx":86 - * if _write_byte(writer, - * (0x80 | ((utf >> 12) & 0x3f))) < 0: - * return -1 # <<<<<<<<<<<<<< - * if _write_byte(writer, - * (0x80 | ((utf >> 6) & 0x3f))) < 0: - */ - __pyx_r = -1; - goto __pyx_L0; - - /* "aiohttp/_http_writer.pyx":84 - * if _write_byte(writer, (0xf0 | (utf >> 18))) < 0: - * return -1 - * if _write_byte(writer, # <<<<<<<<<<<<<< - * (0x80 | ((utf >> 12) & 0x3f))) < 0: - * return -1 - */ - } - - /* "aiohttp/_http_writer.pyx":88 - * return -1 - * if _write_byte(writer, - * (0x80 | ((utf >> 6) & 0x3f))) < 0: # <<<<<<<<<<<<<< - * return -1 - * return _write_byte(writer, (0x80 | (utf & 0x3f))) - */ - __pyx_t_2 = ((__pyx_f_7aiohttp_12_http_writer__write_byte(__pyx_v_writer, ((uint8_t)(0x80 | ((__pyx_v_utf >> 6) & 0x3f)))) < 0) != 0); - - /* "aiohttp/_http_writer.pyx":87 - * (0x80 | ((utf >> 12) & 0x3f))) < 0: - * return -1 - * if _write_byte(writer, # <<<<<<<<<<<<<< - * (0x80 | ((utf >> 6) & 0x3f))) < 0: - * return -1 - */ - if (__pyx_t_2) { - - /* "aiohttp/_http_writer.pyx":89 - * if _write_byte(writer, - * (0x80 | ((utf >> 6) & 0x3f))) < 0: - * return -1 # <<<<<<<<<<<<<< - * return _write_byte(writer, (0x80 | (utf & 0x3f))) - * - */ - __pyx_r = -1; - goto __pyx_L0; - - /* "aiohttp/_http_writer.pyx":87 - * (0x80 | ((utf >> 12) & 0x3f))) < 0: - * return -1 - * if _write_byte(writer, # <<<<<<<<<<<<<< - * (0x80 | ((utf >> 6) & 0x3f))) < 0: - * return -1 - */ - } - - /* "aiohttp/_http_writer.pyx":90 - * (0x80 | ((utf >> 6) & 0x3f))) < 0: - * return -1 - * return _write_byte(writer, (0x80 | (utf & 0x3f))) # <<<<<<<<<<<<<< - * - * - */ - __pyx_r = __pyx_f_7aiohttp_12_http_writer__write_byte(__pyx_v_writer, ((uint8_t)(0x80 | (__pyx_v_utf & 0x3f)))); - goto __pyx_L0; - } - - /* "aiohttp/_http_writer.pyx":60 - * - * - * cdef inline int _write_utf8(Writer* writer, Py_UCS4 symbol): # <<<<<<<<<<<<<< - * cdef uint64_t utf = symbol - * - */ - - /* function exit code */ - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_writer.pyx":93 - * - * - * cdef inline int _write_str(Writer* writer, str s): # <<<<<<<<<<<<<< - * cdef Py_UCS4 ch - * for ch in s: - */ - -static CYTHON_INLINE int __pyx_f_7aiohttp_12_http_writer__write_str(struct __pyx_t_7aiohttp_12_http_writer_Writer *__pyx_v_writer, PyObject *__pyx_v_s) { - Py_UCS4 __pyx_v_ch; - int __pyx_r; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - Py_ssize_t __pyx_t_2; - Py_ssize_t __pyx_t_3; - void *__pyx_t_4; - int __pyx_t_5; - int __pyx_t_6; - Py_ssize_t __pyx_t_7; - int __pyx_t_8; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_write_str", 0); - - /* "aiohttp/_http_writer.pyx":95 - * cdef inline int _write_str(Writer* writer, str s): - * cdef Py_UCS4 ch - * for ch in s: # <<<<<<<<<<<<<< - * if _write_utf8(writer, ch) < 0: - * return -1 - */ - if (unlikely(__pyx_v_s == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable"); - __PYX_ERR(0, 95, __pyx_L1_error) - } - __Pyx_INCREF(__pyx_v_s); - __pyx_t_1 = __pyx_v_s; - __pyx_t_6 = __Pyx_init_unicode_iteration(__pyx_t_1, (&__pyx_t_3), (&__pyx_t_4), (&__pyx_t_5)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 95, __pyx_L1_error) - for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_3; __pyx_t_7++) { - __pyx_t_2 = __pyx_t_7; - __pyx_v_ch = __Pyx_PyUnicode_READ(__pyx_t_5, __pyx_t_4, __pyx_t_2); - - /* "aiohttp/_http_writer.pyx":96 - * cdef Py_UCS4 ch - * for ch in s: - * if _write_utf8(writer, ch) < 0: # <<<<<<<<<<<<<< - * return -1 - * - */ - __pyx_t_8 = ((__pyx_f_7aiohttp_12_http_writer__write_utf8(__pyx_v_writer, __pyx_v_ch) < 0) != 0); - if (__pyx_t_8) { - - /* "aiohttp/_http_writer.pyx":97 - * for ch in s: - * if _write_utf8(writer, ch) < 0: - * return -1 # <<<<<<<<<<<<<< - * - * - */ - __pyx_r = -1; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - goto __pyx_L0; - - /* "aiohttp/_http_writer.pyx":96 - * cdef Py_UCS4 ch - * for ch in s: - * if _write_utf8(writer, ch) < 0: # <<<<<<<<<<<<<< - * return -1 - * - */ - } - } - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_http_writer.pyx":93 - * - * - * cdef inline int _write_str(Writer* writer, str s): # <<<<<<<<<<<<<< - * cdef Py_UCS4 ch - * for ch in s: - */ - - /* function exit code */ - __pyx_r = 0; - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_WriteUnraisable("aiohttp._http_writer._write_str", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0); - __pyx_r = 0; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_writer.pyx":102 - * # --------------- _serialize_headers ---------------------- - * - * cdef str to_str(object s): # <<<<<<<<<<<<<< - * typ = type(s) - * if typ is str: - */ - -static PyObject *__pyx_f_7aiohttp_12_http_writer_to_str(PyObject *__pyx_v_s) { - PyTypeObject *__pyx_v_typ = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("to_str", 0); - - /* "aiohttp/_http_writer.pyx":103 - * - * cdef str to_str(object s): - * typ = type(s) # <<<<<<<<<<<<<< - * if typ is str: - * return s - */ - __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_s))); - __pyx_v_typ = ((PyTypeObject*)((PyObject *)Py_TYPE(__pyx_v_s))); - - /* "aiohttp/_http_writer.pyx":104 - * cdef str to_str(object s): - * typ = type(s) - * if typ is str: # <<<<<<<<<<<<<< - * return s - * elif typ is _istr: - */ - __pyx_t_1 = (__pyx_v_typ == (&PyUnicode_Type)); - __pyx_t_2 = (__pyx_t_1 != 0); - if (__pyx_t_2) { - - /* "aiohttp/_http_writer.pyx":105 - * typ = type(s) - * if typ is str: - * return s # <<<<<<<<<<<<<< - * elif typ is _istr: - * return PyObject_Str(s) - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(((PyObject*)__pyx_v_s)); - __pyx_r = ((PyObject*)__pyx_v_s); - goto __pyx_L0; - - /* "aiohttp/_http_writer.pyx":104 - * cdef str to_str(object s): - * typ = type(s) - * if typ is str: # <<<<<<<<<<<<<< - * return s - * elif typ is _istr: - */ - } - - /* "aiohttp/_http_writer.pyx":106 - * if typ is str: - * return s - * elif typ is _istr: # <<<<<<<<<<<<<< - * return PyObject_Str(s) - * elif not isinstance(s, str): - */ - __pyx_t_2 = (__pyx_v_typ == ((PyTypeObject*)__pyx_v_7aiohttp_12_http_writer__istr)); - __pyx_t_1 = (__pyx_t_2 != 0); - if (__pyx_t_1) { - - /* "aiohttp/_http_writer.pyx":107 - * return s - * elif typ is _istr: - * return PyObject_Str(s) # <<<<<<<<<<<<<< - * elif not isinstance(s, str): - * raise TypeError("Cannot serialize non-str key {!r}".format(s)) - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_3 = PyObject_Str(__pyx_v_s); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 107, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - if (!(likely(PyUnicode_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "unicode", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(0, 107, __pyx_L1_error) - __pyx_r = ((PyObject*)__pyx_t_3); - __pyx_t_3 = 0; - goto __pyx_L0; - - /* "aiohttp/_http_writer.pyx":106 - * if typ is str: - * return s - * elif typ is _istr: # <<<<<<<<<<<<<< - * return PyObject_Str(s) - * elif not isinstance(s, str): - */ - } - - /* "aiohttp/_http_writer.pyx":108 - * elif typ is _istr: - * return PyObject_Str(s) - * elif not isinstance(s, str): # <<<<<<<<<<<<<< - * raise TypeError("Cannot serialize non-str key {!r}".format(s)) - * else: - */ - __pyx_t_1 = PyUnicode_Check(__pyx_v_s); - __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0); - if (unlikely(__pyx_t_2)) { - - /* "aiohttp/_http_writer.pyx":109 - * return PyObject_Str(s) - * elif not isinstance(s, str): - * raise TypeError("Cannot serialize non-str key {!r}".format(s)) # <<<<<<<<<<<<<< - * else: - * return str(s) - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_Cannot_serialize_non_str_key_r, __pyx_n_s_format); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 109, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) { - __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4); - if (likely(__pyx_t_5)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4); - __Pyx_INCREF(__pyx_t_5); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_4, function); - } - } - __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_s) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_s); - __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0; - if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 109, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 109, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_Raise(__pyx_t_4, 0, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __PYX_ERR(0, 109, __pyx_L1_error) - - /* "aiohttp/_http_writer.pyx":108 - * elif typ is _istr: - * return PyObject_Str(s) - * elif not isinstance(s, str): # <<<<<<<<<<<<<< - * raise TypeError("Cannot serialize non-str key {!r}".format(s)) - * else: - */ - } - - /* "aiohttp/_http_writer.pyx":111 - * raise TypeError("Cannot serialize non-str key {!r}".format(s)) - * else: - * return str(s) # <<<<<<<<<<<<<< - * - * - */ - /*else*/ { - __Pyx_XDECREF(__pyx_r); - __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), __pyx_v_s); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 111, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = ((PyObject*)__pyx_t_4); - __pyx_t_4 = 0; - goto __pyx_L0; - } - - /* "aiohttp/_http_writer.pyx":102 - * # --------------- _serialize_headers ---------------------- - * - * cdef str to_str(object s): # <<<<<<<<<<<<<< - * typ = type(s) - * if typ is str: - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("aiohttp._http_writer.to_str", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = 0; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_typ); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "aiohttp/_http_writer.pyx":114 - * - * - * def _serialize_headers(str status_line, headers): # <<<<<<<<<<<<<< - * cdef Writer writer - * cdef object key - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_12_http_writer_1_serialize_headers(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_7aiohttp_12_http_writer_1_serialize_headers = {"_serialize_headers", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7aiohttp_12_http_writer_1_serialize_headers, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_7aiohttp_12_http_writer_1_serialize_headers(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_status_line = 0; - PyObject *__pyx_v_headers = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_serialize_headers (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_status_line,&__pyx_n_s_headers,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_status_line)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_headers)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_serialize_headers", 1, 2, 2, 1); __PYX_ERR(0, 114, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_serialize_headers") < 0)) __PYX_ERR(0, 114, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_status_line = ((PyObject*)values[0]); - __pyx_v_headers = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_serialize_headers", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 114, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("aiohttp._http_writer._serialize_headers", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_status_line), (&PyUnicode_Type), 1, "status_line", 1))) __PYX_ERR(0, 114, __pyx_L1_error) - __pyx_r = __pyx_pf_7aiohttp_12_http_writer__serialize_headers(__pyx_self, __pyx_v_status_line, __pyx_v_headers); - - /* function exit code */ - goto __pyx_L0; - __pyx_L1_error:; - __pyx_r = NULL; - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_12_http_writer__serialize_headers(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_status_line, PyObject *__pyx_v_headers) { - struct __pyx_t_7aiohttp_12_http_writer_Writer __pyx_v_writer; - PyObject *__pyx_v_key = 0; - PyObject *__pyx_v_val = 0; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - int __pyx_t_1; - PyObject *__pyx_t_2 = NULL; - Py_ssize_t __pyx_t_3; - Py_ssize_t __pyx_t_4; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - int __pyx_t_8; - char const *__pyx_t_9; - PyObject *__pyx_t_10 = NULL; - PyObject *__pyx_t_11 = NULL; - PyObject *__pyx_t_12 = NULL; - PyObject *__pyx_t_13 = NULL; - PyObject *__pyx_t_14 = NULL; - PyObject *__pyx_t_15 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_serialize_headers", 0); - - /* "aiohttp/_http_writer.pyx":120 - * cdef bytes ret - * - * _init_writer(&writer) # <<<<<<<<<<<<<< - * - * try: - */ - __pyx_f_7aiohttp_12_http_writer__init_writer((&__pyx_v_writer)); - - /* "aiohttp/_http_writer.pyx":122 - * _init_writer(&writer) - * - * try: # <<<<<<<<<<<<<< - * if _write_str(&writer, status_line) < 0: - * raise - */ - /*try:*/ { - - /* "aiohttp/_http_writer.pyx":123 - * - * try: - * if _write_str(&writer, status_line) < 0: # <<<<<<<<<<<<<< - * raise - * if _write_byte(&writer, b'\r') < 0: - */ - __pyx_t_1 = ((__pyx_f_7aiohttp_12_http_writer__write_str((&__pyx_v_writer), __pyx_v_status_line) < 0) != 0); - if (unlikely(__pyx_t_1)) { - - /* "aiohttp/_http_writer.pyx":124 - * try: - * if _write_str(&writer, status_line) < 0: - * raise # <<<<<<<<<<<<<< - * if _write_byte(&writer, b'\r') < 0: - * raise - */ - __Pyx_ReraiseException(); __PYX_ERR(0, 124, __pyx_L4_error) - - /* "aiohttp/_http_writer.pyx":123 - * - * try: - * if _write_str(&writer, status_line) < 0: # <<<<<<<<<<<<<< - * raise - * if _write_byte(&writer, b'\r') < 0: - */ - } - - /* "aiohttp/_http_writer.pyx":125 - * if _write_str(&writer, status_line) < 0: - * raise - * if _write_byte(&writer, b'\r') < 0: # <<<<<<<<<<<<<< - * raise - * if _write_byte(&writer, b'\n') < 0: - */ - __pyx_t_1 = ((__pyx_f_7aiohttp_12_http_writer__write_byte((&__pyx_v_writer), '\r') < 0) != 0); - if (unlikely(__pyx_t_1)) { - - /* "aiohttp/_http_writer.pyx":126 - * raise - * if _write_byte(&writer, b'\r') < 0: - * raise # <<<<<<<<<<<<<< - * if _write_byte(&writer, b'\n') < 0: - * raise - */ - __Pyx_ReraiseException(); __PYX_ERR(0, 126, __pyx_L4_error) - - /* "aiohttp/_http_writer.pyx":125 - * if _write_str(&writer, status_line) < 0: - * raise - * if _write_byte(&writer, b'\r') < 0: # <<<<<<<<<<<<<< - * raise - * if _write_byte(&writer, b'\n') < 0: - */ - } - - /* "aiohttp/_http_writer.pyx":127 - * if _write_byte(&writer, b'\r') < 0: - * raise - * if _write_byte(&writer, b'\n') < 0: # <<<<<<<<<<<<<< - * raise - * - */ - __pyx_t_1 = ((__pyx_f_7aiohttp_12_http_writer__write_byte((&__pyx_v_writer), '\n') < 0) != 0); - if (unlikely(__pyx_t_1)) { - - /* "aiohttp/_http_writer.pyx":128 - * raise - * if _write_byte(&writer, b'\n') < 0: - * raise # <<<<<<<<<<<<<< - * - * for key, val in headers.items(): - */ - __Pyx_ReraiseException(); __PYX_ERR(0, 128, __pyx_L4_error) - - /* "aiohttp/_http_writer.pyx":127 - * if _write_byte(&writer, b'\r') < 0: - * raise - * if _write_byte(&writer, b'\n') < 0: # <<<<<<<<<<<<<< - * raise - * - */ - } - - /* "aiohttp/_http_writer.pyx":130 - * raise - * - * for key, val in headers.items(): # <<<<<<<<<<<<<< - * if _write_str(&writer, to_str(key)) < 0: - * raise - */ - __pyx_t_3 = 0; - if (unlikely(__pyx_v_headers == Py_None)) { - PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items"); - __PYX_ERR(0, 130, __pyx_L4_error) - } - __pyx_t_6 = __Pyx_dict_iterator(__pyx_v_headers, 0, __pyx_n_s_items, (&__pyx_t_4), (&__pyx_t_5)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 130, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_2); - __pyx_t_2 = __pyx_t_6; - __pyx_t_6 = 0; - while (1) { - __pyx_t_8 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_4, &__pyx_t_3, &__pyx_t_6, &__pyx_t_7, NULL, __pyx_t_5); - if (unlikely(__pyx_t_8 == 0)) break; - if (unlikely(__pyx_t_8 == -1)) __PYX_ERR(0, 130, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_6); - __Pyx_GOTREF(__pyx_t_7); - __Pyx_XDECREF_SET(__pyx_v_key, __pyx_t_6); - __pyx_t_6 = 0; - __Pyx_XDECREF_SET(__pyx_v_val, __pyx_t_7); - __pyx_t_7 = 0; - - /* "aiohttp/_http_writer.pyx":131 - * - * for key, val in headers.items(): - * if _write_str(&writer, to_str(key)) < 0: # <<<<<<<<<<<<<< - * raise - * if _write_byte(&writer, b':') < 0: - */ - __pyx_t_7 = __pyx_f_7aiohttp_12_http_writer_to_str(__pyx_v_key); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 131, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_1 = ((__pyx_f_7aiohttp_12_http_writer__write_str((&__pyx_v_writer), ((PyObject*)__pyx_t_7)) < 0) != 0); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(__pyx_t_1)) { - - /* "aiohttp/_http_writer.pyx":132 - * for key, val in headers.items(): - * if _write_str(&writer, to_str(key)) < 0: - * raise # <<<<<<<<<<<<<< - * if _write_byte(&writer, b':') < 0: - * raise - */ - __Pyx_ReraiseException(); __PYX_ERR(0, 132, __pyx_L4_error) - - /* "aiohttp/_http_writer.pyx":131 - * - * for key, val in headers.items(): - * if _write_str(&writer, to_str(key)) < 0: # <<<<<<<<<<<<<< - * raise - * if _write_byte(&writer, b':') < 0: - */ - } - - /* "aiohttp/_http_writer.pyx":133 - * if _write_str(&writer, to_str(key)) < 0: - * raise - * if _write_byte(&writer, b':') < 0: # <<<<<<<<<<<<<< - * raise - * if _write_byte(&writer, b' ') < 0: - */ - __pyx_t_1 = ((__pyx_f_7aiohttp_12_http_writer__write_byte((&__pyx_v_writer), ':') < 0) != 0); - if (unlikely(__pyx_t_1)) { - - /* "aiohttp/_http_writer.pyx":134 - * raise - * if _write_byte(&writer, b':') < 0: - * raise # <<<<<<<<<<<<<< - * if _write_byte(&writer, b' ') < 0: - * raise - */ - __Pyx_ReraiseException(); __PYX_ERR(0, 134, __pyx_L4_error) - - /* "aiohttp/_http_writer.pyx":133 - * if _write_str(&writer, to_str(key)) < 0: - * raise - * if _write_byte(&writer, b':') < 0: # <<<<<<<<<<<<<< - * raise - * if _write_byte(&writer, b' ') < 0: - */ - } - - /* "aiohttp/_http_writer.pyx":135 - * if _write_byte(&writer, b':') < 0: - * raise - * if _write_byte(&writer, b' ') < 0: # <<<<<<<<<<<<<< - * raise - * if _write_str(&writer, to_str(val)) < 0: - */ - __pyx_t_1 = ((__pyx_f_7aiohttp_12_http_writer__write_byte((&__pyx_v_writer), ' ') < 0) != 0); - if (unlikely(__pyx_t_1)) { - - /* "aiohttp/_http_writer.pyx":136 - * raise - * if _write_byte(&writer, b' ') < 0: - * raise # <<<<<<<<<<<<<< - * if _write_str(&writer, to_str(val)) < 0: - * raise - */ - __Pyx_ReraiseException(); __PYX_ERR(0, 136, __pyx_L4_error) - - /* "aiohttp/_http_writer.pyx":135 - * if _write_byte(&writer, b':') < 0: - * raise - * if _write_byte(&writer, b' ') < 0: # <<<<<<<<<<<<<< - * raise - * if _write_str(&writer, to_str(val)) < 0: - */ - } - - /* "aiohttp/_http_writer.pyx":137 - * if _write_byte(&writer, b' ') < 0: - * raise - * if _write_str(&writer, to_str(val)) < 0: # <<<<<<<<<<<<<< - * raise - * if _write_byte(&writer, b'\r') < 0: - */ - __pyx_t_7 = __pyx_f_7aiohttp_12_http_writer_to_str(__pyx_v_val); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 137, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_1 = ((__pyx_f_7aiohttp_12_http_writer__write_str((&__pyx_v_writer), ((PyObject*)__pyx_t_7)) < 0) != 0); - __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; - if (unlikely(__pyx_t_1)) { - - /* "aiohttp/_http_writer.pyx":138 - * raise - * if _write_str(&writer, to_str(val)) < 0: - * raise # <<<<<<<<<<<<<< - * if _write_byte(&writer, b'\r') < 0: - * raise - */ - __Pyx_ReraiseException(); __PYX_ERR(0, 138, __pyx_L4_error) - - /* "aiohttp/_http_writer.pyx":137 - * if _write_byte(&writer, b' ') < 0: - * raise - * if _write_str(&writer, to_str(val)) < 0: # <<<<<<<<<<<<<< - * raise - * if _write_byte(&writer, b'\r') < 0: - */ - } - - /* "aiohttp/_http_writer.pyx":139 - * if _write_str(&writer, to_str(val)) < 0: - * raise - * if _write_byte(&writer, b'\r') < 0: # <<<<<<<<<<<<<< - * raise - * if _write_byte(&writer, b'\n') < 0: - */ - __pyx_t_1 = ((__pyx_f_7aiohttp_12_http_writer__write_byte((&__pyx_v_writer), '\r') < 0) != 0); - if (unlikely(__pyx_t_1)) { - - /* "aiohttp/_http_writer.pyx":140 - * raise - * if _write_byte(&writer, b'\r') < 0: - * raise # <<<<<<<<<<<<<< - * if _write_byte(&writer, b'\n') < 0: - * raise - */ - __Pyx_ReraiseException(); __PYX_ERR(0, 140, __pyx_L4_error) - - /* "aiohttp/_http_writer.pyx":139 - * if _write_str(&writer, to_str(val)) < 0: - * raise - * if _write_byte(&writer, b'\r') < 0: # <<<<<<<<<<<<<< - * raise - * if _write_byte(&writer, b'\n') < 0: - */ - } - - /* "aiohttp/_http_writer.pyx":141 - * if _write_byte(&writer, b'\r') < 0: - * raise - * if _write_byte(&writer, b'\n') < 0: # <<<<<<<<<<<<<< - * raise - * - */ - __pyx_t_1 = ((__pyx_f_7aiohttp_12_http_writer__write_byte((&__pyx_v_writer), '\n') < 0) != 0); - if (unlikely(__pyx_t_1)) { - - /* "aiohttp/_http_writer.pyx":142 - * raise - * if _write_byte(&writer, b'\n') < 0: - * raise # <<<<<<<<<<<<<< - * - * if _write_byte(&writer, b'\r') < 0: - */ - __Pyx_ReraiseException(); __PYX_ERR(0, 142, __pyx_L4_error) - - /* "aiohttp/_http_writer.pyx":141 - * if _write_byte(&writer, b'\r') < 0: - * raise - * if _write_byte(&writer, b'\n') < 0: # <<<<<<<<<<<<<< - * raise - * - */ - } - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "aiohttp/_http_writer.pyx":144 - * raise - * - * if _write_byte(&writer, b'\r') < 0: # <<<<<<<<<<<<<< - * raise - * if _write_byte(&writer, b'\n') < 0: - */ - __pyx_t_1 = ((__pyx_f_7aiohttp_12_http_writer__write_byte((&__pyx_v_writer), '\r') < 0) != 0); - if (unlikely(__pyx_t_1)) { - - /* "aiohttp/_http_writer.pyx":145 - * - * if _write_byte(&writer, b'\r') < 0: - * raise # <<<<<<<<<<<<<< - * if _write_byte(&writer, b'\n') < 0: - * raise - */ - __Pyx_ReraiseException(); __PYX_ERR(0, 145, __pyx_L4_error) - - /* "aiohttp/_http_writer.pyx":144 - * raise - * - * if _write_byte(&writer, b'\r') < 0: # <<<<<<<<<<<<<< - * raise - * if _write_byte(&writer, b'\n') < 0: - */ - } - - /* "aiohttp/_http_writer.pyx":146 - * if _write_byte(&writer, b'\r') < 0: - * raise - * if _write_byte(&writer, b'\n') < 0: # <<<<<<<<<<<<<< - * raise - * - */ - __pyx_t_1 = ((__pyx_f_7aiohttp_12_http_writer__write_byte((&__pyx_v_writer), '\n') < 0) != 0); - if (unlikely(__pyx_t_1)) { - - /* "aiohttp/_http_writer.pyx":147 - * raise - * if _write_byte(&writer, b'\n') < 0: - * raise # <<<<<<<<<<<<<< - * - * return PyBytes_FromStringAndSize(writer.buf, writer.pos) - */ - __Pyx_ReraiseException(); __PYX_ERR(0, 147, __pyx_L4_error) - - /* "aiohttp/_http_writer.pyx":146 - * if _write_byte(&writer, b'\r') < 0: - * raise - * if _write_byte(&writer, b'\n') < 0: # <<<<<<<<<<<<<< - * raise - * - */ - } - - /* "aiohttp/_http_writer.pyx":149 - * raise - * - * return PyBytes_FromStringAndSize(writer.buf, writer.pos) # <<<<<<<<<<<<<< - * finally: - * _release_writer(&writer) - */ - __Pyx_XDECREF(__pyx_r); - __pyx_t_2 = PyBytes_FromStringAndSize(__pyx_v_writer.buf, __pyx_v_writer.pos); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 149, __pyx_L4_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L3_return; - } - - /* "aiohttp/_http_writer.pyx":151 - * return PyBytes_FromStringAndSize(writer.buf, writer.pos) - * finally: - * _release_writer(&writer) # <<<<<<<<<<<<<< - */ - /*finally:*/ { - __pyx_L4_error:; - /*exception exit:*/{ - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0; - __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0; - if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15); - if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12) < 0)) __Pyx_ErrFetch(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12); - __Pyx_XGOTREF(__pyx_t_10); - __Pyx_XGOTREF(__pyx_t_11); - __Pyx_XGOTREF(__pyx_t_12); - __Pyx_XGOTREF(__pyx_t_13); - __Pyx_XGOTREF(__pyx_t_14); - __Pyx_XGOTREF(__pyx_t_15); - __pyx_t_5 = __pyx_lineno; __pyx_t_8 = __pyx_clineno; __pyx_t_9 = __pyx_filename; - { - __pyx_f_7aiohttp_12_http_writer__release_writer((&__pyx_v_writer)); - } - if (PY_MAJOR_VERSION >= 3) { - __Pyx_XGIVEREF(__pyx_t_13); - __Pyx_XGIVEREF(__pyx_t_14); - __Pyx_XGIVEREF(__pyx_t_15); - __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15); - } - __Pyx_XGIVEREF(__pyx_t_10); - __Pyx_XGIVEREF(__pyx_t_11); - __Pyx_XGIVEREF(__pyx_t_12); - __Pyx_ErrRestore(__pyx_t_10, __pyx_t_11, __pyx_t_12); - __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; - __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_8; __pyx_filename = __pyx_t_9; - goto __pyx_L1_error; - } - __pyx_L3_return: { - __pyx_t_15 = __pyx_r; - __pyx_r = 0; - __pyx_f_7aiohttp_12_http_writer__release_writer((&__pyx_v_writer)); - __pyx_r = __pyx_t_15; - __pyx_t_15 = 0; - goto __pyx_L0; - } - } - - /* "aiohttp/_http_writer.pyx":114 - * - * - * def _serialize_headers(str status_line, headers): # <<<<<<<<<<<<<< - * cdef Writer writer - * cdef object key - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_AddTraceback("aiohttp._http_writer._serialize_headers", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_key); - __Pyx_XDECREF(__pyx_v_val); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyMethodDef __pyx_methods[] = { - {0, 0, 0, 0} -}; - -#if PY_MAJOR_VERSION >= 3 -#if CYTHON_PEP489_MULTI_PHASE_INIT -static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ -static int __pyx_pymod_exec__http_writer(PyObject* module); /*proto*/ -static PyModuleDef_Slot __pyx_moduledef_slots[] = { - {Py_mod_create, (void*)__pyx_pymod_create}, - {Py_mod_exec, (void*)__pyx_pymod_exec__http_writer}, - {0, NULL} -}; -#endif - -static struct PyModuleDef __pyx_moduledef = { - PyModuleDef_HEAD_INIT, - "_http_writer", - 0, /* m_doc */ - #if CYTHON_PEP489_MULTI_PHASE_INIT - 0, /* m_size */ - #else - -1, /* m_size */ - #endif - __pyx_methods /* m_methods */, - #if CYTHON_PEP489_MULTI_PHASE_INIT - __pyx_moduledef_slots, /* m_slots */ - #else - NULL, /* m_reload */ - #endif - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL /* m_free */ -}; -#endif -#ifndef CYTHON_SMALL_CODE -#if defined(__clang__) - #define CYTHON_SMALL_CODE -#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) - #define CYTHON_SMALL_CODE __attribute__((cold)) -#else - #define CYTHON_SMALL_CODE -#endif -#endif - -static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_kp_u_Cannot_serialize_non_str_key_r, __pyx_k_Cannot_serialize_non_str_key_r, sizeof(__pyx_k_Cannot_serialize_non_str_key_r), 0, 1, 0, 0}, - {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1}, - {&__pyx_n_s_aiohttp__http_writer, __pyx_k_aiohttp__http_writer, sizeof(__pyx_k_aiohttp__http_writer), 0, 0, 1, 1}, - {&__pyx_kp_s_aiohttp__http_writer_pyx, __pyx_k_aiohttp__http_writer_pyx, sizeof(__pyx_k_aiohttp__http_writer_pyx), 0, 0, 1, 0}, - {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, - {&__pyx_n_s_format, __pyx_k_format, sizeof(__pyx_k_format), 0, 0, 1, 1}, - {&__pyx_n_s_headers, __pyx_k_headers, sizeof(__pyx_k_headers), 0, 0, 1, 1}, - {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, - {&__pyx_n_s_istr, __pyx_k_istr, sizeof(__pyx_k_istr), 0, 0, 1, 1}, - {&__pyx_n_s_items, __pyx_k_items, sizeof(__pyx_k_items), 0, 0, 1, 1}, - {&__pyx_n_s_key, __pyx_k_key, sizeof(__pyx_k_key), 0, 0, 1, 1}, - {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, - {&__pyx_n_s_multidict, __pyx_k_multidict, sizeof(__pyx_k_multidict), 0, 0, 1, 1}, - {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, - {&__pyx_n_s_ret, __pyx_k_ret, sizeof(__pyx_k_ret), 0, 0, 1, 1}, - {&__pyx_n_s_serialize_headers, __pyx_k_serialize_headers, sizeof(__pyx_k_serialize_headers), 0, 0, 1, 1}, - {&__pyx_n_s_status_line, __pyx_k_status_line, sizeof(__pyx_k_status_line), 0, 0, 1, 1}, - {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, - {&__pyx_n_s_val, __pyx_k_val, sizeof(__pyx_k_val), 0, 0, 1, 1}, - {&__pyx_n_s_writer, __pyx_k_writer, sizeof(__pyx_k_writer), 0, 0, 1, 1}, - {0, 0, 0, 0, 0, 0, 0} -}; -static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(0, 109, __pyx_L1_error) - return 0; - __pyx_L1_error:; - return -1; -} - -static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); - - /* "aiohttp/_http_writer.pyx":114 - * - * - * def _serialize_headers(str status_line, headers): # <<<<<<<<<<<<<< - * cdef Writer writer - * cdef object key - */ - __pyx_tuple_ = PyTuple_Pack(6, __pyx_n_s_status_line, __pyx_n_s_headers, __pyx_n_s_writer, __pyx_n_s_key, __pyx_n_s_val, __pyx_n_s_ret); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 114, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple_); - __Pyx_GIVEREF(__pyx_tuple_); - __pyx_codeobj__2 = (PyObject*)__Pyx_PyCode_New(2, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple_, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_aiohttp__http_writer_pyx, __pyx_n_s_serialize_headers, 114, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__2)) __PYX_ERR(0, 114, __pyx_L1_error) - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_RefNannyFinishContext(); - return -1; -} - -static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { - if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error); - return 0; - __pyx_L1_error:; - return -1; -} - -static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ - -static int __Pyx_modinit_global_init_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); - /*--- Global init code ---*/ - __pyx_v_7aiohttp_12_http_writer__istr = Py_None; Py_INCREF(Py_None); - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_variable_export_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); - /*--- Variable export code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_function_export_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); - /*--- Function export code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_type_init_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); - /*--- Type init code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_type_import_code(void) { - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); - /*--- Type import code ---*/ - __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type", - #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000 - sizeof(PyTypeObject), - #else - sizeof(PyHeapTypeObject), - #endif - __Pyx_ImportType_CheckSize_Warn); - if (!__pyx_ptype_7cpython_4type_type) __PYX_ERR(1, 9, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_RefNannyFinishContext(); - return -1; -} - -static int __Pyx_modinit_variable_import_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); - /*--- Variable import code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_function_import_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); - /*--- Function import code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - - -#ifndef CYTHON_NO_PYINIT_EXPORT -#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC -#elif PY_MAJOR_VERSION < 3 -#ifdef __cplusplus -#define __Pyx_PyMODINIT_FUNC extern "C" void -#else -#define __Pyx_PyMODINIT_FUNC void -#endif -#else -#ifdef __cplusplus -#define __Pyx_PyMODINIT_FUNC extern "C" PyObject * -#else -#define __Pyx_PyMODINIT_FUNC PyObject * -#endif -#endif - - -#if PY_MAJOR_VERSION < 3 -__Pyx_PyMODINIT_FUNC init_http_writer(void) CYTHON_SMALL_CODE; /*proto*/ -__Pyx_PyMODINIT_FUNC init_http_writer(void) -#else -__Pyx_PyMODINIT_FUNC PyInit__http_writer(void) CYTHON_SMALL_CODE; /*proto*/ -__Pyx_PyMODINIT_FUNC PyInit__http_writer(void) -#if CYTHON_PEP489_MULTI_PHASE_INIT -{ - return PyModuleDef_Init(&__pyx_moduledef); -} -static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { - #if PY_VERSION_HEX >= 0x030700A1 - static PY_INT64_T main_interpreter_id = -1; - PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); - if (main_interpreter_id == -1) { - main_interpreter_id = current_id; - return (unlikely(current_id == -1)) ? -1 : 0; - } else if (unlikely(main_interpreter_id != current_id)) - #else - static PyInterpreterState *main_interpreter = NULL; - PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; - if (!main_interpreter) { - main_interpreter = current_interpreter; - } else if (unlikely(main_interpreter != current_interpreter)) - #endif - { - PyErr_SetString( - PyExc_ImportError, - "Interpreter change detected - this module can only be loaded into one interpreter per process."); - return -1; - } - return 0; -} -static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) { - PyObject *value = PyObject_GetAttrString(spec, from_name); - int result = 0; - if (likely(value)) { - if (allow_none || value != Py_None) { - result = PyDict_SetItemString(moddict, to_name, value); - } - Py_DECREF(value); - } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Clear(); - } else { - result = -1; - } - return result; -} -static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) { - PyObject *module = NULL, *moddict, *modname; - if (__Pyx_check_single_interpreter()) - return NULL; - if (__pyx_m) - return __Pyx_NewRef(__pyx_m); - modname = PyObject_GetAttrString(spec, "name"); - if (unlikely(!modname)) goto bad; - module = PyModule_NewObject(modname); - Py_DECREF(modname); - if (unlikely(!module)) goto bad; - moddict = PyModule_GetDict(module); - if (unlikely(!moddict)) goto bad; - if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; - if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; - if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; - if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; - return module; -bad: - Py_XDECREF(module); - return NULL; -} - - -static CYTHON_SMALL_CODE int __pyx_pymod_exec__http_writer(PyObject *__pyx_pyinit_module) -#endif -#endif -{ - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannyDeclarations - #if CYTHON_PEP489_MULTI_PHASE_INIT - if (__pyx_m) { - if (__pyx_m == __pyx_pyinit_module) return 0; - PyErr_SetString(PyExc_RuntimeError, "Module '_http_writer' has already been imported. Re-initialisation is not supported."); - return -1; - } - #elif PY_MAJOR_VERSION >= 3 - if (__pyx_m) return __Pyx_NewRef(__pyx_m); - #endif - #if CYTHON_REFNANNY -__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); -if (!__Pyx_RefNanny) { - PyErr_Clear(); - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); - if (!__Pyx_RefNanny) - Py_FatalError("failed to import 'refnanny' module"); -} -#endif - __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit__http_writer(void)", 0); - if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #ifdef __Pxy_PyFrame_Initialize_Offsets - __Pxy_PyFrame_Initialize_Offsets(); - #endif - __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) - #ifdef __Pyx_CyFunction_USED - if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_FusedFunction_USED - if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_Coroutine_USED - if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_Generator_USED - if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_AsyncGen_USED - if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_StopAsyncIteration_USED - if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - /*--- Library function declarations ---*/ - /*--- Threads initialization code ---*/ - #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS - #ifdef WITH_THREAD /* Python build with threading support? */ - PyEval_InitThreads(); - #endif - #endif - /*--- Module creation code ---*/ - #if CYTHON_PEP489_MULTI_PHASE_INIT - __pyx_m = __pyx_pyinit_module; - Py_INCREF(__pyx_m); - #else - #if PY_MAJOR_VERSION < 3 - __pyx_m = Py_InitModule4("_http_writer", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); - #else - __pyx_m = PyModule_Create(&__pyx_moduledef); - #endif - if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_d); - __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_b); - __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_cython_runtime); - if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error); - /*--- Initialize various global constants etc. ---*/ - if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) - if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - if (__pyx_module_is_main_aiohttp___http_writer) { - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - } - #if PY_MAJOR_VERSION >= 3 - { - PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) - if (!PyDict_GetItemString(modules, "aiohttp._http_writer")) { - if (unlikely(PyDict_SetItemString(modules, "aiohttp._http_writer", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error) - } - } - #endif - /*--- Builtin init code ---*/ - if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - /*--- Constants init code ---*/ - if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - /*--- Global type/function init code ---*/ - (void)__Pyx_modinit_global_init_code(); - (void)__Pyx_modinit_variable_export_code(); - (void)__Pyx_modinit_function_export_code(); - (void)__Pyx_modinit_type_init_code(); - if (unlikely(__Pyx_modinit_type_import_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error) - (void)__Pyx_modinit_variable_import_code(); - (void)__Pyx_modinit_function_import_code(); - /*--- Execution code ---*/ - #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) - if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - - /* "aiohttp/_http_writer.pyx":8 - * from libc.string cimport memcpy - * - * from multidict import istr # <<<<<<<<<<<<<< - * - * DEF BUF_SIZE = 16 * 1024 # 16KiB - */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s_istr); - __Pyx_GIVEREF(__pyx_n_s_istr); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_istr); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_multidict, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_istr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_istr, __pyx_t_1) < 0) __PYX_ERR(0, 8, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "aiohttp/_http_writer.pyx":13 - * cdef char BUFFER[BUF_SIZE] - * - * cdef object _istr = istr # <<<<<<<<<<<<<< - * - * - */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_istr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_XGOTREF(__pyx_v_7aiohttp_12_http_writer__istr); - __Pyx_DECREF_SET(__pyx_v_7aiohttp_12_http_writer__istr, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_2); - __pyx_t_2 = 0; - - /* "aiohttp/_http_writer.pyx":114 - * - * - * def _serialize_headers(str status_line, headers): # <<<<<<<<<<<<<< - * cdef Writer writer - * cdef object key - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_7aiohttp_12_http_writer_1_serialize_headers, NULL, __pyx_n_s_aiohttp__http_writer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 114, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_serialize_headers, __pyx_t_2) < 0) __PYX_ERR(0, 114, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "aiohttp/_http_writer.pyx":1 - * from cpython.bytes cimport PyBytes_FromStringAndSize # <<<<<<<<<<<<<< - * from cpython.exc cimport PyErr_NoMemory - * from cpython.mem cimport PyMem_Free, PyMem_Malloc, PyMem_Realloc - */ - __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /*--- Wrapped vars code ---*/ - - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - if (__pyx_m) { - if (__pyx_d) { - __Pyx_AddTraceback("init aiohttp._http_writer", __pyx_clineno, __pyx_lineno, __pyx_filename); - } - Py_CLEAR(__pyx_m); - } else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_ImportError, "init aiohttp._http_writer"); - } - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - #if CYTHON_PEP489_MULTI_PHASE_INIT - return (__pyx_m != NULL) ? 0 : -1; - #elif PY_MAJOR_VERSION >= 3 - return __pyx_m; - #else - return; - #endif -} - -/* --- Runtime support code --- */ -/* Refnanny */ -#if CYTHON_REFNANNY -static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { - PyObject *m = NULL, *p = NULL; - void *r = NULL; - m = PyImport_ImportModule(modname); - if (!m) goto end; - p = PyObject_GetAttrString(m, "RefNannyAPI"); - if (!p) goto end; - r = PyLong_AsVoidPtr(p); -end: - Py_XDECREF(p); - Py_XDECREF(m); - return (__Pyx_RefNannyAPIStruct *)r; -} -#endif - -/* PyObjectGetAttrStr */ -#if CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro)) - return tp->tp_getattro(obj, attr_name); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_getattr)) - return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); -#endif - return PyObject_GetAttr(obj, attr_name); -} -#endif - -/* GetBuiltinName */ -static PyObject *__Pyx_GetBuiltinName(PyObject *name) { - PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); - if (unlikely(!result)) { - PyErr_Format(PyExc_NameError, -#if PY_MAJOR_VERSION >= 3 - "name '%U' is not defined", name); -#else - "name '%.200s' is not defined", PyString_AS_STRING(name)); -#endif - } - return result; -} - -/* PyErrFetchRestore */ -#if CYTHON_FAST_THREAD_STATE -static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - tmp_type = tstate->curexc_type; - tmp_value = tstate->curexc_value; - tmp_tb = tstate->curexc_traceback; - tstate->curexc_type = type; - tstate->curexc_value = value; - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -} -static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { - *type = tstate->curexc_type; - *value = tstate->curexc_value; - *tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -} -#endif - -/* WriteUnraisableException */ -static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno, - CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename, - int full_traceback, CYTHON_UNUSED int nogil) { - PyObject *old_exc, *old_val, *old_tb; - PyObject *ctx; - __Pyx_PyThreadState_declare -#ifdef WITH_THREAD - PyGILState_STATE state; - if (nogil) - state = PyGILState_Ensure(); -#ifdef _MSC_VER - else state = (PyGILState_STATE)-1; -#endif -#endif - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&old_exc, &old_val, &old_tb); - if (full_traceback) { - Py_XINCREF(old_exc); - Py_XINCREF(old_val); - Py_XINCREF(old_tb); - __Pyx_ErrRestore(old_exc, old_val, old_tb); - PyErr_PrintEx(1); - } - #if PY_MAJOR_VERSION < 3 - ctx = PyString_FromString(name); - #else - ctx = PyUnicode_FromString(name); - #endif - __Pyx_ErrRestore(old_exc, old_val, old_tb); - if (!ctx) { - PyErr_WriteUnraisable(Py_None); - } else { - PyErr_WriteUnraisable(ctx); - Py_DECREF(ctx); - } -#ifdef WITH_THREAD - if (nogil) - PyGILState_Release(state); -#endif -} - -/* unicode_iter */ -static CYTHON_INLINE int __Pyx_init_unicode_iteration( - PyObject* ustring, Py_ssize_t *length, void** data, int *kind) { -#if CYTHON_PEP393_ENABLED - if (unlikely(__Pyx_PyUnicode_READY(ustring) < 0)) return -1; - *kind = PyUnicode_KIND(ustring); - *length = PyUnicode_GET_LENGTH(ustring); - *data = PyUnicode_DATA(ustring); -#else - *kind = 0; - *length = PyUnicode_GET_SIZE(ustring); - *data = (void*)PyUnicode_AS_UNICODE(ustring); -#endif - return 0; -} - -/* PyCFunctionFastCall */ -#if CYTHON_FAST_PYCCALL -static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) { - PyCFunctionObject *func = (PyCFunctionObject*)func_obj; - PyCFunction meth = PyCFunction_GET_FUNCTION(func); - PyObject *self = PyCFunction_GET_SELF(func); - int flags = PyCFunction_GET_FLAGS(func); - assert(PyCFunction_Check(func)); - assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))); - assert(nargs >= 0); - assert(nargs == 0 || args != NULL); - /* _PyCFunction_FastCallDict() must not be called with an exception set, - because it may clear it (directly or indirectly) and so the - caller loses its exception */ - assert(!PyErr_Occurred()); - if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) { - return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL); - } else { - return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs); - } -} -#endif - -/* PyFunctionFastCall */ -#if CYTHON_FAST_PYCALL -static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, - PyObject *globals) { - PyFrameObject *f; - PyThreadState *tstate = __Pyx_PyThreadState_Current; - PyObject **fastlocals; - Py_ssize_t i; - PyObject *result; - assert(globals != NULL); - /* XXX Perhaps we should create a specialized - PyFrame_New() that doesn't take locals, but does - take builtins without sanity checking them. - */ - assert(tstate != NULL); - f = PyFrame_New(tstate, co, globals, NULL); - if (f == NULL) { - return NULL; - } - fastlocals = __Pyx_PyFrame_GetLocalsplus(f); - for (i = 0; i < na; i++) { - Py_INCREF(*args); - fastlocals[i] = *args++; - } - result = PyEval_EvalFrameEx(f,0); - ++tstate->recursion_depth; - Py_DECREF(f); - --tstate->recursion_depth; - return result; -} -#if 1 || PY_VERSION_HEX < 0x030600B1 -static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { - PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); - PyObject *globals = PyFunction_GET_GLOBALS(func); - PyObject *argdefs = PyFunction_GET_DEFAULTS(func); - PyObject *closure; -#if PY_MAJOR_VERSION >= 3 - PyObject *kwdefs; -#endif - PyObject *kwtuple, **k; - PyObject **d; - Py_ssize_t nd; - Py_ssize_t nk; - PyObject *result; - assert(kwargs == NULL || PyDict_Check(kwargs)); - nk = kwargs ? PyDict_Size(kwargs) : 0; - if (Py_EnterRecursiveCall((char*)" while calling a Python object")) { - return NULL; - } - if ( -#if PY_MAJOR_VERSION >= 3 - co->co_kwonlyargcount == 0 && -#endif - likely(kwargs == NULL || nk == 0) && - co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { - if (argdefs == NULL && co->co_argcount == nargs) { - result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); - goto done; - } - else if (nargs == 0 && argdefs != NULL - && co->co_argcount == Py_SIZE(argdefs)) { - /* function called with no arguments, but all parameters have - a default value: use default values as arguments .*/ - args = &PyTuple_GET_ITEM(argdefs, 0); - result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); - goto done; - } - } - if (kwargs != NULL) { - Py_ssize_t pos, i; - kwtuple = PyTuple_New(2 * nk); - if (kwtuple == NULL) { - result = NULL; - goto done; - } - k = &PyTuple_GET_ITEM(kwtuple, 0); - pos = i = 0; - while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { - Py_INCREF(k[i]); - Py_INCREF(k[i+1]); - i += 2; - } - nk = i / 2; - } - else { - kwtuple = NULL; - k = NULL; - } - closure = PyFunction_GET_CLOSURE(func); -#if PY_MAJOR_VERSION >= 3 - kwdefs = PyFunction_GET_KW_DEFAULTS(func); -#endif - if (argdefs != NULL) { - d = &PyTuple_GET_ITEM(argdefs, 0); - nd = Py_SIZE(argdefs); - } - else { - d = NULL; - nd = 0; - } -#if PY_MAJOR_VERSION >= 3 - result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, - args, (int)nargs, - k, (int)nk, - d, (int)nd, kwdefs, closure); -#else - result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, - args, (int)nargs, - k, (int)nk, - d, (int)nd, closure); -#endif - Py_XDECREF(kwtuple); -done: - Py_LeaveRecursiveCall(); - return result; -} -#endif -#endif - -/* PyObjectCall */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyObject *result; - ternaryfunc call = func->ob_type->tp_call; - if (unlikely(!call)) - return PyObject_Call(func, arg, kw); - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; - result = (*call)(func, arg, kw); - Py_LeaveRecursiveCall(); - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); - } - return result; -} -#endif - -/* PyObjectCall2Args */ -static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { - PyObject *args, *result = NULL; - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(function)) { - PyObject *args[2] = {arg1, arg2}; - return __Pyx_PyFunction_FastCall(function, args, 2); - } - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(function)) { - PyObject *args[2] = {arg1, arg2}; - return __Pyx_PyCFunction_FastCall(function, args, 2); - } - #endif - args = PyTuple_New(2); - if (unlikely(!args)) goto done; - Py_INCREF(arg1); - PyTuple_SET_ITEM(args, 0, arg1); - Py_INCREF(arg2); - PyTuple_SET_ITEM(args, 1, arg2); - Py_INCREF(function); - result = __Pyx_PyObject_Call(function, args, NULL); - Py_DECREF(args); - Py_DECREF(function); -done: - return result; -} - -/* PyObjectCallMethO */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { - PyObject *self, *result; - PyCFunction cfunc; - cfunc = PyCFunction_GET_FUNCTION(func); - self = PyCFunction_GET_SELF(func); - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; - result = cfunc(self, arg); - Py_LeaveRecursiveCall(); - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); - } - return result; -} -#endif - -/* PyObjectCallOneArg */ -#if CYTHON_COMPILING_IN_CPYTHON -static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) { - PyObject *result; - PyObject *args = PyTuple_New(1); - if (unlikely(!args)) return NULL; - Py_INCREF(arg); - PyTuple_SET_ITEM(args, 0, arg); - result = __Pyx_PyObject_Call(func, args, NULL); - Py_DECREF(args); - return result; -} -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { -#if CYTHON_FAST_PYCALL - if (PyFunction_Check(func)) { - return __Pyx_PyFunction_FastCall(func, &arg, 1); - } -#endif - if (likely(PyCFunction_Check(func))) { - if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) { - return __Pyx_PyObject_CallMethO(func, arg); -#if CYTHON_FAST_PYCCALL - } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) { - return __Pyx_PyCFunction_FastCall(func, &arg, 1); -#endif - } - } - return __Pyx__PyObject_CallOneArg(func, arg); -} -#else -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { - PyObject *result; - PyObject *args = PyTuple_Pack(1, arg); - if (unlikely(!args)) return NULL; - result = __Pyx_PyObject_Call(func, args, NULL); - Py_DECREF(args); - return result; -} -#endif - -/* RaiseException */ -#if PY_MAJOR_VERSION < 3 -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, - CYTHON_UNUSED PyObject *cause) { - __Pyx_PyThreadState_declare - Py_XINCREF(type); - if (!value || value == Py_None) - value = NULL; - else - Py_INCREF(value); - if (!tb || tb == Py_None) - tb = NULL; - else { - Py_INCREF(tb); - if (!PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto raise_error; - } - } - if (PyType_Check(type)) { -#if CYTHON_COMPILING_IN_PYPY - if (!value) { - Py_INCREF(Py_None); - value = Py_None; - } -#endif - PyErr_NormalizeException(&type, &value, &tb); - } else { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto raise_error; - } - value = type; - type = (PyObject*) Py_TYPE(type); - Py_INCREF(type); - if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto raise_error; - } - } - __Pyx_PyThreadState_assign - __Pyx_ErrRestore(type, value, tb); - return; -raise_error: - Py_XDECREF(value); - Py_XDECREF(type); - Py_XDECREF(tb); - return; -} -#else -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { - PyObject* owned_instance = NULL; - if (tb == Py_None) { - tb = 0; - } else if (tb && !PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto bad; - } - if (value == Py_None) - value = 0; - if (PyExceptionInstance_Check(type)) { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto bad; - } - value = type; - type = (PyObject*) Py_TYPE(value); - } else if (PyExceptionClass_Check(type)) { - PyObject *instance_class = NULL; - if (value && PyExceptionInstance_Check(value)) { - instance_class = (PyObject*) Py_TYPE(value); - if (instance_class != type) { - int is_subclass = PyObject_IsSubclass(instance_class, type); - if (!is_subclass) { - instance_class = NULL; - } else if (unlikely(is_subclass == -1)) { - goto bad; - } else { - type = instance_class; - } - } - } - if (!instance_class) { - PyObject *args; - if (!value) - args = PyTuple_New(0); - else if (PyTuple_Check(value)) { - Py_INCREF(value); - args = value; - } else - args = PyTuple_Pack(1, value); - if (!args) - goto bad; - owned_instance = PyObject_Call(type, args, NULL); - Py_DECREF(args); - if (!owned_instance) - goto bad; - value = owned_instance; - if (!PyExceptionInstance_Check(value)) { - PyErr_Format(PyExc_TypeError, - "calling %R should have returned an instance of " - "BaseException, not %R", - type, Py_TYPE(value)); - goto bad; - } - } - } else { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto bad; - } - if (cause) { - PyObject *fixed_cause; - if (cause == Py_None) { - fixed_cause = NULL; - } else if (PyExceptionClass_Check(cause)) { - fixed_cause = PyObject_CallObject(cause, NULL); - if (fixed_cause == NULL) - goto bad; - } else if (PyExceptionInstance_Check(cause)) { - fixed_cause = cause; - Py_INCREF(fixed_cause); - } else { - PyErr_SetString(PyExc_TypeError, - "exception causes must derive from " - "BaseException"); - goto bad; - } - PyException_SetCause(value, fixed_cause); - } - PyErr_SetObject(type, value); - if (tb) { -#if CYTHON_COMPILING_IN_PYPY - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); - Py_INCREF(tb); - PyErr_Restore(tmp_type, tmp_value, tb); - Py_XDECREF(tmp_tb); -#else - PyThreadState *tstate = __Pyx_PyThreadState_Current; - PyObject* tmp_tb = tstate->curexc_traceback; - if (tb != tmp_tb) { - Py_INCREF(tb); - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_tb); - } -#endif - } -bad: - Py_XDECREF(owned_instance); - return; -} -#endif - -/* RaiseArgTupleInvalid */ -static void __Pyx_RaiseArgtupleInvalid( - const char* func_name, - int exact, - Py_ssize_t num_min, - Py_ssize_t num_max, - Py_ssize_t num_found) -{ - Py_ssize_t num_expected; - const char *more_or_less; - if (num_found < num_min) { - num_expected = num_min; - more_or_less = "at least"; - } else { - num_expected = num_max; - more_or_less = "at most"; - } - if (exact) { - more_or_less = "exactly"; - } - PyErr_Format(PyExc_TypeError, - "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", - func_name, more_or_less, num_expected, - (num_expected == 1) ? "" : "s", num_found); -} - -/* RaiseDoubleKeywords */ -static void __Pyx_RaiseDoubleKeywordsError( - const char* func_name, - PyObject* kw_name) -{ - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION >= 3 - "%s() got multiple values for keyword argument '%U'", func_name, kw_name); - #else - "%s() got multiple values for keyword argument '%s'", func_name, - PyString_AsString(kw_name)); - #endif -} - -/* ParseKeywords */ -static int __Pyx_ParseOptionalKeywords( - PyObject *kwds, - PyObject **argnames[], - PyObject *kwds2, - PyObject *values[], - Py_ssize_t num_pos_args, - const char* function_name) -{ - PyObject *key = 0, *value = 0; - Py_ssize_t pos = 0; - PyObject*** name; - PyObject*** first_kw_arg = argnames + num_pos_args; - while (PyDict_Next(kwds, &pos, &key, &value)) { - name = first_kw_arg; - while (*name && (**name != key)) name++; - if (*name) { - values[name-argnames] = value; - continue; - } - name = first_kw_arg; - #if PY_MAJOR_VERSION < 3 - if (likely(PyString_Check(key))) { - while (*name) { - if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) - && _PyString_Eq(**name, key)) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - if ((**argname == key) || ( - (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) - && _PyString_Eq(**argname, key))) { - goto arg_passed_twice; - } - argname++; - } - } - } else - #endif - if (likely(PyUnicode_Check(key))) { - while (*name) { - int cmp = (**name == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : - #endif - PyUnicode_Compare(**name, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - int cmp = (**argname == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : - #endif - PyUnicode_Compare(**argname, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) goto arg_passed_twice; - argname++; - } - } - } else - goto invalid_keyword_type; - if (kwds2) { - if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; - } else { - goto invalid_keyword; - } - } - return 0; -arg_passed_twice: - __Pyx_RaiseDoubleKeywordsError(function_name, key); - goto bad; -invalid_keyword_type: - PyErr_Format(PyExc_TypeError, - "%.200s() keywords must be strings", function_name); - goto bad; -invalid_keyword: - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION < 3 - "%.200s() got an unexpected keyword argument '%.200s'", - function_name, PyString_AsString(key)); - #else - "%s() got an unexpected keyword argument '%U'", - function_name, key); - #endif -bad: - return -1; -} - -/* ArgTypeTest */ -static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact) -{ - if (unlikely(!type)) { - PyErr_SetString(PyExc_SystemError, "Missing type object"); - return 0; - } - else if (exact) { - #if PY_MAJOR_VERSION == 2 - if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1; - #endif - } - else { - if (likely(__Pyx_TypeCheck(obj, type))) return 1; - } - PyErr_Format(PyExc_TypeError, - "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)", - name, type->tp_name, Py_TYPE(obj)->tp_name); - return 0; -} - -/* GetTopmostException */ -#if CYTHON_USE_EXC_INFO_STACK -static _PyErr_StackItem * -__Pyx_PyErr_GetTopmostException(PyThreadState *tstate) -{ - _PyErr_StackItem *exc_info = tstate->exc_info; - while ((exc_info->exc_type == NULL || exc_info->exc_type == Py_None) && - exc_info->previous_item != NULL) - { - exc_info = exc_info->previous_item; - } - return exc_info; -} -#endif - -/* ReRaiseException */ -static CYTHON_INLINE void __Pyx_ReraiseException(void) { - PyObject *type = NULL, *value = NULL, *tb = NULL; -#if CYTHON_FAST_THREAD_STATE - PyThreadState *tstate = PyThreadState_GET(); - #if CYTHON_USE_EXC_INFO_STACK - _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); - type = exc_info->exc_type; - value = exc_info->exc_value; - tb = exc_info->exc_traceback; - #else - type = tstate->exc_type; - value = tstate->exc_value; - tb = tstate->exc_traceback; - #endif -#else - PyErr_GetExcInfo(&type, &value, &tb); -#endif - if (!type || type == Py_None) { -#if !CYTHON_FAST_THREAD_STATE - Py_XDECREF(type); - Py_XDECREF(value); - Py_XDECREF(tb); -#endif - PyErr_SetString(PyExc_RuntimeError, - "No active exception to reraise"); - } else { -#if CYTHON_FAST_THREAD_STATE - Py_INCREF(type); - Py_XINCREF(value); - Py_XINCREF(tb); -#endif - PyErr_Restore(type, value, tb); - } -} - -/* IterFinish */ -static CYTHON_INLINE int __Pyx_IterFinish(void) { -#if CYTHON_FAST_THREAD_STATE - PyThreadState *tstate = __Pyx_PyThreadState_Current; - PyObject* exc_type = tstate->curexc_type; - if (unlikely(exc_type)) { - if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) { - PyObject *exc_value, *exc_tb; - exc_value = tstate->curexc_value; - exc_tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; - Py_DECREF(exc_type); - Py_XDECREF(exc_value); - Py_XDECREF(exc_tb); - return 0; - } else { - return -1; - } - } - return 0; -#else - if (unlikely(PyErr_Occurred())) { - if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) { - PyErr_Clear(); - return 0; - } else { - return -1; - } - } - return 0; -#endif -} - -/* PyObjectCallNoArg */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) { -#if CYTHON_FAST_PYCALL - if (PyFunction_Check(func)) { - return __Pyx_PyFunction_FastCall(func, NULL, 0); - } -#endif -#ifdef __Pyx_CyFunction_USED - if (likely(PyCFunction_Check(func) || __Pyx_CyFunction_Check(func))) -#else - if (likely(PyCFunction_Check(func))) -#endif - { - if (likely(PyCFunction_GET_FLAGS(func) & METH_NOARGS)) { - return __Pyx_PyObject_CallMethO(func, NULL); - } - } - return __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL); -} -#endif - -/* PyObjectGetMethod */ -static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) { - PyObject *attr; -#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP - PyTypeObject *tp = Py_TYPE(obj); - PyObject *descr; - descrgetfunc f = NULL; - PyObject **dictptr, *dict; - int meth_found = 0; - assert (*method == NULL); - if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) { - attr = __Pyx_PyObject_GetAttrStr(obj, name); - goto try_unpack; - } - if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) { - return 0; - } - descr = _PyType_Lookup(tp, name); - if (likely(descr != NULL)) { - Py_INCREF(descr); -#if PY_MAJOR_VERSION >= 3 - #ifdef __Pyx_CyFunction_USED - if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr))) - #else - if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type))) - #endif -#else - #ifdef __Pyx_CyFunction_USED - if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr))) - #else - if (likely(PyFunction_Check(descr))) - #endif -#endif - { - meth_found = 1; - } else { - f = Py_TYPE(descr)->tp_descr_get; - if (f != NULL && PyDescr_IsData(descr)) { - attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); - Py_DECREF(descr); - goto try_unpack; - } - } - } - dictptr = _PyObject_GetDictPtr(obj); - if (dictptr != NULL && (dict = *dictptr) != NULL) { - Py_INCREF(dict); - attr = __Pyx_PyDict_GetItemStr(dict, name); - if (attr != NULL) { - Py_INCREF(attr); - Py_DECREF(dict); - Py_XDECREF(descr); - goto try_unpack; - } - Py_DECREF(dict); - } - if (meth_found) { - *method = descr; - return 1; - } - if (f != NULL) { - attr = f(descr, obj, (PyObject *)Py_TYPE(obj)); - Py_DECREF(descr); - goto try_unpack; - } - if (descr != NULL) { - *method = descr; - return 0; - } - PyErr_Format(PyExc_AttributeError, -#if PY_MAJOR_VERSION >= 3 - "'%.50s' object has no attribute '%U'", - tp->tp_name, name); -#else - "'%.50s' object has no attribute '%.400s'", - tp->tp_name, PyString_AS_STRING(name)); -#endif - return 0; -#else - attr = __Pyx_PyObject_GetAttrStr(obj, name); - goto try_unpack; -#endif -try_unpack: -#if CYTHON_UNPACK_METHODS - if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) { - PyObject *function = PyMethod_GET_FUNCTION(attr); - Py_INCREF(function); - Py_DECREF(attr); - *method = function; - return 1; - } -#endif - *method = attr; - return 0; -} - -/* PyObjectCallMethod0 */ -static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) { - PyObject *method = NULL, *result = NULL; - int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method); - if (likely(is_method)) { - result = __Pyx_PyObject_CallOneArg(method, obj); - Py_DECREF(method); - return result; - } - if (unlikely(!method)) goto bad; - result = __Pyx_PyObject_CallNoArg(method); - Py_DECREF(method); -bad: - return result; -} - -/* RaiseNeedMoreValuesToUnpack */ -static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) { - PyErr_Format(PyExc_ValueError, - "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack", - index, (index == 1) ? "" : "s"); -} - -/* RaiseTooManyValuesToUnpack */ -static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) { - PyErr_Format(PyExc_ValueError, - "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected); -} - -/* UnpackItemEndCheck */ -static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) { - if (unlikely(retval)) { - Py_DECREF(retval); - __Pyx_RaiseTooManyValuesError(expected); - return -1; - } else { - return __Pyx_IterFinish(); - } - return 0; -} - -/* RaiseNoneIterError */ -static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable"); -} - -/* UnpackTupleError */ -static void __Pyx_UnpackTupleError(PyObject *t, Py_ssize_t index) { - if (t == Py_None) { - __Pyx_RaiseNoneNotIterableError(); - } else if (PyTuple_GET_SIZE(t) < index) { - __Pyx_RaiseNeedMoreValuesError(PyTuple_GET_SIZE(t)); - } else { - __Pyx_RaiseTooManyValuesError(index); - } -} - -/* UnpackTuple2 */ -static CYTHON_INLINE int __Pyx_unpack_tuple2_exact( - PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, int decref_tuple) { - PyObject *value1 = NULL, *value2 = NULL; -#if CYTHON_COMPILING_IN_PYPY - value1 = PySequence_ITEM(tuple, 0); if (unlikely(!value1)) goto bad; - value2 = PySequence_ITEM(tuple, 1); if (unlikely(!value2)) goto bad; -#else - value1 = PyTuple_GET_ITEM(tuple, 0); Py_INCREF(value1); - value2 = PyTuple_GET_ITEM(tuple, 1); Py_INCREF(value2); -#endif - if (decref_tuple) { - Py_DECREF(tuple); - } - *pvalue1 = value1; - *pvalue2 = value2; - return 0; -#if CYTHON_COMPILING_IN_PYPY -bad: - Py_XDECREF(value1); - Py_XDECREF(value2); - if (decref_tuple) { Py_XDECREF(tuple); } - return -1; -#endif -} -static int __Pyx_unpack_tuple2_generic(PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, - int has_known_size, int decref_tuple) { - Py_ssize_t index; - PyObject *value1 = NULL, *value2 = NULL, *iter = NULL; - iternextfunc iternext; - iter = PyObject_GetIter(tuple); - if (unlikely(!iter)) goto bad; - if (decref_tuple) { Py_DECREF(tuple); tuple = NULL; } - iternext = Py_TYPE(iter)->tp_iternext; - value1 = iternext(iter); if (unlikely(!value1)) { index = 0; goto unpacking_failed; } - value2 = iternext(iter); if (unlikely(!value2)) { index = 1; goto unpacking_failed; } - if (!has_known_size && unlikely(__Pyx_IternextUnpackEndCheck(iternext(iter), 2))) goto bad; - Py_DECREF(iter); - *pvalue1 = value1; - *pvalue2 = value2; - return 0; -unpacking_failed: - if (!has_known_size && __Pyx_IterFinish() == 0) - __Pyx_RaiseNeedMoreValuesError(index); -bad: - Py_XDECREF(iter); - Py_XDECREF(value1); - Py_XDECREF(value2); - if (decref_tuple) { Py_XDECREF(tuple); } - return -1; -} - -/* dict_iter */ -static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* iterable, int is_dict, PyObject* method_name, - Py_ssize_t* p_orig_length, int* p_source_is_dict) { - is_dict = is_dict || likely(PyDict_CheckExact(iterable)); - *p_source_is_dict = is_dict; - if (is_dict) { -#if !CYTHON_COMPILING_IN_PYPY - *p_orig_length = PyDict_Size(iterable); - Py_INCREF(iterable); - return iterable; -#elif PY_MAJOR_VERSION >= 3 - static PyObject *py_items = NULL, *py_keys = NULL, *py_values = NULL; - PyObject **pp = NULL; - if (method_name) { - const char *name = PyUnicode_AsUTF8(method_name); - if (strcmp(name, "iteritems") == 0) pp = &py_items; - else if (strcmp(name, "iterkeys") == 0) pp = &py_keys; - else if (strcmp(name, "itervalues") == 0) pp = &py_values; - if (pp) { - if (!*pp) { - *pp = PyUnicode_FromString(name + 4); - if (!*pp) - return NULL; - } - method_name = *pp; - } - } -#endif - } - *p_orig_length = 0; - if (method_name) { - PyObject* iter; - iterable = __Pyx_PyObject_CallMethod0(iterable, method_name); - if (!iterable) - return NULL; -#if !CYTHON_COMPILING_IN_PYPY - if (PyTuple_CheckExact(iterable) || PyList_CheckExact(iterable)) - return iterable; -#endif - iter = PyObject_GetIter(iterable); - Py_DECREF(iterable); - return iter; - } - return PyObject_GetIter(iterable); -} -static CYTHON_INLINE int __Pyx_dict_iter_next( - PyObject* iter_obj, CYTHON_NCP_UNUSED Py_ssize_t orig_length, CYTHON_NCP_UNUSED Py_ssize_t* ppos, - PyObject** pkey, PyObject** pvalue, PyObject** pitem, int source_is_dict) { - PyObject* next_item; -#if !CYTHON_COMPILING_IN_PYPY - if (source_is_dict) { - PyObject *key, *value; - if (unlikely(orig_length != PyDict_Size(iter_obj))) { - PyErr_SetString(PyExc_RuntimeError, "dictionary changed size during iteration"); - return -1; - } - if (unlikely(!PyDict_Next(iter_obj, ppos, &key, &value))) { - return 0; - } - if (pitem) { - PyObject* tuple = PyTuple_New(2); - if (unlikely(!tuple)) { - return -1; - } - Py_INCREF(key); - Py_INCREF(value); - PyTuple_SET_ITEM(tuple, 0, key); - PyTuple_SET_ITEM(tuple, 1, value); - *pitem = tuple; - } else { - if (pkey) { - Py_INCREF(key); - *pkey = key; - } - if (pvalue) { - Py_INCREF(value); - *pvalue = value; - } - } - return 1; - } else if (PyTuple_CheckExact(iter_obj)) { - Py_ssize_t pos = *ppos; - if (unlikely(pos >= PyTuple_GET_SIZE(iter_obj))) return 0; - *ppos = pos + 1; - next_item = PyTuple_GET_ITEM(iter_obj, pos); - Py_INCREF(next_item); - } else if (PyList_CheckExact(iter_obj)) { - Py_ssize_t pos = *ppos; - if (unlikely(pos >= PyList_GET_SIZE(iter_obj))) return 0; - *ppos = pos + 1; - next_item = PyList_GET_ITEM(iter_obj, pos); - Py_INCREF(next_item); - } else -#endif - { - next_item = PyIter_Next(iter_obj); - if (unlikely(!next_item)) { - return __Pyx_IterFinish(); - } - } - if (pitem) { - *pitem = next_item; - } else if (pkey && pvalue) { - if (__Pyx_unpack_tuple2(next_item, pkey, pvalue, source_is_dict, source_is_dict, 1)) - return -1; - } else if (pkey) { - *pkey = next_item; - } else { - *pvalue = next_item; - } - return 1; -} - -/* GetException */ -#if CYTHON_FAST_THREAD_STATE -static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) -#else -static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) -#endif -{ - PyObject *local_type, *local_value, *local_tb; -#if CYTHON_FAST_THREAD_STATE - PyObject *tmp_type, *tmp_value, *tmp_tb; - local_type = tstate->curexc_type; - local_value = tstate->curexc_value; - local_tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -#else - PyErr_Fetch(&local_type, &local_value, &local_tb); -#endif - PyErr_NormalizeException(&local_type, &local_value, &local_tb); -#if CYTHON_FAST_THREAD_STATE - if (unlikely(tstate->curexc_type)) -#else - if (unlikely(PyErr_Occurred())) -#endif - goto bad; - #if PY_MAJOR_VERSION >= 3 - if (local_tb) { - if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) - goto bad; - } - #endif - Py_XINCREF(local_tb); - Py_XINCREF(local_type); - Py_XINCREF(local_value); - *type = local_type; - *value = local_value; - *tb = local_tb; -#if CYTHON_FAST_THREAD_STATE - #if CYTHON_USE_EXC_INFO_STACK - { - _PyErr_StackItem *exc_info = tstate->exc_info; - tmp_type = exc_info->exc_type; - tmp_value = exc_info->exc_value; - tmp_tb = exc_info->exc_traceback; - exc_info->exc_type = local_type; - exc_info->exc_value = local_value; - exc_info->exc_traceback = local_tb; - } - #else - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = local_type; - tstate->exc_value = local_value; - tstate->exc_traceback = local_tb; - #endif - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -#else - PyErr_SetExcInfo(local_type, local_value, local_tb); -#endif - return 0; -bad: - *type = 0; - *value = 0; - *tb = 0; - Py_XDECREF(local_type); - Py_XDECREF(local_value); - Py_XDECREF(local_tb); - return -1; -} - -/* SwapException */ -#if CYTHON_FAST_THREAD_STATE -static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - #if CYTHON_USE_EXC_INFO_STACK - _PyErr_StackItem *exc_info = tstate->exc_info; - tmp_type = exc_info->exc_type; - tmp_value = exc_info->exc_value; - tmp_tb = exc_info->exc_traceback; - exc_info->exc_type = *type; - exc_info->exc_value = *value; - exc_info->exc_traceback = *tb; - #else - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = *type; - tstate->exc_value = *value; - tstate->exc_traceback = *tb; - #endif - *type = tmp_type; - *value = tmp_value; - *tb = tmp_tb; -} -#else -static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb); - PyErr_SetExcInfo(*type, *value, *tb); - *type = tmp_type; - *value = tmp_value; - *tb = tmp_tb; -} -#endif - -/* SaveResetException */ -#if CYTHON_FAST_THREAD_STATE -static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { - #if CYTHON_USE_EXC_INFO_STACK - _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); - *type = exc_info->exc_type; - *value = exc_info->exc_value; - *tb = exc_info->exc_traceback; - #else - *type = tstate->exc_type; - *value = tstate->exc_value; - *tb = tstate->exc_traceback; - #endif - Py_XINCREF(*type); - Py_XINCREF(*value); - Py_XINCREF(*tb); -} -static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - #if CYTHON_USE_EXC_INFO_STACK - _PyErr_StackItem *exc_info = tstate->exc_info; - tmp_type = exc_info->exc_type; - tmp_value = exc_info->exc_value; - tmp_tb = exc_info->exc_traceback; - exc_info->exc_type = type; - exc_info->exc_value = value; - exc_info->exc_traceback = tb; - #else - tmp_type = tstate->exc_type; - tmp_value = tstate->exc_value; - tmp_tb = tstate->exc_traceback; - tstate->exc_type = type; - tstate->exc_value = value; - tstate->exc_traceback = tb; - #endif - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -} -#endif - -/* TypeImport */ -#ifndef __PYX_HAVE_RT_ImportType -#define __PYX_HAVE_RT_ImportType -static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name, const char *class_name, - size_t size, enum __Pyx_ImportType_CheckSize check_size) -{ - PyObject *result = 0; - char warning[200]; - Py_ssize_t basicsize; -#ifdef Py_LIMITED_API - PyObject *py_basicsize; -#endif - result = PyObject_GetAttrString(module, class_name); - if (!result) - goto bad; - if (!PyType_Check(result)) { - PyErr_Format(PyExc_TypeError, - "%.200s.%.200s is not a type object", - module_name, class_name); - goto bad; - } -#ifndef Py_LIMITED_API - basicsize = ((PyTypeObject *)result)->tp_basicsize; -#else - py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); - if (!py_basicsize) - goto bad; - basicsize = PyLong_AsSsize_t(py_basicsize); - Py_DECREF(py_basicsize); - py_basicsize = 0; - if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) - goto bad; -#endif - if ((size_t)basicsize < size) { - PyErr_Format(PyExc_ValueError, - "%.200s.%.200s size changed, may indicate binary incompatibility. " - "Expected %zd from C header, got %zd from PyObject", - module_name, class_name, size, basicsize); - goto bad; - } - if (check_size == __Pyx_ImportType_CheckSize_Error && (size_t)basicsize != size) { - PyErr_Format(PyExc_ValueError, - "%.200s.%.200s size changed, may indicate binary incompatibility. " - "Expected %zd from C header, got %zd from PyObject", - module_name, class_name, size, basicsize); - goto bad; - } - else if (check_size == __Pyx_ImportType_CheckSize_Warn && (size_t)basicsize > size) { - PyOS_snprintf(warning, sizeof(warning), - "%s.%s size changed, may indicate binary incompatibility. " - "Expected %zd from C header, got %zd from PyObject", - module_name, class_name, size, basicsize); - if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; - } - return (PyTypeObject *)result; -bad: - Py_XDECREF(result); - return NULL; -} -#endif - -/* Import */ -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { - PyObject *empty_list = 0; - PyObject *module = 0; - PyObject *global_dict = 0; - PyObject *empty_dict = 0; - PyObject *list; - #if PY_MAJOR_VERSION < 3 - PyObject *py_import; - py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); - if (!py_import) - goto bad; - #endif - if (from_list) - list = from_list; - else { - empty_list = PyList_New(0); - if (!empty_list) - goto bad; - list = empty_list; - } - global_dict = PyModule_GetDict(__pyx_m); - if (!global_dict) - goto bad; - empty_dict = PyDict_New(); - if (!empty_dict) - goto bad; - { - #if PY_MAJOR_VERSION >= 3 - if (level == -1) { - if ((1) && (strchr(__Pyx_MODULE_NAME, '.'))) { - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, 1); - if (!module) { - if (!PyErr_ExceptionMatches(PyExc_ImportError)) - goto bad; - PyErr_Clear(); - } - } - level = 0; - } - #endif - if (!module) { - #if PY_MAJOR_VERSION < 3 - PyObject *py_level = PyInt_FromLong(level); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, (PyObject *)NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, level); - #endif - } - } -bad: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(py_import); - #endif - Py_XDECREF(empty_list); - Py_XDECREF(empty_dict); - return module; -} - -/* ImportFrom */ -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { - PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); - if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Format(PyExc_ImportError, - #if PY_MAJOR_VERSION < 3 - "cannot import name %.230s", PyString_AS_STRING(name)); - #else - "cannot import name %S", name); - #endif - } - return value; -} - -/* PyDictVersioning */ -#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { - PyObject *dict = Py_TYPE(obj)->tp_dict; - return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; -} -static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { - PyObject **dictptr = NULL; - Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; - if (offset) { -#if CYTHON_COMPILING_IN_CPYTHON - dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); -#else - dictptr = _PyObject_GetDictPtr(obj); -#endif - } - return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; -} -static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { - PyObject *dict = Py_TYPE(obj)->tp_dict; - if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) - return 0; - return obj_dict_version == __Pyx_get_object_dict_version(obj); -} -#endif - -/* GetModuleGlobalName */ -#if CYTHON_USE_DICT_VERSIONS -static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) -#else -static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) -#endif -{ - PyObject *result; -#if !CYTHON_AVOID_BORROWED_REFS -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 - result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); - __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) - if (likely(result)) { - return __Pyx_NewRef(result); - } else if (unlikely(PyErr_Occurred())) { - return NULL; - } -#else - result = PyDict_GetItem(__pyx_d, name); - __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) - if (likely(result)) { - return __Pyx_NewRef(result); - } -#endif -#else - result = PyObject_GetItem(__pyx_d, name); - __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) - if (likely(result)) { - return __Pyx_NewRef(result); - } - PyErr_Clear(); -#endif - return __Pyx_GetBuiltinName(name); -} - -/* CLineInTraceback */ -#ifndef CYTHON_CLINE_IN_TRACEBACK -static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int c_line) { - PyObject *use_cline; - PyObject *ptype, *pvalue, *ptraceback; -#if CYTHON_COMPILING_IN_CPYTHON - PyObject **cython_runtime_dict; -#endif - if (unlikely(!__pyx_cython_runtime)) { - return c_line; - } - __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); -#if CYTHON_COMPILING_IN_CPYTHON - cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); - if (likely(cython_runtime_dict)) { - __PYX_PY_DICT_LOOKUP_IF_MODIFIED( - use_cline, *cython_runtime_dict, - __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) - } else -#endif - { - PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); - if (use_cline_obj) { - use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; - Py_DECREF(use_cline_obj); - } else { - PyErr_Clear(); - use_cline = NULL; - } - } - if (!use_cline) { - c_line = 0; - PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); - } - else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { - c_line = 0; - } - __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); - return c_line; -} -#endif - -/* CodeObjectCache */ -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { - int start = 0, mid = 0, end = count - 1; - if (end >= 0 && code_line > entries[end].code_line) { - return count; - } - while (start < end) { - mid = start + (end - start) / 2; - if (code_line < entries[mid].code_line) { - end = mid; - } else if (code_line > entries[mid].code_line) { - start = mid + 1; - } else { - return mid; - } - } - if (code_line <= entries[mid].code_line) { - return mid; - } else { - return mid + 1; - } -} -static PyCodeObject *__pyx_find_code_object(int code_line) { - PyCodeObject* code_object; - int pos; - if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { - return NULL; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { - return NULL; - } - code_object = __pyx_code_cache.entries[pos].code_object; - Py_INCREF(code_object); - return code_object; -} -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { - int pos, i; - __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; - if (unlikely(!code_line)) { - return; - } - if (unlikely(!entries)) { - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); - if (likely(entries)) { - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = 64; - __pyx_code_cache.count = 1; - entries[0].code_line = code_line; - entries[0].code_object = code_object; - Py_INCREF(code_object); - } - return; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { - PyCodeObject* tmp = entries[pos].code_object; - entries[pos].code_object = code_object; - Py_DECREF(tmp); - return; - } - if (__pyx_code_cache.count == __pyx_code_cache.max_count) { - int new_max = __pyx_code_cache.max_count + 64; - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( - __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry)); - if (unlikely(!entries)) { - return; - } - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = new_max; - } - for (i=__pyx_code_cache.count; i>pos; i--) { - entries[i] = entries[i-1]; - } - entries[pos].code_line = code_line; - entries[pos].code_object = code_object; - __pyx_code_cache.count++; - Py_INCREF(code_object); -} - -/* AddTraceback */ -#include "compile.h" -#include "frameobject.h" -#include "traceback.h" -static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( - const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; - #if PY_MAJOR_VERSION < 3 - py_srcfile = PyString_FromString(filename); - #else - py_srcfile = PyUnicode_FromString(filename); - #endif - if (!py_srcfile) goto bad; - if (c_line) { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #else - py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #endif - } - else { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromString(funcname); - #else - py_funcname = PyUnicode_FromString(funcname); - #endif - } - if (!py_funcname) goto bad; - py_code = __Pyx_PyCode_New( - 0, - 0, - 0, - 0, - 0, - __pyx_empty_bytes, /*PyObject *code,*/ - __pyx_empty_tuple, /*PyObject *consts,*/ - __pyx_empty_tuple, /*PyObject *names,*/ - __pyx_empty_tuple, /*PyObject *varnames,*/ - __pyx_empty_tuple, /*PyObject *freevars,*/ - __pyx_empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - py_line, - __pyx_empty_bytes /*PyObject *lnotab*/ - ); - Py_DECREF(py_srcfile); - Py_DECREF(py_funcname); - return py_code; -bad: - Py_XDECREF(py_srcfile); - Py_XDECREF(py_funcname); - return NULL; -} -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyFrameObject *py_frame = 0; - PyThreadState *tstate = __Pyx_PyThreadState_Current; - if (c_line) { - c_line = __Pyx_CLineForTraceback(tstate, c_line); - } - py_code = __pyx_find_code_object(c_line ? -c_line : py_line); - if (!py_code) { - py_code = __Pyx_CreateCodeObjectForTraceback( - funcname, c_line, py_line, filename); - if (!py_code) goto bad; - __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); - } - py_frame = PyFrame_New( - tstate, /*PyThreadState *tstate,*/ - py_code, /*PyCodeObject *code,*/ - __pyx_d, /*PyObject *globals,*/ - 0 /*PyObject *locals*/ - ); - if (!py_frame) goto bad; - __Pyx_PyFrame_SetLineNumber(py_frame, py_line); - PyTraceBack_Here(py_frame); -bad: - Py_XDECREF(py_code); - Py_XDECREF(py_frame); -} - -/* CIntToPy */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { - const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(long) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { - return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); -#endif - } - } else { - if (sizeof(long) <= sizeof(long)) { - return PyInt_FromLong((long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { - return PyLong_FromLongLong((PY_LONG_LONG) value); -#endif - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(long), - little, !is_unsigned); - } -} - -/* CIntFromPyVerify */ -#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ - __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) -#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ - __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) -#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ - {\ - func_type value = func_value;\ - if (sizeof(target_type) < sizeof(func_type)) {\ - if (unlikely(value != (func_type) (target_type) value)) {\ - func_type zero = 0;\ - if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ - return (target_type) -1;\ - if (is_unsigned && unlikely(value < zero))\ - goto raise_neg_overflow;\ - else\ - goto raise_overflow;\ - }\ - }\ - return (target_type) value;\ - } - -/* CIntFromPy */ -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { - const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(long) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - goto raise_neg_overflow; - } - return (long) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (long) 0; - case 1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0]) - case 2: - if (8 * sizeof(long) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) { - return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); - } - } - break; - case 3: - if (8 * sizeof(long) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) { - return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); - } - } - break; - case 4: - if (8 * sizeof(long) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) { - return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); - } - } - break; - } -#endif -#if CYTHON_COMPILING_IN_CPYTHON - if (unlikely(Py_SIZE(x) < 0)) { - goto raise_neg_overflow; - } -#else - { - int result = PyObject_RichCompareBool(x, Py_False, Py_LT); - if (unlikely(result < 0)) - return (long) -1; - if (unlikely(result == 1)) - goto raise_neg_overflow; - } -#endif - if (sizeof(long) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) -#endif - } - } else { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (long) 0; - case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0])) - case 1: __PYX_VERIFY_RETURN_INT(long, digit, +digits[0]) - case -2: - if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case 2: - if (8 * sizeof(long) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case -3: - if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case 3: - if (8 * sizeof(long) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case -4: - if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case 4: - if (8 * sizeof(long) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - } -#endif - if (sizeof(long) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) -#endif - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - long val; - PyObject *v = __Pyx_PyNumber_IntOrLong(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (long) -1; - } - } else { - long val; - PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (long) -1; - val = __Pyx_PyInt_As_long(tmp); - Py_DECREF(tmp); - return val; - } -raise_overflow: - PyErr_SetString(PyExc_OverflowError, - "value too large to convert to long"); - return (long) -1; -raise_neg_overflow: - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; -} - -/* CIntFromPy */ -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { - const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(int) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - goto raise_neg_overflow; - } - return (int) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (int) 0; - case 1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0]) - case 2: - if (8 * sizeof(int) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) { - return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); - } - } - break; - case 3: - if (8 * sizeof(int) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) { - return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); - } - } - break; - case 4: - if (8 * sizeof(int) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) { - return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); - } - } - break; - } -#endif -#if CYTHON_COMPILING_IN_CPYTHON - if (unlikely(Py_SIZE(x) < 0)) { - goto raise_neg_overflow; - } -#else - { - int result = PyObject_RichCompareBool(x, Py_False, Py_LT); - if (unlikely(result < 0)) - return (int) -1; - if (unlikely(result == 1)) - goto raise_neg_overflow; - } -#endif - if (sizeof(int) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) -#endif - } - } else { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (int) 0; - case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0])) - case 1: __PYX_VERIFY_RETURN_INT(int, digit, +digits[0]) - case -2: - if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case 2: - if (8 * sizeof(int) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case -3: - if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case 3: - if (8 * sizeof(int) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case -4: - if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case 4: - if (8 * sizeof(int) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { - return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - } -#endif - if (sizeof(int) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) -#endif - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - int val; - PyObject *v = __Pyx_PyNumber_IntOrLong(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (int) -1; - } - } else { - int val; - PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (int) -1; - val = __Pyx_PyInt_As_int(tmp); - Py_DECREF(tmp); - return val; - } -raise_overflow: - PyErr_SetString(PyExc_OverflowError, - "value too large to convert to int"); - return (int) -1; -raise_neg_overflow: - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; -} - -/* FastTypeChecks */ -#if CYTHON_COMPILING_IN_CPYTHON -static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { - while (a) { - a = a->tp_base; - if (a == b) - return 1; - } - return b == &PyBaseObject_Type; -} -static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { - PyObject *mro; - if (a == b) return 1; - mro = a->tp_mro; - if (likely(mro)) { - Py_ssize_t i, n; - n = PyTuple_GET_SIZE(mro); - for (i = 0; i < n; i++) { - if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) - return 1; - } - return 0; - } - return __Pyx_InBases(a, b); -} -#if PY_MAJOR_VERSION == 2 -static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { - PyObject *exception, *value, *tb; - int res; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&exception, &value, &tb); - res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; - if (unlikely(res == -1)) { - PyErr_WriteUnraisable(err); - res = 0; - } - if (!res) { - res = PyObject_IsSubclass(err, exc_type2); - if (unlikely(res == -1)) { - PyErr_WriteUnraisable(err); - res = 0; - } - } - __Pyx_ErrRestore(exception, value, tb); - return res; -} -#else -static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { - int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; - if (!res) { - res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); - } - return res; -} -#endif -static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { - Py_ssize_t i, n; - assert(PyExceptionClass_Check(exc_type)); - n = PyTuple_GET_SIZE(tuple); -#if PY_MAJOR_VERSION >= 3 - for (i=0; ip) { - #if PY_MAJOR_VERSION < 3 - if (t->is_unicode) { - *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); - } else if (t->intern) { - *t->p = PyString_InternFromString(t->s); - } else { - *t->p = PyString_FromStringAndSize(t->s, t->n - 1); - } - #else - if (t->is_unicode | t->is_str) { - if (t->intern) { - *t->p = PyUnicode_InternFromString(t->s); - } else if (t->encoding) { - *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); - } else { - *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); - } - } else { - *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); - } - #endif - if (!*t->p) - return -1; - if (PyObject_Hash(*t->p) == -1) - return -1; - ++t; - } - return 0; -} - -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { - return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); -} -static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { - Py_ssize_t ignore; - return __Pyx_PyObject_AsStringAndSize(o, &ignore); -} -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT -#if !CYTHON_PEP393_ENABLED -static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { - char* defenc_c; - PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); - if (!defenc) return NULL; - defenc_c = PyBytes_AS_STRING(defenc); -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - { - char* end = defenc_c + PyBytes_GET_SIZE(defenc); - char* c; - for (c = defenc_c; c < end; c++) { - if ((unsigned char) (*c) >= 128) { - PyUnicode_AsASCIIString(o); - return NULL; - } - } - } -#endif - *length = PyBytes_GET_SIZE(defenc); - return defenc_c; -} -#else -static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { - if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - if (likely(PyUnicode_IS_ASCII(o))) { - *length = PyUnicode_GET_LENGTH(o); - return PyUnicode_AsUTF8(o); - } else { - PyUnicode_AsASCIIString(o); - return NULL; - } -#else - return PyUnicode_AsUTF8AndSize(o, length); -#endif -} -#endif -#endif -static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT - if ( -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - __Pyx_sys_getdefaultencoding_not_ascii && -#endif - PyUnicode_Check(o)) { - return __Pyx_PyUnicode_AsStringAndSize(o, length); - } else -#endif -#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) - if (PyByteArray_Check(o)) { - *length = PyByteArray_GET_SIZE(o); - return PyByteArray_AS_STRING(o); - } else -#endif - { - char* result; - int r = PyBytes_AsStringAndSize(o, &result, length); - if (unlikely(r < 0)) { - return NULL; - } else { - return result; - } - } -} -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { - int is_true = x == Py_True; - if (is_true | (x == Py_False) | (x == Py_None)) return is_true; - else return PyObject_IsTrue(x); -} -static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { - int retval; - if (unlikely(!x)) return -1; - retval = __Pyx_PyObject_IsTrue(x); - Py_DECREF(x); - return retval; -} -static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { -#if PY_MAJOR_VERSION >= 3 - if (PyLong_Check(result)) { - if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, - "__int__ returned non-int (type %.200s). " - "The ability to return an instance of a strict subclass of int " - "is deprecated, and may be removed in a future version of Python.", - Py_TYPE(result)->tp_name)) { - Py_DECREF(result); - return NULL; - } - return result; - } -#endif - PyErr_Format(PyExc_TypeError, - "__%.4s__ returned non-%.4s (type %.200s)", - type_name, type_name, Py_TYPE(result)->tp_name); - Py_DECREF(result); - return NULL; -} -static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { -#if CYTHON_USE_TYPE_SLOTS - PyNumberMethods *m; -#endif - const char *name = NULL; - PyObject *res = NULL; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x) || PyLong_Check(x))) -#else - if (likely(PyLong_Check(x))) -#endif - return __Pyx_NewRef(x); -#if CYTHON_USE_TYPE_SLOTS - m = Py_TYPE(x)->tp_as_number; - #if PY_MAJOR_VERSION < 3 - if (m && m->nb_int) { - name = "int"; - res = m->nb_int(x); - } - else if (m && m->nb_long) { - name = "long"; - res = m->nb_long(x); - } - #else - if (likely(m && m->nb_int)) { - name = "int"; - res = m->nb_int(x); - } - #endif -#else - if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { - res = PyNumber_Int(x); - } -#endif - if (likely(res)) { -#if PY_MAJOR_VERSION < 3 - if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { -#else - if (unlikely(!PyLong_CheckExact(res))) { -#endif - return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); - } - } - else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_TypeError, - "an integer is required"); - } - return res; -} -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { - Py_ssize_t ival; - PyObject *x; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(b))) { - if (sizeof(Py_ssize_t) >= sizeof(long)) - return PyInt_AS_LONG(b); - else - return PyInt_AsSsize_t(b); - } -#endif - if (likely(PyLong_CheckExact(b))) { - #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)b)->ob_digit; - const Py_ssize_t size = Py_SIZE(b); - if (likely(__Pyx_sst_abs(size) <= 1)) { - ival = likely(size) ? digits[0] : 0; - if (size == -1) ival = -ival; - return ival; - } else { - switch (size) { - case 2: - if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { - return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case -2: - if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { - return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case 3: - if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { - return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case -3: - if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { - return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case 4: - if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { - return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case -4: - if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { - return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - } - } - #endif - return PyLong_AsSsize_t(b); - } - x = PyNumber_Index(b); - if (!x) return -1; - ival = PyInt_AsSsize_t(x); - Py_DECREF(x); - return ival; -} -static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { - return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); -} -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { - return PyInt_FromSize_t(ival); -} - - -#endif /* Py_PYTHON_H */ diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_http_writer.cp39-win_amd64.pyd b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_http_writer.cp39-win_amd64.pyd deleted file mode 100644 index 698179fc1bf83273b00916fd42464aeafda4c211..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41984 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 - if buf == NULL: - PyErr_NoMemory() - return -1 - memcpy(buf, writer.buf, writer.size) - else: - buf = PyMem_Realloc(writer.buf, size) - if buf == NULL: - PyErr_NoMemory() - return -1 - writer.buf = buf - writer.size = size - writer.buf[writer.pos] = ch - writer.pos += 1 - return 0 - - -cdef inline int _write_utf8(Writer* writer, Py_UCS4 symbol): - cdef uint64_t utf = symbol - - if utf < 0x80: - return _write_byte(writer, utf) - elif utf < 0x800: - if _write_byte(writer, (0xc0 | (utf >> 6))) < 0: - return -1 - return _write_byte(writer, (0x80 | (utf & 0x3f))) - elif 0xD800 <= utf <= 0xDFFF: - # surogate pair, ignored - return 0 - elif utf < 0x10000: - if _write_byte(writer, (0xe0 | (utf >> 12))) < 0: - return -1 - if _write_byte(writer, (0x80 | ((utf >> 6) & 0x3f))) < 0: - return -1 - return _write_byte(writer, (0x80 | (utf & 0x3f))) - elif utf > 0x10FFFF: - # symbol is too large - return 0 - else: - if _write_byte(writer, (0xf0 | (utf >> 18))) < 0: - return -1 - if _write_byte(writer, - (0x80 | ((utf >> 12) & 0x3f))) < 0: - return -1 - if _write_byte(writer, - (0x80 | ((utf >> 6) & 0x3f))) < 0: - return -1 - return _write_byte(writer, (0x80 | (utf & 0x3f))) - - -cdef inline int _write_str(Writer* writer, str s): - cdef Py_UCS4 ch - for ch in s: - if _write_utf8(writer, ch) < 0: - return -1 - - -# --------------- _serialize_headers ---------------------- - -cdef str to_str(object s): - typ = type(s) - if typ is str: - return s - elif typ is _istr: - return PyObject_Str(s) - elif not isinstance(s, str): - raise TypeError("Cannot serialize non-str key {!r}".format(s)) - else: - return str(s) - - -def _serialize_headers(str status_line, headers): - cdef Writer writer - cdef object key - cdef object val - cdef bytes ret - - _init_writer(&writer) - - try: - if _write_str(&writer, status_line) < 0: - raise - if _write_byte(&writer, b'\r') < 0: - raise - if _write_byte(&writer, b'\n') < 0: - raise - - for key, val in headers.items(): - if _write_str(&writer, to_str(key)) < 0: - raise - if _write_byte(&writer, b':') < 0: - raise - if _write_byte(&writer, b' ') < 0: - raise - if _write_str(&writer, to_str(val)) < 0: - raise - if _write_byte(&writer, b'\r') < 0: - raise - if _write_byte(&writer, b'\n') < 0: - raise - - if _write_byte(&writer, b'\r') < 0: - raise - if _write_byte(&writer, b'\n') < 0: - raise - - return PyBytes_FromStringAndSize(writer.buf, writer.pos) - finally: - _release_writer(&writer) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_websocket.c b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_websocket.c deleted file mode 100644 index f3e5c323..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_websocket.c +++ /dev/null @@ -1,3588 +0,0 @@ -/* Generated by Cython 0.29.21 */ - -#define PY_SSIZE_T_CLEAN -#include "Python.h" -#ifndef Py_PYTHON_H - #error Python headers needed to compile C extensions, please install development version of Python. -#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) - #error Cython requires Python 2.6+ or Python 3.3+. -#else -#define CYTHON_ABI "0_29_21" -#define CYTHON_HEX_VERSION 0x001D15F0 -#define CYTHON_FUTURE_DIVISION 1 -#include -#ifndef offsetof - #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) -#endif -#if !defined(WIN32) && !defined(MS_WINDOWS) - #ifndef __stdcall - #define __stdcall - #endif - #ifndef __cdecl - #define __cdecl - #endif - #ifndef __fastcall - #define __fastcall - #endif -#endif -#ifndef DL_IMPORT - #define DL_IMPORT(t) t -#endif -#ifndef DL_EXPORT - #define DL_EXPORT(t) t -#endif -#define __PYX_COMMA , -#ifndef HAVE_LONG_LONG - #if PY_VERSION_HEX >= 0x02070000 - #define HAVE_LONG_LONG - #endif -#endif -#ifndef PY_LONG_LONG - #define PY_LONG_LONG LONG_LONG -#endif -#ifndef Py_HUGE_VAL - #define Py_HUGE_VAL HUGE_VAL -#endif -#ifdef PYPY_VERSION - #define CYTHON_COMPILING_IN_PYPY 1 - #define CYTHON_COMPILING_IN_PYSTON 0 - #define CYTHON_COMPILING_IN_CPYTHON 0 - #undef CYTHON_USE_TYPE_SLOTS - #define CYTHON_USE_TYPE_SLOTS 0 - #undef CYTHON_USE_PYTYPE_LOOKUP - #define CYTHON_USE_PYTYPE_LOOKUP 0 - #if PY_VERSION_HEX < 0x03050000 - #undef CYTHON_USE_ASYNC_SLOTS - #define CYTHON_USE_ASYNC_SLOTS 0 - #elif !defined(CYTHON_USE_ASYNC_SLOTS) - #define CYTHON_USE_ASYNC_SLOTS 1 - #endif - #undef CYTHON_USE_PYLIST_INTERNALS - #define CYTHON_USE_PYLIST_INTERNALS 0 - #undef CYTHON_USE_UNICODE_INTERNALS - #define CYTHON_USE_UNICODE_INTERNALS 0 - #undef CYTHON_USE_UNICODE_WRITER - #define CYTHON_USE_UNICODE_WRITER 0 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 - #undef CYTHON_AVOID_BORROWED_REFS - #define CYTHON_AVOID_BORROWED_REFS 1 - #undef CYTHON_ASSUME_SAFE_MACROS - #define CYTHON_ASSUME_SAFE_MACROS 0 - #undef CYTHON_UNPACK_METHODS - #define CYTHON_UNPACK_METHODS 0 - #undef CYTHON_FAST_THREAD_STATE - #define CYTHON_FAST_THREAD_STATE 0 - #undef CYTHON_FAST_PYCALL - #define CYTHON_FAST_PYCALL 0 - #undef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT 0 - #undef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE 0 - #undef CYTHON_USE_DICT_VERSIONS - #define CYTHON_USE_DICT_VERSIONS 0 - #undef CYTHON_USE_EXC_INFO_STACK - #define CYTHON_USE_EXC_INFO_STACK 0 -#elif defined(PYSTON_VERSION) - #define CYTHON_COMPILING_IN_PYPY 0 - #define CYTHON_COMPILING_IN_PYSTON 1 - #define CYTHON_COMPILING_IN_CPYTHON 0 - #ifndef CYTHON_USE_TYPE_SLOTS - #define CYTHON_USE_TYPE_SLOTS 1 - #endif - #undef CYTHON_USE_PYTYPE_LOOKUP - #define CYTHON_USE_PYTYPE_LOOKUP 0 - #undef CYTHON_USE_ASYNC_SLOTS - #define CYTHON_USE_ASYNC_SLOTS 0 - #undef CYTHON_USE_PYLIST_INTERNALS - #define CYTHON_USE_PYLIST_INTERNALS 0 - #ifndef CYTHON_USE_UNICODE_INTERNALS - #define CYTHON_USE_UNICODE_INTERNALS 1 - #endif - #undef CYTHON_USE_UNICODE_WRITER - #define CYTHON_USE_UNICODE_WRITER 0 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 - #ifndef CYTHON_AVOID_BORROWED_REFS - #define CYTHON_AVOID_BORROWED_REFS 0 - #endif - #ifndef CYTHON_ASSUME_SAFE_MACROS - #define CYTHON_ASSUME_SAFE_MACROS 1 - #endif - #ifndef CYTHON_UNPACK_METHODS - #define CYTHON_UNPACK_METHODS 1 - #endif - #undef CYTHON_FAST_THREAD_STATE - #define CYTHON_FAST_THREAD_STATE 0 - #undef CYTHON_FAST_PYCALL - #define CYTHON_FAST_PYCALL 0 - #undef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT 0 - #undef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE 0 - #undef CYTHON_USE_DICT_VERSIONS - #define CYTHON_USE_DICT_VERSIONS 0 - #undef CYTHON_USE_EXC_INFO_STACK - #define CYTHON_USE_EXC_INFO_STACK 0 -#else - #define CYTHON_COMPILING_IN_PYPY 0 - #define CYTHON_COMPILING_IN_PYSTON 0 - #define CYTHON_COMPILING_IN_CPYTHON 1 - #ifndef CYTHON_USE_TYPE_SLOTS - #define CYTHON_USE_TYPE_SLOTS 1 - #endif - #if PY_VERSION_HEX < 0x02070000 - #undef CYTHON_USE_PYTYPE_LOOKUP - #define CYTHON_USE_PYTYPE_LOOKUP 0 - #elif !defined(CYTHON_USE_PYTYPE_LOOKUP) - #define CYTHON_USE_PYTYPE_LOOKUP 1 - #endif - #if PY_MAJOR_VERSION < 3 - #undef CYTHON_USE_ASYNC_SLOTS - #define CYTHON_USE_ASYNC_SLOTS 0 - #elif !defined(CYTHON_USE_ASYNC_SLOTS) - #define CYTHON_USE_ASYNC_SLOTS 1 - #endif - #if PY_VERSION_HEX < 0x02070000 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 - #elif !defined(CYTHON_USE_PYLONG_INTERNALS) - #define CYTHON_USE_PYLONG_INTERNALS 1 - #endif - #ifndef CYTHON_USE_PYLIST_INTERNALS - #define CYTHON_USE_PYLIST_INTERNALS 1 - #endif - #ifndef CYTHON_USE_UNICODE_INTERNALS - #define CYTHON_USE_UNICODE_INTERNALS 1 - #endif - #if PY_VERSION_HEX < 0x030300F0 - #undef CYTHON_USE_UNICODE_WRITER - #define CYTHON_USE_UNICODE_WRITER 0 - #elif !defined(CYTHON_USE_UNICODE_WRITER) - #define CYTHON_USE_UNICODE_WRITER 1 - #endif - #ifndef CYTHON_AVOID_BORROWED_REFS - #define CYTHON_AVOID_BORROWED_REFS 0 - #endif - #ifndef CYTHON_ASSUME_SAFE_MACROS - #define CYTHON_ASSUME_SAFE_MACROS 1 - #endif - #ifndef CYTHON_UNPACK_METHODS - #define CYTHON_UNPACK_METHODS 1 - #endif - #ifndef CYTHON_FAST_THREAD_STATE - #define CYTHON_FAST_THREAD_STATE 1 - #endif - #ifndef CYTHON_FAST_PYCALL - #define CYTHON_FAST_PYCALL 1 - #endif - #ifndef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) - #endif - #ifndef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1) - #endif - #ifndef CYTHON_USE_DICT_VERSIONS - #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1) - #endif - #ifndef CYTHON_USE_EXC_INFO_STACK - #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) - #endif -#endif -#if !defined(CYTHON_FAST_PYCCALL) -#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) -#endif -#if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #undef SHIFT - #undef BASE - #undef MASK - #ifdef SIZEOF_VOID_P - enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; - #endif -#endif -#ifndef __has_attribute - #define __has_attribute(x) 0 -#endif -#ifndef __has_cpp_attribute - #define __has_cpp_attribute(x) 0 -#endif -#ifndef CYTHON_RESTRICT - #if defined(__GNUC__) - #define CYTHON_RESTRICT __restrict__ - #elif defined(_MSC_VER) && _MSC_VER >= 1400 - #define CYTHON_RESTRICT __restrict - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_RESTRICT restrict - #else - #define CYTHON_RESTRICT - #endif -#endif -#ifndef CYTHON_UNUSED -# if defined(__GNUC__) -# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -#endif -#ifndef CYTHON_MAYBE_UNUSED_VAR -# if defined(__cplusplus) - template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { } -# else -# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x) -# endif -#endif -#ifndef CYTHON_NCP_UNUSED -# if CYTHON_COMPILING_IN_CPYTHON -# define CYTHON_NCP_UNUSED -# else -# define CYTHON_NCP_UNUSED CYTHON_UNUSED -# endif -#endif -#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) -#ifdef _MSC_VER - #ifndef _MSC_STDINT_H_ - #if _MSC_VER < 1300 - typedef unsigned char uint8_t; - typedef unsigned int uint32_t; - #else - typedef unsigned __int8 uint8_t; - typedef unsigned __int32 uint32_t; - #endif - #endif -#else - #include -#endif -#ifndef CYTHON_FALLTHROUGH - #if defined(__cplusplus) && __cplusplus >= 201103L - #if __has_cpp_attribute(fallthrough) - #define CYTHON_FALLTHROUGH [[fallthrough]] - #elif __has_cpp_attribute(clang::fallthrough) - #define CYTHON_FALLTHROUGH [[clang::fallthrough]] - #elif __has_cpp_attribute(gnu::fallthrough) - #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] - #endif - #endif - #ifndef CYTHON_FALLTHROUGH - #if __has_attribute(fallthrough) - #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) - #else - #define CYTHON_FALLTHROUGH - #endif - #endif - #if defined(__clang__ ) && defined(__apple_build_version__) - #if __apple_build_version__ < 7000000 - #undef CYTHON_FALLTHROUGH - #define CYTHON_FALLTHROUGH - #endif - #endif -#endif - -#ifndef CYTHON_INLINE - #if defined(__clang__) - #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) - #elif defined(__GNUC__) - #define CYTHON_INLINE __inline__ - #elif defined(_MSC_VER) - #define CYTHON_INLINE __inline - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_INLINE inline - #else - #define CYTHON_INLINE - #endif -#endif - -#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) - #define Py_OptimizeFlag 0 -#endif -#define __PYX_BUILD_PY_SSIZE_T "n" -#define CYTHON_FORMAT_SSIZE_T "z" -#if PY_MAJOR_VERSION < 3 - #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyClass_Type -#else - #define __Pyx_BUILTIN_MODULE_NAME "builtins" -#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2 - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) -#else - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) -#endif - #define __Pyx_DefaultClassType PyType_Type -#endif -#ifndef Py_TPFLAGS_CHECKTYPES - #define Py_TPFLAGS_CHECKTYPES 0 -#endif -#ifndef Py_TPFLAGS_HAVE_INDEX - #define Py_TPFLAGS_HAVE_INDEX 0 -#endif -#ifndef Py_TPFLAGS_HAVE_NEWBUFFER - #define Py_TPFLAGS_HAVE_NEWBUFFER 0 -#endif -#ifndef Py_TPFLAGS_HAVE_FINALIZE - #define Py_TPFLAGS_HAVE_FINALIZE 0 -#endif -#ifndef METH_STACKLESS - #define METH_STACKLESS 0 -#endif -#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) - #ifndef METH_FASTCALL - #define METH_FASTCALL 0x80 - #endif - typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); - typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, - Py_ssize_t nargs, PyObject *kwnames); -#else - #define __Pyx_PyCFunctionFast _PyCFunctionFast - #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords -#endif -#if CYTHON_FAST_PYCCALL -#define __Pyx_PyFastCFunction_Check(func)\ - ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))))) -#else -#define __Pyx_PyFastCFunction_Check(func) 0 -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) - #define PyObject_Malloc(s) PyMem_Malloc(s) - #define PyObject_Free(p) PyMem_Free(p) - #define PyObject_Realloc(p) PyMem_Realloc(p) -#endif -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1 - #define PyMem_RawMalloc(n) PyMem_Malloc(n) - #define PyMem_RawRealloc(p, n) PyMem_Realloc(p, n) - #define PyMem_RawFree(p) PyMem_Free(p) -#endif -#if CYTHON_COMPILING_IN_PYSTON - #define __Pyx_PyCode_HasFreeVars(co) PyCode_HasFreeVars(co) - #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno) -#else - #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) - #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) -#endif -#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000 - #define __Pyx_PyThreadState_Current PyThreadState_GET() -#elif PY_VERSION_HEX >= 0x03060000 - #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() -#elif PY_VERSION_HEX >= 0x03000000 - #define __Pyx_PyThreadState_Current PyThreadState_GET() -#else - #define __Pyx_PyThreadState_Current _PyThreadState_Current -#endif -#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) -#include "pythread.h" -#define Py_tss_NEEDS_INIT 0 -typedef int Py_tss_t; -static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { - *key = PyThread_create_key(); - return 0; -} -static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { - Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); - *key = Py_tss_NEEDS_INIT; - return key; -} -static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { - PyObject_Free(key); -} -static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { - return *key != Py_tss_NEEDS_INIT; -} -static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { - PyThread_delete_key(*key); - *key = Py_tss_NEEDS_INIT; -} -static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { - return PyThread_set_key_value(*key, value); -} -static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { - return PyThread_get_key_value(*key); -} -#endif -#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized) -#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) -#else -#define __Pyx_PyDict_NewPresized(n) PyDict_New() -#endif -#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION - #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) -#else - #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) -#endif -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS -#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) -#else -#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name) -#endif -#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) - #define CYTHON_PEP393_ENABLED 1 - #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ - 0 : _PyUnicode_Ready((PyObject *)(op))) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) - #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) - #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) - #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) - #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) - #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, ch) - #if defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE) - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) - #else - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u)) - #endif -#else - #define CYTHON_PEP393_ENABLED 0 - #define PyUnicode_1BYTE_KIND 1 - #define PyUnicode_2BYTE_KIND 2 - #define PyUnicode_4BYTE_KIND 4 - #define __Pyx_PyUnicode_READY(op) (0) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) - #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111) - #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) - #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) - #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) - #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = ch) - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) -#endif -#if CYTHON_COMPILING_IN_PYPY - #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) -#else - #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ - PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains) - #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check) - #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format) - #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) -#endif -#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) -#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) -#else - #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) -#endif -#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) - #define PyObject_ASCII(o) PyObject_Repr(o) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBaseString_Type PyUnicode_Type - #define PyStringObject PyUnicodeObject - #define PyString_Type PyUnicode_Type - #define PyString_Check PyUnicode_Check - #define PyString_CheckExact PyUnicode_CheckExact -#ifndef PyObject_Unicode - #define PyObject_Unicode PyObject_Str -#endif -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) - #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) -#else - #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) - #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) -#endif -#ifndef PySet_CheckExact - #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) -#endif -#if PY_VERSION_HEX >= 0x030900A4 - #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt) - #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size) -#else - #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt) - #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size) -#endif -#if CYTHON_ASSUME_SAFE_MACROS - #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) -#else - #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyIntObject PyLongObject - #define PyInt_Type PyLong_Type - #define PyInt_Check(op) PyLong_Check(op) - #define PyInt_CheckExact(op) PyLong_CheckExact(op) - #define PyInt_FromString PyLong_FromString - #define PyInt_FromUnicode PyLong_FromUnicode - #define PyInt_FromLong PyLong_FromLong - #define PyInt_FromSize_t PyLong_FromSize_t - #define PyInt_FromSsize_t PyLong_FromSsize_t - #define PyInt_AsLong PyLong_AsLong - #define PyInt_AS_LONG PyLong_AS_LONG - #define PyInt_AsSsize_t PyLong_AsSsize_t - #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask - #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask - #define PyNumber_Int PyNumber_Long -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBoolObject PyLongObject -#endif -#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY - #ifndef PyUnicode_InternFromString - #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) - #endif -#endif -#if PY_VERSION_HEX < 0x030200A4 - typedef long Py_hash_t; - #define __Pyx_PyInt_FromHash_t PyInt_FromLong - #define __Pyx_PyInt_AsHash_t PyInt_AsLong -#else - #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t - #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyMethod_New(func, self, klass) ((self) ? ((void)(klass), PyMethod_New(func, self)) : __Pyx_NewRef(func)) -#else - #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) -#endif -#if CYTHON_USE_ASYNC_SLOTS - #if PY_VERSION_HEX >= 0x030500B1 - #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods - #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) - #else - #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) - #endif -#else - #define __Pyx_PyType_AsAsync(obj) NULL -#endif -#ifndef __Pyx_PyAsyncMethodsStruct - typedef struct { - unaryfunc am_await; - unaryfunc am_aiter; - unaryfunc am_anext; - } __Pyx_PyAsyncMethodsStruct; -#endif - -#if defined(WIN32) || defined(MS_WINDOWS) - #define _USE_MATH_DEFINES -#endif -#include -#ifdef NAN -#define __PYX_NAN() ((float) NAN) -#else -static CYTHON_INLINE float __PYX_NAN() { - float value; - memset(&value, 0xFF, sizeof(value)); - return value; -} -#endif -#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) -#define __Pyx_truncl trunc -#else -#define __Pyx_truncl truncl -#endif - -#define __PYX_MARK_ERR_POS(f_index, lineno) \ - { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; } -#define __PYX_ERR(f_index, lineno, Ln_error) \ - { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; } - -#ifndef __PYX_EXTERN_C - #ifdef __cplusplus - #define __PYX_EXTERN_C extern "C" - #else - #define __PYX_EXTERN_C extern - #endif -#endif - -#define __PYX_HAVE__aiohttp___websocket -#define __PYX_HAVE_API__aiohttp___websocket -/* Early includes */ -#include -#include -#include "pythread.h" -#include -#ifdef _OPENMP -#include -#endif /* _OPENMP */ - -#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) -#define CYTHON_WITHOUT_ASSERTIONS -#endif - -typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; - const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; - -#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 -#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 -#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) -#define __PYX_DEFAULT_STRING_ENCODING "" -#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString -#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#define __Pyx_uchar_cast(c) ((unsigned char)c) -#define __Pyx_long_cast(x) ((long)x) -#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ - (sizeof(type) < sizeof(Py_ssize_t)) ||\ - (sizeof(type) > sizeof(Py_ssize_t) &&\ - likely(v < (type)PY_SSIZE_T_MAX ||\ - v == (type)PY_SSIZE_T_MAX) &&\ - (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ - v == (type)PY_SSIZE_T_MIN))) ||\ - (sizeof(type) == sizeof(Py_ssize_t) &&\ - (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ - v == (type)PY_SSIZE_T_MAX))) ) -static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { - return (size_t) i < (size_t) limit; -} -#if defined (__cplusplus) && __cplusplus >= 201103L - #include - #define __Pyx_sst_abs(value) std::abs(value) -#elif SIZEOF_INT >= SIZEOF_SIZE_T - #define __Pyx_sst_abs(value) abs(value) -#elif SIZEOF_LONG >= SIZEOF_SIZE_T - #define __Pyx_sst_abs(value) labs(value) -#elif defined (_MSC_VER) - #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) -#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define __Pyx_sst_abs(value) llabs(value) -#elif defined (__GNUC__) - #define __Pyx_sst_abs(value) __builtin_llabs(value) -#else - #define __Pyx_sst_abs(value) ((value<0) ? -value : value) -#endif -static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); -static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); -#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) -#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) -#define __Pyx_PyBytes_FromString PyBytes_FromString -#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); -#if PY_MAJOR_VERSION < 3 - #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#else - #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize -#endif -#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyObject_AsWritableString(s) ((char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsWritableSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) -#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) -#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) -#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) -#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) -static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { - const Py_UNICODE *u_end = u; - while (*u_end++) ; - return (size_t)(u_end - u - 1); -} -#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) -#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode -#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode -#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) -#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) -static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); -static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); -static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); -#define __Pyx_PySequence_Tuple(obj)\ - (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); -#if CYTHON_ASSUME_SAFE_MACROS -#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) -#else -#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) -#endif -#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) -#if PY_MAJOR_VERSION >= 3 -#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) -#else -#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) -#endif -#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x)) -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII -static int __Pyx_sys_getdefaultencoding_not_ascii; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys; - PyObject* default_encoding = NULL; - PyObject* ascii_chars_u = NULL; - PyObject* ascii_chars_b = NULL; - const char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (!sys) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); - Py_DECREF(sys); - if (!default_encoding) goto bad; - default_encoding_c = PyBytes_AsString(default_encoding); - if (!default_encoding_c) goto bad; - if (strcmp(default_encoding_c, "ascii") == 0) { - __Pyx_sys_getdefaultencoding_not_ascii = 0; - } else { - char ascii_chars[128]; - int c; - for (c = 0; c < 128; c++) { - ascii_chars[c] = c; - } - __Pyx_sys_getdefaultencoding_not_ascii = 1; - ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); - if (!ascii_chars_u) goto bad; - ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); - if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { - PyErr_Format( - PyExc_ValueError, - "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", - default_encoding_c); - goto bad; - } - Py_DECREF(ascii_chars_u); - Py_DECREF(ascii_chars_b); - } - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return -1; -} -#endif -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) -#else -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT -static char* __PYX_DEFAULT_STRING_ENCODING; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys; - PyObject* default_encoding = NULL; - char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (!sys) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - Py_DECREF(sys); - if (!default_encoding) goto bad; - default_encoding_c = PyBytes_AsString(default_encoding); - if (!default_encoding_c) goto bad; - __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); - if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; - strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(default_encoding); - return -1; -} -#endif -#endif - - -/* Test for GCC > 2.95 */ -#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) -#else /* !__GNUC__ or GCC < 2.95 */ - #define likely(x) (x) - #define unlikely(x) (x) -#endif /* __GNUC__ */ -static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } - -static PyObject *__pyx_m = NULL; -static PyObject *__pyx_d; -static PyObject *__pyx_b; -static PyObject *__pyx_cython_runtime = NULL; -static PyObject *__pyx_empty_tuple; -static PyObject *__pyx_empty_bytes; -static PyObject *__pyx_empty_unicode; -static int __pyx_lineno; -static int __pyx_clineno = 0; -static const char * __pyx_cfilenm= __FILE__; -static const char *__pyx_filename; - - -static const char *__pyx_f[] = { - "aiohttp\\_websocket.pyx", - "type.pxd", - "bool.pxd", - "complex.pxd", -}; - -/*--- Type declarations ---*/ - -/* --- Runtime support code (head) --- */ -/* Refnanny.proto */ -#ifndef CYTHON_REFNANNY - #define CYTHON_REFNANNY 0 -#endif -#if CYTHON_REFNANNY - typedef struct { - void (*INCREF)(void*, PyObject*, int); - void (*DECREF)(void*, PyObject*, int); - void (*GOTREF)(void*, PyObject*, int); - void (*GIVEREF)(void*, PyObject*, int); - void* (*SetupContext)(const char*, int, const char*); - void (*FinishContext)(void**); - } __Pyx_RefNannyAPIStruct; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); - #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; -#ifdef WITH_THREAD - #define __Pyx_RefNannySetupContext(name, acquire_gil)\ - if (acquire_gil) {\ - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ - PyGILState_Release(__pyx_gilstate_save);\ - } else {\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ - } -#else - #define __Pyx_RefNannySetupContext(name, acquire_gil)\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) -#endif - #define __Pyx_RefNannyFinishContext()\ - __Pyx_RefNanny->FinishContext(&__pyx_refnanny) - #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) - #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) - #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) - #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) -#else - #define __Pyx_RefNannyDeclarations - #define __Pyx_RefNannySetupContext(name, acquire_gil) - #define __Pyx_RefNannyFinishContext() - #define __Pyx_INCREF(r) Py_INCREF(r) - #define __Pyx_DECREF(r) Py_DECREF(r) - #define __Pyx_GOTREF(r) - #define __Pyx_GIVEREF(r) - #define __Pyx_XINCREF(r) Py_XINCREF(r) - #define __Pyx_XDECREF(r) Py_XDECREF(r) - #define __Pyx_XGOTREF(r) - #define __Pyx_XGIVEREF(r) -#endif -#define __Pyx_XDECREF_SET(r, v) do {\ - PyObject *tmp = (PyObject *) r;\ - r = v; __Pyx_XDECREF(tmp);\ - } while (0) -#define __Pyx_DECREF_SET(r, v) do {\ - PyObject *tmp = (PyObject *) r;\ - r = v; __Pyx_DECREF(tmp);\ - } while (0) -#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) -#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) - -/* PyObjectGetAttrStr.proto */ -#if CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); -#else -#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) -#endif - -/* GetBuiltinName.proto */ -static PyObject *__Pyx_GetBuiltinName(PyObject *name); - -/* RaiseArgTupleInvalid.proto */ -static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, - Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); - -/* RaiseDoubleKeywords.proto */ -static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); - -/* ParseKeywords.proto */ -static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\ - PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ - const char* function_name); - -/* PyCFunctionFastCall.proto */ -#if CYTHON_FAST_PYCCALL -static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs); -#else -#define __Pyx_PyCFunction_FastCall(func, args, nargs) (assert(0), NULL) -#endif - -/* PyFunctionFastCall.proto */ -#if CYTHON_FAST_PYCALL -#define __Pyx_PyFunction_FastCall(func, args, nargs)\ - __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) -#if 1 || PY_VERSION_HEX < 0x030600B1 -static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); -#else -#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs) -#endif -#define __Pyx_BUILD_ASSERT_EXPR(cond)\ - (sizeof(char [1 - 2*!(cond)]) - 1) -#ifndef Py_MEMBER_SIZE -#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) -#endif - static size_t __pyx_pyframe_localsplus_offset = 0; - #include "frameobject.h" - #define __Pxy_PyFrame_Initialize_Offsets()\ - ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ - (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) - #define __Pyx_PyFrame_GetLocalsplus(frame)\ - (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) -#endif - -/* PyObjectCall.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); -#else -#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) -#endif - -/* PyObjectCallMethO.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); -#endif - -/* PyObjectCallOneArg.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); - -/* TypeImport.proto */ -#ifndef __PYX_HAVE_RT_ImportType_proto -#define __PYX_HAVE_RT_ImportType_proto -enum __Pyx_ImportType_CheckSize { - __Pyx_ImportType_CheckSize_Error = 0, - __Pyx_ImportType_CheckSize_Warn = 1, - __Pyx_ImportType_CheckSize_Ignore = 2 -}; -static PyTypeObject *__Pyx_ImportType(PyObject* module, const char *module_name, const char *class_name, size_t size, enum __Pyx_ImportType_CheckSize check_size); -#endif - -/* PyDictVersioning.proto */ -#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS -#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) -#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) -#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ - (version_var) = __PYX_GET_DICT_VERSION(dict);\ - (cache_var) = (value); -#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ - static PY_UINT64_T __pyx_dict_version = 0;\ - static PyObject *__pyx_dict_cached_value = NULL;\ - if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ - (VAR) = __pyx_dict_cached_value;\ - } else {\ - (VAR) = __pyx_dict_cached_value = (LOOKUP);\ - __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ - }\ -} -static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); -static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); -static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); -#else -#define __PYX_GET_DICT_VERSION(dict) (0) -#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) -#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); -#endif - -/* PyThreadStateGet.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; -#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; -#define __Pyx_PyErr_Occurred() __pyx_tstate->curexc_type -#else -#define __Pyx_PyThreadState_declare -#define __Pyx_PyThreadState_assign -#define __Pyx_PyErr_Occurred() PyErr_Occurred() -#endif - -/* PyErrFetchRestore.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) -#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) -#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) -#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) -#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) -static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); -static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); -#if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) -#else -#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) -#endif -#else -#define __Pyx_PyErr_Clear() PyErr_Clear() -#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) -#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) -#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) -#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) -#endif - -/* CLineInTraceback.proto */ -#ifdef CYTHON_CLINE_IN_TRACEBACK -#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) -#else -static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); -#endif - -/* CodeObjectCache.proto */ -typedef struct { - PyCodeObject* code_object; - int code_line; -} __Pyx_CodeObjectCacheEntry; -struct __Pyx_CodeObjectCache { - int count; - int max_count; - __Pyx_CodeObjectCacheEntry* entries; -}; -static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); -static PyCodeObject *__pyx_find_code_object(int code_line); -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); - -/* AddTraceback.proto */ -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename); - -/* CIntToPy.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); - -/* CIntFromPy.proto */ -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); - -/* CIntFromPy.proto */ -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); - -/* FastTypeChecks.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) -static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); -static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); -static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); -#else -#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) -#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) -#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) -#endif -#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) - -/* CheckBinaryVersion.proto */ -static int __Pyx_check_binary_version(void); - -/* InitStrings.proto */ -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); - - -/* Module declarations from 'cpython.version' */ - -/* Module declarations from '__builtin__' */ - -/* Module declarations from 'cpython.type' */ -static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0; - -/* Module declarations from 'libc.string' */ - -/* Module declarations from 'libc.stdio' */ - -/* Module declarations from 'cpython.object' */ - -/* Module declarations from 'cpython.ref' */ - -/* Module declarations from 'cpython.exc' */ - -/* Module declarations from 'cpython.module' */ - -/* Module declarations from 'cpython.mem' */ - -/* Module declarations from 'cpython.tuple' */ - -/* Module declarations from 'cpython.list' */ - -/* Module declarations from 'cpython.sequence' */ - -/* Module declarations from 'cpython.mapping' */ - -/* Module declarations from 'cpython.iterator' */ - -/* Module declarations from 'cpython.number' */ - -/* Module declarations from 'cpython.int' */ - -/* Module declarations from '__builtin__' */ - -/* Module declarations from 'cpython.bool' */ -static PyTypeObject *__pyx_ptype_7cpython_4bool_bool = 0; - -/* Module declarations from 'cpython.long' */ - -/* Module declarations from 'cpython.float' */ - -/* Module declarations from '__builtin__' */ - -/* Module declarations from 'cpython.complex' */ -static PyTypeObject *__pyx_ptype_7cpython_7complex_complex = 0; - -/* Module declarations from 'cpython.string' */ - -/* Module declarations from 'cpython.unicode' */ - -/* Module declarations from 'cpython.dict' */ - -/* Module declarations from 'cpython.instance' */ - -/* Module declarations from 'cpython.function' */ - -/* Module declarations from 'cpython.method' */ - -/* Module declarations from 'cpython.weakref' */ - -/* Module declarations from 'cpython.getargs' */ - -/* Module declarations from 'cpython.pythread' */ - -/* Module declarations from 'cpython.pystate' */ - -/* Module declarations from 'cpython.cobject' */ - -/* Module declarations from 'cpython.oldbuffer' */ - -/* Module declarations from 'cpython.set' */ - -/* Module declarations from 'cpython.buffer' */ - -/* Module declarations from 'cpython.bytes' */ - -/* Module declarations from 'cpython.pycapsule' */ - -/* Module declarations from 'cpython' */ - -/* Module declarations from 'libc.stdint' */ - -/* Module declarations from 'aiohttp._websocket' */ -#define __Pyx_MODULE_NAME "aiohttp._websocket" -extern int __pyx_module_is_main_aiohttp___websocket; -int __pyx_module_is_main_aiohttp___websocket = 0; - -/* Implementation of 'aiohttp._websocket' */ -static PyObject *__pyx_builtin_range; -static const char __pyx_k_i[] = "i"; -static const char __pyx_k_data[] = "data"; -static const char __pyx_k_main[] = "__main__"; -static const char __pyx_k_mask[] = "mask"; -static const char __pyx_k_name[] = "__name__"; -static const char __pyx_k_test[] = "__test__"; -static const char __pyx_k_range[] = "range"; -static const char __pyx_k_in_buf[] = "in_buf"; -static const char __pyx_k_data_len[] = "data_len"; -static const char __pyx_k_mask_buf[] = "mask_buf"; -static const char __pyx_k_uint32_msk[] = "uint32_msk"; -static const char __pyx_k_uint64_msk[] = "uint64_msk"; -static const char __pyx_k_aiohttp__websocket[] = "aiohttp._websocket"; -static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; -static const char __pyx_k_websocket_mask_cython[] = "_websocket_mask_cython"; -static const char __pyx_k_aiohttp__websocket_pyx[] = "aiohttp\\_websocket.pyx"; -static PyObject *__pyx_n_s_aiohttp__websocket; -static PyObject *__pyx_kp_s_aiohttp__websocket_pyx; -static PyObject *__pyx_n_s_cline_in_traceback; -static PyObject *__pyx_n_s_data; -static PyObject *__pyx_n_s_data_len; -static PyObject *__pyx_n_s_i; -static PyObject *__pyx_n_s_in_buf; -static PyObject *__pyx_n_s_main; -static PyObject *__pyx_n_s_mask; -static PyObject *__pyx_n_s_mask_buf; -static PyObject *__pyx_n_s_name; -static PyObject *__pyx_n_s_range; -static PyObject *__pyx_n_s_test; -static PyObject *__pyx_n_s_uint32_msk; -static PyObject *__pyx_n_s_uint64_msk; -static PyObject *__pyx_n_s_websocket_mask_cython; -static PyObject *__pyx_pf_7aiohttp_10_websocket__websocket_mask_cython(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_mask, PyObject *__pyx_v_data); /* proto */ -static PyObject *__pyx_tuple_; -static PyObject *__pyx_codeobj__2; -/* Late includes */ - -/* "aiohttp/_websocket.pyx":11 - * - * - * def _websocket_mask_cython(object mask, object data): # <<<<<<<<<<<<<< - * """Note, this function mutates its `data` argument - * """ - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_7aiohttp_10_websocket_1_websocket_mask_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_7aiohttp_10_websocket__websocket_mask_cython[] = "Note, this function mutates its `data` argument\n "; -static PyMethodDef __pyx_mdef_7aiohttp_10_websocket_1_websocket_mask_cython = {"_websocket_mask_cython", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_7aiohttp_10_websocket_1_websocket_mask_cython, METH_VARARGS|METH_KEYWORDS, __pyx_doc_7aiohttp_10_websocket__websocket_mask_cython}; -static PyObject *__pyx_pw_7aiohttp_10_websocket_1_websocket_mask_cython(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_mask = 0; - PyObject *__pyx_v_data = 0; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("_websocket_mask_cython (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_mask,&__pyx_n_s_data,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_mask)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_data)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("_websocket_mask_cython", 1, 2, 2, 1); __PYX_ERR(0, 11, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_websocket_mask_cython") < 0)) __PYX_ERR(0, 11, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_mask = values[0]; - __pyx_v_data = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("_websocket_mask_cython", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 11, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("aiohttp._websocket._websocket_mask_cython", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_7aiohttp_10_websocket__websocket_mask_cython(__pyx_self, __pyx_v_mask, __pyx_v_data); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_7aiohttp_10_websocket__websocket_mask_cython(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_mask, PyObject *__pyx_v_data) { - Py_ssize_t __pyx_v_data_len; - Py_ssize_t __pyx_v_i; - unsigned char *__pyx_v_in_buf; - unsigned char const *__pyx_v_mask_buf; - uint32_t __pyx_v_uint32_msk; - uint64_t __pyx_v_uint64_msk; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - Py_ssize_t __pyx_t_1; - int __pyx_t_2; - int __pyx_t_3; - PyObject *__pyx_t_4 = NULL; - char *__pyx_t_5; - uint64_t *__pyx_t_6; - long __pyx_t_7; - uint32_t *__pyx_t_8; - Py_ssize_t __pyx_t_9; - Py_ssize_t __pyx_t_10; - Py_ssize_t __pyx_t_11; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("_websocket_mask_cython", 0); - __Pyx_INCREF(__pyx_v_mask); - __Pyx_INCREF(__pyx_v_data); - - /* "aiohttp/_websocket.pyx":22 - * uint64_t uint64_msk - * - * assert len(mask) == 4 # <<<<<<<<<<<<<< - * - * if not isinstance(mask, bytes): - */ - #ifndef CYTHON_WITHOUT_ASSERTIONS - if (unlikely(!Py_OptimizeFlag)) { - __pyx_t_1 = PyObject_Length(__pyx_v_mask); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 22, __pyx_L1_error) - if (unlikely(!((__pyx_t_1 == 4) != 0))) { - PyErr_SetNone(PyExc_AssertionError); - __PYX_ERR(0, 22, __pyx_L1_error) - } - } - #endif - - /* "aiohttp/_websocket.pyx":24 - * assert len(mask) == 4 - * - * if not isinstance(mask, bytes): # <<<<<<<<<<<<<< - * mask = bytes(mask) - * - */ - __pyx_t_2 = PyBytes_Check(__pyx_v_mask); - __pyx_t_3 = ((!(__pyx_t_2 != 0)) != 0); - if (__pyx_t_3) { - - /* "aiohttp/_websocket.pyx":25 - * - * if not isinstance(mask, bytes): - * mask = bytes(mask) # <<<<<<<<<<<<<< - * - * if isinstance(data, bytearray): - */ - __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_v_mask); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 25, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF_SET(__pyx_v_mask, __pyx_t_4); - __pyx_t_4 = 0; - - /* "aiohttp/_websocket.pyx":24 - * assert len(mask) == 4 - * - * if not isinstance(mask, bytes): # <<<<<<<<<<<<<< - * mask = bytes(mask) - * - */ - } - - /* "aiohttp/_websocket.pyx":27 - * mask = bytes(mask) - * - * if isinstance(data, bytearray): # <<<<<<<<<<<<<< - * data = data - * else: - */ - __pyx_t_3 = PyByteArray_Check(__pyx_v_data); - __pyx_t_2 = (__pyx_t_3 != 0); - if (__pyx_t_2) { - - /* "aiohttp/_websocket.pyx":28 - * - * if isinstance(data, bytearray): - * data = data # <<<<<<<<<<<<<< - * else: - * data = bytearray(data) - */ - __pyx_t_4 = __pyx_v_data; - __Pyx_INCREF(__pyx_t_4); - __Pyx_DECREF_SET(__pyx_v_data, __pyx_t_4); - __pyx_t_4 = 0; - - /* "aiohttp/_websocket.pyx":27 - * mask = bytes(mask) - * - * if isinstance(data, bytearray): # <<<<<<<<<<<<<< - * data = data - * else: - */ - goto __pyx_L4; - } - - /* "aiohttp/_websocket.pyx":30 - * data = data - * else: - * data = bytearray(data) # <<<<<<<<<<<<<< - * - * data_len = len(data) - */ - /*else*/ { - __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyByteArray_Type)), __pyx_v_data); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 30, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF_SET(__pyx_v_data, __pyx_t_4); - __pyx_t_4 = 0; - } - __pyx_L4:; - - /* "aiohttp/_websocket.pyx":32 - * data = bytearray(data) - * - * data_len = len(data) # <<<<<<<<<<<<<< - * in_buf = PyByteArray_AsString(data) - * mask_buf = PyBytes_AsString(mask) - */ - __pyx_t_1 = PyObject_Length(__pyx_v_data); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(0, 32, __pyx_L1_error) - __pyx_v_data_len = __pyx_t_1; - - /* "aiohttp/_websocket.pyx":33 - * - * data_len = len(data) - * in_buf = PyByteArray_AsString(data) # <<<<<<<<<<<<<< - * mask_buf = PyBytes_AsString(mask) - * uint32_msk = (mask_buf)[0] - */ - if (!(likely(PyByteArray_CheckExact(__pyx_v_data))||((__pyx_v_data) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytearray", Py_TYPE(__pyx_v_data)->tp_name), 0))) __PYX_ERR(0, 33, __pyx_L1_error) - __pyx_t_5 = PyByteArray_AsString(((PyObject*)__pyx_v_data)); if (unlikely(__pyx_t_5 == ((char *)NULL))) __PYX_ERR(0, 33, __pyx_L1_error) - __pyx_v_in_buf = ((unsigned char *)__pyx_t_5); - - /* "aiohttp/_websocket.pyx":34 - * data_len = len(data) - * in_buf = PyByteArray_AsString(data) - * mask_buf = PyBytes_AsString(mask) # <<<<<<<<<<<<<< - * uint32_msk = (mask_buf)[0] - * - */ - __pyx_t_5 = PyBytes_AsString(__pyx_v_mask); if (unlikely(__pyx_t_5 == ((char *)NULL))) __PYX_ERR(0, 34, __pyx_L1_error) - __pyx_v_mask_buf = ((unsigned char const *)__pyx_t_5); - - /* "aiohttp/_websocket.pyx":35 - * in_buf = PyByteArray_AsString(data) - * mask_buf = PyBytes_AsString(mask) - * uint32_msk = (mask_buf)[0] # <<<<<<<<<<<<<< - * - * # TODO: align in_data ptr to achieve even faster speeds - */ - __pyx_v_uint32_msk = (((uint32_t *)__pyx_v_mask_buf)[0]); - - /* "aiohttp/_websocket.pyx":40 - * # does it need in python ?! malloc() always aligns to sizeof(long) bytes - * - * if sizeof(size_t) >= 8: # <<<<<<<<<<<<<< - * uint64_msk = uint32_msk - * uint64_msk = (uint64_msk << 32) | uint32_msk - */ - __pyx_t_2 = (((sizeof(size_t)) >= 8) != 0); - if (__pyx_t_2) { - - /* "aiohttp/_websocket.pyx":41 - * - * if sizeof(size_t) >= 8: - * uint64_msk = uint32_msk # <<<<<<<<<<<<<< - * uint64_msk = (uint64_msk << 32) | uint32_msk - * - */ - __pyx_v_uint64_msk = __pyx_v_uint32_msk; - - /* "aiohttp/_websocket.pyx":42 - * if sizeof(size_t) >= 8: - * uint64_msk = uint32_msk - * uint64_msk = (uint64_msk << 32) | uint32_msk # <<<<<<<<<<<<<< - * - * while data_len >= 8: - */ - __pyx_v_uint64_msk = ((__pyx_v_uint64_msk << 32) | __pyx_v_uint32_msk); - - /* "aiohttp/_websocket.pyx":44 - * uint64_msk = (uint64_msk << 32) | uint32_msk - * - * while data_len >= 8: # <<<<<<<<<<<<<< - * (in_buf)[0] ^= uint64_msk - * in_buf += 8 - */ - while (1) { - __pyx_t_2 = ((__pyx_v_data_len >= 8) != 0); - if (!__pyx_t_2) break; - - /* "aiohttp/_websocket.pyx":45 - * - * while data_len >= 8: - * (in_buf)[0] ^= uint64_msk # <<<<<<<<<<<<<< - * in_buf += 8 - * data_len -= 8 - */ - __pyx_t_6 = ((uint64_t *)__pyx_v_in_buf); - __pyx_t_7 = 0; - (__pyx_t_6[__pyx_t_7]) = ((__pyx_t_6[__pyx_t_7]) ^ __pyx_v_uint64_msk); - - /* "aiohttp/_websocket.pyx":46 - * while data_len >= 8: - * (in_buf)[0] ^= uint64_msk - * in_buf += 8 # <<<<<<<<<<<<<< - * data_len -= 8 - * - */ - __pyx_v_in_buf = (__pyx_v_in_buf + 8); - - /* "aiohttp/_websocket.pyx":47 - * (in_buf)[0] ^= uint64_msk - * in_buf += 8 - * data_len -= 8 # <<<<<<<<<<<<<< - * - * - */ - __pyx_v_data_len = (__pyx_v_data_len - 8); - } - - /* "aiohttp/_websocket.pyx":40 - * # does it need in python ?! malloc() always aligns to sizeof(long) bytes - * - * if sizeof(size_t) >= 8: # <<<<<<<<<<<<<< - * uint64_msk = uint32_msk - * uint64_msk = (uint64_msk << 32) | uint32_msk - */ - } - - /* "aiohttp/_websocket.pyx":50 - * - * - * while data_len >= 4: # <<<<<<<<<<<<<< - * (in_buf)[0] ^= uint32_msk - * in_buf += 4 - */ - while (1) { - __pyx_t_2 = ((__pyx_v_data_len >= 4) != 0); - if (!__pyx_t_2) break; - - /* "aiohttp/_websocket.pyx":51 - * - * while data_len >= 4: - * (in_buf)[0] ^= uint32_msk # <<<<<<<<<<<<<< - * in_buf += 4 - * data_len -= 4 - */ - __pyx_t_8 = ((uint32_t *)__pyx_v_in_buf); - __pyx_t_7 = 0; - (__pyx_t_8[__pyx_t_7]) = ((__pyx_t_8[__pyx_t_7]) ^ __pyx_v_uint32_msk); - - /* "aiohttp/_websocket.pyx":52 - * while data_len >= 4: - * (in_buf)[0] ^= uint32_msk - * in_buf += 4 # <<<<<<<<<<<<<< - * data_len -= 4 - * - */ - __pyx_v_in_buf = (__pyx_v_in_buf + 4); - - /* "aiohttp/_websocket.pyx":53 - * (in_buf)[0] ^= uint32_msk - * in_buf += 4 - * data_len -= 4 # <<<<<<<<<<<<<< - * - * for i in range(0, data_len): - */ - __pyx_v_data_len = (__pyx_v_data_len - 4); - } - - /* "aiohttp/_websocket.pyx":55 - * data_len -= 4 - * - * for i in range(0, data_len): # <<<<<<<<<<<<<< - * in_buf[i] ^= mask_buf[i] - */ - __pyx_t_1 = __pyx_v_data_len; - __pyx_t_9 = __pyx_t_1; - for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) { - __pyx_v_i = __pyx_t_10; - - /* "aiohttp/_websocket.pyx":56 - * - * for i in range(0, data_len): - * in_buf[i] ^= mask_buf[i] # <<<<<<<<<<<<<< - */ - __pyx_t_11 = __pyx_v_i; - (__pyx_v_in_buf[__pyx_t_11]) = ((__pyx_v_in_buf[__pyx_t_11]) ^ (__pyx_v_mask_buf[__pyx_v_i])); - } - - /* "aiohttp/_websocket.pyx":11 - * - * - * def _websocket_mask_cython(object mask, object data): # <<<<<<<<<<<<<< - * """Note, this function mutates its `data` argument - * """ - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("aiohttp._websocket._websocket_mask_cython", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_mask); - __Pyx_XDECREF(__pyx_v_data); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyMethodDef __pyx_methods[] = { - {0, 0, 0, 0} -}; - -#if PY_MAJOR_VERSION >= 3 -#if CYTHON_PEP489_MULTI_PHASE_INIT -static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ -static int __pyx_pymod_exec__websocket(PyObject* module); /*proto*/ -static PyModuleDef_Slot __pyx_moduledef_slots[] = { - {Py_mod_create, (void*)__pyx_pymod_create}, - {Py_mod_exec, (void*)__pyx_pymod_exec__websocket}, - {0, NULL} -}; -#endif - -static struct PyModuleDef __pyx_moduledef = { - PyModuleDef_HEAD_INIT, - "_websocket", - 0, /* m_doc */ - #if CYTHON_PEP489_MULTI_PHASE_INIT - 0, /* m_size */ - #else - -1, /* m_size */ - #endif - __pyx_methods /* m_methods */, - #if CYTHON_PEP489_MULTI_PHASE_INIT - __pyx_moduledef_slots, /* m_slots */ - #else - NULL, /* m_reload */ - #endif - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL /* m_free */ -}; -#endif -#ifndef CYTHON_SMALL_CODE -#if defined(__clang__) - #define CYTHON_SMALL_CODE -#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) - #define CYTHON_SMALL_CODE __attribute__((cold)) -#else - #define CYTHON_SMALL_CODE -#endif -#endif - -static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_n_s_aiohttp__websocket, __pyx_k_aiohttp__websocket, sizeof(__pyx_k_aiohttp__websocket), 0, 0, 1, 1}, - {&__pyx_kp_s_aiohttp__websocket_pyx, __pyx_k_aiohttp__websocket_pyx, sizeof(__pyx_k_aiohttp__websocket_pyx), 0, 0, 1, 0}, - {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, - {&__pyx_n_s_data, __pyx_k_data, sizeof(__pyx_k_data), 0, 0, 1, 1}, - {&__pyx_n_s_data_len, __pyx_k_data_len, sizeof(__pyx_k_data_len), 0, 0, 1, 1}, - {&__pyx_n_s_i, __pyx_k_i, sizeof(__pyx_k_i), 0, 0, 1, 1}, - {&__pyx_n_s_in_buf, __pyx_k_in_buf, sizeof(__pyx_k_in_buf), 0, 0, 1, 1}, - {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, - {&__pyx_n_s_mask, __pyx_k_mask, sizeof(__pyx_k_mask), 0, 0, 1, 1}, - {&__pyx_n_s_mask_buf, __pyx_k_mask_buf, sizeof(__pyx_k_mask_buf), 0, 0, 1, 1}, - {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, - {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1}, - {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, - {&__pyx_n_s_uint32_msk, __pyx_k_uint32_msk, sizeof(__pyx_k_uint32_msk), 0, 0, 1, 1}, - {&__pyx_n_s_uint64_msk, __pyx_k_uint64_msk, sizeof(__pyx_k_uint64_msk), 0, 0, 1, 1}, - {&__pyx_n_s_websocket_mask_cython, __pyx_k_websocket_mask_cython, sizeof(__pyx_k_websocket_mask_cython), 0, 0, 1, 1}, - {0, 0, 0, 0, 0, 0, 0} -}; -static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 55, __pyx_L1_error) - return 0; - __pyx_L1_error:; - return -1; -} - -static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); - - /* "aiohttp/_websocket.pyx":11 - * - * - * def _websocket_mask_cython(object mask, object data): # <<<<<<<<<<<<<< - * """Note, this function mutates its `data` argument - * """ - */ - __pyx_tuple_ = PyTuple_Pack(8, __pyx_n_s_mask, __pyx_n_s_data, __pyx_n_s_data_len, __pyx_n_s_i, __pyx_n_s_in_buf, __pyx_n_s_mask_buf, __pyx_n_s_uint32_msk, __pyx_n_s_uint64_msk); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 11, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple_); - __Pyx_GIVEREF(__pyx_tuple_); - __pyx_codeobj__2 = (PyObject*)__Pyx_PyCode_New(2, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple_, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_aiohttp__websocket_pyx, __pyx_n_s_websocket_mask_cython, 11, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__2)) __PYX_ERR(0, 11, __pyx_L1_error) - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_RefNannyFinishContext(); - return -1; -} - -static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { - if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error); - return 0; - __pyx_L1_error:; - return -1; -} - -static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ - -static int __Pyx_modinit_global_init_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); - /*--- Global init code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_variable_export_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); - /*--- Variable export code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_function_export_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); - /*--- Function export code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_type_init_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); - /*--- Type init code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_type_import_code(void) { - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); - /*--- Type import code ---*/ - __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type", - #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000 - sizeof(PyTypeObject), - #else - sizeof(PyHeapTypeObject), - #endif - __Pyx_ImportType_CheckSize_Warn); - if (!__pyx_ptype_7cpython_4type_type) __PYX_ERR(1, 9, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 8, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_ptype_7cpython_4bool_bool = __Pyx_ImportType(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "bool", sizeof(PyBoolObject), __Pyx_ImportType_CheckSize_Warn); - if (!__pyx_ptype_7cpython_4bool_bool) __PYX_ERR(2, 8, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_ptype_7cpython_7complex_complex = __Pyx_ImportType(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "complex", sizeof(PyComplexObject), __Pyx_ImportType_CheckSize_Warn); - if (!__pyx_ptype_7cpython_7complex_complex) __PYX_ERR(3, 15, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_RefNannyFinishContext(); - return -1; -} - -static int __Pyx_modinit_variable_import_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); - /*--- Variable import code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_function_import_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); - /*--- Function import code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - - -#ifndef CYTHON_NO_PYINIT_EXPORT -#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC -#elif PY_MAJOR_VERSION < 3 -#ifdef __cplusplus -#define __Pyx_PyMODINIT_FUNC extern "C" void -#else -#define __Pyx_PyMODINIT_FUNC void -#endif -#else -#ifdef __cplusplus -#define __Pyx_PyMODINIT_FUNC extern "C" PyObject * -#else -#define __Pyx_PyMODINIT_FUNC PyObject * -#endif -#endif - - -#if PY_MAJOR_VERSION < 3 -__Pyx_PyMODINIT_FUNC init_websocket(void) CYTHON_SMALL_CODE; /*proto*/ -__Pyx_PyMODINIT_FUNC init_websocket(void) -#else -__Pyx_PyMODINIT_FUNC PyInit__websocket(void) CYTHON_SMALL_CODE; /*proto*/ -__Pyx_PyMODINIT_FUNC PyInit__websocket(void) -#if CYTHON_PEP489_MULTI_PHASE_INIT -{ - return PyModuleDef_Init(&__pyx_moduledef); -} -static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { - #if PY_VERSION_HEX >= 0x030700A1 - static PY_INT64_T main_interpreter_id = -1; - PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); - if (main_interpreter_id == -1) { - main_interpreter_id = current_id; - return (unlikely(current_id == -1)) ? -1 : 0; - } else if (unlikely(main_interpreter_id != current_id)) - #else - static PyInterpreterState *main_interpreter = NULL; - PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; - if (!main_interpreter) { - main_interpreter = current_interpreter; - } else if (unlikely(main_interpreter != current_interpreter)) - #endif - { - PyErr_SetString( - PyExc_ImportError, - "Interpreter change detected - this module can only be loaded into one interpreter per process."); - return -1; - } - return 0; -} -static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) { - PyObject *value = PyObject_GetAttrString(spec, from_name); - int result = 0; - if (likely(value)) { - if (allow_none || value != Py_None) { - result = PyDict_SetItemString(moddict, to_name, value); - } - Py_DECREF(value); - } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Clear(); - } else { - result = -1; - } - return result; -} -static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) { - PyObject *module = NULL, *moddict, *modname; - if (__Pyx_check_single_interpreter()) - return NULL; - if (__pyx_m) - return __Pyx_NewRef(__pyx_m); - modname = PyObject_GetAttrString(spec, "name"); - if (unlikely(!modname)) goto bad; - module = PyModule_NewObject(modname); - Py_DECREF(modname); - if (unlikely(!module)) goto bad; - moddict = PyModule_GetDict(module); - if (unlikely(!moddict)) goto bad; - if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; - if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; - if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; - if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; - return module; -bad: - Py_XDECREF(module); - return NULL; -} - - -static CYTHON_SMALL_CODE int __pyx_pymod_exec__websocket(PyObject *__pyx_pyinit_module) -#endif -#endif -{ - PyObject *__pyx_t_1 = NULL; - int __pyx_lineno = 0; - const char *__pyx_filename = NULL; - int __pyx_clineno = 0; - __Pyx_RefNannyDeclarations - #if CYTHON_PEP489_MULTI_PHASE_INIT - if (__pyx_m) { - if (__pyx_m == __pyx_pyinit_module) return 0; - PyErr_SetString(PyExc_RuntimeError, "Module '_websocket' has already been imported. Re-initialisation is not supported."); - return -1; - } - #elif PY_MAJOR_VERSION >= 3 - if (__pyx_m) return __Pyx_NewRef(__pyx_m); - #endif - #if CYTHON_REFNANNY -__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); -if (!__Pyx_RefNanny) { - PyErr_Clear(); - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); - if (!__Pyx_RefNanny) - Py_FatalError("failed to import 'refnanny' module"); -} -#endif - __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit__websocket(void)", 0); - if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #ifdef __Pxy_PyFrame_Initialize_Offsets - __Pxy_PyFrame_Initialize_Offsets(); - #endif - __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) - #ifdef __Pyx_CyFunction_USED - if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_FusedFunction_USED - if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_Coroutine_USED - if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_Generator_USED - if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_AsyncGen_USED - if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_StopAsyncIteration_USED - if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - /*--- Library function declarations ---*/ - /*--- Threads initialization code ---*/ - #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS - #ifdef WITH_THREAD /* Python build with threading support? */ - PyEval_InitThreads(); - #endif - #endif - /*--- Module creation code ---*/ - #if CYTHON_PEP489_MULTI_PHASE_INIT - __pyx_m = __pyx_pyinit_module; - Py_INCREF(__pyx_m); - #else - #if PY_MAJOR_VERSION < 3 - __pyx_m = Py_InitModule4("_websocket", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); - #else - __pyx_m = PyModule_Create(&__pyx_moduledef); - #endif - if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_d); - __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_b); - __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_cython_runtime); - if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error); - /*--- Initialize various global constants etc. ---*/ - if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) - if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - if (__pyx_module_is_main_aiohttp___websocket) { - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - } - #if PY_MAJOR_VERSION >= 3 - { - PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) - if (!PyDict_GetItemString(modules, "aiohttp._websocket")) { - if (unlikely(PyDict_SetItemString(modules, "aiohttp._websocket", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error) - } - } - #endif - /*--- Builtin init code ---*/ - if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - /*--- Constants init code ---*/ - if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - /*--- Global type/function init code ---*/ - (void)__Pyx_modinit_global_init_code(); - (void)__Pyx_modinit_variable_export_code(); - (void)__Pyx_modinit_function_export_code(); - (void)__Pyx_modinit_type_init_code(); - if (unlikely(__Pyx_modinit_type_import_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error) - (void)__Pyx_modinit_variable_import_code(); - (void)__Pyx_modinit_function_import_code(); - /*--- Execution code ---*/ - #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) - if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - - /* "aiohttp/_websocket.pyx":11 - * - * - * def _websocket_mask_cython(object mask, object data): # <<<<<<<<<<<<<< - * """Note, this function mutates its `data` argument - * """ - */ - __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_7aiohttp_10_websocket_1_websocket_mask_cython, NULL, __pyx_n_s_aiohttp__websocket); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_websocket_mask_cython, __pyx_t_1) < 0) __PYX_ERR(0, 11, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "aiohttp/_websocket.pyx":1 - * from cpython cimport PyBytes_AsString # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /*--- Wrapped vars code ---*/ - - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - if (__pyx_m) { - if (__pyx_d) { - __Pyx_AddTraceback("init aiohttp._websocket", __pyx_clineno, __pyx_lineno, __pyx_filename); - } - Py_CLEAR(__pyx_m); - } else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_ImportError, "init aiohttp._websocket"); - } - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - #if CYTHON_PEP489_MULTI_PHASE_INIT - return (__pyx_m != NULL) ? 0 : -1; - #elif PY_MAJOR_VERSION >= 3 - return __pyx_m; - #else - return; - #endif -} - -/* --- Runtime support code --- */ -/* Refnanny */ -#if CYTHON_REFNANNY -static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { - PyObject *m = NULL, *p = NULL; - void *r = NULL; - m = PyImport_ImportModule(modname); - if (!m) goto end; - p = PyObject_GetAttrString(m, "RefNannyAPI"); - if (!p) goto end; - r = PyLong_AsVoidPtr(p); -end: - Py_XDECREF(p); - Py_XDECREF(m); - return (__Pyx_RefNannyAPIStruct *)r; -} -#endif - -/* PyObjectGetAttrStr */ -#if CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro)) - return tp->tp_getattro(obj, attr_name); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_getattr)) - return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); -#endif - return PyObject_GetAttr(obj, attr_name); -} -#endif - -/* GetBuiltinName */ -static PyObject *__Pyx_GetBuiltinName(PyObject *name) { - PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); - if (unlikely(!result)) { - PyErr_Format(PyExc_NameError, -#if PY_MAJOR_VERSION >= 3 - "name '%U' is not defined", name); -#else - "name '%.200s' is not defined", PyString_AS_STRING(name)); -#endif - } - return result; -} - -/* RaiseArgTupleInvalid */ -static void __Pyx_RaiseArgtupleInvalid( - const char* func_name, - int exact, - Py_ssize_t num_min, - Py_ssize_t num_max, - Py_ssize_t num_found) -{ - Py_ssize_t num_expected; - const char *more_or_less; - if (num_found < num_min) { - num_expected = num_min; - more_or_less = "at least"; - } else { - num_expected = num_max; - more_or_less = "at most"; - } - if (exact) { - more_or_less = "exactly"; - } - PyErr_Format(PyExc_TypeError, - "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", - func_name, more_or_less, num_expected, - (num_expected == 1) ? "" : "s", num_found); -} - -/* RaiseDoubleKeywords */ -static void __Pyx_RaiseDoubleKeywordsError( - const char* func_name, - PyObject* kw_name) -{ - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION >= 3 - "%s() got multiple values for keyword argument '%U'", func_name, kw_name); - #else - "%s() got multiple values for keyword argument '%s'", func_name, - PyString_AsString(kw_name)); - #endif -} - -/* ParseKeywords */ -static int __Pyx_ParseOptionalKeywords( - PyObject *kwds, - PyObject **argnames[], - PyObject *kwds2, - PyObject *values[], - Py_ssize_t num_pos_args, - const char* function_name) -{ - PyObject *key = 0, *value = 0; - Py_ssize_t pos = 0; - PyObject*** name; - PyObject*** first_kw_arg = argnames + num_pos_args; - while (PyDict_Next(kwds, &pos, &key, &value)) { - name = first_kw_arg; - while (*name && (**name != key)) name++; - if (*name) { - values[name-argnames] = value; - continue; - } - name = first_kw_arg; - #if PY_MAJOR_VERSION < 3 - if (likely(PyString_Check(key))) { - while (*name) { - if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) - && _PyString_Eq(**name, key)) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - if ((**argname == key) || ( - (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) - && _PyString_Eq(**argname, key))) { - goto arg_passed_twice; - } - argname++; - } - } - } else - #endif - if (likely(PyUnicode_Check(key))) { - while (*name) { - int cmp = (**name == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : - #endif - PyUnicode_Compare(**name, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - int cmp = (**argname == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 : - #endif - PyUnicode_Compare(**argname, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) goto arg_passed_twice; - argname++; - } - } - } else - goto invalid_keyword_type; - if (kwds2) { - if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; - } else { - goto invalid_keyword; - } - } - return 0; -arg_passed_twice: - __Pyx_RaiseDoubleKeywordsError(function_name, key); - goto bad; -invalid_keyword_type: - PyErr_Format(PyExc_TypeError, - "%.200s() keywords must be strings", function_name); - goto bad; -invalid_keyword: - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION < 3 - "%.200s() got an unexpected keyword argument '%.200s'", - function_name, PyString_AsString(key)); - #else - "%s() got an unexpected keyword argument '%U'", - function_name, key); - #endif -bad: - return -1; -} - -/* PyCFunctionFastCall */ -#if CYTHON_FAST_PYCCALL -static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) { - PyCFunctionObject *func = (PyCFunctionObject*)func_obj; - PyCFunction meth = PyCFunction_GET_FUNCTION(func); - PyObject *self = PyCFunction_GET_SELF(func); - int flags = PyCFunction_GET_FLAGS(func); - assert(PyCFunction_Check(func)); - assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))); - assert(nargs >= 0); - assert(nargs == 0 || args != NULL); - /* _PyCFunction_FastCallDict() must not be called with an exception set, - because it may clear it (directly or indirectly) and so the - caller loses its exception */ - assert(!PyErr_Occurred()); - if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) { - return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL); - } else { - return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs); - } -} -#endif - -/* PyFunctionFastCall */ -#if CYTHON_FAST_PYCALL -static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, - PyObject *globals) { - PyFrameObject *f; - PyThreadState *tstate = __Pyx_PyThreadState_Current; - PyObject **fastlocals; - Py_ssize_t i; - PyObject *result; - assert(globals != NULL); - /* XXX Perhaps we should create a specialized - PyFrame_New() that doesn't take locals, but does - take builtins without sanity checking them. - */ - assert(tstate != NULL); - f = PyFrame_New(tstate, co, globals, NULL); - if (f == NULL) { - return NULL; - } - fastlocals = __Pyx_PyFrame_GetLocalsplus(f); - for (i = 0; i < na; i++) { - Py_INCREF(*args); - fastlocals[i] = *args++; - } - result = PyEval_EvalFrameEx(f,0); - ++tstate->recursion_depth; - Py_DECREF(f); - --tstate->recursion_depth; - return result; -} -#if 1 || PY_VERSION_HEX < 0x030600B1 -static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { - PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); - PyObject *globals = PyFunction_GET_GLOBALS(func); - PyObject *argdefs = PyFunction_GET_DEFAULTS(func); - PyObject *closure; -#if PY_MAJOR_VERSION >= 3 - PyObject *kwdefs; -#endif - PyObject *kwtuple, **k; - PyObject **d; - Py_ssize_t nd; - Py_ssize_t nk; - PyObject *result; - assert(kwargs == NULL || PyDict_Check(kwargs)); - nk = kwargs ? PyDict_Size(kwargs) : 0; - if (Py_EnterRecursiveCall((char*)" while calling a Python object")) { - return NULL; - } - if ( -#if PY_MAJOR_VERSION >= 3 - co->co_kwonlyargcount == 0 && -#endif - likely(kwargs == NULL || nk == 0) && - co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { - if (argdefs == NULL && co->co_argcount == nargs) { - result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); - goto done; - } - else if (nargs == 0 && argdefs != NULL - && co->co_argcount == Py_SIZE(argdefs)) { - /* function called with no arguments, but all parameters have - a default value: use default values as arguments .*/ - args = &PyTuple_GET_ITEM(argdefs, 0); - result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); - goto done; - } - } - if (kwargs != NULL) { - Py_ssize_t pos, i; - kwtuple = PyTuple_New(2 * nk); - if (kwtuple == NULL) { - result = NULL; - goto done; - } - k = &PyTuple_GET_ITEM(kwtuple, 0); - pos = i = 0; - while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { - Py_INCREF(k[i]); - Py_INCREF(k[i+1]); - i += 2; - } - nk = i / 2; - } - else { - kwtuple = NULL; - k = NULL; - } - closure = PyFunction_GET_CLOSURE(func); -#if PY_MAJOR_VERSION >= 3 - kwdefs = PyFunction_GET_KW_DEFAULTS(func); -#endif - if (argdefs != NULL) { - d = &PyTuple_GET_ITEM(argdefs, 0); - nd = Py_SIZE(argdefs); - } - else { - d = NULL; - nd = 0; - } -#if PY_MAJOR_VERSION >= 3 - result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, - args, (int)nargs, - k, (int)nk, - d, (int)nd, kwdefs, closure); -#else - result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, - args, (int)nargs, - k, (int)nk, - d, (int)nd, closure); -#endif - Py_XDECREF(kwtuple); -done: - Py_LeaveRecursiveCall(); - return result; -} -#endif -#endif - -/* PyObjectCall */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyObject *result; - ternaryfunc call = func->ob_type->tp_call; - if (unlikely(!call)) - return PyObject_Call(func, arg, kw); - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; - result = (*call)(func, arg, kw); - Py_LeaveRecursiveCall(); - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); - } - return result; -} -#endif - -/* PyObjectCallMethO */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { - PyObject *self, *result; - PyCFunction cfunc; - cfunc = PyCFunction_GET_FUNCTION(func); - self = PyCFunction_GET_SELF(func); - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; - result = cfunc(self, arg); - Py_LeaveRecursiveCall(); - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); - } - return result; -} -#endif - -/* PyObjectCallOneArg */ -#if CYTHON_COMPILING_IN_CPYTHON -static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) { - PyObject *result; - PyObject *args = PyTuple_New(1); - if (unlikely(!args)) return NULL; - Py_INCREF(arg); - PyTuple_SET_ITEM(args, 0, arg); - result = __Pyx_PyObject_Call(func, args, NULL); - Py_DECREF(args); - return result; -} -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { -#if CYTHON_FAST_PYCALL - if (PyFunction_Check(func)) { - return __Pyx_PyFunction_FastCall(func, &arg, 1); - } -#endif - if (likely(PyCFunction_Check(func))) { - if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) { - return __Pyx_PyObject_CallMethO(func, arg); -#if CYTHON_FAST_PYCCALL - } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) { - return __Pyx_PyCFunction_FastCall(func, &arg, 1); -#endif - } - } - return __Pyx__PyObject_CallOneArg(func, arg); -} -#else -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { - PyObject *result; - PyObject *args = PyTuple_Pack(1, arg); - if (unlikely(!args)) return NULL; - result = __Pyx_PyObject_Call(func, args, NULL); - Py_DECREF(args); - return result; -} -#endif - -/* TypeImport */ -#ifndef __PYX_HAVE_RT_ImportType -#define __PYX_HAVE_RT_ImportType -static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name, const char *class_name, - size_t size, enum __Pyx_ImportType_CheckSize check_size) -{ - PyObject *result = 0; - char warning[200]; - Py_ssize_t basicsize; -#ifdef Py_LIMITED_API - PyObject *py_basicsize; -#endif - result = PyObject_GetAttrString(module, class_name); - if (!result) - goto bad; - if (!PyType_Check(result)) { - PyErr_Format(PyExc_TypeError, - "%.200s.%.200s is not a type object", - module_name, class_name); - goto bad; - } -#ifndef Py_LIMITED_API - basicsize = ((PyTypeObject *)result)->tp_basicsize; -#else - py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); - if (!py_basicsize) - goto bad; - basicsize = PyLong_AsSsize_t(py_basicsize); - Py_DECREF(py_basicsize); - py_basicsize = 0; - if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) - goto bad; -#endif - if ((size_t)basicsize < size) { - PyErr_Format(PyExc_ValueError, - "%.200s.%.200s size changed, may indicate binary incompatibility. " - "Expected %zd from C header, got %zd from PyObject", - module_name, class_name, size, basicsize); - goto bad; - } - if (check_size == __Pyx_ImportType_CheckSize_Error && (size_t)basicsize != size) { - PyErr_Format(PyExc_ValueError, - "%.200s.%.200s size changed, may indicate binary incompatibility. " - "Expected %zd from C header, got %zd from PyObject", - module_name, class_name, size, basicsize); - goto bad; - } - else if (check_size == __Pyx_ImportType_CheckSize_Warn && (size_t)basicsize > size) { - PyOS_snprintf(warning, sizeof(warning), - "%s.%s size changed, may indicate binary incompatibility. " - "Expected %zd from C header, got %zd from PyObject", - module_name, class_name, size, basicsize); - if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; - } - return (PyTypeObject *)result; -bad: - Py_XDECREF(result); - return NULL; -} -#endif - -/* PyDictVersioning */ -#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { - PyObject *dict = Py_TYPE(obj)->tp_dict; - return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; -} -static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { - PyObject **dictptr = NULL; - Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; - if (offset) { -#if CYTHON_COMPILING_IN_CPYTHON - dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); -#else - dictptr = _PyObject_GetDictPtr(obj); -#endif - } - return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; -} -static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { - PyObject *dict = Py_TYPE(obj)->tp_dict; - if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) - return 0; - return obj_dict_version == __Pyx_get_object_dict_version(obj); -} -#endif - -/* PyErrFetchRestore */ -#if CYTHON_FAST_THREAD_STATE -static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - tmp_type = tstate->curexc_type; - tmp_value = tstate->curexc_value; - tmp_tb = tstate->curexc_traceback; - tstate->curexc_type = type; - tstate->curexc_value = value; - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -} -static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { - *type = tstate->curexc_type; - *value = tstate->curexc_value; - *tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -} -#endif - -/* CLineInTraceback */ -#ifndef CYTHON_CLINE_IN_TRACEBACK -static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int c_line) { - PyObject *use_cline; - PyObject *ptype, *pvalue, *ptraceback; -#if CYTHON_COMPILING_IN_CPYTHON - PyObject **cython_runtime_dict; -#endif - if (unlikely(!__pyx_cython_runtime)) { - return c_line; - } - __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); -#if CYTHON_COMPILING_IN_CPYTHON - cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); - if (likely(cython_runtime_dict)) { - __PYX_PY_DICT_LOOKUP_IF_MODIFIED( - use_cline, *cython_runtime_dict, - __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) - } else -#endif - { - PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); - if (use_cline_obj) { - use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; - Py_DECREF(use_cline_obj); - } else { - PyErr_Clear(); - use_cline = NULL; - } - } - if (!use_cline) { - c_line = 0; - PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); - } - else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { - c_line = 0; - } - __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); - return c_line; -} -#endif - -/* CodeObjectCache */ -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { - int start = 0, mid = 0, end = count - 1; - if (end >= 0 && code_line > entries[end].code_line) { - return count; - } - while (start < end) { - mid = start + (end - start) / 2; - if (code_line < entries[mid].code_line) { - end = mid; - } else if (code_line > entries[mid].code_line) { - start = mid + 1; - } else { - return mid; - } - } - if (code_line <= entries[mid].code_line) { - return mid; - } else { - return mid + 1; - } -} -static PyCodeObject *__pyx_find_code_object(int code_line) { - PyCodeObject* code_object; - int pos; - if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { - return NULL; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { - return NULL; - } - code_object = __pyx_code_cache.entries[pos].code_object; - Py_INCREF(code_object); - return code_object; -} -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { - int pos, i; - __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; - if (unlikely(!code_line)) { - return; - } - if (unlikely(!entries)) { - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); - if (likely(entries)) { - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = 64; - __pyx_code_cache.count = 1; - entries[0].code_line = code_line; - entries[0].code_object = code_object; - Py_INCREF(code_object); - } - return; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { - PyCodeObject* tmp = entries[pos].code_object; - entries[pos].code_object = code_object; - Py_DECREF(tmp); - return; - } - if (__pyx_code_cache.count == __pyx_code_cache.max_count) { - int new_max = __pyx_code_cache.max_count + 64; - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( - __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry)); - if (unlikely(!entries)) { - return; - } - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = new_max; - } - for (i=__pyx_code_cache.count; i>pos; i--) { - entries[i] = entries[i-1]; - } - entries[pos].code_line = code_line; - entries[pos].code_object = code_object; - __pyx_code_cache.count++; - Py_INCREF(code_object); -} - -/* AddTraceback */ -#include "compile.h" -#include "frameobject.h" -#include "traceback.h" -static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( - const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; - #if PY_MAJOR_VERSION < 3 - py_srcfile = PyString_FromString(filename); - #else - py_srcfile = PyUnicode_FromString(filename); - #endif - if (!py_srcfile) goto bad; - if (c_line) { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #else - py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #endif - } - else { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromString(funcname); - #else - py_funcname = PyUnicode_FromString(funcname); - #endif - } - if (!py_funcname) goto bad; - py_code = __Pyx_PyCode_New( - 0, - 0, - 0, - 0, - 0, - __pyx_empty_bytes, /*PyObject *code,*/ - __pyx_empty_tuple, /*PyObject *consts,*/ - __pyx_empty_tuple, /*PyObject *names,*/ - __pyx_empty_tuple, /*PyObject *varnames,*/ - __pyx_empty_tuple, /*PyObject *freevars,*/ - __pyx_empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - py_line, - __pyx_empty_bytes /*PyObject *lnotab*/ - ); - Py_DECREF(py_srcfile); - Py_DECREF(py_funcname); - return py_code; -bad: - Py_XDECREF(py_srcfile); - Py_XDECREF(py_funcname); - return NULL; -} -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyFrameObject *py_frame = 0; - PyThreadState *tstate = __Pyx_PyThreadState_Current; - if (c_line) { - c_line = __Pyx_CLineForTraceback(tstate, c_line); - } - py_code = __pyx_find_code_object(c_line ? -c_line : py_line); - if (!py_code) { - py_code = __Pyx_CreateCodeObjectForTraceback( - funcname, c_line, py_line, filename); - if (!py_code) goto bad; - __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); - } - py_frame = PyFrame_New( - tstate, /*PyThreadState *tstate,*/ - py_code, /*PyCodeObject *code,*/ - __pyx_d, /*PyObject *globals,*/ - 0 /*PyObject *locals*/ - ); - if (!py_frame) goto bad; - __Pyx_PyFrame_SetLineNumber(py_frame, py_line); - PyTraceBack_Here(py_frame); -bad: - Py_XDECREF(py_code); - Py_XDECREF(py_frame); -} - -/* CIntToPy */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { - const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(long) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { - return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); -#endif - } - } else { - if (sizeof(long) <= sizeof(long)) { - return PyInt_FromLong((long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { - return PyLong_FromLongLong((PY_LONG_LONG) value); -#endif - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(long), - little, !is_unsigned); - } -} - -/* CIntFromPyVerify */ -#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ - __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) -#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ - __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) -#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ - {\ - func_type value = func_value;\ - if (sizeof(target_type) < sizeof(func_type)) {\ - if (unlikely(value != (func_type) (target_type) value)) {\ - func_type zero = 0;\ - if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ - return (target_type) -1;\ - if (is_unsigned && unlikely(value < zero))\ - goto raise_neg_overflow;\ - else\ - goto raise_overflow;\ - }\ - }\ - return (target_type) value;\ - } - -/* CIntFromPy */ -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { - const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(long) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - goto raise_neg_overflow; - } - return (long) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (long) 0; - case 1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0]) - case 2: - if (8 * sizeof(long) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) { - return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); - } - } - break; - case 3: - if (8 * sizeof(long) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) { - return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); - } - } - break; - case 4: - if (8 * sizeof(long) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) { - return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); - } - } - break; - } -#endif -#if CYTHON_COMPILING_IN_CPYTHON - if (unlikely(Py_SIZE(x) < 0)) { - goto raise_neg_overflow; - } -#else - { - int result = PyObject_RichCompareBool(x, Py_False, Py_LT); - if (unlikely(result < 0)) - return (long) -1; - if (unlikely(result == 1)) - goto raise_neg_overflow; - } -#endif - if (sizeof(long) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) -#endif - } - } else { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (long) 0; - case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0])) - case 1: __PYX_VERIFY_RETURN_INT(long, digit, +digits[0]) - case -2: - if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case 2: - if (8 * sizeof(long) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case -3: - if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case 3: - if (8 * sizeof(long) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case -4: - if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case 4: - if (8 * sizeof(long) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - } -#endif - if (sizeof(long) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) -#endif - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - long val; - PyObject *v = __Pyx_PyNumber_IntOrLong(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (long) -1; - } - } else { - long val; - PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (long) -1; - val = __Pyx_PyInt_As_long(tmp); - Py_DECREF(tmp); - return val; - } -raise_overflow: - PyErr_SetString(PyExc_OverflowError, - "value too large to convert to long"); - return (long) -1; -raise_neg_overflow: - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; -} - -/* CIntFromPy */ -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { - const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(int) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - goto raise_neg_overflow; - } - return (int) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (int) 0; - case 1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0]) - case 2: - if (8 * sizeof(int) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) { - return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); - } - } - break; - case 3: - if (8 * sizeof(int) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) { - return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); - } - } - break; - case 4: - if (8 * sizeof(int) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) { - return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); - } - } - break; - } -#endif -#if CYTHON_COMPILING_IN_CPYTHON - if (unlikely(Py_SIZE(x) < 0)) { - goto raise_neg_overflow; - } -#else - { - int result = PyObject_RichCompareBool(x, Py_False, Py_LT); - if (unlikely(result < 0)) - return (int) -1; - if (unlikely(result == 1)) - goto raise_neg_overflow; - } -#endif - if (sizeof(int) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) -#endif - } - } else { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (int) 0; - case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0])) - case 1: __PYX_VERIFY_RETURN_INT(int, digit, +digits[0]) - case -2: - if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case 2: - if (8 * sizeof(int) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case -3: - if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case 3: - if (8 * sizeof(int) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case -4: - if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case 4: - if (8 * sizeof(int) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { - return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - } -#endif - if (sizeof(int) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) -#endif - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - int val; - PyObject *v = __Pyx_PyNumber_IntOrLong(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (int) -1; - } - } else { - int val; - PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (int) -1; - val = __Pyx_PyInt_As_int(tmp); - Py_DECREF(tmp); - return val; - } -raise_overflow: - PyErr_SetString(PyExc_OverflowError, - "value too large to convert to int"); - return (int) -1; -raise_neg_overflow: - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; -} - -/* FastTypeChecks */ -#if CYTHON_COMPILING_IN_CPYTHON -static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { - while (a) { - a = a->tp_base; - if (a == b) - return 1; - } - return b == &PyBaseObject_Type; -} -static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { - PyObject *mro; - if (a == b) return 1; - mro = a->tp_mro; - if (likely(mro)) { - Py_ssize_t i, n; - n = PyTuple_GET_SIZE(mro); - for (i = 0; i < n; i++) { - if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) - return 1; - } - return 0; - } - return __Pyx_InBases(a, b); -} -#if PY_MAJOR_VERSION == 2 -static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { - PyObject *exception, *value, *tb; - int res; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&exception, &value, &tb); - res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; - if (unlikely(res == -1)) { - PyErr_WriteUnraisable(err); - res = 0; - } - if (!res) { - res = PyObject_IsSubclass(err, exc_type2); - if (unlikely(res == -1)) { - PyErr_WriteUnraisable(err); - res = 0; - } - } - __Pyx_ErrRestore(exception, value, tb); - return res; -} -#else -static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { - int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; - if (!res) { - res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); - } - return res; -} -#endif -static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { - Py_ssize_t i, n; - assert(PyExceptionClass_Check(exc_type)); - n = PyTuple_GET_SIZE(tuple); -#if PY_MAJOR_VERSION >= 3 - for (i=0; ip) { - #if PY_MAJOR_VERSION < 3 - if (t->is_unicode) { - *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); - } else if (t->intern) { - *t->p = PyString_InternFromString(t->s); - } else { - *t->p = PyString_FromStringAndSize(t->s, t->n - 1); - } - #else - if (t->is_unicode | t->is_str) { - if (t->intern) { - *t->p = PyUnicode_InternFromString(t->s); - } else if (t->encoding) { - *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); - } else { - *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); - } - } else { - *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); - } - #endif - if (!*t->p) - return -1; - if (PyObject_Hash(*t->p) == -1) - return -1; - ++t; - } - return 0; -} - -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { - return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); -} -static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { - Py_ssize_t ignore; - return __Pyx_PyObject_AsStringAndSize(o, &ignore); -} -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT -#if !CYTHON_PEP393_ENABLED -static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { - char* defenc_c; - PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); - if (!defenc) return NULL; - defenc_c = PyBytes_AS_STRING(defenc); -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - { - char* end = defenc_c + PyBytes_GET_SIZE(defenc); - char* c; - for (c = defenc_c; c < end; c++) { - if ((unsigned char) (*c) >= 128) { - PyUnicode_AsASCIIString(o); - return NULL; - } - } - } -#endif - *length = PyBytes_GET_SIZE(defenc); - return defenc_c; -} -#else -static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { - if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - if (likely(PyUnicode_IS_ASCII(o))) { - *length = PyUnicode_GET_LENGTH(o); - return PyUnicode_AsUTF8(o); - } else { - PyUnicode_AsASCIIString(o); - return NULL; - } -#else - return PyUnicode_AsUTF8AndSize(o, length); -#endif -} -#endif -#endif -static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT - if ( -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - __Pyx_sys_getdefaultencoding_not_ascii && -#endif - PyUnicode_Check(o)) { - return __Pyx_PyUnicode_AsStringAndSize(o, length); - } else -#endif -#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) - if (PyByteArray_Check(o)) { - *length = PyByteArray_GET_SIZE(o); - return PyByteArray_AS_STRING(o); - } else -#endif - { - char* result; - int r = PyBytes_AsStringAndSize(o, &result, length); - if (unlikely(r < 0)) { - return NULL; - } else { - return result; - } - } -} -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { - int is_true = x == Py_True; - if (is_true | (x == Py_False) | (x == Py_None)) return is_true; - else return PyObject_IsTrue(x); -} -static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { - int retval; - if (unlikely(!x)) return -1; - retval = __Pyx_PyObject_IsTrue(x); - Py_DECREF(x); - return retval; -} -static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { -#if PY_MAJOR_VERSION >= 3 - if (PyLong_Check(result)) { - if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, - "__int__ returned non-int (type %.200s). " - "The ability to return an instance of a strict subclass of int " - "is deprecated, and may be removed in a future version of Python.", - Py_TYPE(result)->tp_name)) { - Py_DECREF(result); - return NULL; - } - return result; - } -#endif - PyErr_Format(PyExc_TypeError, - "__%.4s__ returned non-%.4s (type %.200s)", - type_name, type_name, Py_TYPE(result)->tp_name); - Py_DECREF(result); - return NULL; -} -static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { -#if CYTHON_USE_TYPE_SLOTS - PyNumberMethods *m; -#endif - const char *name = NULL; - PyObject *res = NULL; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x) || PyLong_Check(x))) -#else - if (likely(PyLong_Check(x))) -#endif - return __Pyx_NewRef(x); -#if CYTHON_USE_TYPE_SLOTS - m = Py_TYPE(x)->tp_as_number; - #if PY_MAJOR_VERSION < 3 - if (m && m->nb_int) { - name = "int"; - res = m->nb_int(x); - } - else if (m && m->nb_long) { - name = "long"; - res = m->nb_long(x); - } - #else - if (likely(m && m->nb_int)) { - name = "int"; - res = m->nb_int(x); - } - #endif -#else - if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { - res = PyNumber_Int(x); - } -#endif - if (likely(res)) { -#if PY_MAJOR_VERSION < 3 - if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { -#else - if (unlikely(!PyLong_CheckExact(res))) { -#endif - return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); - } - } - else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_TypeError, - "an integer is required"); - } - return res; -} -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { - Py_ssize_t ival; - PyObject *x; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(b))) { - if (sizeof(Py_ssize_t) >= sizeof(long)) - return PyInt_AS_LONG(b); - else - return PyInt_AsSsize_t(b); - } -#endif - if (likely(PyLong_CheckExact(b))) { - #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)b)->ob_digit; - const Py_ssize_t size = Py_SIZE(b); - if (likely(__Pyx_sst_abs(size) <= 1)) { - ival = likely(size) ? digits[0] : 0; - if (size == -1) ival = -ival; - return ival; - } else { - switch (size) { - case 2: - if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { - return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case -2: - if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { - return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case 3: - if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { - return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case -3: - if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { - return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case 4: - if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { - return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case -4: - if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { - return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - } - } - #endif - return PyLong_AsSsize_t(b); - } - x = PyNumber_Index(b); - if (!x) return -1; - ival = PyInt_AsSsize_t(x); - Py_DECREF(x); - return ival; -} -static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { - return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); -} -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { - return PyInt_FromSize_t(ival); -} - - -#endif /* Py_PYTHON_H */ diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_websocket.cp39-win_amd64.pyd b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/_websocket.cp39-win_amd64.pyd deleted file mode 100644 index d750da718822bccc9afe56e25407bd4790f9d058..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27648 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 - else: - data = bytearray(data) - - data_len = len(data) - in_buf = PyByteArray_AsString(data) - mask_buf = PyBytes_AsString(mask) - uint32_msk = (mask_buf)[0] - - # TODO: align in_data ptr to achieve even faster speeds - # does it need in python ?! malloc() always aligns to sizeof(long) bytes - - if sizeof(size_t) >= 8: - uint64_msk = uint32_msk - uint64_msk = (uint64_msk << 32) | uint32_msk - - while data_len >= 8: - (in_buf)[0] ^= uint64_msk - in_buf += 8 - data_len -= 8 - - - while data_len >= 4: - (in_buf)[0] ^= uint32_msk - in_buf += 4 - data_len -= 4 - - for i in range(0, data_len): - in_buf[i] ^= mask_buf[i] diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/abc.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/abc.py deleted file mode 100644 index 4abfd798..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/abc.py +++ /dev/null @@ -1,200 +0,0 @@ -import asyncio -import logging -from abc import ABC, abstractmethod -from collections.abc import Sized -from http.cookies import BaseCookie, Morsel -from typing import ( - TYPE_CHECKING, - Any, - Awaitable, - Callable, - Dict, - Generator, - Iterable, - List, - Optional, - Tuple, -) - -from multidict import CIMultiDict -from yarl import URL - -from .helpers import get_running_loop -from .typedefs import LooseCookies - -if TYPE_CHECKING: # pragma: no cover - from .web_app import Application - from .web_exceptions import HTTPException - from .web_request import BaseRequest, Request - from .web_response import StreamResponse -else: - BaseRequest = Request = Application = StreamResponse = None - HTTPException = None - - -class AbstractRouter(ABC): - def __init__(self) -> None: - self._frozen = False - - def post_init(self, app: Application) -> None: - """Post init stage. - - Not an abstract method for sake of backward compatibility, - but if the router wants to be aware of the application - it can override this. - """ - - @property - def frozen(self) -> bool: - return self._frozen - - def freeze(self) -> None: - """Freeze router.""" - self._frozen = True - - @abstractmethod - async def resolve(self, request: Request) -> "AbstractMatchInfo": - """Return MATCH_INFO for given request""" - - -class AbstractMatchInfo(ABC): - @property # pragma: no branch - @abstractmethod - def handler(self) -> Callable[[Request], Awaitable[StreamResponse]]: - """Execute matched request handler""" - - @property - @abstractmethod - def expect_handler(self) -> Callable[[Request], Awaitable[None]]: - """Expect handler for 100-continue processing""" - - @property # pragma: no branch - @abstractmethod - def http_exception(self) -> Optional[HTTPException]: - """HTTPException instance raised on router's resolving, or None""" - - @abstractmethod # pragma: no branch - def get_info(self) -> Dict[str, Any]: - """Return a dict with additional info useful for introspection""" - - @property # pragma: no branch - @abstractmethod - def apps(self) -> Tuple[Application, ...]: - """Stack of nested applications. - - Top level application is left-most element. - - """ - - @abstractmethod - def add_app(self, app: Application) -> None: - """Add application to the nested apps stack.""" - - @abstractmethod - def freeze(self) -> None: - """Freeze the match info. - - The method is called after route resolution. - - After the call .add_app() is forbidden. - - """ - - -class AbstractView(ABC): - """Abstract class based view.""" - - def __init__(self, request: Request) -> None: - self._request = request - - @property - def request(self) -> Request: - """Request instance.""" - return self._request - - @abstractmethod - def __await__(self) -> Generator[Any, None, StreamResponse]: - """Execute the view handler.""" - - -class AbstractResolver(ABC): - """Abstract DNS resolver.""" - - @abstractmethod - async def resolve(self, host: str, port: int, family: int) -> List[Dict[str, Any]]: - """Return IP address for given hostname""" - - @abstractmethod - async def close(self) -> None: - """Release resolver""" - - -if TYPE_CHECKING: # pragma: no cover - IterableBase = Iterable[Morsel[str]] -else: - IterableBase = Iterable - - -class AbstractCookieJar(Sized, IterableBase): - """Abstract Cookie Jar.""" - - def __init__(self, *, loop: Optional[asyncio.AbstractEventLoop] = None) -> None: - self._loop = get_running_loop(loop) - - @abstractmethod - def clear(self) -> None: - """Clear all cookies.""" - - @abstractmethod - def update_cookies(self, cookies: LooseCookies, response_url: URL = URL()) -> None: - """Update cookies.""" - - @abstractmethod - def filter_cookies(self, request_url: URL) -> "BaseCookie[str]": - """Return the jar's cookies filtered by their attributes.""" - - -class AbstractStreamWriter(ABC): - """Abstract stream writer.""" - - buffer_size = 0 - output_size = 0 - length = 0 # type: Optional[int] - - @abstractmethod - async def write(self, chunk: bytes) -> None: - """Write chunk into stream.""" - - @abstractmethod - async def write_eof(self, chunk: bytes = b"") -> None: - """Write last chunk.""" - - @abstractmethod - async def drain(self) -> None: - """Flush the write buffer.""" - - @abstractmethod - def enable_compression(self, encoding: str = "deflate") -> None: - """Enable HTTP body compression""" - - @abstractmethod - def enable_chunking(self) -> None: - """Enable HTTP chunked mode""" - - @abstractmethod - async def write_headers( - self, status_line: str, headers: "CIMultiDict[str]" - ) -> None: - """Write HTTP headers""" - - -class AbstractAccessLogger(ABC): - """Abstract writer to access log.""" - - def __init__(self, logger: logging.Logger, log_format: str) -> None: - self.logger = logger - self.log_format = log_format - - @abstractmethod - def log(self, request: BaseRequest, response: StreamResponse, time: float) -> None: - """Emit log to logger.""" diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/base_protocol.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/base_protocol.py deleted file mode 100644 index 01e18310..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/base_protocol.py +++ /dev/null @@ -1,87 +0,0 @@ -import asyncio -from typing import Optional, cast - -from .tcp_helpers import tcp_nodelay - - -class BaseProtocol(asyncio.Protocol): - __slots__ = ( - "_loop", - "_paused", - "_drain_waiter", - "_connection_lost", - "_reading_paused", - "transport", - ) - - def __init__(self, loop: asyncio.AbstractEventLoop) -> None: - self._loop = loop # type: asyncio.AbstractEventLoop - self._paused = False - self._drain_waiter = None # type: Optional[asyncio.Future[None]] - self._connection_lost = False - self._reading_paused = False - - self.transport = None # type: Optional[asyncio.Transport] - - def pause_writing(self) -> None: - assert not self._paused - self._paused = True - - def resume_writing(self) -> None: - assert self._paused - self._paused = False - - waiter = self._drain_waiter - if waiter is not None: - self._drain_waiter = None - if not waiter.done(): - waiter.set_result(None) - - def pause_reading(self) -> None: - if not self._reading_paused and self.transport is not None: - try: - self.transport.pause_reading() - except (AttributeError, NotImplementedError, RuntimeError): - pass - self._reading_paused = True - - def resume_reading(self) -> None: - if self._reading_paused and self.transport is not None: - try: - self.transport.resume_reading() - except (AttributeError, NotImplementedError, RuntimeError): - pass - self._reading_paused = False - - def connection_made(self, transport: asyncio.BaseTransport) -> None: - tr = cast(asyncio.Transport, transport) - tcp_nodelay(tr, True) - self.transport = tr - - def connection_lost(self, exc: Optional[BaseException]) -> None: - self._connection_lost = True - # Wake up the writer if currently paused. - self.transport = None - if not self._paused: - return - waiter = self._drain_waiter - if waiter is None: - return - self._drain_waiter = None - if waiter.done(): - return - if exc is None: - waiter.set_result(None) - else: - waiter.set_exception(exc) - - async def _drain_helper(self) -> None: - if self._connection_lost: - raise ConnectionResetError("Connection lost") - if not self._paused: - return - waiter = self._drain_waiter - assert waiter is None or waiter.cancelled() - waiter = self._loop.create_future() - self._drain_waiter = waiter - await waiter diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/client.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/client.py deleted file mode 100644 index a9da8e15..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/client.py +++ /dev/null @@ -1,1275 +0,0 @@ -"""HTTP Client for asyncio.""" - -import asyncio -import base64 -import hashlib -import json -import os -import sys -import traceback -import warnings -from types import SimpleNamespace, TracebackType -from typing import ( - Any, - Awaitable, - Callable, - Coroutine, - FrozenSet, - Generator, - Generic, - Iterable, - List, - Mapping, - Optional, - Set, - Tuple, - Type, - TypeVar, - Union, -) - -import attr -from multidict import CIMultiDict, MultiDict, MultiDictProxy, istr -from yarl import URL - -from . import hdrs, http, payload -from .abc import AbstractCookieJar -from .client_exceptions import ( - ClientConnectionError as ClientConnectionError, - ClientConnectorCertificateError as ClientConnectorCertificateError, - ClientConnectorError as ClientConnectorError, - ClientConnectorSSLError as ClientConnectorSSLError, - ClientError as ClientError, - ClientHttpProxyError as ClientHttpProxyError, - ClientOSError as ClientOSError, - ClientPayloadError as ClientPayloadError, - ClientProxyConnectionError as ClientProxyConnectionError, - ClientResponseError as ClientResponseError, - ClientSSLError as ClientSSLError, - ContentTypeError as ContentTypeError, - InvalidURL as InvalidURL, - ServerConnectionError as ServerConnectionError, - ServerDisconnectedError as ServerDisconnectedError, - ServerFingerprintMismatch as ServerFingerprintMismatch, - ServerTimeoutError as ServerTimeoutError, - TooManyRedirects as TooManyRedirects, - WSServerHandshakeError as WSServerHandshakeError, -) -from .client_reqrep import ( - ClientRequest as ClientRequest, - ClientResponse as ClientResponse, - Fingerprint as Fingerprint, - RequestInfo as RequestInfo, - _merge_ssl_params, -) -from .client_ws import ClientWebSocketResponse as ClientWebSocketResponse -from .connector import ( - BaseConnector as BaseConnector, - NamedPipeConnector as NamedPipeConnector, - TCPConnector as TCPConnector, - UnixConnector as UnixConnector, -) -from .cookiejar import CookieJar -from .helpers import ( - DEBUG, - PY_36, - BasicAuth, - CeilTimeout, - TimeoutHandle, - get_running_loop, - proxies_from_env, - sentinel, - strip_auth_from_url, -) -from .http import WS_KEY, HttpVersion, WebSocketReader, WebSocketWriter -from .http_websocket import WSHandshakeError, WSMessage, ws_ext_gen, ws_ext_parse -from .streams import FlowControlDataQueue -from .tracing import Trace, TraceConfig -from .typedefs import JSONEncoder, LooseCookies, LooseHeaders, StrOrURL - -__all__ = ( - # client_exceptions - "ClientConnectionError", - "ClientConnectorCertificateError", - "ClientConnectorError", - "ClientConnectorSSLError", - "ClientError", - "ClientHttpProxyError", - "ClientOSError", - "ClientPayloadError", - "ClientProxyConnectionError", - "ClientResponseError", - "ClientSSLError", - "ContentTypeError", - "InvalidURL", - "ServerConnectionError", - "ServerDisconnectedError", - "ServerFingerprintMismatch", - "ServerTimeoutError", - "TooManyRedirects", - "WSServerHandshakeError", - # client_reqrep - "ClientRequest", - "ClientResponse", - "Fingerprint", - "RequestInfo", - # connector - "BaseConnector", - "TCPConnector", - "UnixConnector", - "NamedPipeConnector", - # client_ws - "ClientWebSocketResponse", - # client - "ClientSession", - "ClientTimeout", - "request", -) - - -try: - from ssl import SSLContext -except ImportError: # pragma: no cover - SSLContext = object # type: ignore - - -@attr.s(auto_attribs=True, frozen=True, slots=True) -class ClientTimeout: - total: Optional[float] = None - connect: Optional[float] = None - sock_read: Optional[float] = None - sock_connect: Optional[float] = None - - # pool_queue_timeout: Optional[float] = None - # dns_resolution_timeout: Optional[float] = None - # socket_connect_timeout: Optional[float] = None - # connection_acquiring_timeout: Optional[float] = None - # new_connection_timeout: Optional[float] = None - # http_header_timeout: Optional[float] = None - # response_body_timeout: Optional[float] = None - - # to create a timeout specific for a single request, either - # - create a completely new one to overwrite the default - # - or use http://www.attrs.org/en/stable/api.html#attr.evolve - # to overwrite the defaults - - -# 5 Minute default read timeout -DEFAULT_TIMEOUT = ClientTimeout(total=5 * 60) - -_RetType = TypeVar("_RetType") - - -class ClientSession: - """First-class interface for making HTTP requests.""" - - ATTRS = frozenset( - [ - "_source_traceback", - "_connector", - "requote_redirect_url", - "_loop", - "_cookie_jar", - "_connector_owner", - "_default_auth", - "_version", - "_json_serialize", - "_requote_redirect_url", - "_timeout", - "_raise_for_status", - "_auto_decompress", - "_trust_env", - "_default_headers", - "_skip_auto_headers", - "_request_class", - "_response_class", - "_ws_response_class", - "_trace_configs", - "_read_bufsize", - ] - ) - - _source_traceback = None - - def __init__( - self, - *, - connector: Optional[BaseConnector] = None, - loop: Optional[asyncio.AbstractEventLoop] = None, - cookies: Optional[LooseCookies] = None, - headers: Optional[LooseHeaders] = None, - skip_auto_headers: Optional[Iterable[str]] = None, - auth: Optional[BasicAuth] = None, - json_serialize: JSONEncoder = json.dumps, - request_class: Type[ClientRequest] = ClientRequest, - response_class: Type[ClientResponse] = ClientResponse, - ws_response_class: Type[ClientWebSocketResponse] = ClientWebSocketResponse, - version: HttpVersion = http.HttpVersion11, - cookie_jar: Optional[AbstractCookieJar] = None, - connector_owner: bool = True, - raise_for_status: bool = False, - read_timeout: Union[float, object] = sentinel, - conn_timeout: Optional[float] = None, - timeout: Union[object, ClientTimeout] = sentinel, - auto_decompress: bool = True, - trust_env: bool = False, - requote_redirect_url: bool = True, - trace_configs: Optional[List[TraceConfig]] = None, - read_bufsize: int = 2 ** 16, - ) -> None: - - if loop is None: - if connector is not None: - loop = connector._loop - - loop = get_running_loop(loop) - - if connector is None: - connector = TCPConnector(loop=loop) - - if connector._loop is not loop: - raise RuntimeError("Session and connector has to use same event loop") - - self._loop = loop - - if loop.get_debug(): - self._source_traceback = traceback.extract_stack(sys._getframe(1)) - - if cookie_jar is None: - cookie_jar = CookieJar(loop=loop) - self._cookie_jar = cookie_jar - - if cookies is not None: - self._cookie_jar.update_cookies(cookies) - - self._connector = connector # type: Optional[BaseConnector] - self._connector_owner = connector_owner - self._default_auth = auth - self._version = version - self._json_serialize = json_serialize - if timeout is sentinel: - self._timeout = DEFAULT_TIMEOUT - if read_timeout is not sentinel: - warnings.warn( - "read_timeout is deprecated, " "use timeout argument instead", - DeprecationWarning, - stacklevel=2, - ) - self._timeout = attr.evolve(self._timeout, total=read_timeout) - if conn_timeout is not None: - self._timeout = attr.evolve(self._timeout, connect=conn_timeout) - warnings.warn( - "conn_timeout is deprecated, " "use timeout argument instead", - DeprecationWarning, - stacklevel=2, - ) - else: - self._timeout = timeout # type: ignore - if read_timeout is not sentinel: - raise ValueError( - "read_timeout and timeout parameters " - "conflict, please setup " - "timeout.read" - ) - if conn_timeout is not None: - raise ValueError( - "conn_timeout and timeout parameters " - "conflict, please setup " - "timeout.connect" - ) - self._raise_for_status = raise_for_status - self._auto_decompress = auto_decompress - self._trust_env = trust_env - self._requote_redirect_url = requote_redirect_url - self._read_bufsize = read_bufsize - - # Convert to list of tuples - if headers: - real_headers = CIMultiDict(headers) # type: CIMultiDict[str] - else: - real_headers = CIMultiDict() - self._default_headers = real_headers # type: CIMultiDict[str] - if skip_auto_headers is not None: - self._skip_auto_headers = frozenset([istr(i) for i in skip_auto_headers]) - else: - self._skip_auto_headers = frozenset() - - self._request_class = request_class - self._response_class = response_class - self._ws_response_class = ws_response_class - - self._trace_configs = trace_configs or [] - for trace_config in self._trace_configs: - trace_config.freeze() - - def __init_subclass__(cls: Type["ClientSession"]) -> None: - warnings.warn( - "Inheritance class {} from ClientSession " - "is discouraged".format(cls.__name__), - DeprecationWarning, - stacklevel=2, - ) - - if DEBUG: - - def __setattr__(self, name: str, val: Any) -> None: - if name not in self.ATTRS: - warnings.warn( - "Setting custom ClientSession.{} attribute " - "is discouraged".format(name), - DeprecationWarning, - stacklevel=2, - ) - super().__setattr__(name, val) - - def __del__(self, _warnings: Any = warnings) -> None: - if not self.closed: - if PY_36: - kwargs = {"source": self} - else: - kwargs = {} - _warnings.warn( - f"Unclosed client session {self!r}", ResourceWarning, **kwargs - ) - context = {"client_session": self, "message": "Unclosed client session"} - if self._source_traceback is not None: - context["source_traceback"] = self._source_traceback - self._loop.call_exception_handler(context) - - def request( - self, method: str, url: StrOrURL, **kwargs: Any - ) -> "_RequestContextManager": - """Perform HTTP request.""" - return _RequestContextManager(self._request(method, url, **kwargs)) - - async def _request( - self, - method: str, - str_or_url: StrOrURL, - *, - params: Optional[Mapping[str, str]] = None, - data: Any = None, - json: Any = None, - cookies: Optional[LooseCookies] = None, - headers: Optional[LooseHeaders] = None, - skip_auto_headers: Optional[Iterable[str]] = None, - auth: Optional[BasicAuth] = None, - allow_redirects: bool = True, - max_redirects: int = 10, - compress: Optional[str] = None, - chunked: Optional[bool] = None, - expect100: bool = False, - raise_for_status: Optional[bool] = None, - read_until_eof: bool = True, - proxy: Optional[StrOrURL] = None, - proxy_auth: Optional[BasicAuth] = None, - timeout: Union[ClientTimeout, object] = sentinel, - verify_ssl: Optional[bool] = None, - fingerprint: Optional[bytes] = None, - ssl_context: Optional[SSLContext] = None, - ssl: Optional[Union[SSLContext, bool, Fingerprint]] = None, - proxy_headers: Optional[LooseHeaders] = None, - trace_request_ctx: Optional[SimpleNamespace] = None, - read_bufsize: Optional[int] = None, - ) -> ClientResponse: - - # NOTE: timeout clamps existing connect and read timeouts. We cannot - # set the default to None because we need to detect if the user wants - # to use the existing timeouts by setting timeout to None. - - if self.closed: - raise RuntimeError("Session is closed") - - ssl = _merge_ssl_params(ssl, verify_ssl, ssl_context, fingerprint) - - if data is not None and json is not None: - raise ValueError( - "data and json parameters can not be used at the same time" - ) - elif json is not None: - data = payload.JsonPayload(json, dumps=self._json_serialize) - - if not isinstance(chunked, bool) and chunked is not None: - warnings.warn("Chunk size is deprecated #1615", DeprecationWarning) - - redirects = 0 - history = [] - version = self._version - - # Merge with default headers and transform to CIMultiDict - headers = self._prepare_headers(headers) - proxy_headers = self._prepare_headers(proxy_headers) - - try: - url = URL(str_or_url) - except ValueError as e: - raise InvalidURL(str_or_url) from e - - skip_headers = set(self._skip_auto_headers) - if skip_auto_headers is not None: - for i in skip_auto_headers: - skip_headers.add(istr(i)) - - if proxy is not None: - try: - proxy = URL(proxy) - except ValueError as e: - raise InvalidURL(proxy) from e - - if timeout is sentinel: - real_timeout = self._timeout # type: ClientTimeout - else: - if not isinstance(timeout, ClientTimeout): - real_timeout = ClientTimeout(total=timeout) # type: ignore - else: - real_timeout = timeout - # timeout is cumulative for all request operations - # (request, redirects, responses, data consuming) - tm = TimeoutHandle(self._loop, real_timeout.total) - handle = tm.start() - - if read_bufsize is None: - read_bufsize = self._read_bufsize - - traces = [ - Trace( - self, - trace_config, - trace_config.trace_config_ctx(trace_request_ctx=trace_request_ctx), - ) - for trace_config in self._trace_configs - ] - - for trace in traces: - await trace.send_request_start(method, url, headers) - - timer = tm.timer() - try: - with timer: - while True: - url, auth_from_url = strip_auth_from_url(url) - if auth and auth_from_url: - raise ValueError( - "Cannot combine AUTH argument with " - "credentials encoded in URL" - ) - - if auth is None: - auth = auth_from_url - if auth is None: - auth = self._default_auth - # It would be confusing if we support explicit - # Authorization header with auth argument - if ( - headers is not None - and auth is not None - and hdrs.AUTHORIZATION in headers - ): - raise ValueError( - "Cannot combine AUTHORIZATION header " - "with AUTH argument or credentials " - "encoded in URL" - ) - - all_cookies = self._cookie_jar.filter_cookies(url) - - if cookies is not None: - tmp_cookie_jar = CookieJar() - tmp_cookie_jar.update_cookies(cookies) - req_cookies = tmp_cookie_jar.filter_cookies(url) - if req_cookies: - all_cookies.load(req_cookies) - - if proxy is not None: - proxy = URL(proxy) - elif self._trust_env: - for scheme, proxy_info in proxies_from_env().items(): - if scheme == url.scheme: - proxy = proxy_info.proxy - proxy_auth = proxy_info.proxy_auth - break - - req = self._request_class( - method, - url, - params=params, - headers=headers, - skip_auto_headers=skip_headers, - data=data, - cookies=all_cookies, - auth=auth, - version=version, - compress=compress, - chunked=chunked, - expect100=expect100, - loop=self._loop, - response_class=self._response_class, - proxy=proxy, - proxy_auth=proxy_auth, - timer=timer, - session=self, - ssl=ssl, - proxy_headers=proxy_headers, - traces=traces, - ) - - # connection timeout - try: - with CeilTimeout(real_timeout.connect, loop=self._loop): - assert self._connector is not None - conn = await self._connector.connect( - req, traces=traces, timeout=real_timeout - ) - except asyncio.TimeoutError as exc: - raise ServerTimeoutError( - "Connection timeout " "to host {}".format(url) - ) from exc - - assert conn.transport is not None - - assert conn.protocol is not None - conn.protocol.set_response_params( - timer=timer, - skip_payload=method.upper() == "HEAD", - read_until_eof=read_until_eof, - auto_decompress=self._auto_decompress, - read_timeout=real_timeout.sock_read, - read_bufsize=read_bufsize, - ) - - try: - try: - resp = await req.send(conn) - try: - await resp.start(conn) - except BaseException: - resp.close() - raise - except BaseException: - conn.close() - raise - except ClientError: - raise - except OSError as exc: - raise ClientOSError(*exc.args) from exc - - self._cookie_jar.update_cookies(resp.cookies, resp.url) - - # redirects - if resp.status in (301, 302, 303, 307, 308) and allow_redirects: - - for trace in traces: - await trace.send_request_redirect( - method, url, headers, resp - ) - - redirects += 1 - history.append(resp) - if max_redirects and redirects >= max_redirects: - resp.close() - raise TooManyRedirects( - history[0].request_info, tuple(history) - ) - - # For 301 and 302, mimic IE, now changed in RFC - # https://github.com/kennethreitz/requests/pull/269 - if (resp.status == 303 and resp.method != hdrs.METH_HEAD) or ( - resp.status in (301, 302) and resp.method == hdrs.METH_POST - ): - method = hdrs.METH_GET - data = None - if headers.get(hdrs.CONTENT_LENGTH): - headers.pop(hdrs.CONTENT_LENGTH) - - r_url = resp.headers.get(hdrs.LOCATION) or resp.headers.get( - hdrs.URI - ) - if r_url is None: - # see github.com/aio-libs/aiohttp/issues/2022 - break - else: - # reading from correct redirection - # response is forbidden - resp.release() - - try: - parsed_url = URL( - r_url, encoded=not self._requote_redirect_url - ) - - except ValueError as e: - raise InvalidURL(r_url) from e - - scheme = parsed_url.scheme - if scheme not in ("http", "https", ""): - resp.close() - raise ValueError("Can redirect only to http or https") - elif not scheme: - parsed_url = url.join(parsed_url) - - if url.origin() != parsed_url.origin(): - auth = None - headers.pop(hdrs.AUTHORIZATION, None) - - url = parsed_url - params = None - resp.release() - continue - - break - - # check response status - if raise_for_status is None: - raise_for_status = self._raise_for_status - if raise_for_status: - resp.raise_for_status() - - # register connection - if handle is not None: - if resp.connection is not None: - resp.connection.add_callback(handle.cancel) - else: - handle.cancel() - - resp._history = tuple(history) - - for trace in traces: - await trace.send_request_end(method, url, headers, resp) - return resp - - except BaseException as e: - # cleanup timer - tm.close() - if handle: - handle.cancel() - handle = None - - for trace in traces: - await trace.send_request_exception(method, url, headers, e) - raise - - def ws_connect( - self, - url: StrOrURL, - *, - method: str = hdrs.METH_GET, - protocols: Iterable[str] = (), - timeout: float = 10.0, - receive_timeout: Optional[float] = None, - autoclose: bool = True, - autoping: bool = True, - heartbeat: Optional[float] = None, - auth: Optional[BasicAuth] = None, - origin: Optional[str] = None, - headers: Optional[LooseHeaders] = None, - proxy: Optional[StrOrURL] = None, - proxy_auth: Optional[BasicAuth] = None, - ssl: Union[SSLContext, bool, None, Fingerprint] = None, - verify_ssl: Optional[bool] = None, - fingerprint: Optional[bytes] = None, - ssl_context: Optional[SSLContext] = None, - proxy_headers: Optional[LooseHeaders] = None, - compress: int = 0, - max_msg_size: int = 4 * 1024 * 1024, - ) -> "_WSRequestContextManager": - """Initiate websocket connection.""" - return _WSRequestContextManager( - self._ws_connect( - url, - method=method, - protocols=protocols, - timeout=timeout, - receive_timeout=receive_timeout, - autoclose=autoclose, - autoping=autoping, - heartbeat=heartbeat, - auth=auth, - origin=origin, - headers=headers, - proxy=proxy, - proxy_auth=proxy_auth, - ssl=ssl, - verify_ssl=verify_ssl, - fingerprint=fingerprint, - ssl_context=ssl_context, - proxy_headers=proxy_headers, - compress=compress, - max_msg_size=max_msg_size, - ) - ) - - async def _ws_connect( - self, - url: StrOrURL, - *, - method: str = hdrs.METH_GET, - protocols: Iterable[str] = (), - timeout: float = 10.0, - receive_timeout: Optional[float] = None, - autoclose: bool = True, - autoping: bool = True, - heartbeat: Optional[float] = None, - auth: Optional[BasicAuth] = None, - origin: Optional[str] = None, - headers: Optional[LooseHeaders] = None, - proxy: Optional[StrOrURL] = None, - proxy_auth: Optional[BasicAuth] = None, - ssl: Union[SSLContext, bool, None, Fingerprint] = None, - verify_ssl: Optional[bool] = None, - fingerprint: Optional[bytes] = None, - ssl_context: Optional[SSLContext] = None, - proxy_headers: Optional[LooseHeaders] = None, - compress: int = 0, - max_msg_size: int = 4 * 1024 * 1024, - ) -> ClientWebSocketResponse: - - if headers is None: - real_headers = CIMultiDict() # type: CIMultiDict[str] - else: - real_headers = CIMultiDict(headers) - - default_headers = { - hdrs.UPGRADE: "websocket", - hdrs.CONNECTION: "upgrade", - hdrs.SEC_WEBSOCKET_VERSION: "13", - } - - for key, value in default_headers.items(): - real_headers.setdefault(key, value) - - sec_key = base64.b64encode(os.urandom(16)) - real_headers[hdrs.SEC_WEBSOCKET_KEY] = sec_key.decode() - - if protocols: - real_headers[hdrs.SEC_WEBSOCKET_PROTOCOL] = ",".join(protocols) - if origin is not None: - real_headers[hdrs.ORIGIN] = origin - if compress: - extstr = ws_ext_gen(compress=compress) - real_headers[hdrs.SEC_WEBSOCKET_EXTENSIONS] = extstr - - ssl = _merge_ssl_params(ssl, verify_ssl, ssl_context, fingerprint) - - # send request - resp = await self.request( - method, - url, - headers=real_headers, - read_until_eof=False, - auth=auth, - proxy=proxy, - proxy_auth=proxy_auth, - ssl=ssl, - proxy_headers=proxy_headers, - ) - - try: - # check handshake - if resp.status != 101: - raise WSServerHandshakeError( - resp.request_info, - resp.history, - message="Invalid response status", - status=resp.status, - headers=resp.headers, - ) - - if resp.headers.get(hdrs.UPGRADE, "").lower() != "websocket": - raise WSServerHandshakeError( - resp.request_info, - resp.history, - message="Invalid upgrade header", - status=resp.status, - headers=resp.headers, - ) - - if resp.headers.get(hdrs.CONNECTION, "").lower() != "upgrade": - raise WSServerHandshakeError( - resp.request_info, - resp.history, - message="Invalid connection header", - status=resp.status, - headers=resp.headers, - ) - - # key calculation - r_key = resp.headers.get(hdrs.SEC_WEBSOCKET_ACCEPT, "") - match = base64.b64encode(hashlib.sha1(sec_key + WS_KEY).digest()).decode() - if r_key != match: - raise WSServerHandshakeError( - resp.request_info, - resp.history, - message="Invalid challenge response", - status=resp.status, - headers=resp.headers, - ) - - # websocket protocol - protocol = None - if protocols and hdrs.SEC_WEBSOCKET_PROTOCOL in resp.headers: - resp_protocols = [ - proto.strip() - for proto in resp.headers[hdrs.SEC_WEBSOCKET_PROTOCOL].split(",") - ] - - for proto in resp_protocols: - if proto in protocols: - protocol = proto - break - - # websocket compress - notakeover = False - if compress: - compress_hdrs = resp.headers.get(hdrs.SEC_WEBSOCKET_EXTENSIONS) - if compress_hdrs: - try: - compress, notakeover = ws_ext_parse(compress_hdrs) - except WSHandshakeError as exc: - raise WSServerHandshakeError( - resp.request_info, - resp.history, - message=exc.args[0], - status=resp.status, - headers=resp.headers, - ) from exc - else: - compress = 0 - notakeover = False - - conn = resp.connection - assert conn is not None - conn_proto = conn.protocol - assert conn_proto is not None - transport = conn.transport - assert transport is not None - reader = FlowControlDataQueue( - conn_proto, 2 ** 16, loop=self._loop - ) # type: FlowControlDataQueue[WSMessage] - conn_proto.set_parser(WebSocketReader(reader, max_msg_size), reader) - writer = WebSocketWriter( - conn_proto, - transport, - use_mask=True, - compress=compress, - notakeover=notakeover, - ) - except BaseException: - resp.close() - raise - else: - return self._ws_response_class( - reader, - writer, - protocol, - resp, - timeout, - autoclose, - autoping, - self._loop, - receive_timeout=receive_timeout, - heartbeat=heartbeat, - compress=compress, - client_notakeover=notakeover, - ) - - def _prepare_headers(self, headers: Optional[LooseHeaders]) -> "CIMultiDict[str]": - """Add default headers and transform it to CIMultiDict""" - # Convert headers to MultiDict - result = CIMultiDict(self._default_headers) - if headers: - if not isinstance(headers, (MultiDictProxy, MultiDict)): - headers = CIMultiDict(headers) - added_names = set() # type: Set[str] - for key, value in headers.items(): - if key in added_names: - result.add(key, value) - else: - result[key] = value - added_names.add(key) - return result - - def get( - self, url: StrOrURL, *, allow_redirects: bool = True, **kwargs: Any - ) -> "_RequestContextManager": - """Perform HTTP GET request.""" - return _RequestContextManager( - self._request(hdrs.METH_GET, url, allow_redirects=allow_redirects, **kwargs) - ) - - def options( - self, url: StrOrURL, *, allow_redirects: bool = True, **kwargs: Any - ) -> "_RequestContextManager": - """Perform HTTP OPTIONS request.""" - return _RequestContextManager( - self._request( - hdrs.METH_OPTIONS, url, allow_redirects=allow_redirects, **kwargs - ) - ) - - def head( - self, url: StrOrURL, *, allow_redirects: bool = False, **kwargs: Any - ) -> "_RequestContextManager": - """Perform HTTP HEAD request.""" - return _RequestContextManager( - self._request( - hdrs.METH_HEAD, url, allow_redirects=allow_redirects, **kwargs - ) - ) - - def post( - self, url: StrOrURL, *, data: Any = None, **kwargs: Any - ) -> "_RequestContextManager": - """Perform HTTP POST request.""" - return _RequestContextManager( - self._request(hdrs.METH_POST, url, data=data, **kwargs) - ) - - def put( - self, url: StrOrURL, *, data: Any = None, **kwargs: Any - ) -> "_RequestContextManager": - """Perform HTTP PUT request.""" - return _RequestContextManager( - self._request(hdrs.METH_PUT, url, data=data, **kwargs) - ) - - def patch( - self, url: StrOrURL, *, data: Any = None, **kwargs: Any - ) -> "_RequestContextManager": - """Perform HTTP PATCH request.""" - return _RequestContextManager( - self._request(hdrs.METH_PATCH, url, data=data, **kwargs) - ) - - def delete(self, url: StrOrURL, **kwargs: Any) -> "_RequestContextManager": - """Perform HTTP DELETE request.""" - return _RequestContextManager(self._request(hdrs.METH_DELETE, url, **kwargs)) - - async def close(self) -> None: - """Close underlying connector. - - Release all acquired resources. - """ - if not self.closed: - if self._connector is not None and self._connector_owner: - await self._connector.close() - self._connector = None - - @property - def closed(self) -> bool: - """Is client session closed. - - A readonly property. - """ - return self._connector is None or self._connector.closed - - @property - def connector(self) -> Optional[BaseConnector]: - """Connector instance used for the session.""" - return self._connector - - @property - def cookie_jar(self) -> AbstractCookieJar: - """The session cookies.""" - return self._cookie_jar - - @property - def version(self) -> Tuple[int, int]: - """The session HTTP protocol version.""" - return self._version - - @property - def requote_redirect_url(self) -> bool: - """Do URL requoting on redirection handling.""" - return self._requote_redirect_url - - @requote_redirect_url.setter - def requote_redirect_url(self, val: bool) -> None: - """Do URL requoting on redirection handling.""" - warnings.warn( - "session.requote_redirect_url modification " "is deprecated #2778", - DeprecationWarning, - stacklevel=2, - ) - self._requote_redirect_url = val - - @property - def loop(self) -> asyncio.AbstractEventLoop: - """Session's loop.""" - warnings.warn( - "client.loop property is deprecated", DeprecationWarning, stacklevel=2 - ) - return self._loop - - @property - def timeout(self) -> Union[object, ClientTimeout]: - """Timeout for the session.""" - return self._timeout - - @property - def headers(self) -> "CIMultiDict[str]": - """The default headers of the client session.""" - return self._default_headers - - @property - def skip_auto_headers(self) -> FrozenSet[istr]: - """Headers for which autogeneration should be skipped""" - return self._skip_auto_headers - - @property - def auth(self) -> Optional[BasicAuth]: - """An object that represents HTTP Basic Authorization""" - return self._default_auth - - @property - def json_serialize(self) -> JSONEncoder: - """Json serializer callable""" - return self._json_serialize - - @property - def connector_owner(self) -> bool: - """Should connector be closed on session closing""" - return self._connector_owner - - @property - def raise_for_status( - self, - ) -> Union[bool, Callable[[ClientResponse], Awaitable[None]]]: - """ - Should `ClientResponse.raise_for_status()` - be called for each response - """ - return self._raise_for_status - - @property - def auto_decompress(self) -> bool: - """Should the body response be automatically decompressed""" - return self._auto_decompress - - @property - def trust_env(self) -> bool: - """ - Should get proxies information - from HTTP_PROXY / HTTPS_PROXY environment variables - or ~/.netrc file if present - """ - return self._trust_env - - @property - def trace_configs(self) -> List[TraceConfig]: - """A list of TraceConfig instances used for client tracing""" - return self._trace_configs - - def detach(self) -> None: - """Detach connector from session without closing the former. - - Session is switched to closed state anyway. - """ - self._connector = None - - def __enter__(self) -> None: - raise TypeError("Use async with instead") - - def __exit__( - self, - exc_type: Optional[Type[BaseException]], - exc_val: Optional[BaseException], - exc_tb: Optional[TracebackType], - ) -> None: - # __exit__ should exist in pair with __enter__ but never executed - pass # pragma: no cover - - async def __aenter__(self) -> "ClientSession": - return self - - async def __aexit__( - self, - exc_type: Optional[Type[BaseException]], - exc_val: Optional[BaseException], - exc_tb: Optional[TracebackType], - ) -> None: - await self.close() - - -class _BaseRequestContextManager(Coroutine[Any, Any, _RetType], Generic[_RetType]): - - __slots__ = ("_coro", "_resp") - - def __init__(self, coro: Coroutine["asyncio.Future[Any]", None, _RetType]) -> None: - self._coro = coro - - def send(self, arg: None) -> "asyncio.Future[Any]": - return self._coro.send(arg) - - def throw(self, arg: BaseException) -> None: # type: ignore - self._coro.throw(arg) - - def close(self) -> None: - return self._coro.close() - - def __await__(self) -> Generator[Any, None, _RetType]: - ret = self._coro.__await__() - return ret - - def __iter__(self) -> Generator[Any, None, _RetType]: - return self.__await__() - - async def __aenter__(self) -> _RetType: - self._resp = await self._coro - return self._resp - - -class _RequestContextManager(_BaseRequestContextManager[ClientResponse]): - async def __aexit__( - self, - exc_type: Optional[Type[BaseException]], - exc: Optional[BaseException], - tb: Optional[TracebackType], - ) -> None: - # We're basing behavior on the exception as it can be caused by - # user code unrelated to the status of the connection. If you - # would like to close a connection you must do that - # explicitly. Otherwise connection error handling should kick in - # and close/recycle the connection as required. - self._resp.release() - - -class _WSRequestContextManager(_BaseRequestContextManager[ClientWebSocketResponse]): - async def __aexit__( - self, - exc_type: Optional[Type[BaseException]], - exc: Optional[BaseException], - tb: Optional[TracebackType], - ) -> None: - await self._resp.close() - - -class _SessionRequestContextManager: - - __slots__ = ("_coro", "_resp", "_session") - - def __init__( - self, - coro: Coroutine["asyncio.Future[Any]", None, ClientResponse], - session: ClientSession, - ) -> None: - self._coro = coro - self._resp = None # type: Optional[ClientResponse] - self._session = session - - async def __aenter__(self) -> ClientResponse: - try: - self._resp = await self._coro - except BaseException: - await self._session.close() - raise - else: - return self._resp - - async def __aexit__( - self, - exc_type: Optional[Type[BaseException]], - exc: Optional[BaseException], - tb: Optional[TracebackType], - ) -> None: - assert self._resp is not None - self._resp.close() - await self._session.close() - - -def request( - method: str, - url: StrOrURL, - *, - params: Optional[Mapping[str, str]] = None, - data: Any = None, - json: Any = None, - headers: Optional[LooseHeaders] = None, - skip_auto_headers: Optional[Iterable[str]] = None, - auth: Optional[BasicAuth] = None, - allow_redirects: bool = True, - max_redirects: int = 10, - compress: Optional[str] = None, - chunked: Optional[bool] = None, - expect100: bool = False, - raise_for_status: Optional[bool] = None, - read_until_eof: bool = True, - proxy: Optional[StrOrURL] = None, - proxy_auth: Optional[BasicAuth] = None, - timeout: Union[ClientTimeout, object] = sentinel, - cookies: Optional[LooseCookies] = None, - version: HttpVersion = http.HttpVersion11, - connector: Optional[BaseConnector] = None, - read_bufsize: Optional[int] = None, - loop: Optional[asyncio.AbstractEventLoop] = None, -) -> _SessionRequestContextManager: - """Constructs and sends a request. Returns response object. - method - HTTP method - url - request url - params - (optional) Dictionary or bytes to be sent in the query - string of the new request - data - (optional) Dictionary, bytes, or file-like object to - send in the body of the request - json - (optional) Any json compatible python object - headers - (optional) Dictionary of HTTP Headers to send with - the request - cookies - (optional) Dict object to send with the request - auth - (optional) BasicAuth named tuple represent HTTP Basic Auth - auth - aiohttp.helpers.BasicAuth - allow_redirects - (optional) If set to False, do not follow - redirects - version - Request HTTP version. - compress - Set to True if request has to be compressed - with deflate encoding. - chunked - Set to chunk size for chunked transfer encoding. - expect100 - Expect 100-continue response from server. - connector - BaseConnector sub-class instance to support - connection pooling. - read_until_eof - Read response until eof if response - does not have Content-Length header. - loop - Optional event loop. - timeout - Optional ClientTimeout settings structure, 5min - total timeout by default. - Usage:: - >>> import aiohttp - >>> resp = await aiohttp.request('GET', 'http://python.org/') - >>> resp - - >>> data = await resp.read() - """ - connector_owner = False - if connector is None: - connector_owner = True - connector = TCPConnector(loop=loop, force_close=True) - - session = ClientSession( - loop=loop, - cookies=cookies, - version=version, - timeout=timeout, - connector=connector, - connector_owner=connector_owner, - ) - - return _SessionRequestContextManager( - session._request( - method, - url, - params=params, - data=data, - json=json, - headers=headers, - skip_auto_headers=skip_auto_headers, - auth=auth, - allow_redirects=allow_redirects, - max_redirects=max_redirects, - compress=compress, - chunked=chunked, - expect100=expect100, - raise_for_status=raise_for_status, - read_until_eof=read_until_eof, - proxy=proxy, - proxy_auth=proxy_auth, - read_bufsize=read_bufsize, - ), - session, - ) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/client_exceptions.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/client_exceptions.py deleted file mode 100644 index f4be3bfb..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/client_exceptions.py +++ /dev/null @@ -1,317 +0,0 @@ -"""HTTP related errors.""" - -import asyncio -import warnings -from typing import TYPE_CHECKING, Any, Optional, Tuple, Union - -from .typedefs import LooseHeaders - -try: - import ssl - - SSLContext = ssl.SSLContext -except ImportError: # pragma: no cover - ssl = SSLContext = None # type: ignore - - -if TYPE_CHECKING: # pragma: no cover - from .client_reqrep import ClientResponse, ConnectionKey, Fingerprint, RequestInfo -else: - RequestInfo = ClientResponse = ConnectionKey = None - -__all__ = ( - "ClientError", - "ClientConnectionError", - "ClientOSError", - "ClientConnectorError", - "ClientProxyConnectionError", - "ClientSSLError", - "ClientConnectorSSLError", - "ClientConnectorCertificateError", - "ServerConnectionError", - "ServerTimeoutError", - "ServerDisconnectedError", - "ServerFingerprintMismatch", - "ClientResponseError", - "ClientHttpProxyError", - "WSServerHandshakeError", - "ContentTypeError", - "ClientPayloadError", - "InvalidURL", -) - - -class ClientError(Exception): - """Base class for client connection errors.""" - - -class ClientResponseError(ClientError): - """Connection error during reading response. - - request_info: instance of RequestInfo - """ - - def __init__( - self, - request_info: RequestInfo, - history: Tuple[ClientResponse, ...], - *, - code: Optional[int] = None, - status: Optional[int] = None, - message: str = "", - headers: Optional[LooseHeaders] = None, - ) -> None: - self.request_info = request_info - if code is not None: - if status is not None: - raise ValueError( - "Both code and status arguments are provided; " - "code is deprecated, use status instead" - ) - warnings.warn( - "code argument is deprecated, use status instead", - DeprecationWarning, - stacklevel=2, - ) - if status is not None: - self.status = status - elif code is not None: - self.status = code - else: - self.status = 0 - self.message = message - self.headers = headers - self.history = history - self.args = (request_info, history) - - def __str__(self) -> str: - return "{}, message={!r}, url={!r}".format( - self.status, - self.message, - self.request_info.real_url, - ) - - def __repr__(self) -> str: - args = f"{self.request_info!r}, {self.history!r}" - if self.status != 0: - args += f", status={self.status!r}" - if self.message != "": - args += f", message={self.message!r}" - if self.headers is not None: - args += f", headers={self.headers!r}" - return "{}({})".format(type(self).__name__, args) - - @property - def code(self) -> int: - warnings.warn( - "code property is deprecated, use status instead", - DeprecationWarning, - stacklevel=2, - ) - return self.status - - @code.setter - def code(self, value: int) -> None: - warnings.warn( - "code property is deprecated, use status instead", - DeprecationWarning, - stacklevel=2, - ) - self.status = value - - -class ContentTypeError(ClientResponseError): - """ContentType found is not valid.""" - - -class WSServerHandshakeError(ClientResponseError): - """websocket server handshake error.""" - - -class ClientHttpProxyError(ClientResponseError): - """HTTP proxy error. - - Raised in :class:`aiohttp.connector.TCPConnector` if - proxy responds with status other than ``200 OK`` - on ``CONNECT`` request. - """ - - -class TooManyRedirects(ClientResponseError): - """Client was redirected too many times.""" - - -class ClientConnectionError(ClientError): - """Base class for client socket errors.""" - - -class ClientOSError(ClientConnectionError, OSError): - """OSError error.""" - - -class ClientConnectorError(ClientOSError): - """Client connector error. - - Raised in :class:`aiohttp.connector.TCPConnector` if - connection to proxy can not be established. - """ - - def __init__(self, connection_key: ConnectionKey, os_error: OSError) -> None: - self._conn_key = connection_key - self._os_error = os_error - super().__init__(os_error.errno, os_error.strerror) - self.args = (connection_key, os_error) - - @property - def os_error(self) -> OSError: - return self._os_error - - @property - def host(self) -> str: - return self._conn_key.host - - @property - def port(self) -> Optional[int]: - return self._conn_key.port - - @property - def ssl(self) -> Union[SSLContext, None, bool, "Fingerprint"]: - return self._conn_key.ssl - - def __str__(self) -> str: - return "Cannot connect to host {0.host}:{0.port} ssl:{1} [{2}]".format( - self, self.ssl if self.ssl is not None else "default", self.strerror - ) - - # OSError.__reduce__ does too much black magick - __reduce__ = BaseException.__reduce__ - - -class ClientProxyConnectionError(ClientConnectorError): - """Proxy connection error. - - Raised in :class:`aiohttp.connector.TCPConnector` if - connection to proxy can not be established. - """ - - -class ServerConnectionError(ClientConnectionError): - """Server connection errors.""" - - -class ServerDisconnectedError(ServerConnectionError): - """Server disconnected.""" - - def __init__(self, message: Optional[str] = None) -> None: - if message is None: - message = "Server disconnected" - - self.args = (message,) - self.message = message - - -class ServerTimeoutError(ServerConnectionError, asyncio.TimeoutError): - """Server timeout error.""" - - -class ServerFingerprintMismatch(ServerConnectionError): - """SSL certificate does not match expected fingerprint.""" - - def __init__(self, expected: bytes, got: bytes, host: str, port: int) -> None: - self.expected = expected - self.got = got - self.host = host - self.port = port - self.args = (expected, got, host, port) - - def __repr__(self) -> str: - return "<{} expected={!r} got={!r} host={!r} port={!r}>".format( - self.__class__.__name__, self.expected, self.got, self.host, self.port - ) - - -class ClientPayloadError(ClientError): - """Response payload error.""" - - -class InvalidURL(ClientError, ValueError): - """Invalid URL. - - URL used for fetching is malformed, e.g. it doesn't contains host - part.""" - - # Derive from ValueError for backward compatibility - - def __init__(self, url: Any) -> None: - # The type of url is not yarl.URL because the exception can be raised - # on URL(url) call - super().__init__(url) - - @property - def url(self) -> Any: - return self.args[0] - - def __repr__(self) -> str: - return f"<{self.__class__.__name__} {self.url}>" - - -class ClientSSLError(ClientConnectorError): - """Base error for ssl.*Errors.""" - - -if ssl is not None: - cert_errors = (ssl.CertificateError,) - cert_errors_bases = ( - ClientSSLError, - ssl.CertificateError, - ) - - ssl_errors = (ssl.SSLError,) - ssl_error_bases = (ClientSSLError, ssl.SSLError) -else: # pragma: no cover - cert_errors = tuple() - cert_errors_bases = ( - ClientSSLError, - ValueError, - ) - - ssl_errors = tuple() - ssl_error_bases = (ClientSSLError,) - - -class ClientConnectorSSLError(*ssl_error_bases): # type: ignore - """Response ssl error.""" - - -class ClientConnectorCertificateError(*cert_errors_bases): # type: ignore - """Response certificate error.""" - - def __init__( - self, connection_key: ConnectionKey, certificate_error: Exception - ) -> None: - self._conn_key = connection_key - self._certificate_error = certificate_error - self.args = (connection_key, certificate_error) - - @property - def certificate_error(self) -> Exception: - return self._certificate_error - - @property - def host(self) -> str: - return self._conn_key.host - - @property - def port(self) -> Optional[int]: - return self._conn_key.port - - @property - def ssl(self) -> bool: - return self._conn_key.is_ssl - - def __str__(self) -> str: - return ( - "Cannot connect to host {0.host}:{0.port} ssl:{0.ssl} " - "[{0.certificate_error.__class__.__name__}: " - "{0.certificate_error.args}]".format(self) - ) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/client_proto.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/client_proto.py deleted file mode 100644 index 2973342e..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/client_proto.py +++ /dev/null @@ -1,251 +0,0 @@ -import asyncio -from contextlib import suppress -from typing import Any, Optional, Tuple - -from .base_protocol import BaseProtocol -from .client_exceptions import ( - ClientOSError, - ClientPayloadError, - ServerDisconnectedError, - ServerTimeoutError, -) -from .helpers import BaseTimerContext -from .http import HttpResponseParser, RawResponseMessage -from .streams import EMPTY_PAYLOAD, DataQueue, StreamReader - - -class ResponseHandler(BaseProtocol, DataQueue[Tuple[RawResponseMessage, StreamReader]]): - """Helper class to adapt between Protocol and StreamReader.""" - - def __init__(self, loop: asyncio.AbstractEventLoop) -> None: - BaseProtocol.__init__(self, loop=loop) - DataQueue.__init__(self, loop) - - self._should_close = False - - self._payload = None - self._skip_payload = False - self._payload_parser = None - - self._timer = None - - self._tail = b"" - self._upgraded = False - self._parser = None # type: Optional[HttpResponseParser] - - self._read_timeout = None # type: Optional[float] - self._read_timeout_handle = None # type: Optional[asyncio.TimerHandle] - - @property - def upgraded(self) -> bool: - return self._upgraded - - @property - def should_close(self) -> bool: - if self._payload is not None and not self._payload.is_eof() or self._upgraded: - return True - - return ( - self._should_close - or self._upgraded - or self.exception() is not None - or self._payload_parser is not None - or len(self) > 0 - or bool(self._tail) - ) - - def force_close(self) -> None: - self._should_close = True - - def close(self) -> None: - transport = self.transport - if transport is not None: - transport.close() - self.transport = None - self._payload = None - self._drop_timeout() - - def is_connected(self) -> bool: - return self.transport is not None and not self.transport.is_closing() - - def connection_lost(self, exc: Optional[BaseException]) -> None: - self._drop_timeout() - - if self._payload_parser is not None: - with suppress(Exception): - self._payload_parser.feed_eof() - - uncompleted = None - if self._parser is not None: - try: - uncompleted = self._parser.feed_eof() - except Exception: - if self._payload is not None: - self._payload.set_exception( - ClientPayloadError("Response payload is not completed") - ) - - if not self.is_eof(): - if isinstance(exc, OSError): - exc = ClientOSError(*exc.args) - if exc is None: - exc = ServerDisconnectedError(uncompleted) - # assigns self._should_close to True as side effect, - # we do it anyway below - self.set_exception(exc) - - self._should_close = True - self._parser = None - self._payload = None - self._payload_parser = None - self._reading_paused = False - - super().connection_lost(exc) - - def eof_received(self) -> None: - # should call parser.feed_eof() most likely - self._drop_timeout() - - def pause_reading(self) -> None: - super().pause_reading() - self._drop_timeout() - - def resume_reading(self) -> None: - super().resume_reading() - self._reschedule_timeout() - - def set_exception(self, exc: BaseException) -> None: - self._should_close = True - self._drop_timeout() - super().set_exception(exc) - - def set_parser(self, parser: Any, payload: Any) -> None: - # TODO: actual types are: - # parser: WebSocketReader - # payload: FlowControlDataQueue - # but they are not generi enough - # Need an ABC for both types - self._payload = payload - self._payload_parser = parser - - self._drop_timeout() - - if self._tail: - data, self._tail = self._tail, b"" - self.data_received(data) - - def set_response_params( - self, - *, - timer: Optional[BaseTimerContext] = None, - skip_payload: bool = False, - read_until_eof: bool = False, - auto_decompress: bool = True, - read_timeout: Optional[float] = None, - read_bufsize: int = 2 ** 16 - ) -> None: - self._skip_payload = skip_payload - - self._read_timeout = read_timeout - self._reschedule_timeout() - - self._parser = HttpResponseParser( - self, - self._loop, - read_bufsize, - timer=timer, - payload_exception=ClientPayloadError, - response_with_body=not skip_payload, - read_until_eof=read_until_eof, - auto_decompress=auto_decompress, - ) - - if self._tail: - data, self._tail = self._tail, b"" - self.data_received(data) - - def _drop_timeout(self) -> None: - if self._read_timeout_handle is not None: - self._read_timeout_handle.cancel() - self._read_timeout_handle = None - - def _reschedule_timeout(self) -> None: - timeout = self._read_timeout - if self._read_timeout_handle is not None: - self._read_timeout_handle.cancel() - - if timeout: - self._read_timeout_handle = self._loop.call_later( - timeout, self._on_read_timeout - ) - else: - self._read_timeout_handle = None - - def _on_read_timeout(self) -> None: - exc = ServerTimeoutError("Timeout on reading data from socket") - self.set_exception(exc) - if self._payload is not None: - self._payload.set_exception(exc) - - def data_received(self, data: bytes) -> None: - self._reschedule_timeout() - - if not data: - return - - # custom payload parser - if self._payload_parser is not None: - eof, tail = self._payload_parser.feed_data(data) - if eof: - self._payload = None - self._payload_parser = None - - if tail: - self.data_received(tail) - return - else: - if self._upgraded or self._parser is None: - # i.e. websocket connection, websocket parser is not set yet - self._tail += data - else: - # parse http messages - try: - messages, upgraded, tail = self._parser.feed_data(data) - except BaseException as exc: - if self.transport is not None: - # connection.release() could be called BEFORE - # data_received(), the transport is already - # closed in this case - self.transport.close() - # should_close is True after the call - self.set_exception(exc) - return - - self._upgraded = upgraded - - payload = None - for message, payload in messages: - if message.should_close: - self._should_close = True - - self._payload = payload - - if self._skip_payload or message.code in (204, 304): - self.feed_data((message, EMPTY_PAYLOAD), 0) # type: ignore - else: - self.feed_data((message, payload), 0) - if payload is not None: - # new message(s) was processed - # register timeout handler unsubscribing - # either on end-of-stream or immediately for - # EMPTY_PAYLOAD - if payload is not EMPTY_PAYLOAD: - payload.on_eof(self._drop_timeout) - else: - self._drop_timeout() - - if tail: - if upgraded: - self.data_received(tail) - else: - self._tail = tail diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/client_reqrep.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/client_reqrep.py deleted file mode 100644 index d826bfeb..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/client_reqrep.py +++ /dev/null @@ -1,1127 +0,0 @@ -import asyncio -import codecs -import functools -import io -import re -import sys -import traceback -import warnings -from hashlib import md5, sha1, sha256 -from http.cookies import CookieError, Morsel, SimpleCookie -from types import MappingProxyType, TracebackType -from typing import ( - TYPE_CHECKING, - Any, - Dict, - Iterable, - List, - Mapping, - Optional, - Tuple, - Type, - Union, - cast, -) - -import attr -from multidict import CIMultiDict, CIMultiDictProxy, MultiDict, MultiDictProxy -from yarl import URL - -from . import hdrs, helpers, http, multipart, payload -from .abc import AbstractStreamWriter -from .client_exceptions import ( - ClientConnectionError, - ClientOSError, - ClientResponseError, - ContentTypeError, - InvalidURL, - ServerFingerprintMismatch, -) -from .formdata import FormData -from .helpers import ( - PY_36, - BaseTimerContext, - BasicAuth, - HeadersMixin, - TimerNoop, - noop, - reify, - set_result, -) -from .http import SERVER_SOFTWARE, HttpVersion10, HttpVersion11, StreamWriter -from .log import client_logger -from .streams import StreamReader -from .typedefs import ( - DEFAULT_JSON_DECODER, - JSONDecoder, - LooseCookies, - LooseHeaders, - RawHeaders, -) - -try: - import ssl - from ssl import SSLContext -except ImportError: # pragma: no cover - ssl = None # type: ignore - SSLContext = object # type: ignore - -try: - import cchardet as chardet -except ImportError: # pragma: no cover - import chardet # type: ignore - - -__all__ = ("ClientRequest", "ClientResponse", "RequestInfo", "Fingerprint") - - -if TYPE_CHECKING: # pragma: no cover - from .client import ClientSession - from .connector import Connection - from .tracing import Trace - - -json_re = re.compile(r"^application/(?:[\w.+-]+?\+)?json") - - -@attr.s(auto_attribs=True, frozen=True, slots=True) -class ContentDisposition: - type: Optional[str] - parameters: "MappingProxyType[str, str]" - filename: Optional[str] - - -@attr.s(auto_attribs=True, frozen=True, slots=True) -class RequestInfo: - url: URL - method: str - headers: "CIMultiDictProxy[str]" - real_url: URL = attr.ib() - - @real_url.default - def real_url_default(self) -> URL: - return self.url - - -class Fingerprint: - HASHFUNC_BY_DIGESTLEN = { - 16: md5, - 20: sha1, - 32: sha256, - } - - def __init__(self, fingerprint: bytes) -> None: - digestlen = len(fingerprint) - hashfunc = self.HASHFUNC_BY_DIGESTLEN.get(digestlen) - if not hashfunc: - raise ValueError("fingerprint has invalid length") - elif hashfunc is md5 or hashfunc is sha1: - raise ValueError( - "md5 and sha1 are insecure and " "not supported. Use sha256." - ) - self._hashfunc = hashfunc - self._fingerprint = fingerprint - - @property - def fingerprint(self) -> bytes: - return self._fingerprint - - def check(self, transport: asyncio.Transport) -> None: - if not transport.get_extra_info("sslcontext"): - return - sslobj = transport.get_extra_info("ssl_object") - cert = sslobj.getpeercert(binary_form=True) - got = self._hashfunc(cert).digest() - if got != self._fingerprint: - host, port, *_ = transport.get_extra_info("peername") - raise ServerFingerprintMismatch(self._fingerprint, got, host, port) - - -if ssl is not None: - SSL_ALLOWED_TYPES = (ssl.SSLContext, bool, Fingerprint, type(None)) -else: # pragma: no cover - SSL_ALLOWED_TYPES = type(None) - - -def _merge_ssl_params( - ssl: Union["SSLContext", bool, Fingerprint, None], - verify_ssl: Optional[bool], - ssl_context: Optional["SSLContext"], - fingerprint: Optional[bytes], -) -> Union["SSLContext", bool, Fingerprint, None]: - if verify_ssl is not None and not verify_ssl: - warnings.warn( - "verify_ssl is deprecated, use ssl=False instead", - DeprecationWarning, - stacklevel=3, - ) - if ssl is not None: - raise ValueError( - "verify_ssl, ssl_context, fingerprint and ssl " - "parameters are mutually exclusive" - ) - else: - ssl = False - if ssl_context is not None: - warnings.warn( - "ssl_context is deprecated, use ssl=context instead", - DeprecationWarning, - stacklevel=3, - ) - if ssl is not None: - raise ValueError( - "verify_ssl, ssl_context, fingerprint and ssl " - "parameters are mutually exclusive" - ) - else: - ssl = ssl_context - if fingerprint is not None: - warnings.warn( - "fingerprint is deprecated, " "use ssl=Fingerprint(fingerprint) instead", - DeprecationWarning, - stacklevel=3, - ) - if ssl is not None: - raise ValueError( - "verify_ssl, ssl_context, fingerprint and ssl " - "parameters are mutually exclusive" - ) - else: - ssl = Fingerprint(fingerprint) - if not isinstance(ssl, SSL_ALLOWED_TYPES): - raise TypeError( - "ssl should be SSLContext, bool, Fingerprint or None, " - "got {!r} instead.".format(ssl) - ) - return ssl - - -@attr.s(auto_attribs=True, slots=True, frozen=True) -class ConnectionKey: - # the key should contain an information about used proxy / TLS - # to prevent reusing wrong connections from a pool - host: str - port: Optional[int] - is_ssl: bool - ssl: Union[SSLContext, None, bool, Fingerprint] - proxy: Optional[URL] - proxy_auth: Optional[BasicAuth] - proxy_headers_hash: Optional[int] # hash(CIMultiDict) - - -def _is_expected_content_type( - response_content_type: str, expected_content_type: str -) -> bool: - if expected_content_type == "application/json": - return json_re.match(response_content_type) is not None - return expected_content_type in response_content_type - - -class ClientRequest: - GET_METHODS = { - hdrs.METH_GET, - hdrs.METH_HEAD, - hdrs.METH_OPTIONS, - hdrs.METH_TRACE, - } - POST_METHODS = {hdrs.METH_PATCH, hdrs.METH_POST, hdrs.METH_PUT} - ALL_METHODS = GET_METHODS.union(POST_METHODS).union({hdrs.METH_DELETE}) - - DEFAULT_HEADERS = { - hdrs.ACCEPT: "*/*", - hdrs.ACCEPT_ENCODING: "gzip, deflate", - } - - body = b"" - auth = None - response = None - - _writer = None # async task for streaming data - _continue = None # waiter future for '100 Continue' response - - # N.B. - # Adding __del__ method with self._writer closing doesn't make sense - # because _writer is instance method, thus it keeps a reference to self. - # Until writer has finished finalizer will not be called. - - def __init__( - self, - method: str, - url: URL, - *, - params: Optional[Mapping[str, str]] = None, - headers: Optional[LooseHeaders] = None, - skip_auto_headers: Iterable[str] = frozenset(), - data: Any = None, - cookies: Optional[LooseCookies] = None, - auth: Optional[BasicAuth] = None, - version: http.HttpVersion = http.HttpVersion11, - compress: Optional[str] = None, - chunked: Optional[bool] = None, - expect100: bool = False, - loop: Optional[asyncio.AbstractEventLoop] = None, - response_class: Optional[Type["ClientResponse"]] = None, - proxy: Optional[URL] = None, - proxy_auth: Optional[BasicAuth] = None, - timer: Optional[BaseTimerContext] = None, - session: Optional["ClientSession"] = None, - ssl: Union[SSLContext, bool, Fingerprint, None] = None, - proxy_headers: Optional[LooseHeaders] = None, - traces: Optional[List["Trace"]] = None, - ): - - if loop is None: - loop = asyncio.get_event_loop() - - assert isinstance(url, URL), url - assert isinstance(proxy, (URL, type(None))), proxy - # FIXME: session is None in tests only, need to fix tests - # assert session is not None - self._session = cast("ClientSession", session) - if params: - q = MultiDict(url.query) - url2 = url.with_query(params) - q.extend(url2.query) - url = url.with_query(q) - self.original_url = url - self.url = url.with_fragment(None) - self.method = method.upper() - self.chunked = chunked - self.compress = compress - self.loop = loop - self.length = None - if response_class is None: - real_response_class = ClientResponse - else: - real_response_class = response_class - self.response_class = real_response_class # type: Type[ClientResponse] - self._timer = timer if timer is not None else TimerNoop() - self._ssl = ssl - - if loop.get_debug(): - self._source_traceback = traceback.extract_stack(sys._getframe(1)) - - self.update_version(version) - self.update_host(url) - self.update_headers(headers) - self.update_auto_headers(skip_auto_headers) - self.update_cookies(cookies) - self.update_content_encoding(data) - self.update_auth(auth) - self.update_proxy(proxy, proxy_auth, proxy_headers) - - self.update_body_from_data(data) - if data or self.method not in self.GET_METHODS: - self.update_transfer_encoding() - self.update_expect_continue(expect100) - if traces is None: - traces = [] - self._traces = traces - - def is_ssl(self) -> bool: - return self.url.scheme in ("https", "wss") - - @property - def ssl(self) -> Union["SSLContext", None, bool, Fingerprint]: - return self._ssl - - @property - def connection_key(self) -> ConnectionKey: - proxy_headers = self.proxy_headers - if proxy_headers: - h = hash( - tuple((k, v) for k, v in proxy_headers.items()) - ) # type: Optional[int] - else: - h = None - return ConnectionKey( - self.host, - self.port, - self.is_ssl(), - self.ssl, - self.proxy, - self.proxy_auth, - h, - ) - - @property - def host(self) -> str: - ret = self.url.raw_host - assert ret is not None - return ret - - @property - def port(self) -> Optional[int]: - return self.url.port - - @property - def request_info(self) -> RequestInfo: - headers = CIMultiDictProxy(self.headers) # type: CIMultiDictProxy[str] - return RequestInfo(self.url, self.method, headers, self.original_url) - - def update_host(self, url: URL) -> None: - """Update destination host, port and connection type (ssl).""" - # get host/port - if not url.raw_host: - raise InvalidURL(url) - - # basic auth info - username, password = url.user, url.password - if username: - self.auth = helpers.BasicAuth(username, password or "") - - def update_version(self, version: Union[http.HttpVersion, str]) -> None: - """Convert request version to two elements tuple. - - parser HTTP version '1.1' => (1, 1) - """ - if isinstance(version, str): - v = [part.strip() for part in version.split(".", 1)] - try: - version = http.HttpVersion(int(v[0]), int(v[1])) - except ValueError: - raise ValueError( - f"Can not parse http version number: {version}" - ) from None - self.version = version - - def update_headers(self, headers: Optional[LooseHeaders]) -> None: - """Update request headers.""" - self.headers = CIMultiDict() # type: CIMultiDict[str] - - # add host - netloc = cast(str, self.url.raw_host) - if helpers.is_ipv6_address(netloc): - netloc = f"[{netloc}]" - if self.url.port is not None and not self.url.is_default_port(): - netloc += ":" + str(self.url.port) - self.headers[hdrs.HOST] = netloc - - if headers: - if isinstance(headers, (dict, MultiDictProxy, MultiDict)): - headers = headers.items() # type: ignore - - for key, value in headers: # type: ignore - # A special case for Host header - if key.lower() == "host": - self.headers[key] = value - else: - self.headers.add(key, value) - - def update_auto_headers(self, skip_auto_headers: Iterable[str]) -> None: - self.skip_auto_headers = CIMultiDict( - (hdr, None) for hdr in sorted(skip_auto_headers) - ) - used_headers = self.headers.copy() - used_headers.extend(self.skip_auto_headers) # type: ignore - - for hdr, val in self.DEFAULT_HEADERS.items(): - if hdr not in used_headers: - self.headers.add(hdr, val) - - if hdrs.USER_AGENT not in used_headers: - self.headers[hdrs.USER_AGENT] = SERVER_SOFTWARE - - def update_cookies(self, cookies: Optional[LooseCookies]) -> None: - """Update request cookies header.""" - if not cookies: - return - - c = SimpleCookie() # type: SimpleCookie[str] - if hdrs.COOKIE in self.headers: - c.load(self.headers.get(hdrs.COOKIE, "")) - del self.headers[hdrs.COOKIE] - - if isinstance(cookies, Mapping): - iter_cookies = cookies.items() - else: - iter_cookies = cookies # type: ignore - for name, value in iter_cookies: - if isinstance(value, Morsel): - # Preserve coded_value - mrsl_val = value.get(value.key, Morsel()) - mrsl_val.set(value.key, value.value, value.coded_value) - c[name] = mrsl_val - else: - c[name] = value # type: ignore - - self.headers[hdrs.COOKIE] = c.output(header="", sep=";").strip() - - def update_content_encoding(self, data: Any) -> None: - """Set request content encoding.""" - if not data: - return - - enc = self.headers.get(hdrs.CONTENT_ENCODING, "").lower() - if enc: - if self.compress: - raise ValueError( - "compress can not be set " "if Content-Encoding header is set" - ) - elif self.compress: - if not isinstance(self.compress, str): - self.compress = "deflate" - self.headers[hdrs.CONTENT_ENCODING] = self.compress - self.chunked = True # enable chunked, no need to deal with length - - def update_transfer_encoding(self) -> None: - """Analyze transfer-encoding header.""" - te = self.headers.get(hdrs.TRANSFER_ENCODING, "").lower() - - if "chunked" in te: - if self.chunked: - raise ValueError( - "chunked can not be set " - 'if "Transfer-Encoding: chunked" header is set' - ) - - elif self.chunked: - if hdrs.CONTENT_LENGTH in self.headers: - raise ValueError( - "chunked can not be set " "if Content-Length header is set" - ) - - self.headers[hdrs.TRANSFER_ENCODING] = "chunked" - else: - if hdrs.CONTENT_LENGTH not in self.headers: - self.headers[hdrs.CONTENT_LENGTH] = str(len(self.body)) - - def update_auth(self, auth: Optional[BasicAuth]) -> None: - """Set basic auth.""" - if auth is None: - auth = self.auth - if auth is None: - return - - if not isinstance(auth, helpers.BasicAuth): - raise TypeError("BasicAuth() tuple is required instead") - - self.headers[hdrs.AUTHORIZATION] = auth.encode() - - def update_body_from_data(self, body: Any) -> None: - if not body: - return - - # FormData - if isinstance(body, FormData): - body = body() - - try: - body = payload.PAYLOAD_REGISTRY.get(body, disposition=None) - except payload.LookupError: - body = FormData(body)() - - self.body = body - - # enable chunked encoding if needed - if not self.chunked: - if hdrs.CONTENT_LENGTH not in self.headers: - size = body.size - if size is None: - self.chunked = True - else: - if hdrs.CONTENT_LENGTH not in self.headers: - self.headers[hdrs.CONTENT_LENGTH] = str(size) - - # copy payload headers - assert body.headers - for (key, value) in body.headers.items(): - if key in self.headers: - continue - if key in self.skip_auto_headers: - continue - self.headers[key] = value - - def update_expect_continue(self, expect: bool = False) -> None: - if expect: - self.headers[hdrs.EXPECT] = "100-continue" - elif self.headers.get(hdrs.EXPECT, "").lower() == "100-continue": - expect = True - - if expect: - self._continue = self.loop.create_future() - - def update_proxy( - self, - proxy: Optional[URL], - proxy_auth: Optional[BasicAuth], - proxy_headers: Optional[LooseHeaders], - ) -> None: - if proxy and not proxy.scheme == "http": - raise ValueError("Only http proxies are supported") - if proxy_auth and not isinstance(proxy_auth, helpers.BasicAuth): - raise ValueError("proxy_auth must be None or BasicAuth() tuple") - self.proxy = proxy - self.proxy_auth = proxy_auth - self.proxy_headers = proxy_headers - - def keep_alive(self) -> bool: - if self.version < HttpVersion10: - # keep alive not supported at all - return False - if self.version == HttpVersion10: - if self.headers.get(hdrs.CONNECTION) == "keep-alive": - return True - else: # no headers means we close for Http 1.0 - return False - elif self.headers.get(hdrs.CONNECTION) == "close": - return False - - return True - - async def write_bytes( - self, writer: AbstractStreamWriter, conn: "Connection" - ) -> None: - """Support coroutines that yields bytes objects.""" - # 100 response - if self._continue is not None: - await writer.drain() - await self._continue - - protocol = conn.protocol - assert protocol is not None - try: - if isinstance(self.body, payload.Payload): - await self.body.write(writer) - else: - if isinstance(self.body, (bytes, bytearray)): - self.body = (self.body,) # type: ignore - - for chunk in self.body: - await writer.write(chunk) # type: ignore - - await writer.write_eof() - except OSError as exc: - new_exc = ClientOSError( - exc.errno, "Can not write request body for %s" % self.url - ) - new_exc.__context__ = exc - new_exc.__cause__ = exc - protocol.set_exception(new_exc) - except asyncio.CancelledError as exc: - if not conn.closed: - protocol.set_exception(exc) - except Exception as exc: - protocol.set_exception(exc) - finally: - self._writer = None - - async def send(self, conn: "Connection") -> "ClientResponse": - # Specify request target: - # - CONNECT request must send authority form URI - # - not CONNECT proxy must send absolute form URI - # - most common is origin form URI - if self.method == hdrs.METH_CONNECT: - connect_host = self.url.raw_host - assert connect_host is not None - if helpers.is_ipv6_address(connect_host): - connect_host = f"[{connect_host}]" - path = f"{connect_host}:{self.url.port}" - elif self.proxy and not self.is_ssl(): - path = str(self.url) - else: - path = self.url.raw_path - if self.url.raw_query_string: - path += "?" + self.url.raw_query_string - - protocol = conn.protocol - assert protocol is not None - writer = StreamWriter( - protocol, - self.loop, - on_chunk_sent=functools.partial( - self._on_chunk_request_sent, self.method, self.url - ), - ) - - if self.compress: - writer.enable_compression(self.compress) - - if self.chunked is not None: - writer.enable_chunking() - - # set default content-type - if ( - self.method in self.POST_METHODS - and hdrs.CONTENT_TYPE not in self.skip_auto_headers - and hdrs.CONTENT_TYPE not in self.headers - ): - self.headers[hdrs.CONTENT_TYPE] = "application/octet-stream" - - # set the connection header - connection = self.headers.get(hdrs.CONNECTION) - if not connection: - if self.keep_alive(): - if self.version == HttpVersion10: - connection = "keep-alive" - else: - if self.version == HttpVersion11: - connection = "close" - - if connection is not None: - self.headers[hdrs.CONNECTION] = connection - - # status + headers - status_line = "{0} {1} HTTP/{2[0]}.{2[1]}".format( - self.method, path, self.version - ) - await writer.write_headers(status_line, self.headers) - - self._writer = self.loop.create_task(self.write_bytes(writer, conn)) - - response_class = self.response_class - assert response_class is not None - self.response = response_class( - self.method, - self.original_url, - writer=self._writer, - continue100=self._continue, - timer=self._timer, - request_info=self.request_info, - traces=self._traces, - loop=self.loop, - session=self._session, - ) - return self.response - - async def close(self) -> None: - if self._writer is not None: - try: - await self._writer - finally: - self._writer = None - - def terminate(self) -> None: - if self._writer is not None: - if not self.loop.is_closed(): - self._writer.cancel() - self._writer = None - - async def _on_chunk_request_sent(self, method: str, url: URL, chunk: bytes) -> None: - for trace in self._traces: - await trace.send_request_chunk_sent(method, url, chunk) - - -class ClientResponse(HeadersMixin): - - # from the Status-Line of the response - version = None # HTTP-Version - status = None # type: int # Status-Code - reason = None # Reason-Phrase - - content = None # type: StreamReader # Payload stream - _headers = None # type: CIMultiDictProxy[str] # Response headers - _raw_headers = None # type: RawHeaders # Response raw headers - - _connection = None # current connection - _source_traceback = None - # setted up by ClientRequest after ClientResponse object creation - # post-init stage allows to not change ctor signature - _closed = True # to allow __del__ for non-initialized properly response - _released = False - - def __init__( - self, - method: str, - url: URL, - *, - writer: "asyncio.Task[None]", - continue100: Optional["asyncio.Future[bool]"], - timer: BaseTimerContext, - request_info: RequestInfo, - traces: List["Trace"], - loop: asyncio.AbstractEventLoop, - session: "ClientSession", - ) -> None: - assert isinstance(url, URL) - - self.method = method - self.cookies = SimpleCookie() # type: SimpleCookie[str] - - self._real_url = url - self._url = url.with_fragment(None) - self._body = None # type: Any - self._writer = writer # type: Optional[asyncio.Task[None]] - self._continue = continue100 # None by default - self._closed = True - self._history = () # type: Tuple[ClientResponse, ...] - self._request_info = request_info - self._timer = timer if timer is not None else TimerNoop() - self._cache = {} # type: Dict[str, Any] - self._traces = traces - self._loop = loop - # store a reference to session #1985 - self._session = session # type: Optional[ClientSession] - if loop.get_debug(): - self._source_traceback = traceback.extract_stack(sys._getframe(1)) - - @reify - def url(self) -> URL: - return self._url - - @reify - def url_obj(self) -> URL: - warnings.warn("Deprecated, use .url #1654", DeprecationWarning, stacklevel=2) - return self._url - - @reify - def real_url(self) -> URL: - return self._real_url - - @reify - def host(self) -> str: - assert self._url.host is not None - return self._url.host - - @reify - def headers(self) -> "CIMultiDictProxy[str]": - return self._headers - - @reify - def raw_headers(self) -> RawHeaders: - return self._raw_headers - - @reify - def request_info(self) -> RequestInfo: - return self._request_info - - @reify - def content_disposition(self) -> Optional[ContentDisposition]: - raw = self._headers.get(hdrs.CONTENT_DISPOSITION) - if raw is None: - return None - disposition_type, params_dct = multipart.parse_content_disposition(raw) - params = MappingProxyType(params_dct) - filename = multipart.content_disposition_filename(params) - return ContentDisposition(disposition_type, params, filename) - - def __del__(self, _warnings: Any = warnings) -> None: - if self._closed: - return - - if self._connection is not None: - self._connection.release() - self._cleanup_writer() - - if self._loop.get_debug(): - if PY_36: - kwargs = {"source": self} - else: - kwargs = {} - _warnings.warn(f"Unclosed response {self!r}", ResourceWarning, **kwargs) - context = {"client_response": self, "message": "Unclosed response"} - if self._source_traceback: - context["source_traceback"] = self._source_traceback - self._loop.call_exception_handler(context) - - def __repr__(self) -> str: - out = io.StringIO() - ascii_encodable_url = str(self.url) - if self.reason: - ascii_encodable_reason = self.reason.encode( - "ascii", "backslashreplace" - ).decode("ascii") - else: - ascii_encodable_reason = self.reason - print( - "".format( - ascii_encodable_url, self.status, ascii_encodable_reason - ), - file=out, - ) - print(self.headers, file=out) - return out.getvalue() - - @property - def connection(self) -> Optional["Connection"]: - return self._connection - - @reify - def history(self) -> Tuple["ClientResponse", ...]: - """A sequence of of responses, if redirects occurred.""" - return self._history - - @reify - def links(self) -> "MultiDictProxy[MultiDictProxy[Union[str, URL]]]": - links_str = ", ".join(self.headers.getall("link", [])) - - if not links_str: - return MultiDictProxy(MultiDict()) - - links = MultiDict() # type: MultiDict[MultiDictProxy[Union[str, URL]]] - - for val in re.split(r",(?=\s*<)", links_str): - match = re.match(r"\s*<(.*)>(.*)", val) - if match is None: # pragma: no cover - # the check exists to suppress mypy error - continue - url, params_str = match.groups() - params = params_str.split(";")[1:] - - link = MultiDict() # type: MultiDict[Union[str, URL]] - - for param in params: - match = re.match(r"^\s*(\S*)\s*=\s*(['\"]?)(.*?)(\2)\s*$", param, re.M) - if match is None: # pragma: no cover - # the check exists to suppress mypy error - continue - key, _, value, _ = match.groups() - - link.add(key, value) - - key = link.get("rel", url) # type: ignore - - link.add("url", self.url.join(URL(url))) - - links.add(key, MultiDictProxy(link)) - - return MultiDictProxy(links) - - async def start(self, connection: "Connection") -> "ClientResponse": - """Start response processing.""" - self._closed = False - self._protocol = connection.protocol - self._connection = connection - - with self._timer: - while True: - # read response - try: - message, payload = await self._protocol.read() # type: ignore - except http.HttpProcessingError as exc: - raise ClientResponseError( - self.request_info, - self.history, - status=exc.code, - message=exc.message, - headers=exc.headers, - ) from exc - - if message.code < 100 or message.code > 199 or message.code == 101: - break - - if self._continue is not None: - set_result(self._continue, True) - self._continue = None - - # payload eof handler - payload.on_eof(self._response_eof) - - # response status - self.version = message.version - self.status = message.code - self.reason = message.reason - - # headers - self._headers = message.headers # type is CIMultiDictProxy - self._raw_headers = message.raw_headers # type is Tuple[bytes, bytes] - - # payload - self.content = payload - - # cookies - for hdr in self.headers.getall(hdrs.SET_COOKIE, ()): - try: - self.cookies.load(hdr) - except CookieError as exc: - client_logger.warning("Can not load response cookies: %s", exc) - return self - - def _response_eof(self) -> None: - if self._closed: - return - - if self._connection is not None: - # websocket, protocol could be None because - # connection could be detached - if ( - self._connection.protocol is not None - and self._connection.protocol.upgraded - ): - return - - self._connection.release() - self._connection = None - - self._closed = True - self._cleanup_writer() - - @property - def closed(self) -> bool: - return self._closed - - def close(self) -> None: - if not self._released: - self._notify_content() - if self._closed: - return - - self._closed = True - if self._loop is None or self._loop.is_closed(): - return - - if self._connection is not None: - self._connection.close() - self._connection = None - self._cleanup_writer() - - def release(self) -> Any: - if not self._released: - self._notify_content() - if self._closed: - return noop() - - self._closed = True - if self._connection is not None: - self._connection.release() - self._connection = None - - self._cleanup_writer() - return noop() - - @property - def ok(self) -> bool: - """Returns ``True`` if ``status`` is less than ``400``, ``False`` if not. - - This is **not** a check for ``200 OK`` but a check that the response - status is under 400. - """ - try: - self.raise_for_status() - except ClientResponseError: - return False - return True - - def raise_for_status(self) -> None: - if 400 <= self.status: - # reason should always be not None for a started response - assert self.reason is not None - self.release() - raise ClientResponseError( - self.request_info, - self.history, - status=self.status, - message=self.reason, - headers=self.headers, - ) - - def _cleanup_writer(self) -> None: - if self._writer is not None: - self._writer.cancel() - self._writer = None - self._session = None - - def _notify_content(self) -> None: - content = self.content - if content and content.exception() is None: - content.set_exception(ClientConnectionError("Connection closed")) - self._released = True - - async def wait_for_close(self) -> None: - if self._writer is not None: - try: - await self._writer - finally: - self._writer = None - self.release() - - async def read(self) -> bytes: - """Read response payload.""" - if self._body is None: - try: - self._body = await self.content.read() - for trace in self._traces: - await trace.send_response_chunk_received( - self.method, self.url, self._body - ) - except BaseException: - self.close() - raise - elif self._released: - raise ClientConnectionError("Connection closed") - - return self._body - - def get_encoding(self) -> str: - ctype = self.headers.get(hdrs.CONTENT_TYPE, "").lower() - mimetype = helpers.parse_mimetype(ctype) - - encoding = mimetype.parameters.get("charset") - if encoding: - try: - codecs.lookup(encoding) - except LookupError: - encoding = None - if not encoding: - if mimetype.type == "application" and ( - mimetype.subtype == "json" or mimetype.subtype == "rdap" - ): - # RFC 7159 states that the default encoding is UTF-8. - # RFC 7483 defines application/rdap+json - encoding = "utf-8" - elif self._body is None: - raise RuntimeError( - "Cannot guess the encoding of " "a not yet read body" - ) - else: - encoding = chardet.detect(self._body)["encoding"] - if not encoding: - encoding = "utf-8" - - return encoding - - async def text(self, encoding: Optional[str] = None, errors: str = "strict") -> str: - """Read response payload and decode.""" - if self._body is None: - await self.read() - - if encoding is None: - encoding = self.get_encoding() - - return self._body.decode(encoding, errors=errors) # type: ignore - - async def json( - self, - *, - encoding: Optional[str] = None, - loads: JSONDecoder = DEFAULT_JSON_DECODER, - content_type: Optional[str] = "application/json", - ) -> Any: - """Read and decodes JSON response.""" - if self._body is None: - await self.read() - - if content_type: - ctype = self.headers.get(hdrs.CONTENT_TYPE, "").lower() - if not _is_expected_content_type(ctype, content_type): - raise ContentTypeError( - self.request_info, - self.history, - message=( - "Attempt to decode JSON with " "unexpected mimetype: %s" % ctype - ), - headers=self.headers, - ) - - stripped = self._body.strip() # type: ignore - if not stripped: - return None - - if encoding is None: - encoding = self.get_encoding() - - return loads(stripped.decode(encoding)) - - async def __aenter__(self) -> "ClientResponse": - return self - - async def __aexit__( - self, - exc_type: Optional[Type[BaseException]], - exc_val: Optional[BaseException], - exc_tb: Optional[TracebackType], - ) -> None: - # similar to _RequestContextManager, we do not need to check - # for exceptions, response object can close connection - # if state is broken - self.release() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/client_ws.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/client_ws.py deleted file mode 100644 index 28fa371c..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/client_ws.py +++ /dev/null @@ -1,301 +0,0 @@ -"""WebSocket client for asyncio.""" - -import asyncio -from typing import Any, Optional - -import async_timeout - -from .client_exceptions import ClientError -from .client_reqrep import ClientResponse -from .helpers import call_later, set_result -from .http import ( - WS_CLOSED_MESSAGE, - WS_CLOSING_MESSAGE, - WebSocketError, - WSMessage, - WSMsgType, -) -from .http_websocket import WebSocketWriter # WSMessage -from .streams import EofStream, FlowControlDataQueue -from .typedefs import ( - DEFAULT_JSON_DECODER, - DEFAULT_JSON_ENCODER, - JSONDecoder, - JSONEncoder, -) - - -class ClientWebSocketResponse: - def __init__( - self, - reader: "FlowControlDataQueue[WSMessage]", - writer: WebSocketWriter, - protocol: Optional[str], - response: ClientResponse, - timeout: float, - autoclose: bool, - autoping: bool, - loop: asyncio.AbstractEventLoop, - *, - receive_timeout: Optional[float] = None, - heartbeat: Optional[float] = None, - compress: int = 0, - client_notakeover: bool = False, - ) -> None: - self._response = response - self._conn = response.connection - - self._writer = writer - self._reader = reader - self._protocol = protocol - self._closed = False - self._closing = False - self._close_code = None # type: Optional[int] - self._timeout = timeout - self._receive_timeout = receive_timeout - self._autoclose = autoclose - self._autoping = autoping - self._heartbeat = heartbeat - self._heartbeat_cb = None - if heartbeat is not None: - self._pong_heartbeat = heartbeat / 2.0 - self._pong_response_cb = None - self._loop = loop - self._waiting = None # type: Optional[asyncio.Future[bool]] - self._exception = None # type: Optional[BaseException] - self._compress = compress - self._client_notakeover = client_notakeover - - self._reset_heartbeat() - - def _cancel_heartbeat(self) -> None: - if self._pong_response_cb is not None: - self._pong_response_cb.cancel() - self._pong_response_cb = None - - if self._heartbeat_cb is not None: - self._heartbeat_cb.cancel() - self._heartbeat_cb = None - - def _reset_heartbeat(self) -> None: - self._cancel_heartbeat() - - if self._heartbeat is not None: - self._heartbeat_cb = call_later( - self._send_heartbeat, self._heartbeat, self._loop - ) - - def _send_heartbeat(self) -> None: - if self._heartbeat is not None and not self._closed: - # fire-and-forget a task is not perfect but maybe ok for - # sending ping. Otherwise we need a long-living heartbeat - # task in the class. - self._loop.create_task(self._writer.ping()) - - if self._pong_response_cb is not None: - self._pong_response_cb.cancel() - self._pong_response_cb = call_later( - self._pong_not_received, self._pong_heartbeat, self._loop - ) - - def _pong_not_received(self) -> None: - if not self._closed: - self._closed = True - self._close_code = 1006 - self._exception = asyncio.TimeoutError() - self._response.close() - - @property - def closed(self) -> bool: - return self._closed - - @property - def close_code(self) -> Optional[int]: - return self._close_code - - @property - def protocol(self) -> Optional[str]: - return self._protocol - - @property - def compress(self) -> int: - return self._compress - - @property - def client_notakeover(self) -> bool: - return self._client_notakeover - - def get_extra_info(self, name: str, default: Any = None) -> Any: - """extra info from connection transport""" - conn = self._response.connection - if conn is None: - return default - transport = conn.transport - if transport is None: - return default - return transport.get_extra_info(name, default) - - def exception(self) -> Optional[BaseException]: - return self._exception - - async def ping(self, message: bytes = b"") -> None: - await self._writer.ping(message) - - async def pong(self, message: bytes = b"") -> None: - await self._writer.pong(message) - - async def send_str(self, data: str, compress: Optional[int] = None) -> None: - if not isinstance(data, str): - raise TypeError("data argument must be str (%r)" % type(data)) - await self._writer.send(data, binary=False, compress=compress) - - async def send_bytes(self, data: bytes, compress: Optional[int] = None) -> None: - if not isinstance(data, (bytes, bytearray, memoryview)): - raise TypeError("data argument must be byte-ish (%r)" % type(data)) - await self._writer.send(data, binary=True, compress=compress) - - async def send_json( - self, - data: Any, - compress: Optional[int] = None, - *, - dumps: JSONEncoder = DEFAULT_JSON_ENCODER, - ) -> None: - await self.send_str(dumps(data), compress=compress) - - async def close(self, *, code: int = 1000, message: bytes = b"") -> bool: - # we need to break `receive()` cycle first, - # `close()` may be called from different task - if self._waiting is not None and not self._closed: - self._reader.feed_data(WS_CLOSING_MESSAGE, 0) - await self._waiting - - if not self._closed: - self._cancel_heartbeat() - self._closed = True - try: - await self._writer.close(code, message) - except asyncio.CancelledError: - self._close_code = 1006 - self._response.close() - raise - except Exception as exc: - self._close_code = 1006 - self._exception = exc - self._response.close() - return True - - if self._closing: - self._response.close() - return True - - while True: - try: - with async_timeout.timeout(self._timeout, loop=self._loop): - msg = await self._reader.read() - except asyncio.CancelledError: - self._close_code = 1006 - self._response.close() - raise - except Exception as exc: - self._close_code = 1006 - self._exception = exc - self._response.close() - return True - - if msg.type == WSMsgType.CLOSE: - self._close_code = msg.data - self._response.close() - return True - else: - return False - - async def receive(self, timeout: Optional[float] = None) -> WSMessage: - while True: - if self._waiting is not None: - raise RuntimeError("Concurrent call to receive() is not allowed") - - if self._closed: - return WS_CLOSED_MESSAGE - elif self._closing: - await self.close() - return WS_CLOSED_MESSAGE - - try: - self._waiting = self._loop.create_future() - try: - with async_timeout.timeout( - timeout or self._receive_timeout, loop=self._loop - ): - msg = await self._reader.read() - self._reset_heartbeat() - finally: - waiter = self._waiting - self._waiting = None - set_result(waiter, True) - except (asyncio.CancelledError, asyncio.TimeoutError): - self._close_code = 1006 - raise - except EofStream: - self._close_code = 1000 - await self.close() - return WSMessage(WSMsgType.CLOSED, None, None) - except ClientError: - self._closed = True - self._close_code = 1006 - return WS_CLOSED_MESSAGE - except WebSocketError as exc: - self._close_code = exc.code - await self.close(code=exc.code) - return WSMessage(WSMsgType.ERROR, exc, None) - except Exception as exc: - self._exception = exc - self._closing = True - self._close_code = 1006 - await self.close() - return WSMessage(WSMsgType.ERROR, exc, None) - - if msg.type == WSMsgType.CLOSE: - self._closing = True - self._close_code = msg.data - if not self._closed and self._autoclose: - await self.close() - elif msg.type == WSMsgType.CLOSING: - self._closing = True - elif msg.type == WSMsgType.PING and self._autoping: - await self.pong(msg.data) - continue - elif msg.type == WSMsgType.PONG and self._autoping: - continue - - return msg - - async def receive_str(self, *, timeout: Optional[float] = None) -> str: - msg = await self.receive(timeout) - if msg.type != WSMsgType.TEXT: - raise TypeError(f"Received message {msg.type}:{msg.data!r} is not str") - return msg.data - - async def receive_bytes(self, *, timeout: Optional[float] = None) -> bytes: - msg = await self.receive(timeout) - if msg.type != WSMsgType.BINARY: - raise TypeError(f"Received message {msg.type}:{msg.data!r} is not bytes") - return msg.data - - async def receive_json( - self, - *, - loads: JSONDecoder = DEFAULT_JSON_DECODER, - timeout: Optional[float] = None, - ) -> Any: - data = await self.receive_str(timeout=timeout) - return loads(data) - - def __aiter__(self) -> "ClientWebSocketResponse": - return self - - async def __anext__(self) -> WSMessage: - msg = await self.receive() - if msg.type in (WSMsgType.CLOSE, WSMsgType.CLOSING, WSMsgType.CLOSED): - raise StopAsyncIteration - return msg diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/connector.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/connector.py deleted file mode 100644 index 748b22a4..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/connector.py +++ /dev/null @@ -1,1262 +0,0 @@ -import asyncio -import functools -import random -import sys -import traceback -import warnings -from collections import defaultdict, deque -from contextlib import suppress -from http.cookies import SimpleCookie -from itertools import cycle, islice -from time import monotonic -from types import TracebackType -from typing import ( - TYPE_CHECKING, - Any, - Awaitable, - Callable, - DefaultDict, - Dict, - Iterator, - List, - Optional, - Set, - Tuple, - Type, - Union, - cast, -) - -import attr - -from . import hdrs, helpers -from .abc import AbstractResolver -from .client_exceptions import ( - ClientConnectionError, - ClientConnectorCertificateError, - ClientConnectorError, - ClientConnectorSSLError, - ClientHttpProxyError, - ClientProxyConnectionError, - ServerFingerprintMismatch, - cert_errors, - ssl_errors, -) -from .client_proto import ResponseHandler -from .client_reqrep import ClientRequest, Fingerprint, _merge_ssl_params -from .helpers import PY_36, CeilTimeout, get_running_loop, is_ip_address, noop, sentinel -from .http import RESPONSES -from .locks import EventResultOrError -from .resolver import DefaultResolver - -try: - import ssl - - SSLContext = ssl.SSLContext -except ImportError: # pragma: no cover - ssl = None # type: ignore - SSLContext = object # type: ignore - - -__all__ = ("BaseConnector", "TCPConnector", "UnixConnector", "NamedPipeConnector") - - -if TYPE_CHECKING: # pragma: no cover - from .client import ClientTimeout - from .client_reqrep import ConnectionKey - from .tracing import Trace - - -class _DeprecationWaiter: - __slots__ = ("_awaitable", "_awaited") - - def __init__(self, awaitable: Awaitable[Any]) -> None: - self._awaitable = awaitable - self._awaited = False - - def __await__(self) -> Any: - self._awaited = True - return self._awaitable.__await__() - - def __del__(self) -> None: - if not self._awaited: - warnings.warn( - "Connector.close() is a coroutine, " - "please use await connector.close()", - DeprecationWarning, - ) - - -class Connection: - - _source_traceback = None - _transport = None - - def __init__( - self, - connector: "BaseConnector", - key: "ConnectionKey", - protocol: ResponseHandler, - loop: asyncio.AbstractEventLoop, - ) -> None: - self._key = key - self._connector = connector - self._loop = loop - self._protocol = protocol # type: Optional[ResponseHandler] - self._callbacks = [] # type: List[Callable[[], None]] - - if loop.get_debug(): - self._source_traceback = traceback.extract_stack(sys._getframe(1)) - - def __repr__(self) -> str: - return f"Connection<{self._key}>" - - def __del__(self, _warnings: Any = warnings) -> None: - if self._protocol is not None: - if PY_36: - kwargs = {"source": self} - else: - kwargs = {} - _warnings.warn(f"Unclosed connection {self!r}", ResourceWarning, **kwargs) - if self._loop.is_closed(): - return - - self._connector._release(self._key, self._protocol, should_close=True) - - context = {"client_connection": self, "message": "Unclosed connection"} - if self._source_traceback is not None: - context["source_traceback"] = self._source_traceback - self._loop.call_exception_handler(context) - - @property - def loop(self) -> asyncio.AbstractEventLoop: - warnings.warn( - "connector.loop property is deprecated", DeprecationWarning, stacklevel=2 - ) - return self._loop - - @property - def transport(self) -> Optional[asyncio.Transport]: - if self._protocol is None: - return None - return self._protocol.transport - - @property - def protocol(self) -> Optional[ResponseHandler]: - return self._protocol - - def add_callback(self, callback: Callable[[], None]) -> None: - if callback is not None: - self._callbacks.append(callback) - - def _notify_release(self) -> None: - callbacks, self._callbacks = self._callbacks[:], [] - - for cb in callbacks: - with suppress(Exception): - cb() - - def close(self) -> None: - self._notify_release() - - if self._protocol is not None: - self._connector._release(self._key, self._protocol, should_close=True) - self._protocol = None - - def release(self) -> None: - self._notify_release() - - if self._protocol is not None: - self._connector._release( - self._key, self._protocol, should_close=self._protocol.should_close - ) - self._protocol = None - - @property - def closed(self) -> bool: - return self._protocol is None or not self._protocol.is_connected() - - -class _TransportPlaceholder: - """ placeholder for BaseConnector.connect function """ - - def close(self) -> None: - pass - - -class BaseConnector: - """Base connector class. - - keepalive_timeout - (optional) Keep-alive timeout. - force_close - Set to True to force close and do reconnect - after each request (and between redirects). - limit - The total number of simultaneous connections. - limit_per_host - Number of simultaneous connections to one host. - enable_cleanup_closed - Enables clean-up closed ssl transports. - Disabled by default. - loop - Optional event loop. - """ - - _closed = True # prevent AttributeError in __del__ if ctor was failed - _source_traceback = None - - # abort transport after 2 seconds (cleanup broken connections) - _cleanup_closed_period = 2.0 - - def __init__( - self, - *, - keepalive_timeout: Union[object, None, float] = sentinel, - force_close: bool = False, - limit: int = 100, - limit_per_host: int = 0, - enable_cleanup_closed: bool = False, - loop: Optional[asyncio.AbstractEventLoop] = None, - ) -> None: - - if force_close: - if keepalive_timeout is not None and keepalive_timeout is not sentinel: - raise ValueError( - "keepalive_timeout cannot " "be set if force_close is True" - ) - else: - if keepalive_timeout is sentinel: - keepalive_timeout = 15.0 - - loop = get_running_loop(loop) - - self._closed = False - if loop.get_debug(): - self._source_traceback = traceback.extract_stack(sys._getframe(1)) - - self._conns = ( - {} - ) # type: Dict[ConnectionKey, List[Tuple[ResponseHandler, float]]] - self._limit = limit - self._limit_per_host = limit_per_host - self._acquired = set() # type: Set[ResponseHandler] - self._acquired_per_host = defaultdict( - set - ) # type: DefaultDict[ConnectionKey, Set[ResponseHandler]] - self._keepalive_timeout = cast(float, keepalive_timeout) - self._force_close = force_close - - # {host_key: FIFO list of waiters} - self._waiters = defaultdict(deque) # type: ignore - - self._loop = loop - self._factory = functools.partial(ResponseHandler, loop=loop) - - self.cookies = SimpleCookie() # type: SimpleCookie[str] - - # start keep-alive connection cleanup task - self._cleanup_handle = None - - # start cleanup closed transports task - self._cleanup_closed_handle = None - self._cleanup_closed_disabled = not enable_cleanup_closed - self._cleanup_closed_transports = [] # type: List[Optional[asyncio.Transport]] - self._cleanup_closed() - - def __del__(self, _warnings: Any = warnings) -> None: - if self._closed: - return - if not self._conns: - return - - conns = [repr(c) for c in self._conns.values()] - - self._close() - - if PY_36: - kwargs = {"source": self} - else: - kwargs = {} - _warnings.warn(f"Unclosed connector {self!r}", ResourceWarning, **kwargs) - context = { - "connector": self, - "connections": conns, - "message": "Unclosed connector", - } - if self._source_traceback is not None: - context["source_traceback"] = self._source_traceback - self._loop.call_exception_handler(context) - - def __enter__(self) -> "BaseConnector": - warnings.warn( - '"witn Connector():" is deprecated, ' - 'use "async with Connector():" instead', - DeprecationWarning, - ) - return self - - def __exit__(self, *exc: Any) -> None: - self.close() - - async def __aenter__(self) -> "BaseConnector": - return self - - async def __aexit__( - self, - exc_type: Optional[Type[BaseException]] = None, - exc_value: Optional[BaseException] = None, - exc_traceback: Optional[TracebackType] = None, - ) -> None: - await self.close() - - @property - def force_close(self) -> bool: - """Ultimately close connection on releasing if True.""" - return self._force_close - - @property - def limit(self) -> int: - """The total number for simultaneous connections. - - If limit is 0 the connector has no limit. - The default limit size is 100. - """ - return self._limit - - @property - def limit_per_host(self) -> int: - """The limit_per_host for simultaneous connections - to the same endpoint. - - Endpoints are the same if they are have equal - (host, port, is_ssl) triple. - - """ - return self._limit_per_host - - def _cleanup(self) -> None: - """Cleanup unused transports.""" - if self._cleanup_handle: - self._cleanup_handle.cancel() - # _cleanup_handle should be unset, otherwise _release() will not - # recreate it ever! - self._cleanup_handle = None - - now = self._loop.time() - timeout = self._keepalive_timeout - - if self._conns: - connections = {} - deadline = now - timeout - for key, conns in self._conns.items(): - alive = [] - for proto, use_time in conns: - if proto.is_connected(): - if use_time - deadline < 0: - transport = proto.transport - proto.close() - if key.is_ssl and not self._cleanup_closed_disabled: - self._cleanup_closed_transports.append(transport) - else: - alive.append((proto, use_time)) - else: - transport = proto.transport - proto.close() - if key.is_ssl and not self._cleanup_closed_disabled: - self._cleanup_closed_transports.append(transport) - - if alive: - connections[key] = alive - - self._conns = connections - - if self._conns: - self._cleanup_handle = helpers.weakref_handle( - self, "_cleanup", timeout, self._loop - ) - - def _drop_acquired_per_host( - self, key: "ConnectionKey", val: ResponseHandler - ) -> None: - acquired_per_host = self._acquired_per_host - if key not in acquired_per_host: - return - conns = acquired_per_host[key] - conns.remove(val) - if not conns: - del self._acquired_per_host[key] - - def _cleanup_closed(self) -> None: - """Double confirmation for transport close. - Some broken ssl servers may leave socket open without proper close. - """ - if self._cleanup_closed_handle: - self._cleanup_closed_handle.cancel() - - for transport in self._cleanup_closed_transports: - if transport is not None: - transport.abort() - - self._cleanup_closed_transports = [] - - if not self._cleanup_closed_disabled: - self._cleanup_closed_handle = helpers.weakref_handle( - self, "_cleanup_closed", self._cleanup_closed_period, self._loop - ) - - def close(self) -> Awaitable[None]: - """Close all opened transports.""" - self._close() - return _DeprecationWaiter(noop()) - - def _close(self) -> None: - if self._closed: - return - - self._closed = True - - try: - if self._loop.is_closed(): - return - - # cancel cleanup task - if self._cleanup_handle: - self._cleanup_handle.cancel() - - # cancel cleanup close task - if self._cleanup_closed_handle: - self._cleanup_closed_handle.cancel() - - for data in self._conns.values(): - for proto, t0 in data: - proto.close() - - for proto in self._acquired: - proto.close() - - for transport in self._cleanup_closed_transports: - if transport is not None: - transport.abort() - - finally: - self._conns.clear() - self._acquired.clear() - self._waiters.clear() - self._cleanup_handle = None - self._cleanup_closed_transports.clear() - self._cleanup_closed_handle = None - - @property - def closed(self) -> bool: - """Is connector closed. - - A readonly property. - """ - return self._closed - - def _available_connections(self, key: "ConnectionKey") -> int: - """ - Return number of available connections taking into account - the limit, limit_per_host and the connection key. - - If it returns less than 1 means that there is no connections - availables. - """ - - if self._limit: - # total calc available connections - available = self._limit - len(self._acquired) - - # check limit per host - if ( - self._limit_per_host - and available > 0 - and key in self._acquired_per_host - ): - acquired = self._acquired_per_host.get(key) - assert acquired is not None - available = self._limit_per_host - len(acquired) - - elif self._limit_per_host and key in self._acquired_per_host: - # check limit per host - acquired = self._acquired_per_host.get(key) - assert acquired is not None - available = self._limit_per_host - len(acquired) - else: - available = 1 - - return available - - async def connect( - self, req: "ClientRequest", traces: List["Trace"], timeout: "ClientTimeout" - ) -> Connection: - """Get from pool or create new connection.""" - key = req.connection_key - available = self._available_connections(key) - - # Wait if there are no available connections or if there are/were - # waiters (i.e. don't steal connection from a waiter about to wake up) - if available <= 0 or key in self._waiters: - fut = self._loop.create_future() - - # This connection will now count towards the limit. - self._waiters[key].append(fut) - - if traces: - for trace in traces: - await trace.send_connection_queued_start() - - try: - await fut - except BaseException as e: - if key in self._waiters: - # remove a waiter even if it was cancelled, normally it's - # removed when it's notified - try: - self._waiters[key].remove(fut) - except ValueError: # fut may no longer be in list - pass - - raise e - finally: - if key in self._waiters and not self._waiters[key]: - del self._waiters[key] - - if traces: - for trace in traces: - await trace.send_connection_queued_end() - - proto = self._get(key) - if proto is None: - placeholder = cast(ResponseHandler, _TransportPlaceholder()) - self._acquired.add(placeholder) - self._acquired_per_host[key].add(placeholder) - - if traces: - for trace in traces: - await trace.send_connection_create_start() - - try: - proto = await self._create_connection(req, traces, timeout) - if self._closed: - proto.close() - raise ClientConnectionError("Connector is closed.") - except BaseException: - if not self._closed: - self._acquired.remove(placeholder) - self._drop_acquired_per_host(key, placeholder) - self._release_waiter() - raise - else: - if not self._closed: - self._acquired.remove(placeholder) - self._drop_acquired_per_host(key, placeholder) - - if traces: - for trace in traces: - await trace.send_connection_create_end() - else: - if traces: - for trace in traces: - await trace.send_connection_reuseconn() - - self._acquired.add(proto) - self._acquired_per_host[key].add(proto) - return Connection(self, key, proto, self._loop) - - def _get(self, key: "ConnectionKey") -> Optional[ResponseHandler]: - try: - conns = self._conns[key] - except KeyError: - return None - - t1 = self._loop.time() - while conns: - proto, t0 = conns.pop() - if proto.is_connected(): - if t1 - t0 > self._keepalive_timeout: - transport = proto.transport - proto.close() - # only for SSL transports - if key.is_ssl and not self._cleanup_closed_disabled: - self._cleanup_closed_transports.append(transport) - else: - if not conns: - # The very last connection was reclaimed: drop the key - del self._conns[key] - return proto - else: - transport = proto.transport - proto.close() - if key.is_ssl and not self._cleanup_closed_disabled: - self._cleanup_closed_transports.append(transport) - - # No more connections: drop the key - del self._conns[key] - return None - - def _release_waiter(self) -> None: - """ - Iterates over all waiters till found one that is not finsihed and - belongs to a host that has available connections. - """ - if not self._waiters: - return - - # Having the dict keys ordered this avoids to iterate - # at the same order at each call. - queues = list(self._waiters.keys()) - random.shuffle(queues) - - for key in queues: - if self._available_connections(key) < 1: - continue - - waiters = self._waiters[key] - while waiters: - waiter = waiters.popleft() - if not waiter.done(): - waiter.set_result(None) - return - - def _release_acquired(self, key: "ConnectionKey", proto: ResponseHandler) -> None: - if self._closed: - # acquired connection is already released on connector closing - return - - try: - self._acquired.remove(proto) - self._drop_acquired_per_host(key, proto) - except KeyError: # pragma: no cover - # this may be result of undetermenistic order of objects - # finalization due garbage collection. - pass - else: - self._release_waiter() - - def _release( - self, - key: "ConnectionKey", - protocol: ResponseHandler, - *, - should_close: bool = False, - ) -> None: - if self._closed: - # acquired connection is already released on connector closing - return - - self._release_acquired(key, protocol) - - if self._force_close: - should_close = True - - if should_close or protocol.should_close: - transport = protocol.transport - protocol.close() - - if key.is_ssl and not self._cleanup_closed_disabled: - self._cleanup_closed_transports.append(transport) - else: - conns = self._conns.get(key) - if conns is None: - conns = self._conns[key] = [] - conns.append((protocol, self._loop.time())) - - if self._cleanup_handle is None: - self._cleanup_handle = helpers.weakref_handle( - self, "_cleanup", self._keepalive_timeout, self._loop - ) - - async def _create_connection( - self, req: "ClientRequest", traces: List["Trace"], timeout: "ClientTimeout" - ) -> ResponseHandler: - raise NotImplementedError() - - -class _DNSCacheTable: - def __init__(self, ttl: Optional[float] = None) -> None: - self._addrs_rr = ( - {} - ) # type: Dict[Tuple[str, int], Tuple[Iterator[Dict[str, Any]], int]] - self._timestamps = {} # type: Dict[Tuple[str, int], float] - self._ttl = ttl - - def __contains__(self, host: object) -> bool: - return host in self._addrs_rr - - def add(self, key: Tuple[str, int], addrs: List[Dict[str, Any]]) -> None: - self._addrs_rr[key] = (cycle(addrs), len(addrs)) - - if self._ttl: - self._timestamps[key] = monotonic() - - def remove(self, key: Tuple[str, int]) -> None: - self._addrs_rr.pop(key, None) - - if self._ttl: - self._timestamps.pop(key, None) - - def clear(self) -> None: - self._addrs_rr.clear() - self._timestamps.clear() - - def next_addrs(self, key: Tuple[str, int]) -> List[Dict[str, Any]]: - loop, length = self._addrs_rr[key] - addrs = list(islice(loop, length)) - # Consume one more element to shift internal state of `cycle` - next(loop) - return addrs - - def expired(self, key: Tuple[str, int]) -> bool: - if self._ttl is None: - return False - - return self._timestamps[key] + self._ttl < monotonic() - - -class TCPConnector(BaseConnector): - """TCP connector. - - verify_ssl - Set to True to check ssl certifications. - fingerprint - Pass the binary sha256 - digest of the expected certificate in DER format to verify - that the certificate the server presents matches. See also - https://en.wikipedia.org/wiki/Transport_Layer_Security#Certificate_pinning - resolver - Enable DNS lookups and use this - resolver - use_dns_cache - Use memory cache for DNS lookups. - ttl_dns_cache - Max seconds having cached a DNS entry, None forever. - family - socket address family - local_addr - local tuple of (host, port) to bind socket to - - keepalive_timeout - (optional) Keep-alive timeout. - force_close - Set to True to force close and do reconnect - after each request (and between redirects). - limit - The total number of simultaneous connections. - limit_per_host - Number of simultaneous connections to one host. - enable_cleanup_closed - Enables clean-up closed ssl transports. - Disabled by default. - loop - Optional event loop. - """ - - def __init__( - self, - *, - verify_ssl: bool = True, - fingerprint: Optional[bytes] = None, - use_dns_cache: bool = True, - ttl_dns_cache: Optional[int] = 10, - family: int = 0, - ssl_context: Optional[SSLContext] = None, - ssl: Union[None, bool, Fingerprint, SSLContext] = None, - local_addr: Optional[Tuple[str, int]] = None, - resolver: Optional[AbstractResolver] = None, - keepalive_timeout: Union[None, float, object] = sentinel, - force_close: bool = False, - limit: int = 100, - limit_per_host: int = 0, - enable_cleanup_closed: bool = False, - loop: Optional[asyncio.AbstractEventLoop] = None, - ): - super().__init__( - keepalive_timeout=keepalive_timeout, - force_close=force_close, - limit=limit, - limit_per_host=limit_per_host, - enable_cleanup_closed=enable_cleanup_closed, - loop=loop, - ) - - self._ssl = _merge_ssl_params(ssl, verify_ssl, ssl_context, fingerprint) - if resolver is None: - resolver = DefaultResolver(loop=self._loop) - self._resolver = resolver - - self._use_dns_cache = use_dns_cache - self._cached_hosts = _DNSCacheTable(ttl=ttl_dns_cache) - self._throttle_dns_events = ( - {} - ) # type: Dict[Tuple[str, int], EventResultOrError] - self._family = family - self._local_addr = local_addr - - def close(self) -> Awaitable[None]: - """Close all ongoing DNS calls.""" - for ev in self._throttle_dns_events.values(): - ev.cancel() - - return super().close() - - @property - def family(self) -> int: - """Socket family like AF_INET.""" - return self._family - - @property - def use_dns_cache(self) -> bool: - """True if local DNS caching is enabled.""" - return self._use_dns_cache - - def clear_dns_cache( - self, host: Optional[str] = None, port: Optional[int] = None - ) -> None: - """Remove specified host/port or clear all dns local cache.""" - if host is not None and port is not None: - self._cached_hosts.remove((host, port)) - elif host is not None or port is not None: - raise ValueError("either both host and port " "or none of them are allowed") - else: - self._cached_hosts.clear() - - async def _resolve_host( - self, host: str, port: int, traces: Optional[List["Trace"]] = None - ) -> List[Dict[str, Any]]: - if is_ip_address(host): - return [ - { - "hostname": host, - "host": host, - "port": port, - "family": self._family, - "proto": 0, - "flags": 0, - } - ] - - if not self._use_dns_cache: - - if traces: - for trace in traces: - await trace.send_dns_resolvehost_start(host) - - res = await self._resolver.resolve(host, port, family=self._family) - - if traces: - for trace in traces: - await trace.send_dns_resolvehost_end(host) - - return res - - key = (host, port) - - if (key in self._cached_hosts) and (not self._cached_hosts.expired(key)): - # get result early, before any await (#4014) - result = self._cached_hosts.next_addrs(key) - - if traces: - for trace in traces: - await trace.send_dns_cache_hit(host) - return result - - if key in self._throttle_dns_events: - # get event early, before any await (#4014) - event = self._throttle_dns_events[key] - if traces: - for trace in traces: - await trace.send_dns_cache_hit(host) - await event.wait() - else: - # update dict early, before any await (#4014) - self._throttle_dns_events[key] = EventResultOrError(self._loop) - if traces: - for trace in traces: - await trace.send_dns_cache_miss(host) - try: - - if traces: - for trace in traces: - await trace.send_dns_resolvehost_start(host) - - addrs = await self._resolver.resolve(host, port, family=self._family) - if traces: - for trace in traces: - await trace.send_dns_resolvehost_end(host) - - self._cached_hosts.add(key, addrs) - self._throttle_dns_events[key].set() - except BaseException as e: - # any DNS exception, independently of the implementation - # is set for the waiters to raise the same exception. - self._throttle_dns_events[key].set(exc=e) - raise - finally: - self._throttle_dns_events.pop(key) - - return self._cached_hosts.next_addrs(key) - - async def _create_connection( - self, req: "ClientRequest", traces: List["Trace"], timeout: "ClientTimeout" - ) -> ResponseHandler: - """Create connection. - - Has same keyword arguments as BaseEventLoop.create_connection. - """ - if req.proxy: - _, proto = await self._create_proxy_connection(req, traces, timeout) - else: - _, proto = await self._create_direct_connection(req, traces, timeout) - - return proto - - @staticmethod - @functools.lru_cache(None) - def _make_ssl_context(verified: bool) -> SSLContext: - if verified: - return ssl.create_default_context() - else: - sslcontext = ssl.SSLContext(ssl.PROTOCOL_SSLv23) - sslcontext.options |= ssl.OP_NO_SSLv2 - sslcontext.options |= ssl.OP_NO_SSLv3 - try: - sslcontext.options |= ssl.OP_NO_COMPRESSION - except AttributeError as attr_err: - warnings.warn( - "{!s}: The Python interpreter is compiled " - "against OpenSSL < 1.0.0. Ref: " - "https://docs.python.org/3/library/ssl.html" - "#ssl.OP_NO_COMPRESSION".format(attr_err), - ) - sslcontext.set_default_verify_paths() - return sslcontext - - def _get_ssl_context(self, req: "ClientRequest") -> Optional[SSLContext]: - """Logic to get the correct SSL context - - 0. if req.ssl is false, return None - - 1. if ssl_context is specified in req, use it - 2. if _ssl_context is specified in self, use it - 3. otherwise: - 1. if verify_ssl is not specified in req, use self.ssl_context - (will generate a default context according to self.verify_ssl) - 2. if verify_ssl is True in req, generate a default SSL context - 3. if verify_ssl is False in req, generate a SSL context that - won't verify - """ - if req.is_ssl(): - if ssl is None: # pragma: no cover - raise RuntimeError("SSL is not supported.") - sslcontext = req.ssl - if isinstance(sslcontext, ssl.SSLContext): - return sslcontext - if sslcontext is not None: - # not verified or fingerprinted - return self._make_ssl_context(False) - sslcontext = self._ssl - if isinstance(sslcontext, ssl.SSLContext): - return sslcontext - if sslcontext is not None: - # not verified or fingerprinted - return self._make_ssl_context(False) - return self._make_ssl_context(True) - else: - return None - - def _get_fingerprint(self, req: "ClientRequest") -> Optional["Fingerprint"]: - ret = req.ssl - if isinstance(ret, Fingerprint): - return ret - ret = self._ssl - if isinstance(ret, Fingerprint): - return ret - return None - - async def _wrap_create_connection( - self, - *args: Any, - req: "ClientRequest", - timeout: "ClientTimeout", - client_error: Type[Exception] = ClientConnectorError, - **kwargs: Any, - ) -> Tuple[asyncio.Transport, ResponseHandler]: - try: - with CeilTimeout(timeout.sock_connect): - return await self._loop.create_connection(*args, **kwargs) # type: ignore # noqa - except cert_errors as exc: - raise ClientConnectorCertificateError(req.connection_key, exc) from exc - except ssl_errors as exc: - raise ClientConnectorSSLError(req.connection_key, exc) from exc - except OSError as exc: - raise client_error(req.connection_key, exc) from exc - - async def _create_direct_connection( - self, - req: "ClientRequest", - traces: List["Trace"], - timeout: "ClientTimeout", - *, - client_error: Type[Exception] = ClientConnectorError, - ) -> Tuple[asyncio.Transport, ResponseHandler]: - sslcontext = self._get_ssl_context(req) - fingerprint = self._get_fingerprint(req) - - host = req.url.raw_host - assert host is not None - port = req.port - assert port is not None - host_resolved = asyncio.ensure_future( - self._resolve_host(host, port, traces=traces), loop=self._loop - ) - try: - # Cancelling this lookup should not cancel the underlying lookup - # or else the cancel event will get broadcast to all the waiters - # across all connections. - hosts = await asyncio.shield(host_resolved) - except asyncio.CancelledError: - - def drop_exception(fut: "asyncio.Future[List[Dict[str, Any]]]") -> None: - with suppress(Exception, asyncio.CancelledError): - fut.result() - - host_resolved.add_done_callback(drop_exception) - raise - except OSError as exc: - # in case of proxy it is not ClientProxyConnectionError - # it is problem of resolving proxy ip itself - raise ClientConnectorError(req.connection_key, exc) from exc - - last_exc = None # type: Optional[Exception] - - for hinfo in hosts: - host = hinfo["host"] - port = hinfo["port"] - - try: - transp, proto = await self._wrap_create_connection( - self._factory, - host, - port, - timeout=timeout, - ssl=sslcontext, - family=hinfo["family"], - proto=hinfo["proto"], - flags=hinfo["flags"], - server_hostname=hinfo["hostname"] if sslcontext else None, - local_addr=self._local_addr, - req=req, - client_error=client_error, - ) - except ClientConnectorError as exc: - last_exc = exc - continue - - if req.is_ssl() and fingerprint: - try: - fingerprint.check(transp) - except ServerFingerprintMismatch as exc: - transp.close() - if not self._cleanup_closed_disabled: - self._cleanup_closed_transports.append(transp) - last_exc = exc - continue - - return transp, proto - else: - assert last_exc is not None - raise last_exc - - async def _create_proxy_connection( - self, req: "ClientRequest", traces: List["Trace"], timeout: "ClientTimeout" - ) -> Tuple[asyncio.Transport, ResponseHandler]: - headers = {} # type: Dict[str, str] - if req.proxy_headers is not None: - headers = req.proxy_headers # type: ignore - headers[hdrs.HOST] = req.headers[hdrs.HOST] - - url = req.proxy - assert url is not None - proxy_req = ClientRequest( - hdrs.METH_GET, - url, - headers=headers, - auth=req.proxy_auth, - loop=self._loop, - ssl=req.ssl, - ) - - # create connection to proxy server - transport, proto = await self._create_direct_connection( - proxy_req, [], timeout, client_error=ClientProxyConnectionError - ) - - # Many HTTP proxies has buggy keepalive support. Let's not - # reuse connection but close it after processing every - # response. - proto.force_close() - - auth = proxy_req.headers.pop(hdrs.AUTHORIZATION, None) - if auth is not None: - if not req.is_ssl(): - req.headers[hdrs.PROXY_AUTHORIZATION] = auth - else: - proxy_req.headers[hdrs.PROXY_AUTHORIZATION] = auth - - if req.is_ssl(): - sslcontext = self._get_ssl_context(req) - # For HTTPS requests over HTTP proxy - # we must notify proxy to tunnel connection - # so we send CONNECT command: - # CONNECT www.python.org:443 HTTP/1.1 - # Host: www.python.org - # - # next we must do TLS handshake and so on - # to do this we must wrap raw socket into secure one - # asyncio handles this perfectly - proxy_req.method = hdrs.METH_CONNECT - proxy_req.url = req.url - key = attr.evolve( - req.connection_key, proxy=None, proxy_auth=None, proxy_headers_hash=None - ) - conn = Connection(self, key, proto, self._loop) - proxy_resp = await proxy_req.send(conn) - try: - protocol = conn._protocol - assert protocol is not None - protocol.set_response_params() - resp = await proxy_resp.start(conn) - except BaseException: - proxy_resp.close() - conn.close() - raise - else: - conn._protocol = None - conn._transport = None - try: - if resp.status != 200: - message = resp.reason - if message is None: - message = RESPONSES[resp.status][0] - raise ClientHttpProxyError( - proxy_resp.request_info, - resp.history, - status=resp.status, - message=message, - headers=resp.headers, - ) - rawsock = transport.get_extra_info("socket", default=None) - if rawsock is None: - raise RuntimeError("Transport does not expose socket instance") - # Duplicate the socket, so now we can close proxy transport - rawsock = rawsock.dup() - finally: - transport.close() - - transport, proto = await self._wrap_create_connection( - self._factory, - timeout=timeout, - ssl=sslcontext, - sock=rawsock, - server_hostname=req.host, - req=req, - ) - finally: - proxy_resp.close() - - return transport, proto - - -class UnixConnector(BaseConnector): - """Unix socket connector. - - path - Unix socket path. - keepalive_timeout - (optional) Keep-alive timeout. - force_close - Set to True to force close and do reconnect - after each request (and between redirects). - limit - The total number of simultaneous connections. - limit_per_host - Number of simultaneous connections to one host. - loop - Optional event loop. - """ - - def __init__( - self, - path: str, - force_close: bool = False, - keepalive_timeout: Union[object, float, None] = sentinel, - limit: int = 100, - limit_per_host: int = 0, - loop: Optional[asyncio.AbstractEventLoop] = None, - ) -> None: - super().__init__( - force_close=force_close, - keepalive_timeout=keepalive_timeout, - limit=limit, - limit_per_host=limit_per_host, - loop=loop, - ) - self._path = path - - @property - def path(self) -> str: - """Path to unix socket.""" - return self._path - - async def _create_connection( - self, req: "ClientRequest", traces: List["Trace"], timeout: "ClientTimeout" - ) -> ResponseHandler: - try: - with CeilTimeout(timeout.sock_connect): - _, proto = await self._loop.create_unix_connection( - self._factory, self._path - ) - except OSError as exc: - raise ClientConnectorError(req.connection_key, exc) from exc - - return cast(ResponseHandler, proto) - - -class NamedPipeConnector(BaseConnector): - """Named pipe connector. - - Only supported by the proactor event loop. - See also: https://docs.python.org/3.7/library/asyncio-eventloop.html - - path - Windows named pipe path. - keepalive_timeout - (optional) Keep-alive timeout. - force_close - Set to True to force close and do reconnect - after each request (and between redirects). - limit - The total number of simultaneous connections. - limit_per_host - Number of simultaneous connections to one host. - loop - Optional event loop. - """ - - def __init__( - self, - path: str, - force_close: bool = False, - keepalive_timeout: Union[object, float, None] = sentinel, - limit: int = 100, - limit_per_host: int = 0, - loop: Optional[asyncio.AbstractEventLoop] = None, - ) -> None: - super().__init__( - force_close=force_close, - keepalive_timeout=keepalive_timeout, - limit=limit, - limit_per_host=limit_per_host, - loop=loop, - ) - if not isinstance(self._loop, asyncio.ProactorEventLoop): # type: ignore - raise RuntimeError( - "Named Pipes only available in proactor " "loop under windows" - ) - self._path = path - - @property - def path(self) -> str: - """Path to the named pipe.""" - return self._path - - async def _create_connection( - self, req: "ClientRequest", traces: List["Trace"], timeout: "ClientTimeout" - ) -> ResponseHandler: - try: - with CeilTimeout(timeout.sock_connect): - _, proto = await self._loop.create_pipe_connection( # type: ignore - self._factory, self._path - ) - # the drain is required so that the connection_made is called - # and transport is set otherwise it is not set before the - # `assert conn.transport is not None` - # in client.py's _request method - await asyncio.sleep(0) - # other option is to manually set transport like - # `proto.transport = trans` - except OSError as exc: - raise ClientConnectorError(req.connection_key, exc) from exc - - return cast(ResponseHandler, proto) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/cookiejar.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/cookiejar.py deleted file mode 100644 index b6b59d62..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/cookiejar.py +++ /dev/null @@ -1,382 +0,0 @@ -import asyncio -import datetime -import os # noqa -import pathlib -import pickle -import re -from collections import defaultdict -from http.cookies import BaseCookie, Morsel, SimpleCookie -from typing import ( # noqa - DefaultDict, - Dict, - Iterable, - Iterator, - Mapping, - Optional, - Set, - Tuple, - Union, - cast, -) - -from yarl import URL - -from .abc import AbstractCookieJar -from .helpers import is_ip_address, next_whole_second -from .typedefs import LooseCookies, PathLike - -__all__ = ("CookieJar", "DummyCookieJar") - - -CookieItem = Union[str, "Morsel[str]"] - - -class CookieJar(AbstractCookieJar): - """Implements cookie storage adhering to RFC 6265.""" - - DATE_TOKENS_RE = re.compile( - r"[\x09\x20-\x2F\x3B-\x40\x5B-\x60\x7B-\x7E]*" - r"(?P[\x00-\x08\x0A-\x1F\d:a-zA-Z\x7F-\xFF]+)" - ) - - DATE_HMS_TIME_RE = re.compile(r"(\d{1,2}):(\d{1,2}):(\d{1,2})") - - DATE_DAY_OF_MONTH_RE = re.compile(r"(\d{1,2})") - - DATE_MONTH_RE = re.compile( - "(jan)|(feb)|(mar)|(apr)|(may)|(jun)|(jul)|" "(aug)|(sep)|(oct)|(nov)|(dec)", - re.I, - ) - - DATE_YEAR_RE = re.compile(r"(\d{2,4})") - - MAX_TIME = datetime.datetime.max.replace(tzinfo=datetime.timezone.utc) - - MAX_32BIT_TIME = datetime.datetime.utcfromtimestamp(2 ** 31 - 1) - - def __init__( - self, - *, - unsafe: bool = False, - quote_cookie: bool = True, - loop: Optional[asyncio.AbstractEventLoop] = None - ) -> None: - super().__init__(loop=loop) - self._cookies = defaultdict( - SimpleCookie - ) # type: DefaultDict[str, SimpleCookie[str]] - self._host_only_cookies = set() # type: Set[Tuple[str, str]] - self._unsafe = unsafe - self._quote_cookie = quote_cookie - self._next_expiration = next_whole_second() - self._expirations = {} # type: Dict[Tuple[str, str], datetime.datetime] - # #4515: datetime.max may not be representable on 32-bit platforms - self._max_time = self.MAX_TIME - try: - self._max_time.timestamp() - except OverflowError: - self._max_time = self.MAX_32BIT_TIME - - def save(self, file_path: PathLike) -> None: - file_path = pathlib.Path(file_path) - with file_path.open(mode="wb") as f: - pickle.dump(self._cookies, f, pickle.HIGHEST_PROTOCOL) - - def load(self, file_path: PathLike) -> None: - file_path = pathlib.Path(file_path) - with file_path.open(mode="rb") as f: - self._cookies = pickle.load(f) - - def clear(self) -> None: - self._cookies.clear() - self._host_only_cookies.clear() - self._next_expiration = next_whole_second() - self._expirations.clear() - - def __iter__(self) -> "Iterator[Morsel[str]]": - self._do_expiration() - for val in self._cookies.values(): - yield from val.values() - - def __len__(self) -> int: - return sum(1 for i in self) - - def _do_expiration(self) -> None: - now = datetime.datetime.now(datetime.timezone.utc) - if self._next_expiration > now: - return - if not self._expirations: - return - next_expiration = self._max_time - to_del = [] - cookies = self._cookies - expirations = self._expirations - for (domain, name), when in expirations.items(): - if when <= now: - cookies[domain].pop(name, None) - to_del.append((domain, name)) - self._host_only_cookies.discard((domain, name)) - else: - next_expiration = min(next_expiration, when) - for key in to_del: - del expirations[key] - - try: - self._next_expiration = next_expiration.replace( - microsecond=0 - ) + datetime.timedelta(seconds=1) - except OverflowError: - self._next_expiration = self._max_time - - def _expire_cookie(self, when: datetime.datetime, domain: str, name: str) -> None: - self._next_expiration = min(self._next_expiration, when) - self._expirations[(domain, name)] = when - - def update_cookies(self, cookies: LooseCookies, response_url: URL = URL()) -> None: - """Update cookies.""" - hostname = response_url.raw_host - - if not self._unsafe and is_ip_address(hostname): - # Don't accept cookies from IPs - return - - if isinstance(cookies, Mapping): - cookies = cookies.items() - - for name, cookie in cookies: - if not isinstance(cookie, Morsel): - tmp = SimpleCookie() # type: SimpleCookie[str] - tmp[name] = cookie # type: ignore - cookie = tmp[name] - - domain = cookie["domain"] - - # ignore domains with trailing dots - if domain.endswith("."): - domain = "" - del cookie["domain"] - - if not domain and hostname is not None: - # Set the cookie's domain to the response hostname - # and set its host-only-flag - self._host_only_cookies.add((hostname, name)) - domain = cookie["domain"] = hostname - - if domain.startswith("."): - # Remove leading dot - domain = domain[1:] - cookie["domain"] = domain - - if hostname and not self._is_domain_match(domain, hostname): - # Setting cookies for different domains is not allowed - continue - - path = cookie["path"] - if not path or not path.startswith("/"): - # Set the cookie's path to the response path - path = response_url.path - if not path.startswith("/"): - path = "/" - else: - # Cut everything from the last slash to the end - path = "/" + path[1 : path.rfind("/")] - cookie["path"] = path - - max_age = cookie["max-age"] - if max_age: - try: - delta_seconds = int(max_age) - try: - max_age_expiration = datetime.datetime.now( - datetime.timezone.utc - ) + datetime.timedelta(seconds=delta_seconds) - except OverflowError: - max_age_expiration = self._max_time - self._expire_cookie(max_age_expiration, domain, name) - except ValueError: - cookie["max-age"] = "" - - else: - expires = cookie["expires"] - if expires: - expire_time = self._parse_date(expires) - if expire_time: - self._expire_cookie(expire_time, domain, name) - else: - cookie["expires"] = "" - - self._cookies[domain][name] = cookie - - self._do_expiration() - - def filter_cookies( - self, request_url: URL = URL() - ) -> Union["BaseCookie[str]", "SimpleCookie[str]"]: - """Returns this jar's cookies filtered by their attributes.""" - self._do_expiration() - request_url = URL(request_url) - filtered: Union["SimpleCookie[str]", "BaseCookie[str]"] = ( - SimpleCookie() if self._quote_cookie else BaseCookie() - ) - hostname = request_url.raw_host or "" - is_not_secure = request_url.scheme not in ("https", "wss") - - for cookie in self: - name = cookie.key - domain = cookie["domain"] - - # Send shared cookies - if not domain: - filtered[name] = cookie.value - continue - - if not self._unsafe and is_ip_address(hostname): - continue - - if (domain, name) in self._host_only_cookies: - if domain != hostname: - continue - elif not self._is_domain_match(domain, hostname): - continue - - if not self._is_path_match(request_url.path, cookie["path"]): - continue - - if is_not_secure and cookie["secure"]: - continue - - # It's critical we use the Morsel so the coded_value - # (based on cookie version) is preserved - mrsl_val = cast("Morsel[str]", cookie.get(cookie.key, Morsel())) - mrsl_val.set(cookie.key, cookie.value, cookie.coded_value) - filtered[name] = mrsl_val - - return filtered - - @staticmethod - def _is_domain_match(domain: str, hostname: str) -> bool: - """Implements domain matching adhering to RFC 6265.""" - if hostname == domain: - return True - - if not hostname.endswith(domain): - return False - - non_matching = hostname[: -len(domain)] - - if not non_matching.endswith("."): - return False - - return not is_ip_address(hostname) - - @staticmethod - def _is_path_match(req_path: str, cookie_path: str) -> bool: - """Implements path matching adhering to RFC 6265.""" - if not req_path.startswith("/"): - req_path = "/" - - if req_path == cookie_path: - return True - - if not req_path.startswith(cookie_path): - return False - - if cookie_path.endswith("/"): - return True - - non_matching = req_path[len(cookie_path) :] - - return non_matching.startswith("/") - - @classmethod - def _parse_date(cls, date_str: str) -> Optional[datetime.datetime]: - """Implements date string parsing adhering to RFC 6265.""" - if not date_str: - return None - - found_time = False - found_day = False - found_month = False - found_year = False - - hour = minute = second = 0 - day = 0 - month = 0 - year = 0 - - for token_match in cls.DATE_TOKENS_RE.finditer(date_str): - - token = token_match.group("token") - - if not found_time: - time_match = cls.DATE_HMS_TIME_RE.match(token) - if time_match: - found_time = True - hour, minute, second = [int(s) for s in time_match.groups()] - continue - - if not found_day: - day_match = cls.DATE_DAY_OF_MONTH_RE.match(token) - if day_match: - found_day = True - day = int(day_match.group()) - continue - - if not found_month: - month_match = cls.DATE_MONTH_RE.match(token) - if month_match: - found_month = True - assert month_match.lastindex is not None - month = month_match.lastindex - continue - - if not found_year: - year_match = cls.DATE_YEAR_RE.match(token) - if year_match: - found_year = True - year = int(year_match.group()) - - if 70 <= year <= 99: - year += 1900 - elif 0 <= year <= 69: - year += 2000 - - if False in (found_day, found_month, found_year, found_time): - return None - - if not 1 <= day <= 31: - return None - - if year < 1601 or hour > 23 or minute > 59 or second > 59: - return None - - return datetime.datetime( - year, month, day, hour, minute, second, tzinfo=datetime.timezone.utc - ) - - -class DummyCookieJar(AbstractCookieJar): - """Implements a dummy cookie storage. - - It can be used with the ClientSession when no cookie processing is needed. - - """ - - def __init__(self, *, loop: Optional[asyncio.AbstractEventLoop] = None) -> None: - super().__init__(loop=loop) - - def __iter__(self) -> "Iterator[Morsel[str]]": - while False: - yield None - - def __len__(self) -> int: - return 0 - - def clear(self) -> None: - pass - - def update_cookies(self, cookies: LooseCookies, response_url: URL = URL()) -> None: - pass - - def filter_cookies(self, request_url: URL) -> "BaseCookie[str]": - return SimpleCookie() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/formdata.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/formdata.py deleted file mode 100644 index 900716b7..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/formdata.py +++ /dev/null @@ -1,170 +0,0 @@ -import io -from typing import Any, Iterable, List, Optional -from urllib.parse import urlencode - -from multidict import MultiDict, MultiDictProxy - -from . import hdrs, multipart, payload -from .helpers import guess_filename -from .payload import Payload - -__all__ = ("FormData",) - - -class FormData: - """Helper class for multipart/form-data and - application/x-www-form-urlencoded body generation.""" - - def __init__( - self, - fields: Iterable[Any] = (), - quote_fields: bool = True, - charset: Optional[str] = None, - ) -> None: - self._writer = multipart.MultipartWriter("form-data") - self._fields = [] # type: List[Any] - self._is_multipart = False - self._is_processed = False - self._quote_fields = quote_fields - self._charset = charset - - if isinstance(fields, dict): - fields = list(fields.items()) - elif not isinstance(fields, (list, tuple)): - fields = (fields,) - self.add_fields(*fields) - - @property - def is_multipart(self) -> bool: - return self._is_multipart - - def add_field( - self, - name: str, - value: Any, - *, - content_type: Optional[str] = None, - filename: Optional[str] = None, - content_transfer_encoding: Optional[str] = None - ) -> None: - - if isinstance(value, io.IOBase): - self._is_multipart = True - elif isinstance(value, (bytes, bytearray, memoryview)): - if filename is None and content_transfer_encoding is None: - filename = name - - type_options = MultiDict({"name": name}) # type: MultiDict[str] - if filename is not None and not isinstance(filename, str): - raise TypeError( - "filename must be an instance of str. " "Got: %s" % filename - ) - if filename is None and isinstance(value, io.IOBase): - filename = guess_filename(value, name) - if filename is not None: - type_options["filename"] = filename - self._is_multipart = True - - headers = {} - if content_type is not None: - if not isinstance(content_type, str): - raise TypeError( - "content_type must be an instance of str. " "Got: %s" % content_type - ) - headers[hdrs.CONTENT_TYPE] = content_type - self._is_multipart = True - if content_transfer_encoding is not None: - if not isinstance(content_transfer_encoding, str): - raise TypeError( - "content_transfer_encoding must be an instance" - " of str. Got: %s" % content_transfer_encoding - ) - headers[hdrs.CONTENT_TRANSFER_ENCODING] = content_transfer_encoding - self._is_multipart = True - - self._fields.append((type_options, headers, value)) - - def add_fields(self, *fields: Any) -> None: - to_add = list(fields) - - while to_add: - rec = to_add.pop(0) - - if isinstance(rec, io.IOBase): - k = guess_filename(rec, "unknown") - self.add_field(k, rec) # type: ignore - - elif isinstance(rec, (MultiDictProxy, MultiDict)): - to_add.extend(rec.items()) - - elif isinstance(rec, (list, tuple)) and len(rec) == 2: - k, fp = rec - self.add_field(k, fp) # type: ignore - - else: - raise TypeError( - "Only io.IOBase, multidict and (name, file) " - "pairs allowed, use .add_field() for passing " - "more complex parameters, got {!r}".format(rec) - ) - - def _gen_form_urlencoded(self) -> payload.BytesPayload: - # form data (x-www-form-urlencoded) - data = [] - for type_options, _, value in self._fields: - data.append((type_options["name"], value)) - - charset = self._charset if self._charset is not None else "utf-8" - - if charset == "utf-8": - content_type = "application/x-www-form-urlencoded" - else: - content_type = "application/x-www-form-urlencoded; " "charset=%s" % charset - - return payload.BytesPayload( - urlencode(data, doseq=True, encoding=charset).encode(), - content_type=content_type, - ) - - def _gen_form_data(self) -> multipart.MultipartWriter: - """Encode a list of fields using the multipart/form-data MIME format""" - if self._is_processed: - raise RuntimeError("Form data has been processed already") - for dispparams, headers, value in self._fields: - try: - if hdrs.CONTENT_TYPE in headers: - part = payload.get_payload( - value, - content_type=headers[hdrs.CONTENT_TYPE], - headers=headers, - encoding=self._charset, - ) - else: - part = payload.get_payload( - value, headers=headers, encoding=self._charset - ) - except Exception as exc: - raise TypeError( - "Can not serialize value type: %r\n " - "headers: %r\n value: %r" % (type(value), headers, value) - ) from exc - - if dispparams: - part.set_content_disposition( - "form-data", quote_fields=self._quote_fields, **dispparams - ) - # FIXME cgi.FieldStorage doesn't likes body parts with - # Content-Length which were sent via chunked transfer encoding - assert part.headers is not None - part.headers.popall(hdrs.CONTENT_LENGTH, None) - - self._writer.append_payload(part) - - self._is_processed = True - return self._writer - - def __call__(self) -> Payload: - if self._is_multipart: - return self._gen_form_data() - else: - return self._gen_form_urlencoded() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/frozenlist.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/frozenlist.py deleted file mode 100644 index 46b26108..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/frozenlist.py +++ /dev/null @@ -1,72 +0,0 @@ -from collections.abc import MutableSequence -from functools import total_ordering - -from .helpers import NO_EXTENSIONS - - -@total_ordering -class FrozenList(MutableSequence): - - __slots__ = ("_frozen", "_items") - - def __init__(self, items=None): - self._frozen = False - if items is not None: - items = list(items) - else: - items = [] - self._items = items - - @property - def frozen(self): - return self._frozen - - def freeze(self): - self._frozen = True - - def __getitem__(self, index): - return self._items[index] - - def __setitem__(self, index, value): - if self._frozen: - raise RuntimeError("Cannot modify frozen list.") - self._items[index] = value - - def __delitem__(self, index): - if self._frozen: - raise RuntimeError("Cannot modify frozen list.") - del self._items[index] - - def __len__(self): - return self._items.__len__() - - def __iter__(self): - return self._items.__iter__() - - def __reversed__(self): - return self._items.__reversed__() - - def __eq__(self, other): - return list(self) == other - - def __le__(self, other): - return list(self) <= other - - def insert(self, pos, item): - if self._frozen: - raise RuntimeError("Cannot modify frozen list.") - self._items.insert(pos, item) - - def __repr__(self): - return f"" - - -PyFrozenList = FrozenList - -try: - from aiohttp._frozenlist import FrozenList as CFrozenList # type: ignore - - if not NO_EXTENSIONS: - FrozenList = CFrozenList # type: ignore -except ImportError: # pragma: no cover - pass diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/frozenlist.pyi b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/frozenlist.pyi deleted file mode 100644 index 72ab0867..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/frozenlist.pyi +++ /dev/null @@ -1,46 +0,0 @@ -from typing import ( - Generic, - Iterable, - Iterator, - List, - MutableSequence, - Optional, - TypeVar, - Union, - overload, -) - -_T = TypeVar("_T") -_Arg = Union[List[_T], Iterable[_T]] - -class FrozenList(MutableSequence[_T], Generic[_T]): - def __init__(self, items: Optional[_Arg[_T]] = ...) -> None: ... - @property - def frozen(self) -> bool: ... - def freeze(self) -> None: ... - @overload - def __getitem__(self, i: int) -> _T: ... - @overload - def __getitem__(self, s: slice) -> FrozenList[_T]: ... - @overload - def __setitem__(self, i: int, o: _T) -> None: ... - @overload - def __setitem__(self, s: slice, o: Iterable[_T]) -> None: ... - @overload - def __delitem__(self, i: int) -> None: ... - @overload - def __delitem__(self, i: slice) -> None: ... - def __len__(self) -> int: ... - def __iter__(self) -> Iterator[_T]: ... - def __reversed__(self) -> Iterator[_T]: ... - def __eq__(self, other: object) -> bool: ... - def __le__(self, other: FrozenList[_T]) -> bool: ... - def __ne__(self, other: object) -> bool: ... - def __lt__(self, other: FrozenList[_T]) -> bool: ... - def __ge__(self, other: FrozenList[_T]) -> bool: ... - def __gt__(self, other: FrozenList[_T]) -> bool: ... - def insert(self, pos: int, item: _T) -> None: ... - def __repr__(self) -> str: ... - -# types for C accelerators are the same -CFrozenList = PyFrozenList = FrozenList diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/hdrs.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/hdrs.py deleted file mode 100644 index f04a5457..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/hdrs.py +++ /dev/null @@ -1,108 +0,0 @@ -"""HTTP Headers constants.""" - -# After changing the file content call ./tools/gen.py -# to regenerate the headers parser - -from multidict import istr - -METH_ANY = "*" -METH_CONNECT = "CONNECT" -METH_HEAD = "HEAD" -METH_GET = "GET" -METH_DELETE = "DELETE" -METH_OPTIONS = "OPTIONS" -METH_PATCH = "PATCH" -METH_POST = "POST" -METH_PUT = "PUT" -METH_TRACE = "TRACE" - -METH_ALL = { - METH_CONNECT, - METH_HEAD, - METH_GET, - METH_DELETE, - METH_OPTIONS, - METH_PATCH, - METH_POST, - METH_PUT, - METH_TRACE, -} - - -ACCEPT = istr("Accept") -ACCEPT_CHARSET = istr("Accept-Charset") -ACCEPT_ENCODING = istr("Accept-Encoding") -ACCEPT_LANGUAGE = istr("Accept-Language") -ACCEPT_RANGES = istr("Accept-Ranges") -ACCESS_CONTROL_MAX_AGE = istr("Access-Control-Max-Age") -ACCESS_CONTROL_ALLOW_CREDENTIALS = istr("Access-Control-Allow-Credentials") -ACCESS_CONTROL_ALLOW_HEADERS = istr("Access-Control-Allow-Headers") -ACCESS_CONTROL_ALLOW_METHODS = istr("Access-Control-Allow-Methods") -ACCESS_CONTROL_ALLOW_ORIGIN = istr("Access-Control-Allow-Origin") -ACCESS_CONTROL_EXPOSE_HEADERS = istr("Access-Control-Expose-Headers") -ACCESS_CONTROL_REQUEST_HEADERS = istr("Access-Control-Request-Headers") -ACCESS_CONTROL_REQUEST_METHOD = istr("Access-Control-Request-Method") -AGE = istr("Age") -ALLOW = istr("Allow") -AUTHORIZATION = istr("Authorization") -CACHE_CONTROL = istr("Cache-Control") -CONNECTION = istr("Connection") -CONTENT_DISPOSITION = istr("Content-Disposition") -CONTENT_ENCODING = istr("Content-Encoding") -CONTENT_LANGUAGE = istr("Content-Language") -CONTENT_LENGTH = istr("Content-Length") -CONTENT_LOCATION = istr("Content-Location") -CONTENT_MD5 = istr("Content-MD5") -CONTENT_RANGE = istr("Content-Range") -CONTENT_TRANSFER_ENCODING = istr("Content-Transfer-Encoding") -CONTENT_TYPE = istr("Content-Type") -COOKIE = istr("Cookie") -DATE = istr("Date") -DESTINATION = istr("Destination") -DIGEST = istr("Digest") -ETAG = istr("Etag") -EXPECT = istr("Expect") -EXPIRES = istr("Expires") -FORWARDED = istr("Forwarded") -FROM = istr("From") -HOST = istr("Host") -IF_MATCH = istr("If-Match") -IF_MODIFIED_SINCE = istr("If-Modified-Since") -IF_NONE_MATCH = istr("If-None-Match") -IF_RANGE = istr("If-Range") -IF_UNMODIFIED_SINCE = istr("If-Unmodified-Since") -KEEP_ALIVE = istr("Keep-Alive") -LAST_EVENT_ID = istr("Last-Event-ID") -LAST_MODIFIED = istr("Last-Modified") -LINK = istr("Link") -LOCATION = istr("Location") -MAX_FORWARDS = istr("Max-Forwards") -ORIGIN = istr("Origin") -PRAGMA = istr("Pragma") -PROXY_AUTHENTICATE = istr("Proxy-Authenticate") -PROXY_AUTHORIZATION = istr("Proxy-Authorization") -RANGE = istr("Range") -REFERER = istr("Referer") -RETRY_AFTER = istr("Retry-After") -SEC_WEBSOCKET_ACCEPT = istr("Sec-WebSocket-Accept") -SEC_WEBSOCKET_VERSION = istr("Sec-WebSocket-Version") -SEC_WEBSOCKET_PROTOCOL = istr("Sec-WebSocket-Protocol") -SEC_WEBSOCKET_EXTENSIONS = istr("Sec-WebSocket-Extensions") -SEC_WEBSOCKET_KEY = istr("Sec-WebSocket-Key") -SEC_WEBSOCKET_KEY1 = istr("Sec-WebSocket-Key1") -SERVER = istr("Server") -SET_COOKIE = istr("Set-Cookie") -TE = istr("TE") -TRAILER = istr("Trailer") -TRANSFER_ENCODING = istr("Transfer-Encoding") -UPGRADE = istr("Upgrade") -URI = istr("URI") -USER_AGENT = istr("User-Agent") -VARY = istr("Vary") -VIA = istr("Via") -WANT_DIGEST = istr("Want-Digest") -WARNING = istr("Warning") -WWW_AUTHENTICATE = istr("WWW-Authenticate") -X_FORWARDED_FOR = istr("X-Forwarded-For") -X_FORWARDED_HOST = istr("X-Forwarded-Host") -X_FORWARDED_PROTO = istr("X-Forwarded-Proto") diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/helpers.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/helpers.py deleted file mode 100644 index bbf5f129..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/helpers.py +++ /dev/null @@ -1,780 +0,0 @@ -"""Various helper functions""" - -import asyncio -import base64 -import binascii -import cgi -import datetime -import functools -import inspect -import netrc -import os -import platform -import re -import sys -import time -import warnings -import weakref -from collections import namedtuple -from contextlib import suppress -from math import ceil -from pathlib import Path -from types import TracebackType -from typing import ( - Any, - Callable, - Dict, - Generator, - Generic, - Iterable, - Iterator, - List, - Mapping, - Optional, - Pattern, - Set, - Tuple, - Type, - TypeVar, - Union, - cast, -) -from urllib.parse import quote -from urllib.request import getproxies - -import async_timeout -import attr -from multidict import MultiDict, MultiDictProxy -from typing_extensions import Protocol -from yarl import URL - -from . import hdrs -from .log import client_logger, internal_logger -from .typedefs import PathLike # noqa - -__all__ = ("BasicAuth", "ChainMapProxy") - -PY_36 = sys.version_info >= (3, 6) -PY_37 = sys.version_info >= (3, 7) -PY_38 = sys.version_info >= (3, 8) - -if not PY_37: - import idna_ssl - - idna_ssl.patch_match_hostname() - -try: - from typing import ContextManager -except ImportError: - from typing_extensions import ContextManager - - -def all_tasks( - loop: Optional[asyncio.AbstractEventLoop] = None, -) -> Set["asyncio.Task[Any]"]: - tasks = list(asyncio.Task.all_tasks(loop)) - return {t for t in tasks if not t.done()} - - -if PY_37: - all_tasks = getattr(asyncio, "all_tasks") - - -_T = TypeVar("_T") -_S = TypeVar("_S") - - -sentinel = object() # type: Any -NO_EXTENSIONS = bool(os.environ.get("AIOHTTP_NO_EXTENSIONS")) # type: bool - -# N.B. sys.flags.dev_mode is available on Python 3.7+, use getattr -# for compatibility with older versions -DEBUG = getattr(sys.flags, "dev_mode", False) or ( - not sys.flags.ignore_environment and bool(os.environ.get("PYTHONASYNCIODEBUG")) -) # type: bool - - -CHAR = {chr(i) for i in range(0, 128)} -CTL = {chr(i) for i in range(0, 32)} | { - chr(127), -} -SEPARATORS = { - "(", - ")", - "<", - ">", - "@", - ",", - ";", - ":", - "\\", - '"', - "/", - "[", - "]", - "?", - "=", - "{", - "}", - " ", - chr(9), -} -TOKEN = CHAR ^ CTL ^ SEPARATORS - - -class noop: - def __await__(self) -> Generator[None, None, None]: - yield - - -class BasicAuth(namedtuple("BasicAuth", ["login", "password", "encoding"])): - """Http basic authentication helper.""" - - def __new__( - cls, login: str, password: str = "", encoding: str = "latin1" - ) -> "BasicAuth": - if login is None: - raise ValueError("None is not allowed as login value") - - if password is None: - raise ValueError("None is not allowed as password value") - - if ":" in login: - raise ValueError('A ":" is not allowed in login (RFC 1945#section-11.1)') - - return super().__new__(cls, login, password, encoding) - - @classmethod - def decode(cls, auth_header: str, encoding: str = "latin1") -> "BasicAuth": - """Create a BasicAuth object from an Authorization HTTP header.""" - try: - auth_type, encoded_credentials = auth_header.split(" ", 1) - except ValueError: - raise ValueError("Could not parse authorization header.") - - if auth_type.lower() != "basic": - raise ValueError("Unknown authorization method %s" % auth_type) - - try: - decoded = base64.b64decode( - encoded_credentials.encode("ascii"), validate=True - ).decode(encoding) - except binascii.Error: - raise ValueError("Invalid base64 encoding.") - - try: - # RFC 2617 HTTP Authentication - # https://www.ietf.org/rfc/rfc2617.txt - # the colon must be present, but the username and password may be - # otherwise blank. - username, password = decoded.split(":", 1) - except ValueError: - raise ValueError("Invalid credentials.") - - return cls(username, password, encoding=encoding) - - @classmethod - def from_url(cls, url: URL, *, encoding: str = "latin1") -> Optional["BasicAuth"]: - """Create BasicAuth from url.""" - if not isinstance(url, URL): - raise TypeError("url should be yarl.URL instance") - if url.user is None: - return None - return cls(url.user, url.password or "", encoding=encoding) - - def encode(self) -> str: - """Encode credentials.""" - creds = (f"{self.login}:{self.password}").encode(self.encoding) - return "Basic %s" % base64.b64encode(creds).decode(self.encoding) - - -def strip_auth_from_url(url: URL) -> Tuple[URL, Optional[BasicAuth]]: - auth = BasicAuth.from_url(url) - if auth is None: - return url, None - else: - return url.with_user(None), auth - - -def netrc_from_env() -> Optional[netrc.netrc]: - """Attempt to load the netrc file from the path specified by the env-var - NETRC or in the default location in the user's home directory. - - Returns None if it couldn't be found or fails to parse. - """ - netrc_env = os.environ.get("NETRC") - - if netrc_env is not None: - netrc_path = Path(netrc_env) - else: - try: - home_dir = Path.home() - except RuntimeError as e: # pragma: no cover - # if pathlib can't resolve home, it may raise a RuntimeError - client_logger.debug( - "Could not resolve home directory when " - "trying to look for .netrc file: %s", - e, - ) - return None - - netrc_path = home_dir / ( - "_netrc" if platform.system() == "Windows" else ".netrc" - ) - - try: - return netrc.netrc(str(netrc_path)) - except netrc.NetrcParseError as e: - client_logger.warning("Could not parse .netrc file: %s", e) - except OSError as e: - # we couldn't read the file (doesn't exist, permissions, etc.) - if netrc_env or netrc_path.is_file(): - # only warn if the environment wanted us to load it, - # or it appears like the default file does actually exist - client_logger.warning("Could not read .netrc file: %s", e) - - return None - - -@attr.s(auto_attribs=True, frozen=True, slots=True) -class ProxyInfo: - proxy: URL - proxy_auth: Optional[BasicAuth] - - -def proxies_from_env() -> Dict[str, ProxyInfo]: - proxy_urls = {k: URL(v) for k, v in getproxies().items() if k in ("http", "https")} - netrc_obj = netrc_from_env() - stripped = {k: strip_auth_from_url(v) for k, v in proxy_urls.items()} - ret = {} - for proto, val in stripped.items(): - proxy, auth = val - if proxy.scheme == "https": - client_logger.warning("HTTPS proxies %s are not supported, ignoring", proxy) - continue - if netrc_obj and auth is None: - auth_from_netrc = None - if proxy.host is not None: - auth_from_netrc = netrc_obj.authenticators(proxy.host) - if auth_from_netrc is not None: - # auth_from_netrc is a (`user`, `account`, `password`) tuple, - # `user` and `account` both can be username, - # if `user` is None, use `account` - *logins, password = auth_from_netrc - login = logins[0] if logins[0] else logins[-1] - auth = BasicAuth(cast(str, login), cast(str, password)) - ret[proto] = ProxyInfo(proxy, auth) - return ret - - -def current_task( - loop: Optional[asyncio.AbstractEventLoop] = None, -) -> "Optional[asyncio.Task[Any]]": - if PY_37: - return asyncio.current_task(loop=loop) - else: - return asyncio.Task.current_task(loop=loop) - - -def get_running_loop( - loop: Optional[asyncio.AbstractEventLoop] = None, -) -> asyncio.AbstractEventLoop: - if loop is None: - loop = asyncio.get_event_loop() - if not loop.is_running(): - warnings.warn( - "The object should be created within an async function", - DeprecationWarning, - stacklevel=3, - ) - if loop.get_debug(): - internal_logger.warning( - "The object should be created within an async function", stack_info=True - ) - return loop - - -def isasyncgenfunction(obj: Any) -> bool: - func = getattr(inspect, "isasyncgenfunction", None) - if func is not None: - return func(obj) - else: - return False - - -@attr.s(auto_attribs=True, frozen=True, slots=True) -class MimeType: - type: str - subtype: str - suffix: str - parameters: "MultiDictProxy[str]" - - -@functools.lru_cache(maxsize=56) -def parse_mimetype(mimetype: str) -> MimeType: - """Parses a MIME type into its components. - - mimetype is a MIME type string. - - Returns a MimeType object. - - Example: - - >>> parse_mimetype('text/html; charset=utf-8') - MimeType(type='text', subtype='html', suffix='', - parameters={'charset': 'utf-8'}) - - """ - if not mimetype: - return MimeType( - type="", subtype="", suffix="", parameters=MultiDictProxy(MultiDict()) - ) - - parts = mimetype.split(";") - params = MultiDict() # type: MultiDict[str] - for item in parts[1:]: - if not item: - continue - key, value = cast( - Tuple[str, str], item.split("=", 1) if "=" in item else (item, "") - ) - params.add(key.lower().strip(), value.strip(' "')) - - fulltype = parts[0].strip().lower() - if fulltype == "*": - fulltype = "*/*" - - mtype, stype = ( - cast(Tuple[str, str], fulltype.split("/", 1)) - if "/" in fulltype - else (fulltype, "") - ) - stype, suffix = ( - cast(Tuple[str, str], stype.split("+", 1)) if "+" in stype else (stype, "") - ) - - return MimeType( - type=mtype, subtype=stype, suffix=suffix, parameters=MultiDictProxy(params) - ) - - -def guess_filename(obj: Any, default: Optional[str] = None) -> Optional[str]: - name = getattr(obj, "name", None) - if name and isinstance(name, str) and name[0] != "<" and name[-1] != ">": - return Path(name).name - return default - - -def content_disposition_header( - disptype: str, quote_fields: bool = True, **params: str -) -> str: - """Sets ``Content-Disposition`` header. - - disptype is a disposition type: inline, attachment, form-data. - Should be valid extension token (see RFC 2183) - - params is a dict with disposition params. - """ - if not disptype or not (TOKEN > set(disptype)): - raise ValueError("bad content disposition type {!r}" "".format(disptype)) - - value = disptype - if params: - lparams = [] - for key, val in params.items(): - if not key or not (TOKEN > set(key)): - raise ValueError( - "bad content disposition parameter" " {!r}={!r}".format(key, val) - ) - qval = quote(val, "") if quote_fields else val - lparams.append((key, '"%s"' % qval)) - if key == "filename": - lparams.append(("filename*", "utf-8''" + qval)) - sparams = "; ".join("=".join(pair) for pair in lparams) - value = "; ".join((value, sparams)) - return value - - -class _TSelf(Protocol): - _cache: Dict[str, Any] - - -class reify(Generic[_T]): - """Use as a class method decorator. It operates almost exactly like - the Python `@property` decorator, but it puts the result of the - method it decorates into the instance dict after the first call, - effectively replacing the function it decorates with an instance - variable. It is, in Python parlance, a data descriptor. - - """ - - def __init__(self, wrapped: Callable[..., _T]) -> None: - self.wrapped = wrapped - self.__doc__ = wrapped.__doc__ - self.name = wrapped.__name__ - - def __get__(self, inst: _TSelf, owner: Optional[Type[Any]] = None) -> _T: - try: - try: - return inst._cache[self.name] - except KeyError: - val = self.wrapped(inst) - inst._cache[self.name] = val - return val - except AttributeError: - if inst is None: - return self - raise - - def __set__(self, inst: _TSelf, value: _T) -> None: - raise AttributeError("reified property is read-only") - - -reify_py = reify - -try: - from ._helpers import reify as reify_c - - if not NO_EXTENSIONS: - reify = reify_c # type: ignore -except ImportError: - pass - -_ipv4_pattern = ( - r"^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}" - r"(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$" -) -_ipv6_pattern = ( - r"^(?:(?:(?:[A-F0-9]{1,4}:){6}|(?=(?:[A-F0-9]{0,4}:){0,6}" - r"(?:[0-9]{1,3}\.){3}[0-9]{1,3}$)(([0-9A-F]{1,4}:){0,5}|:)" - r"((:[0-9A-F]{1,4}){1,5}:|:)|::(?:[A-F0-9]{1,4}:){5})" - r"(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}" - r"(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])|(?:[A-F0-9]{1,4}:){7}" - r"[A-F0-9]{1,4}|(?=(?:[A-F0-9]{0,4}:){0,7}[A-F0-9]{0,4}$)" - r"(([0-9A-F]{1,4}:){1,7}|:)((:[0-9A-F]{1,4}){1,7}|:)|(?:[A-F0-9]{1,4}:){7}" - r":|:(:[A-F0-9]{1,4}){7})$" -) -_ipv4_regex = re.compile(_ipv4_pattern) -_ipv6_regex = re.compile(_ipv6_pattern, flags=re.IGNORECASE) -_ipv4_regexb = re.compile(_ipv4_pattern.encode("ascii")) -_ipv6_regexb = re.compile(_ipv6_pattern.encode("ascii"), flags=re.IGNORECASE) - - -def _is_ip_address( - regex: Pattern[str], regexb: Pattern[bytes], host: Optional[Union[str, bytes]] -) -> bool: - if host is None: - return False - if isinstance(host, str): - return bool(regex.match(host)) - elif isinstance(host, (bytes, bytearray, memoryview)): - return bool(regexb.match(host)) - else: - raise TypeError("{} [{}] is not a str or bytes".format(host, type(host))) - - -is_ipv4_address = functools.partial(_is_ip_address, _ipv4_regex, _ipv4_regexb) -is_ipv6_address = functools.partial(_is_ip_address, _ipv6_regex, _ipv6_regexb) - - -def is_ip_address(host: Optional[Union[str, bytes, bytearray, memoryview]]) -> bool: - return is_ipv4_address(host) or is_ipv6_address(host) - - -def next_whole_second() -> datetime.datetime: - """Return current time rounded up to the next whole second.""" - return datetime.datetime.now(datetime.timezone.utc).replace( - microsecond=0 - ) + datetime.timedelta(seconds=0) - - -_cached_current_datetime = None # type: Optional[int] -_cached_formatted_datetime = "" - - -def rfc822_formatted_time() -> str: - global _cached_current_datetime - global _cached_formatted_datetime - - now = int(time.time()) - if now != _cached_current_datetime: - # Weekday and month names for HTTP date/time formatting; - # always English! - # Tuples are constants stored in codeobject! - _weekdayname = ("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun") - _monthname = ( - "", # Dummy so we can use 1-based month numbers - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec", - ) - - year, month, day, hh, mm, ss, wd, *tail = time.gmtime(now) - _cached_formatted_datetime = "%s, %02d %3s %4d %02d:%02d:%02d GMT" % ( - _weekdayname[wd], - day, - _monthname[month], - year, - hh, - mm, - ss, - ) - _cached_current_datetime = now - return _cached_formatted_datetime - - -def _weakref_handle(info): # type: ignore - ref, name = info - ob = ref() - if ob is not None: - with suppress(Exception): - getattr(ob, name)() - - -def weakref_handle(ob, name, timeout, loop): # type: ignore - if timeout is not None and timeout > 0: - when = loop.time() + timeout - if timeout >= 5: - when = ceil(when) - - return loop.call_at(when, _weakref_handle, (weakref.ref(ob), name)) - - -def call_later(cb, timeout, loop): # type: ignore - if timeout is not None and timeout > 0: - when = loop.time() + timeout - if timeout > 5: - when = ceil(when) - return loop.call_at(when, cb) - - -class TimeoutHandle: - """ Timeout handle """ - - def __init__( - self, loop: asyncio.AbstractEventLoop, timeout: Optional[float] - ) -> None: - self._timeout = timeout - self._loop = loop - self._callbacks = ( - [] - ) # type: List[Tuple[Callable[..., None], Tuple[Any, ...], Dict[str, Any]]] - - def register( - self, callback: Callable[..., None], *args: Any, **kwargs: Any - ) -> None: - self._callbacks.append((callback, args, kwargs)) - - def close(self) -> None: - self._callbacks.clear() - - def start(self) -> Optional[asyncio.Handle]: - timeout = self._timeout - if timeout is not None and timeout > 0: - when = self._loop.time() + timeout - if timeout >= 5: - when = ceil(when) - return self._loop.call_at(when, self.__call__) - else: - return None - - def timer(self) -> "BaseTimerContext": - if self._timeout is not None and self._timeout > 0: - timer = TimerContext(self._loop) - self.register(timer.timeout) - return timer - else: - return TimerNoop() - - def __call__(self) -> None: - for cb, args, kwargs in self._callbacks: - with suppress(Exception): - cb(*args, **kwargs) - - self._callbacks.clear() - - -class BaseTimerContext(ContextManager["BaseTimerContext"]): - pass - - -class TimerNoop(BaseTimerContext): - def __enter__(self) -> BaseTimerContext: - return self - - def __exit__( - self, - exc_type: Optional[Type[BaseException]], - exc_val: Optional[BaseException], - exc_tb: Optional[TracebackType], - ) -> None: - return - - -class TimerContext(BaseTimerContext): - """ Low resolution timeout context manager """ - - def __init__(self, loop: asyncio.AbstractEventLoop) -> None: - self._loop = loop - self._tasks = [] # type: List[asyncio.Task[Any]] - self._cancelled = False - - def __enter__(self) -> BaseTimerContext: - task = current_task(loop=self._loop) - - if task is None: - raise RuntimeError( - "Timeout context manager should be used " "inside a task" - ) - - if self._cancelled: - task.cancel() - raise asyncio.TimeoutError from None - - self._tasks.append(task) - return self - - def __exit__( - self, - exc_type: Optional[Type[BaseException]], - exc_val: Optional[BaseException], - exc_tb: Optional[TracebackType], - ) -> Optional[bool]: - if self._tasks: - self._tasks.pop() - - if exc_type is asyncio.CancelledError and self._cancelled: - raise asyncio.TimeoutError from None - return None - - def timeout(self) -> None: - if not self._cancelled: - for task in set(self._tasks): - task.cancel() - - self._cancelled = True - - -class CeilTimeout(async_timeout.timeout): - def __enter__(self) -> async_timeout.timeout: - if self._timeout is not None: - self._task = current_task(loop=self._loop) - if self._task is None: - raise RuntimeError( - "Timeout context manager should be used inside a task" - ) - now = self._loop.time() - delay = self._timeout - when = now + delay - if delay > 5: - when = ceil(when) - self._cancel_handler = self._loop.call_at(when, self._cancel_task) - return self - - -class HeadersMixin: - - ATTRS = frozenset(["_content_type", "_content_dict", "_stored_content_type"]) - - _content_type = None # type: Optional[str] - _content_dict = None # type: Optional[Dict[str, str]] - _stored_content_type = sentinel - - def _parse_content_type(self, raw: str) -> None: - self._stored_content_type = raw - if raw is None: - # default value according to RFC 2616 - self._content_type = "application/octet-stream" - self._content_dict = {} - else: - self._content_type, self._content_dict = cgi.parse_header(raw) - - @property - def content_type(self) -> str: - """The value of content part for Content-Type HTTP header.""" - raw = self._headers.get(hdrs.CONTENT_TYPE) # type: ignore - if self._stored_content_type != raw: - self._parse_content_type(raw) - return self._content_type # type: ignore - - @property - def charset(self) -> Optional[str]: - """The value of charset part for Content-Type HTTP header.""" - raw = self._headers.get(hdrs.CONTENT_TYPE) # type: ignore - if self._stored_content_type != raw: - self._parse_content_type(raw) - return self._content_dict.get("charset") # type: ignore - - @property - def content_length(self) -> Optional[int]: - """The value of Content-Length HTTP header.""" - content_length = self._headers.get(hdrs.CONTENT_LENGTH) # type: ignore - - if content_length is not None: - return int(content_length) - else: - return None - - -def set_result(fut: "asyncio.Future[_T]", result: _T) -> None: - if not fut.done(): - fut.set_result(result) - - -def set_exception(fut: "asyncio.Future[_T]", exc: BaseException) -> None: - if not fut.done(): - fut.set_exception(exc) - - -class ChainMapProxy(Mapping[str, Any]): - __slots__ = ("_maps",) - - def __init__(self, maps: Iterable[Mapping[str, Any]]) -> None: - self._maps = tuple(maps) - - def __init_subclass__(cls) -> None: - raise TypeError( - "Inheritance class {} from ChainMapProxy " - "is forbidden".format(cls.__name__) - ) - - def __getitem__(self, key: str) -> Any: - for mapping in self._maps: - try: - return mapping[key] - except KeyError: - pass - raise KeyError(key) - - def get(self, key: str, default: Any = None) -> Any: - return self[key] if key in self else default - - def __len__(self) -> int: - # reuses stored hash values if possible - return len(set().union(*self._maps)) # type: ignore - - def __iter__(self) -> Iterator[str]: - d = {} # type: Dict[str, Any] - for mapping in reversed(self._maps): - # reuses stored hash values if possible - d.update(mapping) - return iter(d) - - def __contains__(self, key: object) -> bool: - return any(key in m for m in self._maps) - - def __bool__(self) -> bool: - return any(self._maps) - - def __repr__(self) -> str: - content = ", ".join(map(repr, self._maps)) - return f"ChainMapProxy({content})" diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/http.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/http.py deleted file mode 100644 index 415ffbf5..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/http.py +++ /dev/null @@ -1,72 +0,0 @@ -import http.server -import sys -from typing import Mapping, Tuple - -from . import __version__ -from .http_exceptions import HttpProcessingError as HttpProcessingError -from .http_parser import ( - HeadersParser as HeadersParser, - HttpParser as HttpParser, - HttpRequestParser as HttpRequestParser, - HttpResponseParser as HttpResponseParser, - RawRequestMessage as RawRequestMessage, - RawResponseMessage as RawResponseMessage, -) -from .http_websocket import ( - WS_CLOSED_MESSAGE as WS_CLOSED_MESSAGE, - WS_CLOSING_MESSAGE as WS_CLOSING_MESSAGE, - WS_KEY as WS_KEY, - WebSocketError as WebSocketError, - WebSocketReader as WebSocketReader, - WebSocketWriter as WebSocketWriter, - WSCloseCode as WSCloseCode, - WSMessage as WSMessage, - WSMsgType as WSMsgType, - ws_ext_gen as ws_ext_gen, - ws_ext_parse as ws_ext_parse, -) -from .http_writer import ( - HttpVersion as HttpVersion, - HttpVersion10 as HttpVersion10, - HttpVersion11 as HttpVersion11, - StreamWriter as StreamWriter, -) - -__all__ = ( - "HttpProcessingError", - "RESPONSES", - "SERVER_SOFTWARE", - # .http_writer - "StreamWriter", - "HttpVersion", - "HttpVersion10", - "HttpVersion11", - # .http_parser - "HeadersParser", - "HttpParser", - "HttpRequestParser", - "HttpResponseParser", - "RawRequestMessage", - "RawResponseMessage", - # .http_websocket - "WS_CLOSED_MESSAGE", - "WS_CLOSING_MESSAGE", - "WS_KEY", - "WebSocketReader", - "WebSocketWriter", - "ws_ext_gen", - "ws_ext_parse", - "WSMessage", - "WebSocketError", - "WSMsgType", - "WSCloseCode", -) - - -SERVER_SOFTWARE = "Python/{0[0]}.{0[1]} aiohttp/{1}".format( - sys.version_info, __version__ -) # type: str - -RESPONSES = ( - http.server.BaseHTTPRequestHandler.responses -) # type: Mapping[int, Tuple[str, str]] diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/http_exceptions.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/http_exceptions.py deleted file mode 100644 index c885f80f..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/http_exceptions.py +++ /dev/null @@ -1,105 +0,0 @@ -"""Low-level http related exceptions.""" - - -from typing import Optional, Union - -from .typedefs import _CIMultiDict - -__all__ = ("HttpProcessingError",) - - -class HttpProcessingError(Exception): - """HTTP error. - - Shortcut for raising HTTP errors with custom code, message and headers. - - code: HTTP Error code. - message: (optional) Error message. - headers: (optional) Headers to be sent in response, a list of pairs - """ - - code = 0 - message = "" - headers = None - - def __init__( - self, - *, - code: Optional[int] = None, - message: str = "", - headers: Optional[_CIMultiDict] = None, - ) -> None: - if code is not None: - self.code = code - self.headers = headers - self.message = message - - def __str__(self) -> str: - return f"{self.code}, message={self.message!r}" - - def __repr__(self) -> str: - return f"<{self.__class__.__name__}: {self}>" - - -class BadHttpMessage(HttpProcessingError): - - code = 400 - message = "Bad Request" - - def __init__(self, message: str, *, headers: Optional[_CIMultiDict] = None) -> None: - super().__init__(message=message, headers=headers) - self.args = (message,) - - -class HttpBadRequest(BadHttpMessage): - - code = 400 - message = "Bad Request" - - -class PayloadEncodingError(BadHttpMessage): - """Base class for payload errors""" - - -class ContentEncodingError(PayloadEncodingError): - """Content encoding error.""" - - -class TransferEncodingError(PayloadEncodingError): - """transfer encoding error.""" - - -class ContentLengthError(PayloadEncodingError): - """Not enough data for satisfy content length header.""" - - -class LineTooLong(BadHttpMessage): - def __init__( - self, line: str, limit: str = "Unknown", actual_size: str = "Unknown" - ) -> None: - super().__init__( - f"Got more than {limit} bytes ({actual_size}) when reading {line}." - ) - self.args = (line, limit, actual_size) - - -class InvalidHeader(BadHttpMessage): - def __init__(self, hdr: Union[bytes, str]) -> None: - if isinstance(hdr, bytes): - hdr = hdr.decode("utf-8", "surrogateescape") - super().__init__(f"Invalid HTTP Header: {hdr}") - self.hdr = hdr - self.args = (hdr,) - - -class BadStatusLine(BadHttpMessage): - def __init__(self, line: str = "") -> None: - if not isinstance(line, str): - line = repr(line) - super().__init__(f"Bad status line {line!r}") - self.args = (line,) - self.line = line - - -class InvalidURLError(BadHttpMessage): - pass diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/http_parser.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/http_parser.py deleted file mode 100644 index 71ba815a..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/http_parser.py +++ /dev/null @@ -1,901 +0,0 @@ -import abc -import asyncio -import collections -import re -import string -import zlib -from enum import IntEnum -from typing import Any, List, Optional, Tuple, Type, Union - -from multidict import CIMultiDict, CIMultiDictProxy, istr -from yarl import URL - -from . import hdrs -from .base_protocol import BaseProtocol -from .helpers import NO_EXTENSIONS, BaseTimerContext -from .http_exceptions import ( - BadStatusLine, - ContentEncodingError, - ContentLengthError, - InvalidHeader, - LineTooLong, - TransferEncodingError, -) -from .http_writer import HttpVersion, HttpVersion10 -from .log import internal_logger -from .streams import EMPTY_PAYLOAD, StreamReader -from .typedefs import RawHeaders - -try: - import brotli - - HAS_BROTLI = True -except ImportError: # pragma: no cover - HAS_BROTLI = False - - -__all__ = ( - "HeadersParser", - "HttpParser", - "HttpRequestParser", - "HttpResponseParser", - "RawRequestMessage", - "RawResponseMessage", -) - -ASCIISET = set(string.printable) - -# See https://tools.ietf.org/html/rfc7230#section-3.1.1 -# and https://tools.ietf.org/html/rfc7230#appendix-B -# -# method = token -# tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "." / -# "^" / "_" / "`" / "|" / "~" / DIGIT / ALPHA -# token = 1*tchar -METHRE = re.compile(r"[!#$%&'*+\-.^_`|~0-9A-Za-z]+") -VERSRE = re.compile(r"HTTP/(\d+).(\d+)") -HDRRE = re.compile(rb"[\x00-\x1F\x7F()<>@,;:\[\]={} \t\\\\\"]") - -RawRequestMessage = collections.namedtuple( - "RawRequestMessage", - [ - "method", - "path", - "version", - "headers", - "raw_headers", - "should_close", - "compression", - "upgrade", - "chunked", - "url", - ], -) - -RawResponseMessage = collections.namedtuple( - "RawResponseMessage", - [ - "version", - "code", - "reason", - "headers", - "raw_headers", - "should_close", - "compression", - "upgrade", - "chunked", - ], -) - - -class ParseState(IntEnum): - - PARSE_NONE = 0 - PARSE_LENGTH = 1 - PARSE_CHUNKED = 2 - PARSE_UNTIL_EOF = 3 - - -class ChunkState(IntEnum): - PARSE_CHUNKED_SIZE = 0 - PARSE_CHUNKED_CHUNK = 1 - PARSE_CHUNKED_CHUNK_EOF = 2 - PARSE_MAYBE_TRAILERS = 3 - PARSE_TRAILERS = 4 - - -class HeadersParser: - def __init__( - self, - max_line_size: int = 8190, - max_headers: int = 32768, - max_field_size: int = 8190, - ) -> None: - self.max_line_size = max_line_size - self.max_headers = max_headers - self.max_field_size = max_field_size - - def parse_headers( - self, lines: List[bytes] - ) -> Tuple["CIMultiDictProxy[str]", RawHeaders]: - headers = CIMultiDict() # type: CIMultiDict[str] - raw_headers = [] - - lines_idx = 1 - line = lines[1] - line_count = len(lines) - - while line: - # Parse initial header name : value pair. - try: - bname, bvalue = line.split(b":", 1) - except ValueError: - raise InvalidHeader(line) from None - - bname = bname.strip(b" \t") - bvalue = bvalue.lstrip() - if HDRRE.search(bname): - raise InvalidHeader(bname) - if len(bname) > self.max_field_size: - raise LineTooLong( - "request header name {}".format( - bname.decode("utf8", "xmlcharrefreplace") - ), - str(self.max_field_size), - str(len(bname)), - ) - - header_length = len(bvalue) - - # next line - lines_idx += 1 - line = lines[lines_idx] - - # consume continuation lines - continuation = line and line[0] in (32, 9) # (' ', '\t') - - if continuation: - bvalue_lst = [bvalue] - while continuation: - header_length += len(line) - if header_length > self.max_field_size: - raise LineTooLong( - "request header field {}".format( - bname.decode("utf8", "xmlcharrefreplace") - ), - str(self.max_field_size), - str(header_length), - ) - bvalue_lst.append(line) - - # next line - lines_idx += 1 - if lines_idx < line_count: - line = lines[lines_idx] - if line: - continuation = line[0] in (32, 9) # (' ', '\t') - else: - line = b"" - break - bvalue = b"".join(bvalue_lst) - else: - if header_length > self.max_field_size: - raise LineTooLong( - "request header field {}".format( - bname.decode("utf8", "xmlcharrefreplace") - ), - str(self.max_field_size), - str(header_length), - ) - - bvalue = bvalue.strip() - name = bname.decode("utf-8", "surrogateescape") - value = bvalue.decode("utf-8", "surrogateescape") - - headers.add(name, value) - raw_headers.append((bname, bvalue)) - - return (CIMultiDictProxy(headers), tuple(raw_headers)) - - -class HttpParser(abc.ABC): - def __init__( - self, - protocol: Optional[BaseProtocol] = None, - loop: Optional[asyncio.AbstractEventLoop] = None, - limit: int = 2 ** 16, - max_line_size: int = 8190, - max_headers: int = 32768, - max_field_size: int = 8190, - timer: Optional[BaseTimerContext] = None, - code: Optional[int] = None, - method: Optional[str] = None, - readall: bool = False, - payload_exception: Optional[Type[BaseException]] = None, - response_with_body: bool = True, - read_until_eof: bool = False, - auto_decompress: bool = True, - ) -> None: - self.protocol = protocol - self.loop = loop - self.max_line_size = max_line_size - self.max_headers = max_headers - self.max_field_size = max_field_size - self.timer = timer - self.code = code - self.method = method - self.readall = readall - self.payload_exception = payload_exception - self.response_with_body = response_with_body - self.read_until_eof = read_until_eof - - self._lines = [] # type: List[bytes] - self._tail = b"" - self._upgraded = False - self._payload = None - self._payload_parser = None # type: Optional[HttpPayloadParser] - self._auto_decompress = auto_decompress - self._limit = limit - self._headers_parser = HeadersParser(max_line_size, max_headers, max_field_size) - - @abc.abstractmethod - def parse_message(self, lines: List[bytes]) -> Any: - pass - - def feed_eof(self) -> Any: - if self._payload_parser is not None: - self._payload_parser.feed_eof() - self._payload_parser = None - else: - # try to extract partial message - if self._tail: - self._lines.append(self._tail) - - if self._lines: - if self._lines[-1] != "\r\n": - self._lines.append(b"") - try: - return self.parse_message(self._lines) - except Exception: - return None - - def feed_data( - self, - data: bytes, - SEP: bytes = b"\r\n", - EMPTY: bytes = b"", - CONTENT_LENGTH: istr = hdrs.CONTENT_LENGTH, - METH_CONNECT: str = hdrs.METH_CONNECT, - SEC_WEBSOCKET_KEY1: istr = hdrs.SEC_WEBSOCKET_KEY1, - ) -> Tuple[List[Any], bool, bytes]: - - messages = [] - - if self._tail: - data, self._tail = self._tail + data, b"" - - data_len = len(data) - start_pos = 0 - loop = self.loop - - while start_pos < data_len: - - # read HTTP message (request/response line + headers), \r\n\r\n - # and split by lines - if self._payload_parser is None and not self._upgraded: - pos = data.find(SEP, start_pos) - # consume \r\n - if pos == start_pos and not self._lines: - start_pos = pos + 2 - continue - - if pos >= start_pos: - # line found - self._lines.append(data[start_pos:pos]) - start_pos = pos + 2 - - # \r\n\r\n found - if self._lines[-1] == EMPTY: - try: - msg = self.parse_message(self._lines) - finally: - self._lines.clear() - - # payload length - length = msg.headers.get(CONTENT_LENGTH) - if length is not None: - try: - length = int(length) - except ValueError: - raise InvalidHeader(CONTENT_LENGTH) - if length < 0: - raise InvalidHeader(CONTENT_LENGTH) - - # do not support old websocket spec - if SEC_WEBSOCKET_KEY1 in msg.headers: - raise InvalidHeader(SEC_WEBSOCKET_KEY1) - - self._upgraded = msg.upgrade - - method = getattr(msg, "method", self.method) - - assert self.protocol is not None - # calculate payload - if ( - (length is not None and length > 0) - or msg.chunked - and not msg.upgrade - ): - payload = StreamReader( - self.protocol, - timer=self.timer, - loop=loop, - limit=self._limit, - ) - payload_parser = HttpPayloadParser( - payload, - length=length, - chunked=msg.chunked, - method=method, - compression=msg.compression, - code=self.code, - readall=self.readall, - response_with_body=self.response_with_body, - auto_decompress=self._auto_decompress, - ) - if not payload_parser.done: - self._payload_parser = payload_parser - elif method == METH_CONNECT: - payload = StreamReader( - self.protocol, - timer=self.timer, - loop=loop, - limit=self._limit, - ) - self._upgraded = True - self._payload_parser = HttpPayloadParser( - payload, - method=msg.method, - compression=msg.compression, - readall=True, - auto_decompress=self._auto_decompress, - ) - else: - if ( - getattr(msg, "code", 100) >= 199 - and length is None - and self.read_until_eof - ): - payload = StreamReader( - self.protocol, - timer=self.timer, - loop=loop, - limit=self._limit, - ) - payload_parser = HttpPayloadParser( - payload, - length=length, - chunked=msg.chunked, - method=method, - compression=msg.compression, - code=self.code, - readall=True, - response_with_body=self.response_with_body, - auto_decompress=self._auto_decompress, - ) - if not payload_parser.done: - self._payload_parser = payload_parser - else: - payload = EMPTY_PAYLOAD # type: ignore - - messages.append((msg, payload)) - else: - self._tail = data[start_pos:] - data = EMPTY - break - - # no parser, just store - elif self._payload_parser is None and self._upgraded: - assert not self._lines - break - - # feed payload - elif data and start_pos < data_len: - assert not self._lines - assert self._payload_parser is not None - try: - eof, data = self._payload_parser.feed_data(data[start_pos:]) - except BaseException as exc: - if self.payload_exception is not None: - self._payload_parser.payload.set_exception( - self.payload_exception(str(exc)) - ) - else: - self._payload_parser.payload.set_exception(exc) - - eof = True - data = b"" - - if eof: - start_pos = 0 - data_len = len(data) - self._payload_parser = None - continue - else: - break - - if data and start_pos < data_len: - data = data[start_pos:] - else: - data = EMPTY - - return messages, self._upgraded, data - - def parse_headers( - self, lines: List[bytes] - ) -> Tuple[ - "CIMultiDictProxy[str]", RawHeaders, Optional[bool], Optional[str], bool, bool - ]: - """Parses RFC 5322 headers from a stream. - - Line continuations are supported. Returns list of header name - and value pairs. Header name is in upper case. - """ - headers, raw_headers = self._headers_parser.parse_headers(lines) - close_conn = None - encoding = None - upgrade = False - chunked = False - - # keep-alive - conn = headers.get(hdrs.CONNECTION) - if conn: - v = conn.lower() - if v == "close": - close_conn = True - elif v == "keep-alive": - close_conn = False - elif v == "upgrade": - upgrade = True - - # encoding - enc = headers.get(hdrs.CONTENT_ENCODING) - if enc: - enc = enc.lower() - if enc in ("gzip", "deflate", "br"): - encoding = enc - - # chunking - te = headers.get(hdrs.TRANSFER_ENCODING) - if te and "chunked" in te.lower(): - chunked = True - - return (headers, raw_headers, close_conn, encoding, upgrade, chunked) - - def set_upgraded(self, val: bool) -> None: - """Set connection upgraded (to websocket) mode. - :param bool val: new state. - """ - self._upgraded = val - - -class HttpRequestParser(HttpParser): - """Read request status line. Exception .http_exceptions.BadStatusLine - could be raised in case of any errors in status line. - Returns RawRequestMessage. - """ - - def parse_message(self, lines: List[bytes]) -> Any: - # request line - line = lines[0].decode("utf-8", "surrogateescape") - try: - method, path, version = line.split(None, 2) - except ValueError: - raise BadStatusLine(line) from None - - if len(path) > self.max_line_size: - raise LineTooLong( - "Status line is too long", str(self.max_line_size), str(len(path)) - ) - - path_part, _hash_separator, url_fragment = path.partition("#") - path_part, _question_mark_separator, qs_part = path_part.partition("?") - - # method - if not METHRE.match(method): - raise BadStatusLine(method) - - # version - try: - if version.startswith("HTTP/"): - n1, n2 = version[5:].split(".", 1) - version_o = HttpVersion(int(n1), int(n2)) - else: - raise BadStatusLine(version) - except Exception: - raise BadStatusLine(version) - - # read headers - ( - headers, - raw_headers, - close, - compression, - upgrade, - chunked, - ) = self.parse_headers(lines) - - if close is None: # then the headers weren't set in the request - if version_o <= HttpVersion10: # HTTP 1.0 must asks to not close - close = True - else: # HTTP 1.1 must ask to close. - close = False - - return RawRequestMessage( - method, - path, - version_o, - headers, - raw_headers, - close, - compression, - upgrade, - chunked, - # NOTE: `yarl.URL.build()` is used to mimic what the Cython-based - # NOTE: parser does, otherwise it results into the same - # NOTE: HTTP Request-Line input producing different - # NOTE: `yarl.URL()` objects - URL.build( - path=path_part, - query_string=qs_part, - fragment=url_fragment, - encoded=True, - ), - ) - - -class HttpResponseParser(HttpParser): - """Read response status line and headers. - - BadStatusLine could be raised in case of any errors in status line. - Returns RawResponseMessage""" - - def parse_message(self, lines: List[bytes]) -> Any: - line = lines[0].decode("utf-8", "surrogateescape") - try: - version, status = line.split(None, 1) - except ValueError: - raise BadStatusLine(line) from None - - try: - status, reason = status.split(None, 1) - except ValueError: - reason = "" - - if len(reason) > self.max_line_size: - raise LineTooLong( - "Status line is too long", str(self.max_line_size), str(len(reason)) - ) - - # version - match = VERSRE.match(version) - if match is None: - raise BadStatusLine(line) - version_o = HttpVersion(int(match.group(1)), int(match.group(2))) - - # The status code is a three-digit number - try: - status_i = int(status) - except ValueError: - raise BadStatusLine(line) from None - - if status_i > 999: - raise BadStatusLine(line) - - # read headers - ( - headers, - raw_headers, - close, - compression, - upgrade, - chunked, - ) = self.parse_headers(lines) - - if close is None: - close = version_o <= HttpVersion10 - - return RawResponseMessage( - version_o, - status_i, - reason.strip(), - headers, - raw_headers, - close, - compression, - upgrade, - chunked, - ) - - -class HttpPayloadParser: - def __init__( - self, - payload: StreamReader, - length: Optional[int] = None, - chunked: bool = False, - compression: Optional[str] = None, - code: Optional[int] = None, - method: Optional[str] = None, - readall: bool = False, - response_with_body: bool = True, - auto_decompress: bool = True, - ) -> None: - self._length = 0 - self._type = ParseState.PARSE_NONE - self._chunk = ChunkState.PARSE_CHUNKED_SIZE - self._chunk_size = 0 - self._chunk_tail = b"" - self._auto_decompress = auto_decompress - self.done = False - - # payload decompression wrapper - if response_with_body and compression and self._auto_decompress: - real_payload = DeflateBuffer( - payload, compression - ) # type: Union[StreamReader, DeflateBuffer] - else: - real_payload = payload - - # payload parser - if not response_with_body: - # don't parse payload if it's not expected to be received - self._type = ParseState.PARSE_NONE - real_payload.feed_eof() - self.done = True - - elif chunked: - self._type = ParseState.PARSE_CHUNKED - elif length is not None: - self._type = ParseState.PARSE_LENGTH - self._length = length - if self._length == 0: - real_payload.feed_eof() - self.done = True - else: - if readall and code != 204: - self._type = ParseState.PARSE_UNTIL_EOF - elif method in ("PUT", "POST"): - internal_logger.warning( # pragma: no cover - "Content-Length or Transfer-Encoding header is required" - ) - self._type = ParseState.PARSE_NONE - real_payload.feed_eof() - self.done = True - - self.payload = real_payload - - def feed_eof(self) -> None: - if self._type == ParseState.PARSE_UNTIL_EOF: - self.payload.feed_eof() - elif self._type == ParseState.PARSE_LENGTH: - raise ContentLengthError( - "Not enough data for satisfy content length header." - ) - elif self._type == ParseState.PARSE_CHUNKED: - raise TransferEncodingError( - "Not enough data for satisfy transfer length header." - ) - - def feed_data( - self, chunk: bytes, SEP: bytes = b"\r\n", CHUNK_EXT: bytes = b";" - ) -> Tuple[bool, bytes]: - # Read specified amount of bytes - if self._type == ParseState.PARSE_LENGTH: - required = self._length - chunk_len = len(chunk) - - if required >= chunk_len: - self._length = required - chunk_len - self.payload.feed_data(chunk, chunk_len) - if self._length == 0: - self.payload.feed_eof() - return True, b"" - else: - self._length = 0 - self.payload.feed_data(chunk[:required], required) - self.payload.feed_eof() - return True, chunk[required:] - - # Chunked transfer encoding parser - elif self._type == ParseState.PARSE_CHUNKED: - if self._chunk_tail: - chunk = self._chunk_tail + chunk - self._chunk_tail = b"" - - while chunk: - - # read next chunk size - if self._chunk == ChunkState.PARSE_CHUNKED_SIZE: - pos = chunk.find(SEP) - if pos >= 0: - i = chunk.find(CHUNK_EXT, 0, pos) - if i >= 0: - size_b = chunk[:i] # strip chunk-extensions - else: - size_b = chunk[:pos] - - try: - size = int(bytes(size_b), 16) - except ValueError: - exc = TransferEncodingError( - chunk[:pos].decode("ascii", "surrogateescape") - ) - self.payload.set_exception(exc) - raise exc from None - - chunk = chunk[pos + 2 :] - if size == 0: # eof marker - self._chunk = ChunkState.PARSE_MAYBE_TRAILERS - else: - self._chunk = ChunkState.PARSE_CHUNKED_CHUNK - self._chunk_size = size - self.payload.begin_http_chunk_receiving() - else: - self._chunk_tail = chunk - return False, b"" - - # read chunk and feed buffer - if self._chunk == ChunkState.PARSE_CHUNKED_CHUNK: - required = self._chunk_size - chunk_len = len(chunk) - - if required > chunk_len: - self._chunk_size = required - chunk_len - self.payload.feed_data(chunk, chunk_len) - return False, b"" - else: - self._chunk_size = 0 - self.payload.feed_data(chunk[:required], required) - chunk = chunk[required:] - self._chunk = ChunkState.PARSE_CHUNKED_CHUNK_EOF - self.payload.end_http_chunk_receiving() - - # toss the CRLF at the end of the chunk - if self._chunk == ChunkState.PARSE_CHUNKED_CHUNK_EOF: - if chunk[:2] == SEP: - chunk = chunk[2:] - self._chunk = ChunkState.PARSE_CHUNKED_SIZE - else: - self._chunk_tail = chunk - return False, b"" - - # if stream does not contain trailer, after 0\r\n - # we should get another \r\n otherwise - # trailers needs to be skiped until \r\n\r\n - if self._chunk == ChunkState.PARSE_MAYBE_TRAILERS: - head = chunk[:2] - if head == SEP: - # end of stream - self.payload.feed_eof() - return True, chunk[2:] - # Both CR and LF, or only LF may not be received yet. It is - # expected that CRLF or LF will be shown at the very first - # byte next time, otherwise trailers should come. The last - # CRLF which marks the end of response might not be - # contained in the same TCP segment which delivered the - # size indicator. - if not head: - return False, b"" - if head == SEP[:1]: - self._chunk_tail = head - return False, b"" - self._chunk = ChunkState.PARSE_TRAILERS - - # read and discard trailer up to the CRLF terminator - if self._chunk == ChunkState.PARSE_TRAILERS: - pos = chunk.find(SEP) - if pos >= 0: - chunk = chunk[pos + 2 :] - self._chunk = ChunkState.PARSE_MAYBE_TRAILERS - else: - self._chunk_tail = chunk - return False, b"" - - # Read all bytes until eof - elif self._type == ParseState.PARSE_UNTIL_EOF: - self.payload.feed_data(chunk, len(chunk)) - - return False, b"" - - -class DeflateBuffer: - """DeflateStream decompress stream and feed data into specified stream.""" - - def __init__(self, out: StreamReader, encoding: Optional[str]) -> None: - self.out = out - self.size = 0 - self.encoding = encoding - self._started_decoding = False - - if encoding == "br": - if not HAS_BROTLI: # pragma: no cover - raise ContentEncodingError( - "Can not decode content-encoding: brotli (br). " - "Please install `brotlipy`" - ) - self.decompressor = brotli.Decompressor() - else: - zlib_mode = 16 + zlib.MAX_WBITS if encoding == "gzip" else zlib.MAX_WBITS - self.decompressor = zlib.decompressobj(wbits=zlib_mode) - - def set_exception(self, exc: BaseException) -> None: - self.out.set_exception(exc) - - def feed_data(self, chunk: bytes, size: int) -> None: - if not size: - return - - self.size += size - - # RFC1950 - # bits 0..3 = CM = 0b1000 = 8 = "deflate" - # bits 4..7 = CINFO = 1..7 = windows size. - if ( - not self._started_decoding - and self.encoding == "deflate" - and chunk[0] & 0xF != 8 - ): - # Change the decoder to decompress incorrectly compressed data - # Actually we should issue a warning about non-RFC-compliant data. - self.decompressor = zlib.decompressobj(wbits=-zlib.MAX_WBITS) - - try: - chunk = self.decompressor.decompress(chunk) - except Exception: - raise ContentEncodingError( - "Can not decode content-encoding: %s" % self.encoding - ) - - self._started_decoding = True - - if chunk: - self.out.feed_data(chunk, len(chunk)) - - def feed_eof(self) -> None: - chunk = self.decompressor.flush() - - if chunk or self.size > 0: - self.out.feed_data(chunk, len(chunk)) - if self.encoding == "deflate" and not self.decompressor.eof: - raise ContentEncodingError("deflate") - - self.out.feed_eof() - - def begin_http_chunk_receiving(self) -> None: - self.out.begin_http_chunk_receiving() - - def end_http_chunk_receiving(self) -> None: - self.out.end_http_chunk_receiving() - - -HttpRequestParserPy = HttpRequestParser -HttpResponseParserPy = HttpResponseParser -RawRequestMessagePy = RawRequestMessage -RawResponseMessagePy = RawResponseMessage - -try: - if not NO_EXTENSIONS: - from ._http_parser import ( # type: ignore - HttpRequestParser, - HttpResponseParser, - RawRequestMessage, - RawResponseMessage, - ) - - HttpRequestParserC = HttpRequestParser - HttpResponseParserC = HttpResponseParser - RawRequestMessageC = RawRequestMessage - RawResponseMessageC = RawResponseMessage -except ImportError: # pragma: no cover - pass diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/http_websocket.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/http_websocket.py deleted file mode 100644 index 5cdaeea4..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/http_websocket.py +++ /dev/null @@ -1,698 +0,0 @@ -"""WebSocket protocol versions 13 and 8.""" - -import asyncio -import collections -import json -import random -import re -import sys -import zlib -from enum import IntEnum -from struct import Struct -from typing import Any, Callable, List, Optional, Tuple, Union - -from .base_protocol import BaseProtocol -from .helpers import NO_EXTENSIONS -from .streams import DataQueue - -__all__ = ( - "WS_CLOSED_MESSAGE", - "WS_CLOSING_MESSAGE", - "WS_KEY", - "WebSocketReader", - "WebSocketWriter", - "WSMessage", - "WebSocketError", - "WSMsgType", - "WSCloseCode", -) - - -class WSCloseCode(IntEnum): - OK = 1000 - GOING_AWAY = 1001 - PROTOCOL_ERROR = 1002 - UNSUPPORTED_DATA = 1003 - INVALID_TEXT = 1007 - POLICY_VIOLATION = 1008 - MESSAGE_TOO_BIG = 1009 - MANDATORY_EXTENSION = 1010 - INTERNAL_ERROR = 1011 - SERVICE_RESTART = 1012 - TRY_AGAIN_LATER = 1013 - - -ALLOWED_CLOSE_CODES = {int(i) for i in WSCloseCode} - - -class WSMsgType(IntEnum): - # websocket spec types - CONTINUATION = 0x0 - TEXT = 0x1 - BINARY = 0x2 - PING = 0x9 - PONG = 0xA - CLOSE = 0x8 - - # aiohttp specific types - CLOSING = 0x100 - CLOSED = 0x101 - ERROR = 0x102 - - text = TEXT - binary = BINARY - ping = PING - pong = PONG - close = CLOSE - closing = CLOSING - closed = CLOSED - error = ERROR - - -WS_KEY = b"258EAFA5-E914-47DA-95CA-C5AB0DC85B11" - - -UNPACK_LEN2 = Struct("!H").unpack_from -UNPACK_LEN3 = Struct("!Q").unpack_from -UNPACK_CLOSE_CODE = Struct("!H").unpack -PACK_LEN1 = Struct("!BB").pack -PACK_LEN2 = Struct("!BBH").pack -PACK_LEN3 = Struct("!BBQ").pack -PACK_CLOSE_CODE = Struct("!H").pack -MSG_SIZE = 2 ** 14 -DEFAULT_LIMIT = 2 ** 16 - - -_WSMessageBase = collections.namedtuple("_WSMessageBase", ["type", "data", "extra"]) - - -class WSMessage(_WSMessageBase): - def json(self, *, loads: Callable[[Any], Any] = json.loads) -> Any: - """Return parsed JSON data. - - .. versionadded:: 0.22 - """ - return loads(self.data) - - -WS_CLOSED_MESSAGE = WSMessage(WSMsgType.CLOSED, None, None) -WS_CLOSING_MESSAGE = WSMessage(WSMsgType.CLOSING, None, None) - - -class WebSocketError(Exception): - """WebSocket protocol parser error.""" - - def __init__(self, code: int, message: str) -> None: - self.code = code - super().__init__(code, message) - - def __str__(self) -> str: - return self.args[1] - - -class WSHandshakeError(Exception): - """WebSocket protocol handshake error.""" - - -native_byteorder = sys.byteorder - - -# Used by _websocket_mask_python -_XOR_TABLE = [bytes(a ^ b for a in range(256)) for b in range(256)] - - -def _websocket_mask_python(mask: bytes, data: bytearray) -> None: - """Websocket masking function. - - `mask` is a `bytes` object of length 4; `data` is a `bytearray` - object of any length. The contents of `data` are masked with `mask`, - as specified in section 5.3 of RFC 6455. - - Note that this function mutates the `data` argument. - - This pure-python implementation may be replaced by an optimized - version when available. - - """ - assert isinstance(data, bytearray), data - assert len(mask) == 4, mask - - if data: - a, b, c, d = (_XOR_TABLE[n] for n in mask) - data[::4] = data[::4].translate(a) - data[1::4] = data[1::4].translate(b) - data[2::4] = data[2::4].translate(c) - data[3::4] = data[3::4].translate(d) - - -if NO_EXTENSIONS: # pragma: no cover - _websocket_mask = _websocket_mask_python -else: - try: - from ._websocket import _websocket_mask_cython # type: ignore - - _websocket_mask = _websocket_mask_cython - except ImportError: # pragma: no cover - _websocket_mask = _websocket_mask_python - -_WS_DEFLATE_TRAILING = bytes([0x00, 0x00, 0xFF, 0xFF]) - - -_WS_EXT_RE = re.compile( - r"^(?:;\s*(?:" - r"(server_no_context_takeover)|" - r"(client_no_context_takeover)|" - r"(server_max_window_bits(?:=(\d+))?)|" - r"(client_max_window_bits(?:=(\d+))?)))*$" -) - -_WS_EXT_RE_SPLIT = re.compile(r"permessage-deflate([^,]+)?") - - -def ws_ext_parse(extstr: Optional[str], isserver: bool = False) -> Tuple[int, bool]: - if not extstr: - return 0, False - - compress = 0 - notakeover = False - for ext in _WS_EXT_RE_SPLIT.finditer(extstr): - defext = ext.group(1) - # Return compress = 15 when get `permessage-deflate` - if not defext: - compress = 15 - break - match = _WS_EXT_RE.match(defext) - if match: - compress = 15 - if isserver: - # Server never fail to detect compress handshake. - # Server does not need to send max wbit to client - if match.group(4): - compress = int(match.group(4)) - # Group3 must match if group4 matches - # Compress wbit 8 does not support in zlib - # If compress level not support, - # CONTINUE to next extension - if compress > 15 or compress < 9: - compress = 0 - continue - if match.group(1): - notakeover = True - # Ignore regex group 5 & 6 for client_max_window_bits - break - else: - if match.group(6): - compress = int(match.group(6)) - # Group5 must match if group6 matches - # Compress wbit 8 does not support in zlib - # If compress level not support, - # FAIL the parse progress - if compress > 15 or compress < 9: - raise WSHandshakeError("Invalid window size") - if match.group(2): - notakeover = True - # Ignore regex group 5 & 6 for client_max_window_bits - break - # Return Fail if client side and not match - elif not isserver: - raise WSHandshakeError("Extension for deflate not supported" + ext.group(1)) - - return compress, notakeover - - -def ws_ext_gen( - compress: int = 15, isserver: bool = False, server_notakeover: bool = False -) -> str: - # client_notakeover=False not used for server - # compress wbit 8 does not support in zlib - if compress < 9 or compress > 15: - raise ValueError( - "Compress wbits must between 9 and 15, " "zlib does not support wbits=8" - ) - enabledext = ["permessage-deflate"] - if not isserver: - enabledext.append("client_max_window_bits") - - if compress < 15: - enabledext.append("server_max_window_bits=" + str(compress)) - if server_notakeover: - enabledext.append("server_no_context_takeover") - # if client_notakeover: - # enabledext.append('client_no_context_takeover') - return "; ".join(enabledext) - - -class WSParserState(IntEnum): - READ_HEADER = 1 - READ_PAYLOAD_LENGTH = 2 - READ_PAYLOAD_MASK = 3 - READ_PAYLOAD = 4 - - -class WebSocketReader: - def __init__( - self, queue: DataQueue[WSMessage], max_msg_size: int, compress: bool = True - ) -> None: - self.queue = queue - self._max_msg_size = max_msg_size - - self._exc = None # type: Optional[BaseException] - self._partial = bytearray() - self._state = WSParserState.READ_HEADER - - self._opcode = None # type: Optional[int] - self._frame_fin = False - self._frame_opcode = None # type: Optional[int] - self._frame_payload = bytearray() - - self._tail = b"" - self._has_mask = False - self._frame_mask = None # type: Optional[bytes] - self._payload_length = 0 - self._payload_length_flag = 0 - self._compressed = None # type: Optional[bool] - self._decompressobj = None # type: Any # zlib.decompressobj actually - self._compress = compress - - def feed_eof(self) -> None: - self.queue.feed_eof() - - def feed_data(self, data: bytes) -> Tuple[bool, bytes]: - if self._exc: - return True, data - - try: - return self._feed_data(data) - except Exception as exc: - self._exc = exc - self.queue.set_exception(exc) - return True, b"" - - def _feed_data(self, data: bytes) -> Tuple[bool, bytes]: - for fin, opcode, payload, compressed in self.parse_frame(data): - if compressed and not self._decompressobj: - self._decompressobj = zlib.decompressobj(wbits=-zlib.MAX_WBITS) - if opcode == WSMsgType.CLOSE: - if len(payload) >= 2: - close_code = UNPACK_CLOSE_CODE(payload[:2])[0] - if close_code < 3000 and close_code not in ALLOWED_CLOSE_CODES: - raise WebSocketError( - WSCloseCode.PROTOCOL_ERROR, - f"Invalid close code: {close_code}", - ) - try: - close_message = payload[2:].decode("utf-8") - except UnicodeDecodeError as exc: - raise WebSocketError( - WSCloseCode.INVALID_TEXT, "Invalid UTF-8 text message" - ) from exc - msg = WSMessage(WSMsgType.CLOSE, close_code, close_message) - elif payload: - raise WebSocketError( - WSCloseCode.PROTOCOL_ERROR, - f"Invalid close frame: {fin} {opcode} {payload!r}", - ) - else: - msg = WSMessage(WSMsgType.CLOSE, 0, "") - - self.queue.feed_data(msg, 0) - - elif opcode == WSMsgType.PING: - self.queue.feed_data( - WSMessage(WSMsgType.PING, payload, ""), len(payload) - ) - - elif opcode == WSMsgType.PONG: - self.queue.feed_data( - WSMessage(WSMsgType.PONG, payload, ""), len(payload) - ) - - elif ( - opcode not in (WSMsgType.TEXT, WSMsgType.BINARY) - and self._opcode is None - ): - raise WebSocketError( - WSCloseCode.PROTOCOL_ERROR, f"Unexpected opcode={opcode!r}" - ) - else: - # load text/binary - if not fin: - # got partial frame payload - if opcode != WSMsgType.CONTINUATION: - self._opcode = opcode - self._partial.extend(payload) - if self._max_msg_size and len(self._partial) >= self._max_msg_size: - raise WebSocketError( - WSCloseCode.MESSAGE_TOO_BIG, - "Message size {} exceeds limit {}".format( - len(self._partial), self._max_msg_size - ), - ) - else: - # previous frame was non finished - # we should get continuation opcode - if self._partial: - if opcode != WSMsgType.CONTINUATION: - raise WebSocketError( - WSCloseCode.PROTOCOL_ERROR, - "The opcode in non-fin frame is expected " - "to be zero, got {!r}".format(opcode), - ) - - if opcode == WSMsgType.CONTINUATION: - assert self._opcode is not None - opcode = self._opcode - self._opcode = None - - self._partial.extend(payload) - if self._max_msg_size and len(self._partial) >= self._max_msg_size: - raise WebSocketError( - WSCloseCode.MESSAGE_TOO_BIG, - "Message size {} exceeds limit {}".format( - len(self._partial), self._max_msg_size - ), - ) - - # Decompress process must to be done after all packets - # received. - if compressed: - self._partial.extend(_WS_DEFLATE_TRAILING) - payload_merged = self._decompressobj.decompress( - self._partial, self._max_msg_size - ) - if self._decompressobj.unconsumed_tail: - left = len(self._decompressobj.unconsumed_tail) - raise WebSocketError( - WSCloseCode.MESSAGE_TOO_BIG, - "Decompressed message size {} exceeds limit {}".format( - self._max_msg_size + left, self._max_msg_size - ), - ) - else: - payload_merged = bytes(self._partial) - - self._partial.clear() - - if opcode == WSMsgType.TEXT: - try: - text = payload_merged.decode("utf-8") - self.queue.feed_data( - WSMessage(WSMsgType.TEXT, text, ""), len(text) - ) - except UnicodeDecodeError as exc: - raise WebSocketError( - WSCloseCode.INVALID_TEXT, "Invalid UTF-8 text message" - ) from exc - else: - self.queue.feed_data( - WSMessage(WSMsgType.BINARY, payload_merged, ""), - len(payload_merged), - ) - - return False, b"" - - def parse_frame( - self, buf: bytes - ) -> List[Tuple[bool, Optional[int], bytearray, Optional[bool]]]: - """Return the next frame from the socket.""" - frames = [] - if self._tail: - buf, self._tail = self._tail + buf, b"" - - start_pos = 0 - buf_length = len(buf) - - while True: - # read header - if self._state == WSParserState.READ_HEADER: - if buf_length - start_pos >= 2: - data = buf[start_pos : start_pos + 2] - start_pos += 2 - first_byte, second_byte = data - - fin = (first_byte >> 7) & 1 - rsv1 = (first_byte >> 6) & 1 - rsv2 = (first_byte >> 5) & 1 - rsv3 = (first_byte >> 4) & 1 - opcode = first_byte & 0xF - - # frame-fin = %x0 ; more frames of this message follow - # / %x1 ; final frame of this message - # frame-rsv1 = %x0 ; - # 1 bit, MUST be 0 unless negotiated otherwise - # frame-rsv2 = %x0 ; - # 1 bit, MUST be 0 unless negotiated otherwise - # frame-rsv3 = %x0 ; - # 1 bit, MUST be 0 unless negotiated otherwise - # - # Remove rsv1 from this test for deflate development - if rsv2 or rsv3 or (rsv1 and not self._compress): - raise WebSocketError( - WSCloseCode.PROTOCOL_ERROR, - "Received frame with non-zero reserved bits", - ) - - if opcode > 0x7 and fin == 0: - raise WebSocketError( - WSCloseCode.PROTOCOL_ERROR, - "Received fragmented control frame", - ) - - has_mask = (second_byte >> 7) & 1 - length = second_byte & 0x7F - - # Control frames MUST have a payload - # length of 125 bytes or less - if opcode > 0x7 and length > 125: - raise WebSocketError( - WSCloseCode.PROTOCOL_ERROR, - "Control frame payload cannot be " "larger than 125 bytes", - ) - - # Set compress status if last package is FIN - # OR set compress status if this is first fragment - # Raise error if not first fragment with rsv1 = 0x1 - if self._frame_fin or self._compressed is None: - self._compressed = True if rsv1 else False - elif rsv1: - raise WebSocketError( - WSCloseCode.PROTOCOL_ERROR, - "Received frame with non-zero reserved bits", - ) - - self._frame_fin = bool(fin) - self._frame_opcode = opcode - self._has_mask = bool(has_mask) - self._payload_length_flag = length - self._state = WSParserState.READ_PAYLOAD_LENGTH - else: - break - - # read payload length - if self._state == WSParserState.READ_PAYLOAD_LENGTH: - length = self._payload_length_flag - if length == 126: - if buf_length - start_pos >= 2: - data = buf[start_pos : start_pos + 2] - start_pos += 2 - length = UNPACK_LEN2(data)[0] - self._payload_length = length - self._state = ( - WSParserState.READ_PAYLOAD_MASK - if self._has_mask - else WSParserState.READ_PAYLOAD - ) - else: - break - elif length > 126: - if buf_length - start_pos >= 8: - data = buf[start_pos : start_pos + 8] - start_pos += 8 - length = UNPACK_LEN3(data)[0] - self._payload_length = length - self._state = ( - WSParserState.READ_PAYLOAD_MASK - if self._has_mask - else WSParserState.READ_PAYLOAD - ) - else: - break - else: - self._payload_length = length - self._state = ( - WSParserState.READ_PAYLOAD_MASK - if self._has_mask - else WSParserState.READ_PAYLOAD - ) - - # read payload mask - if self._state == WSParserState.READ_PAYLOAD_MASK: - if buf_length - start_pos >= 4: - self._frame_mask = buf[start_pos : start_pos + 4] - start_pos += 4 - self._state = WSParserState.READ_PAYLOAD - else: - break - - if self._state == WSParserState.READ_PAYLOAD: - length = self._payload_length - payload = self._frame_payload - - chunk_len = buf_length - start_pos - if length >= chunk_len: - self._payload_length = length - chunk_len - payload.extend(buf[start_pos:]) - start_pos = buf_length - else: - self._payload_length = 0 - payload.extend(buf[start_pos : start_pos + length]) - start_pos = start_pos + length - - if self._payload_length == 0: - if self._has_mask: - assert self._frame_mask is not None - _websocket_mask(self._frame_mask, payload) - - frames.append( - (self._frame_fin, self._frame_opcode, payload, self._compressed) - ) - - self._frame_payload = bytearray() - self._state = WSParserState.READ_HEADER - else: - break - - self._tail = buf[start_pos:] - - return frames - - -class WebSocketWriter: - def __init__( - self, - protocol: BaseProtocol, - transport: asyncio.Transport, - *, - use_mask: bool = False, - limit: int = DEFAULT_LIMIT, - random: Any = random.Random(), - compress: int = 0, - notakeover: bool = False, - ) -> None: - self.protocol = protocol - self.transport = transport - self.use_mask = use_mask - self.randrange = random.randrange - self.compress = compress - self.notakeover = notakeover - self._closing = False - self._limit = limit - self._output_size = 0 - self._compressobj = None # type: Any # actually compressobj - - async def _send_frame( - self, message: bytes, opcode: int, compress: Optional[int] = None - ) -> None: - """Send a frame over the websocket with message as its payload.""" - if self._closing and not (opcode & WSMsgType.CLOSE): - raise ConnectionResetError("Cannot write to closing transport") - - rsv = 0 - - # Only compress larger packets (disabled) - # Does small packet needs to be compressed? - # if self.compress and opcode < 8 and len(message) > 124: - if (compress or self.compress) and opcode < 8: - if compress: - # Do not set self._compress if compressing is for this frame - compressobj = zlib.compressobj(level=zlib.Z_BEST_SPEED, wbits=-compress) - else: # self.compress - if not self._compressobj: - self._compressobj = zlib.compressobj( - level=zlib.Z_BEST_SPEED, wbits=-self.compress - ) - compressobj = self._compressobj - - message = compressobj.compress(message) - message = message + compressobj.flush( - zlib.Z_FULL_FLUSH if self.notakeover else zlib.Z_SYNC_FLUSH - ) - if message.endswith(_WS_DEFLATE_TRAILING): - message = message[:-4] - rsv = rsv | 0x40 - - msg_length = len(message) - - use_mask = self.use_mask - if use_mask: - mask_bit = 0x80 - else: - mask_bit = 0 - - if msg_length < 126: - header = PACK_LEN1(0x80 | rsv | opcode, msg_length | mask_bit) - elif msg_length < (1 << 16): - header = PACK_LEN2(0x80 | rsv | opcode, 126 | mask_bit, msg_length) - else: - header = PACK_LEN3(0x80 | rsv | opcode, 127 | mask_bit, msg_length) - if use_mask: - mask = self.randrange(0, 0xFFFFFFFF) - mask = mask.to_bytes(4, "big") - message = bytearray(message) - _websocket_mask(mask, message) - self._write(header + mask + message) - self._output_size += len(header) + len(mask) + len(message) - else: - if len(message) > MSG_SIZE: - self._write(header) - self._write(message) - else: - self._write(header + message) - - self._output_size += len(header) + len(message) - - if self._output_size > self._limit: - self._output_size = 0 - await self.protocol._drain_helper() - - def _write(self, data: bytes) -> None: - if self.transport is None or self.transport.is_closing(): - raise ConnectionResetError("Cannot write to closing transport") - self.transport.write(data) - - async def pong(self, message: bytes = b"") -> None: - """Send pong message.""" - if isinstance(message, str): - message = message.encode("utf-8") - await self._send_frame(message, WSMsgType.PONG) - - async def ping(self, message: bytes = b"") -> None: - """Send ping message.""" - if isinstance(message, str): - message = message.encode("utf-8") - await self._send_frame(message, WSMsgType.PING) - - async def send( - self, - message: Union[str, bytes], - binary: bool = False, - compress: Optional[int] = None, - ) -> None: - """Send a frame over the websocket with message as its payload.""" - if isinstance(message, str): - message = message.encode("utf-8") - if binary: - await self._send_frame(message, WSMsgType.BINARY, compress) - else: - await self._send_frame(message, WSMsgType.TEXT, compress) - - async def close(self, code: int = 1000, message: bytes = b"") -> None: - """Close the websocket, sending the specified code and message.""" - if isinstance(message, str): - message = message.encode("utf-8") - try: - await self._send_frame( - PACK_CLOSE_CODE(code) + message, opcode=WSMsgType.CLOSE - ) - finally: - self._closing = True diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/http_writer.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/http_writer.py deleted file mode 100644 index d261fc4e..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/http_writer.py +++ /dev/null @@ -1,182 +0,0 @@ -"""Http related parsers and protocol.""" - -import asyncio -import collections -import zlib -from typing import Any, Awaitable, Callable, Optional, Union # noqa - -from multidict import CIMultiDict - -from .abc import AbstractStreamWriter -from .base_protocol import BaseProtocol -from .helpers import NO_EXTENSIONS - -__all__ = ("StreamWriter", "HttpVersion", "HttpVersion10", "HttpVersion11") - -HttpVersion = collections.namedtuple("HttpVersion", ["major", "minor"]) -HttpVersion10 = HttpVersion(1, 0) -HttpVersion11 = HttpVersion(1, 1) - - -_T_OnChunkSent = Optional[Callable[[bytes], Awaitable[None]]] - - -class StreamWriter(AbstractStreamWriter): - def __init__( - self, - protocol: BaseProtocol, - loop: asyncio.AbstractEventLoop, - on_chunk_sent: _T_OnChunkSent = None, - ) -> None: - self._protocol = protocol - self._transport = protocol.transport - - self.loop = loop - self.length = None - self.chunked = False - self.buffer_size = 0 - self.output_size = 0 - - self._eof = False - self._compress = None # type: Any - self._drain_waiter = None - - self._on_chunk_sent = on_chunk_sent # type: _T_OnChunkSent - - @property - def transport(self) -> Optional[asyncio.Transport]: - return self._transport - - @property - def protocol(self) -> BaseProtocol: - return self._protocol - - def enable_chunking(self) -> None: - self.chunked = True - - def enable_compression(self, encoding: str = "deflate") -> None: - zlib_mode = 16 + zlib.MAX_WBITS if encoding == "gzip" else zlib.MAX_WBITS - self._compress = zlib.compressobj(wbits=zlib_mode) - - def _write(self, chunk: bytes) -> None: - size = len(chunk) - self.buffer_size += size - self.output_size += size - - if self._transport is None or self._transport.is_closing(): - raise ConnectionResetError("Cannot write to closing transport") - self._transport.write(chunk) - - async def write( - self, chunk: bytes, *, drain: bool = True, LIMIT: int = 0x10000 - ) -> None: - """Writes chunk of data to a stream. - - write_eof() indicates end of stream. - writer can't be used after write_eof() method being called. - write() return drain future. - """ - if self._on_chunk_sent is not None: - await self._on_chunk_sent(chunk) - - if isinstance(chunk, memoryview): - if chunk.nbytes != len(chunk): - # just reshape it - chunk = chunk.cast("c") - - if self._compress is not None: - chunk = self._compress.compress(chunk) - if not chunk: - return - - if self.length is not None: - chunk_len = len(chunk) - if self.length >= chunk_len: - self.length = self.length - chunk_len - else: - chunk = chunk[: self.length] - self.length = 0 - if not chunk: - return - - if chunk: - if self.chunked: - chunk_len_pre = ("%x\r\n" % len(chunk)).encode("ascii") - chunk = chunk_len_pre + chunk + b"\r\n" - - self._write(chunk) - - if self.buffer_size > LIMIT and drain: - self.buffer_size = 0 - await self.drain() - - async def write_headers( - self, status_line: str, headers: "CIMultiDict[str]" - ) -> None: - """Write request/response status and headers.""" - # status + headers - buf = _serialize_headers(status_line, headers) - self._write(buf) - - async def write_eof(self, chunk: bytes = b"") -> None: - if self._eof: - return - - if chunk and self._on_chunk_sent is not None: - await self._on_chunk_sent(chunk) - - if self._compress: - if chunk: - chunk = self._compress.compress(chunk) - - chunk = chunk + self._compress.flush() - if chunk and self.chunked: - chunk_len = ("%x\r\n" % len(chunk)).encode("ascii") - chunk = chunk_len + chunk + b"\r\n0\r\n\r\n" - else: - if self.chunked: - if chunk: - chunk_len = ("%x\r\n" % len(chunk)).encode("ascii") - chunk = chunk_len + chunk + b"\r\n0\r\n\r\n" - else: - chunk = b"0\r\n\r\n" - - if chunk: - self._write(chunk) - - await self.drain() - - self._eof = True - self._transport = None - - async def drain(self) -> None: - """Flush the write buffer. - - The intended use is to write - - await w.write(data) - await w.drain() - """ - if self._protocol.transport is not None: - await self._protocol._drain_helper() - - -def _py_serialize_headers(status_line: str, headers: "CIMultiDict[str]") -> bytes: - line = ( - status_line - + "\r\n" - + "".join([k + ": " + v + "\r\n" for k, v in headers.items()]) - ) - return line.encode("utf-8") + b"\r\n" - - -_serialize_headers = _py_serialize_headers - -try: - import aiohttp._http_writer as _http_writer # type: ignore - - _c_serialize_headers = _http_writer._serialize_headers - if not NO_EXTENSIONS: - _serialize_headers = _c_serialize_headers -except ImportError: - pass diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/locks.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/locks.py deleted file mode 100644 index ce5b9c6f..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/locks.py +++ /dev/null @@ -1,45 +0,0 @@ -import asyncio -import collections -from typing import Any, Optional - -try: - from typing import Deque -except ImportError: - from typing_extensions import Deque - - -class EventResultOrError: - """ - This class wrappers the Event asyncio lock allowing either awake the - locked Tasks without any error or raising an exception. - - thanks to @vorpalsmith for the simple design. - """ - - def __init__(self, loop: asyncio.AbstractEventLoop) -> None: - self._loop = loop - self._exc = None # type: Optional[BaseException] - self._event = asyncio.Event() - self._waiters = collections.deque() # type: Deque[asyncio.Future[Any]] - - def set(self, exc: Optional[BaseException] = None) -> None: - self._exc = exc - self._event.set() - - async def wait(self) -> Any: - waiter = self._loop.create_task(self._event.wait()) - self._waiters.append(waiter) - try: - val = await waiter - finally: - self._waiters.remove(waiter) - - if self._exc is not None: - raise self._exc - - return val - - def cancel(self) -> None: - """ Cancel all waiters """ - for waiter in self._waiters: - waiter.cancel() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/log.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/log.py deleted file mode 100644 index 3cecea2b..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/log.py +++ /dev/null @@ -1,8 +0,0 @@ -import logging - -access_logger = logging.getLogger("aiohttp.access") -client_logger = logging.getLogger("aiohttp.client") -internal_logger = logging.getLogger("aiohttp.internal") -server_logger = logging.getLogger("aiohttp.server") -web_logger = logging.getLogger("aiohttp.web") -ws_logger = logging.getLogger("aiohttp.websocket") diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/multipart.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/multipart.py deleted file mode 100644 index 9e1ca92d..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/multipart.py +++ /dev/null @@ -1,957 +0,0 @@ -import base64 -import binascii -import json -import re -import uuid -import warnings -import zlib -from collections import deque -from types import TracebackType -from typing import ( - TYPE_CHECKING, - Any, - AsyncIterator, - Dict, - Iterator, - List, - Mapping, - Optional, - Sequence, - Tuple, - Type, - Union, -) -from urllib.parse import parse_qsl, unquote, urlencode - -from multidict import CIMultiDict, CIMultiDictProxy, MultiMapping - -from .hdrs import ( - CONTENT_DISPOSITION, - CONTENT_ENCODING, - CONTENT_LENGTH, - CONTENT_TRANSFER_ENCODING, - CONTENT_TYPE, -) -from .helpers import CHAR, TOKEN, parse_mimetype, reify -from .http import HeadersParser -from .payload import ( - JsonPayload, - LookupError, - Order, - Payload, - StringPayload, - get_payload, - payload_type, -) -from .streams import StreamReader - -__all__ = ( - "MultipartReader", - "MultipartWriter", - "BodyPartReader", - "BadContentDispositionHeader", - "BadContentDispositionParam", - "parse_content_disposition", - "content_disposition_filename", -) - - -if TYPE_CHECKING: # pragma: no cover - from .client_reqrep import ClientResponse - - -class BadContentDispositionHeader(RuntimeWarning): - pass - - -class BadContentDispositionParam(RuntimeWarning): - pass - - -def parse_content_disposition( - header: Optional[str], -) -> Tuple[Optional[str], Dict[str, str]]: - def is_token(string: str) -> bool: - return bool(string) and TOKEN >= set(string) - - def is_quoted(string: str) -> bool: - return string[0] == string[-1] == '"' - - def is_rfc5987(string: str) -> bool: - return is_token(string) and string.count("'") == 2 - - def is_extended_param(string: str) -> bool: - return string.endswith("*") - - def is_continuous_param(string: str) -> bool: - pos = string.find("*") + 1 - if not pos: - return False - substring = string[pos:-1] if string.endswith("*") else string[pos:] - return substring.isdigit() - - def unescape(text: str, *, chars: str = "".join(map(re.escape, CHAR))) -> str: - return re.sub(f"\\\\([{chars}])", "\\1", text) - - if not header: - return None, {} - - disptype, *parts = header.split(";") - if not is_token(disptype): - warnings.warn(BadContentDispositionHeader(header)) - return None, {} - - params = {} # type: Dict[str, str] - while parts: - item = parts.pop(0) - - if "=" not in item: - warnings.warn(BadContentDispositionHeader(header)) - return None, {} - - key, value = item.split("=", 1) - key = key.lower().strip() - value = value.lstrip() - - if key in params: - warnings.warn(BadContentDispositionHeader(header)) - return None, {} - - if not is_token(key): - warnings.warn(BadContentDispositionParam(item)) - continue - - elif is_continuous_param(key): - if is_quoted(value): - value = unescape(value[1:-1]) - elif not is_token(value): - warnings.warn(BadContentDispositionParam(item)) - continue - - elif is_extended_param(key): - if is_rfc5987(value): - encoding, _, value = value.split("'", 2) - encoding = encoding or "utf-8" - else: - warnings.warn(BadContentDispositionParam(item)) - continue - - try: - value = unquote(value, encoding, "strict") - except UnicodeDecodeError: # pragma: nocover - warnings.warn(BadContentDispositionParam(item)) - continue - - else: - failed = True - if is_quoted(value): - failed = False - value = unescape(value[1:-1].lstrip("\\/")) - elif is_token(value): - failed = False - elif parts: - # maybe just ; in filename, in any case this is just - # one case fix, for proper fix we need to redesign parser - _value = "{};{}".format(value, parts[0]) - if is_quoted(_value): - parts.pop(0) - value = unescape(_value[1:-1].lstrip("\\/")) - failed = False - - if failed: - warnings.warn(BadContentDispositionHeader(header)) - return None, {} - - params[key] = value - - return disptype.lower(), params - - -def content_disposition_filename( - params: Mapping[str, str], name: str = "filename" -) -> Optional[str]: - name_suf = "%s*" % name - if not params: - return None - elif name_suf in params: - return params[name_suf] - elif name in params: - return params[name] - else: - parts = [] - fnparams = sorted( - (key, value) for key, value in params.items() if key.startswith(name_suf) - ) - for num, (key, value) in enumerate(fnparams): - _, tail = key.split("*", 1) - if tail.endswith("*"): - tail = tail[:-1] - if tail == str(num): - parts.append(value) - else: - break - if not parts: - return None - value = "".join(parts) - if "'" in value: - encoding, _, value = value.split("'", 2) - encoding = encoding or "utf-8" - return unquote(value, encoding, "strict") - return value - - -class MultipartResponseWrapper: - """Wrapper around the MultipartReader. - - It takes care about - underlying connection and close it when it needs in. - """ - - def __init__( - self, - resp: "ClientResponse", - stream: "MultipartReader", - ) -> None: - self.resp = resp - self.stream = stream - - def __aiter__(self) -> "MultipartResponseWrapper": - return self - - async def __anext__( - self, - ) -> Union["MultipartReader", "BodyPartReader"]: - part = await self.next() - if part is None: - raise StopAsyncIteration - return part - - def at_eof(self) -> bool: - """Returns True when all response data had been read.""" - return self.resp.content.at_eof() - - async def next( - self, - ) -> Optional[Union["MultipartReader", "BodyPartReader"]]: - """Emits next multipart reader object.""" - item = await self.stream.next() - if self.stream.at_eof(): - await self.release() - return item - - async def release(self) -> None: - """Releases the connection gracefully, reading all the content - to the void.""" - await self.resp.release() - - -class BodyPartReader: - """Multipart reader for single body part.""" - - chunk_size = 8192 - - def __init__( - self, boundary: bytes, headers: "CIMultiDictProxy[str]", content: StreamReader - ) -> None: - self.headers = headers - self._boundary = boundary - self._content = content - self._at_eof = False - length = self.headers.get(CONTENT_LENGTH, None) - self._length = int(length) if length is not None else None - self._read_bytes = 0 - # TODO: typeing.Deque is not supported by Python 3.5 - self._unread = deque() # type: Any - self._prev_chunk = None # type: Optional[bytes] - self._content_eof = 0 - self._cache = {} # type: Dict[str, Any] - - def __aiter__(self) -> AsyncIterator["BodyPartReader"]: - return self # type: ignore - - async def __anext__(self) -> bytes: - part = await self.next() - if part is None: - raise StopAsyncIteration - return part - - async def next(self) -> Optional[bytes]: - item = await self.read() - if not item: - return None - return item - - async def read(self, *, decode: bool = False) -> bytes: - """Reads body part data. - - decode: Decodes data following by encoding - method from Content-Encoding header. If it missed - data remains untouched - """ - if self._at_eof: - return b"" - data = bytearray() - while not self._at_eof: - data.extend(await self.read_chunk(self.chunk_size)) - if decode: - return self.decode(data) - return data - - async def read_chunk(self, size: int = chunk_size) -> bytes: - """Reads body part content chunk of the specified size. - - size: chunk size - """ - if self._at_eof: - return b"" - if self._length: - chunk = await self._read_chunk_from_length(size) - else: - chunk = await self._read_chunk_from_stream(size) - - self._read_bytes += len(chunk) - if self._read_bytes == self._length: - self._at_eof = True - if self._at_eof: - clrf = await self._content.readline() - assert ( - b"\r\n" == clrf - ), "reader did not read all the data or it is malformed" - return chunk - - async def _read_chunk_from_length(self, size: int) -> bytes: - # Reads body part content chunk of the specified size. - # The body part must has Content-Length header with proper value. - assert self._length is not None, "Content-Length required for chunked read" - chunk_size = min(size, self._length - self._read_bytes) - chunk = await self._content.read(chunk_size) - return chunk - - async def _read_chunk_from_stream(self, size: int) -> bytes: - # Reads content chunk of body part with unknown length. - # The Content-Length header for body part is not necessary. - assert ( - size >= len(self._boundary) + 2 - ), "Chunk size must be greater or equal than boundary length + 2" - first_chunk = self._prev_chunk is None - if first_chunk: - self._prev_chunk = await self._content.read(size) - - chunk = await self._content.read(size) - self._content_eof += int(self._content.at_eof()) - assert self._content_eof < 3, "Reading after EOF" - assert self._prev_chunk is not None - window = self._prev_chunk + chunk - sub = b"\r\n" + self._boundary - if first_chunk: - idx = window.find(sub) - else: - idx = window.find(sub, max(0, len(self._prev_chunk) - len(sub))) - if idx >= 0: - # pushing boundary back to content - with warnings.catch_warnings(): - warnings.filterwarnings("ignore", category=DeprecationWarning) - self._content.unread_data(window[idx:]) - if size > idx: - self._prev_chunk = self._prev_chunk[:idx] - chunk = window[len(self._prev_chunk) : idx] - if not chunk: - self._at_eof = True - result = self._prev_chunk - self._prev_chunk = chunk - return result - - async def readline(self) -> bytes: - """Reads body part by line by line.""" - if self._at_eof: - return b"" - - if self._unread: - line = self._unread.popleft() - else: - line = await self._content.readline() - - if line.startswith(self._boundary): - # the very last boundary may not come with \r\n, - # so set single rules for everyone - sline = line.rstrip(b"\r\n") - boundary = self._boundary - last_boundary = self._boundary + b"--" - # ensure that we read exactly the boundary, not something alike - if sline == boundary or sline == last_boundary: - self._at_eof = True - self._unread.append(line) - return b"" - else: - next_line = await self._content.readline() - if next_line.startswith(self._boundary): - line = line[:-2] # strip CRLF but only once - self._unread.append(next_line) - - return line - - async def release(self) -> None: - """Like read(), but reads all the data to the void.""" - if self._at_eof: - return - while not self._at_eof: - await self.read_chunk(self.chunk_size) - - async def text(self, *, encoding: Optional[str] = None) -> str: - """Like read(), but assumes that body part contains text data.""" - data = await self.read(decode=True) - # see https://www.w3.org/TR/html5/forms.html#multipart/form-data-encoding-algorithm # NOQA - # and https://dvcs.w3.org/hg/xhr/raw-file/tip/Overview.html#dom-xmlhttprequest-send # NOQA - encoding = encoding or self.get_charset(default="utf-8") - return data.decode(encoding) - - async def json(self, *, encoding: Optional[str] = None) -> Optional[Dict[str, Any]]: - """Like read(), but assumes that body parts contains JSON data.""" - data = await self.read(decode=True) - if not data: - return None - encoding = encoding or self.get_charset(default="utf-8") - return json.loads(data.decode(encoding)) - - async def form(self, *, encoding: Optional[str] = None) -> List[Tuple[str, str]]: - """Like read(), but assumes that body parts contains form - urlencoded data. - """ - data = await self.read(decode=True) - if not data: - return [] - if encoding is not None: - real_encoding = encoding - else: - real_encoding = self.get_charset(default="utf-8") - return parse_qsl( - data.rstrip().decode(real_encoding), - keep_blank_values=True, - encoding=real_encoding, - ) - - def at_eof(self) -> bool: - """Returns True if the boundary was reached or False otherwise.""" - return self._at_eof - - def decode(self, data: bytes) -> bytes: - """Decodes data according the specified Content-Encoding - or Content-Transfer-Encoding headers value. - """ - if CONTENT_TRANSFER_ENCODING in self.headers: - data = self._decode_content_transfer(data) - if CONTENT_ENCODING in self.headers: - return self._decode_content(data) - return data - - def _decode_content(self, data: bytes) -> bytes: - encoding = self.headers.get(CONTENT_ENCODING, "").lower() - - if encoding == "deflate": - return zlib.decompress(data, -zlib.MAX_WBITS) - elif encoding == "gzip": - return zlib.decompress(data, 16 + zlib.MAX_WBITS) - elif encoding == "identity": - return data - else: - raise RuntimeError(f"unknown content encoding: {encoding}") - - def _decode_content_transfer(self, data: bytes) -> bytes: - encoding = self.headers.get(CONTENT_TRANSFER_ENCODING, "").lower() - - if encoding == "base64": - return base64.b64decode(data) - elif encoding == "quoted-printable": - return binascii.a2b_qp(data) - elif encoding in ("binary", "8bit", "7bit"): - return data - else: - raise RuntimeError( - "unknown content transfer encoding: {}" "".format(encoding) - ) - - def get_charset(self, default: str) -> str: - """Returns charset parameter from Content-Type header or default.""" - ctype = self.headers.get(CONTENT_TYPE, "") - mimetype = parse_mimetype(ctype) - return mimetype.parameters.get("charset", default) - - @reify - def name(self) -> Optional[str]: - """Returns name specified in Content-Disposition header or None - if missed or header is malformed. - """ - - _, params = parse_content_disposition(self.headers.get(CONTENT_DISPOSITION)) - return content_disposition_filename(params, "name") - - @reify - def filename(self) -> Optional[str]: - """Returns filename specified in Content-Disposition header or None - if missed or header is malformed. - """ - _, params = parse_content_disposition(self.headers.get(CONTENT_DISPOSITION)) - return content_disposition_filename(params, "filename") - - -@payload_type(BodyPartReader, order=Order.try_first) -class BodyPartReaderPayload(Payload): - def __init__(self, value: BodyPartReader, *args: Any, **kwargs: Any) -> None: - super().__init__(value, *args, **kwargs) - - params = {} # type: Dict[str, str] - if value.name is not None: - params["name"] = value.name - if value.filename is not None: - params["filename"] = value.filename - - if params: - self.set_content_disposition("attachment", True, **params) - - async def write(self, writer: Any) -> None: - field = self._value - chunk = await field.read_chunk(size=2 ** 16) - while chunk: - await writer.write(field.decode(chunk)) - chunk = await field.read_chunk(size=2 ** 16) - - -class MultipartReader: - """Multipart body reader.""" - - #: Response wrapper, used when multipart readers constructs from response. - response_wrapper_cls = MultipartResponseWrapper - #: Multipart reader class, used to handle multipart/* body parts. - #: None points to type(self) - multipart_reader_cls = None - #: Body part reader class for non multipart/* content types. - part_reader_cls = BodyPartReader - - def __init__(self, headers: Mapping[str, str], content: StreamReader) -> None: - self.headers = headers - self._boundary = ("--" + self._get_boundary()).encode() - self._content = content - self._last_part = ( - None - ) # type: Optional[Union['MultipartReader', BodyPartReader]] - self._at_eof = False - self._at_bof = True - self._unread = [] # type: List[bytes] - - def __aiter__( - self, - ) -> AsyncIterator["BodyPartReader"]: - return self # type: ignore - - async def __anext__( - self, - ) -> Optional[Union["MultipartReader", BodyPartReader]]: - part = await self.next() - if part is None: - raise StopAsyncIteration - return part - - @classmethod - def from_response( - cls, - response: "ClientResponse", - ) -> MultipartResponseWrapper: - """Constructs reader instance from HTTP response. - - :param response: :class:`~aiohttp.client.ClientResponse` instance - """ - obj = cls.response_wrapper_cls( - response, cls(response.headers, response.content) - ) - return obj - - def at_eof(self) -> bool: - """Returns True if the final boundary was reached or - False otherwise. - """ - return self._at_eof - - async def next( - self, - ) -> Optional[Union["MultipartReader", BodyPartReader]]: - """Emits the next multipart body part.""" - # So, if we're at BOF, we need to skip till the boundary. - if self._at_eof: - return None - await self._maybe_release_last_part() - if self._at_bof: - await self._read_until_first_boundary() - self._at_bof = False - else: - await self._read_boundary() - if self._at_eof: # we just read the last boundary, nothing to do there - return None - self._last_part = await self.fetch_next_part() - return self._last_part - - async def release(self) -> None: - """Reads all the body parts to the void till the final boundary.""" - while not self._at_eof: - item = await self.next() - if item is None: - break - await item.release() - - async def fetch_next_part( - self, - ) -> Union["MultipartReader", BodyPartReader]: - """Returns the next body part reader.""" - headers = await self._read_headers() - return self._get_part_reader(headers) - - def _get_part_reader( - self, - headers: "CIMultiDictProxy[str]", - ) -> Union["MultipartReader", BodyPartReader]: - """Dispatches the response by the `Content-Type` header, returning - suitable reader instance. - - :param dict headers: Response headers - """ - ctype = headers.get(CONTENT_TYPE, "") - mimetype = parse_mimetype(ctype) - - if mimetype.type == "multipart": - if self.multipart_reader_cls is None: - return type(self)(headers, self._content) - return self.multipart_reader_cls(headers, self._content) - else: - return self.part_reader_cls(self._boundary, headers, self._content) - - def _get_boundary(self) -> str: - mimetype = parse_mimetype(self.headers[CONTENT_TYPE]) - - assert mimetype.type == "multipart", "multipart/* content type expected" - - if "boundary" not in mimetype.parameters: - raise ValueError( - "boundary missed for Content-Type: %s" % self.headers[CONTENT_TYPE] - ) - - boundary = mimetype.parameters["boundary"] - if len(boundary) > 70: - raise ValueError("boundary %r is too long (70 chars max)" % boundary) - - return boundary - - async def _readline(self) -> bytes: - if self._unread: - return self._unread.pop() - return await self._content.readline() - - async def _read_until_first_boundary(self) -> None: - while True: - chunk = await self._readline() - if chunk == b"": - raise ValueError( - "Could not find starting boundary %r" % (self._boundary) - ) - chunk = chunk.rstrip() - if chunk == self._boundary: - return - elif chunk == self._boundary + b"--": - self._at_eof = True - return - - async def _read_boundary(self) -> None: - chunk = (await self._readline()).rstrip() - if chunk == self._boundary: - pass - elif chunk == self._boundary + b"--": - self._at_eof = True - epilogue = await self._readline() - next_line = await self._readline() - - # the epilogue is expected and then either the end of input or the - # parent multipart boundary, if the parent boundary is found then - # it should be marked as unread and handed to the parent for - # processing - if next_line[:2] == b"--": - self._unread.append(next_line) - # otherwise the request is likely missing an epilogue and both - # lines should be passed to the parent for processing - # (this handles the old behavior gracefully) - else: - self._unread.extend([next_line, epilogue]) - else: - raise ValueError(f"Invalid boundary {chunk!r}, expected {self._boundary!r}") - - async def _read_headers(self) -> "CIMultiDictProxy[str]": - lines = [b""] - while True: - chunk = await self._content.readline() - chunk = chunk.strip() - lines.append(chunk) - if not chunk: - break - parser = HeadersParser() - headers, raw_headers = parser.parse_headers(lines) - return headers - - async def _maybe_release_last_part(self) -> None: - """Ensures that the last read body part is read completely.""" - if self._last_part is not None: - if not self._last_part.at_eof(): - await self._last_part.release() - self._unread.extend(self._last_part._unread) - self._last_part = None - - -_Part = Tuple[Payload, str, str] - - -class MultipartWriter(Payload): - """Multipart body writer.""" - - def __init__(self, subtype: str = "mixed", boundary: Optional[str] = None) -> None: - boundary = boundary if boundary is not None else uuid.uuid4().hex - # The underlying Payload API demands a str (utf-8), not bytes, - # so we need to ensure we don't lose anything during conversion. - # As a result, require the boundary to be ASCII only. - # In both situations. - - try: - self._boundary = boundary.encode("ascii") - except UnicodeEncodeError: - raise ValueError("boundary should contain ASCII only chars") from None - ctype = f"multipart/{subtype}; boundary={self._boundary_value}" - - super().__init__(None, content_type=ctype) - - self._parts = [] # type: List[_Part] - - def __enter__(self) -> "MultipartWriter": - return self - - def __exit__( - self, - exc_type: Optional[Type[BaseException]], - exc_val: Optional[BaseException], - exc_tb: Optional[TracebackType], - ) -> None: - pass - - def __iter__(self) -> Iterator[_Part]: - return iter(self._parts) - - def __len__(self) -> int: - return len(self._parts) - - def __bool__(self) -> bool: - return True - - _valid_tchar_regex = re.compile(br"\A[!#$%&'*+\-.^_`|~\w]+\Z") - _invalid_qdtext_char_regex = re.compile(br"[\x00-\x08\x0A-\x1F\x7F]") - - @property - def _boundary_value(self) -> str: - """Wrap boundary parameter value in quotes, if necessary. - - Reads self.boundary and returns a unicode sting. - """ - # Refer to RFCs 7231, 7230, 5234. - # - # parameter = token "=" ( token / quoted-string ) - # token = 1*tchar - # quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE - # qdtext = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text - # obs-text = %x80-FF - # quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text ) - # tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" - # / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" - # / DIGIT / ALPHA - # ; any VCHAR, except delimiters - # VCHAR = %x21-7E - value = self._boundary - if re.match(self._valid_tchar_regex, value): - return value.decode("ascii") # cannot fail - - if re.search(self._invalid_qdtext_char_regex, value): - raise ValueError("boundary value contains invalid characters") - - # escape %x5C and %x22 - quoted_value_content = value.replace(b"\\", b"\\\\") - quoted_value_content = quoted_value_content.replace(b'"', b'\\"') - - return '"' + quoted_value_content.decode("ascii") + '"' - - @property - def boundary(self) -> str: - return self._boundary.decode("ascii") - - def append(self, obj: Any, headers: Optional[MultiMapping[str]] = None) -> Payload: - if headers is None: - headers = CIMultiDict() - - if isinstance(obj, Payload): - obj.headers.update(headers) - return self.append_payload(obj) - else: - try: - payload = get_payload(obj, headers=headers) - except LookupError: - raise TypeError("Cannot create payload from %r" % obj) - else: - return self.append_payload(payload) - - def append_payload(self, payload: Payload) -> Payload: - """Adds a new body part to multipart writer.""" - # compression - encoding = payload.headers.get( - CONTENT_ENCODING, - "", - ).lower() # type: Optional[str] - if encoding and encoding not in ("deflate", "gzip", "identity"): - raise RuntimeError(f"unknown content encoding: {encoding}") - if encoding == "identity": - encoding = None - - # te encoding - te_encoding = payload.headers.get( - CONTENT_TRANSFER_ENCODING, - "", - ).lower() # type: Optional[str] - if te_encoding not in ("", "base64", "quoted-printable", "binary"): - raise RuntimeError( - "unknown content transfer encoding: {}" "".format(te_encoding) - ) - if te_encoding == "binary": - te_encoding = None - - # size - size = payload.size - if size is not None and not (encoding or te_encoding): - payload.headers[CONTENT_LENGTH] = str(size) - - self._parts.append((payload, encoding, te_encoding)) # type: ignore - return payload - - def append_json( - self, obj: Any, headers: Optional[MultiMapping[str]] = None - ) -> Payload: - """Helper to append JSON part.""" - if headers is None: - headers = CIMultiDict() - - return self.append_payload(JsonPayload(obj, headers=headers)) - - def append_form( - self, - obj: Union[Sequence[Tuple[str, str]], Mapping[str, str]], - headers: Optional[MultiMapping[str]] = None, - ) -> Payload: - """Helper to append form urlencoded part.""" - assert isinstance(obj, (Sequence, Mapping)) - - if headers is None: - headers = CIMultiDict() - - if isinstance(obj, Mapping): - obj = list(obj.items()) - data = urlencode(obj, doseq=True) - - return self.append_payload( - StringPayload( - data, headers=headers, content_type="application/x-www-form-urlencoded" - ) - ) - - @property - def size(self) -> Optional[int]: - """Size of the payload.""" - total = 0 - for part, encoding, te_encoding in self._parts: - if encoding or te_encoding or part.size is None: - return None - - total += int( - 2 - + len(self._boundary) - + 2 - + part.size # b'--'+self._boundary+b'\r\n' - + len(part._binary_headers) - + 2 # b'\r\n' - ) - - total += 2 + len(self._boundary) + 4 # b'--'+self._boundary+b'--\r\n' - return total - - async def write(self, writer: Any, close_boundary: bool = True) -> None: - """Write body.""" - for part, encoding, te_encoding in self._parts: - await writer.write(b"--" + self._boundary + b"\r\n") - await writer.write(part._binary_headers) - - if encoding or te_encoding: - w = MultipartPayloadWriter(writer) - if encoding: - w.enable_compression(encoding) - if te_encoding: - w.enable_encoding(te_encoding) - await part.write(w) # type: ignore - await w.write_eof() - else: - await part.write(writer) - - await writer.write(b"\r\n") - - if close_boundary: - await writer.write(b"--" + self._boundary + b"--\r\n") - - -class MultipartPayloadWriter: - def __init__(self, writer: Any) -> None: - self._writer = writer - self._encoding = None # type: Optional[str] - self._compress = None # type: Any - self._encoding_buffer = None # type: Optional[bytearray] - - def enable_encoding(self, encoding: str) -> None: - if encoding == "base64": - self._encoding = encoding - self._encoding_buffer = bytearray() - elif encoding == "quoted-printable": - self._encoding = "quoted-printable" - - def enable_compression(self, encoding: str = "deflate") -> None: - zlib_mode = 16 + zlib.MAX_WBITS if encoding == "gzip" else -zlib.MAX_WBITS - self._compress = zlib.compressobj(wbits=zlib_mode) - - async def write_eof(self) -> None: - if self._compress is not None: - chunk = self._compress.flush() - if chunk: - self._compress = None - await self.write(chunk) - - if self._encoding == "base64": - if self._encoding_buffer: - await self._writer.write(base64.b64encode(self._encoding_buffer)) - - async def write(self, chunk: bytes) -> None: - if self._compress is not None: - if chunk: - chunk = self._compress.compress(chunk) - if not chunk: - return - - if self._encoding == "base64": - buf = self._encoding_buffer - assert buf is not None - buf.extend(chunk) - - if buf: - div, mod = divmod(len(buf), 3) - enc_chunk, self._encoding_buffer = (buf[: div * 3], buf[div * 3 :]) - if enc_chunk: - b64chunk = base64.b64encode(enc_chunk) - await self._writer.write(b64chunk) - elif self._encoding == "quoted-printable": - await self._writer.write(binascii.b2a_qp(chunk)) - else: - await self._writer.write(chunk) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/payload.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/payload.py deleted file mode 100644 index c63dd220..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/payload.py +++ /dev/null @@ -1,448 +0,0 @@ -import asyncio -import enum -import io -import json -import mimetypes -import os -import warnings -from abc import ABC, abstractmethod -from itertools import chain -from typing import ( - IO, - TYPE_CHECKING, - Any, - ByteString, - Dict, - Iterable, - Optional, - Text, - TextIO, - Tuple, - Type, - Union, -) - -from multidict import CIMultiDict - -from . import hdrs -from .abc import AbstractStreamWriter -from .helpers import ( - PY_36, - content_disposition_header, - guess_filename, - parse_mimetype, - sentinel, -) -from .streams import StreamReader -from .typedefs import JSONEncoder, _CIMultiDict - -__all__ = ( - "PAYLOAD_REGISTRY", - "get_payload", - "payload_type", - "Payload", - "BytesPayload", - "StringPayload", - "IOBasePayload", - "BytesIOPayload", - "BufferedReaderPayload", - "TextIOPayload", - "StringIOPayload", - "JsonPayload", - "AsyncIterablePayload", -) - -TOO_LARGE_BYTES_BODY = 2 ** 20 # 1 MB - - -if TYPE_CHECKING: # pragma: no cover - from typing import List - - -class LookupError(Exception): - pass - - -class Order(str, enum.Enum): - normal = "normal" - try_first = "try_first" - try_last = "try_last" - - -def get_payload(data: Any, *args: Any, **kwargs: Any) -> "Payload": - return PAYLOAD_REGISTRY.get(data, *args, **kwargs) - - -def register_payload( - factory: Type["Payload"], type: Any, *, order: Order = Order.normal -) -> None: - PAYLOAD_REGISTRY.register(factory, type, order=order) - - -class payload_type: - def __init__(self, type: Any, *, order: Order = Order.normal) -> None: - self.type = type - self.order = order - - def __call__(self, factory: Type["Payload"]) -> Type["Payload"]: - register_payload(factory, self.type, order=self.order) - return factory - - -class PayloadRegistry: - """Payload registry. - - note: we need zope.interface for more efficient adapter search - """ - - def __init__(self) -> None: - self._first = [] # type: List[Tuple[Type[Payload], Any]] - self._normal = [] # type: List[Tuple[Type[Payload], Any]] - self._last = [] # type: List[Tuple[Type[Payload], Any]] - - def get( - self, data: Any, *args: Any, _CHAIN: Any = chain, **kwargs: Any - ) -> "Payload": - if isinstance(data, Payload): - return data - for factory, type in _CHAIN(self._first, self._normal, self._last): - if isinstance(data, type): - return factory(data, *args, **kwargs) - - raise LookupError() - - def register( - self, factory: Type["Payload"], type: Any, *, order: Order = Order.normal - ) -> None: - if order is Order.try_first: - self._first.append((factory, type)) - elif order is Order.normal: - self._normal.append((factory, type)) - elif order is Order.try_last: - self._last.append((factory, type)) - else: - raise ValueError(f"Unsupported order {order!r}") - - -class Payload(ABC): - - _default_content_type = "application/octet-stream" # type: str - _size = None # type: Optional[int] - - def __init__( - self, - value: Any, - headers: Optional[ - Union[_CIMultiDict, Dict[str, str], Iterable[Tuple[str, str]]] - ] = None, - content_type: Optional[str] = sentinel, - filename: Optional[str] = None, - encoding: Optional[str] = None, - **kwargs: Any, - ) -> None: - self._encoding = encoding - self._filename = filename - self._headers = CIMultiDict() # type: _CIMultiDict - self._value = value - if content_type is not sentinel and content_type is not None: - self._headers[hdrs.CONTENT_TYPE] = content_type - elif self._filename is not None: - content_type = mimetypes.guess_type(self._filename)[0] - if content_type is None: - content_type = self._default_content_type - self._headers[hdrs.CONTENT_TYPE] = content_type - else: - self._headers[hdrs.CONTENT_TYPE] = self._default_content_type - self._headers.update(headers or {}) - - @property - def size(self) -> Optional[int]: - """Size of the payload.""" - return self._size - - @property - def filename(self) -> Optional[str]: - """Filename of the payload.""" - return self._filename - - @property - def headers(self) -> _CIMultiDict: - """Custom item headers""" - return self._headers - - @property - def _binary_headers(self) -> bytes: - return ( - "".join([k + ": " + v + "\r\n" for k, v in self.headers.items()]).encode( - "utf-8" - ) - + b"\r\n" - ) - - @property - def encoding(self) -> Optional[str]: - """Payload encoding""" - return self._encoding - - @property - def content_type(self) -> str: - """Content type""" - return self._headers[hdrs.CONTENT_TYPE] - - def set_content_disposition( - self, disptype: str, quote_fields: bool = True, **params: Any - ) -> None: - """Sets ``Content-Disposition`` header.""" - self._headers[hdrs.CONTENT_DISPOSITION] = content_disposition_header( - disptype, quote_fields=quote_fields, **params - ) - - @abstractmethod - async def write(self, writer: AbstractStreamWriter) -> None: - """Write payload. - - writer is an AbstractStreamWriter instance: - """ - - -class BytesPayload(Payload): - def __init__(self, value: ByteString, *args: Any, **kwargs: Any) -> None: - if not isinstance(value, (bytes, bytearray, memoryview)): - raise TypeError( - "value argument must be byte-ish, not {!r}".format(type(value)) - ) - - if "content_type" not in kwargs: - kwargs["content_type"] = "application/octet-stream" - - super().__init__(value, *args, **kwargs) - - if isinstance(value, memoryview): - self._size = value.nbytes - else: - self._size = len(value) - - if self._size > TOO_LARGE_BYTES_BODY: - if PY_36: - kwargs = {"source": self} - else: - kwargs = {} - warnings.warn( - "Sending a large body directly with raw bytes might" - " lock the event loop. You should probably pass an " - "io.BytesIO object instead", - ResourceWarning, - **kwargs, - ) - - async def write(self, writer: AbstractStreamWriter) -> None: - await writer.write(self._value) - - -class StringPayload(BytesPayload): - def __init__( - self, - value: Text, - *args: Any, - encoding: Optional[str] = None, - content_type: Optional[str] = None, - **kwargs: Any, - ) -> None: - - if encoding is None: - if content_type is None: - real_encoding = "utf-8" - content_type = "text/plain; charset=utf-8" - else: - mimetype = parse_mimetype(content_type) - real_encoding = mimetype.parameters.get("charset", "utf-8") - else: - if content_type is None: - content_type = "text/plain; charset=%s" % encoding - real_encoding = encoding - - super().__init__( - value.encode(real_encoding), - encoding=real_encoding, - content_type=content_type, - *args, - **kwargs, - ) - - -class StringIOPayload(StringPayload): - def __init__(self, value: IO[str], *args: Any, **kwargs: Any) -> None: - super().__init__(value.read(), *args, **kwargs) - - -class IOBasePayload(Payload): - def __init__( - self, value: IO[Any], disposition: str = "attachment", *args: Any, **kwargs: Any - ) -> None: - if "filename" not in kwargs: - kwargs["filename"] = guess_filename(value) - - super().__init__(value, *args, **kwargs) - - if self._filename is not None and disposition is not None: - if hdrs.CONTENT_DISPOSITION not in self.headers: - self.set_content_disposition(disposition, filename=self._filename) - - async def write(self, writer: AbstractStreamWriter) -> None: - loop = asyncio.get_event_loop() - try: - chunk = await loop.run_in_executor(None, self._value.read, 2 ** 16) - while chunk: - await writer.write(chunk) - chunk = await loop.run_in_executor(None, self._value.read, 2 ** 16) - finally: - await loop.run_in_executor(None, self._value.close) - - -class TextIOPayload(IOBasePayload): - def __init__( - self, - value: TextIO, - *args: Any, - encoding: Optional[str] = None, - content_type: Optional[str] = None, - **kwargs: Any, - ) -> None: - - if encoding is None: - if content_type is None: - encoding = "utf-8" - content_type = "text/plain; charset=utf-8" - else: - mimetype = parse_mimetype(content_type) - encoding = mimetype.parameters.get("charset", "utf-8") - else: - if content_type is None: - content_type = "text/plain; charset=%s" % encoding - - super().__init__( - value, - content_type=content_type, - encoding=encoding, - *args, - **kwargs, - ) - - @property - def size(self) -> Optional[int]: - try: - return os.fstat(self._value.fileno()).st_size - self._value.tell() - except OSError: - return None - - async def write(self, writer: AbstractStreamWriter) -> None: - loop = asyncio.get_event_loop() - try: - chunk = await loop.run_in_executor(None, self._value.read, 2 ** 16) - while chunk: - await writer.write(chunk.encode(self._encoding)) - chunk = await loop.run_in_executor(None, self._value.read, 2 ** 16) - finally: - await loop.run_in_executor(None, self._value.close) - - -class BytesIOPayload(IOBasePayload): - @property - def size(self) -> int: - position = self._value.tell() - end = self._value.seek(0, os.SEEK_END) - self._value.seek(position) - return end - position - - -class BufferedReaderPayload(IOBasePayload): - @property - def size(self) -> Optional[int]: - try: - return os.fstat(self._value.fileno()).st_size - self._value.tell() - except OSError: - # data.fileno() is not supported, e.g. - # io.BufferedReader(io.BytesIO(b'data')) - return None - - -class JsonPayload(BytesPayload): - def __init__( - self, - value: Any, - encoding: str = "utf-8", - content_type: str = "application/json", - dumps: JSONEncoder = json.dumps, - *args: Any, - **kwargs: Any, - ) -> None: - - super().__init__( - dumps(value).encode(encoding), - content_type=content_type, - encoding=encoding, - *args, - **kwargs, - ) - - -if TYPE_CHECKING: # pragma: no cover - from typing import AsyncIterable, AsyncIterator - - _AsyncIterator = AsyncIterator[bytes] - _AsyncIterable = AsyncIterable[bytes] -else: - from collections.abc import AsyncIterable, AsyncIterator - - _AsyncIterator = AsyncIterator - _AsyncIterable = AsyncIterable - - -class AsyncIterablePayload(Payload): - - _iter = None # type: Optional[_AsyncIterator] - - def __init__(self, value: _AsyncIterable, *args: Any, **kwargs: Any) -> None: - if not isinstance(value, AsyncIterable): - raise TypeError( - "value argument must support " - "collections.abc.AsyncIterablebe interface, " - "got {!r}".format(type(value)) - ) - - if "content_type" not in kwargs: - kwargs["content_type"] = "application/octet-stream" - - super().__init__(value, *args, **kwargs) - - self._iter = value.__aiter__() - - async def write(self, writer: AbstractStreamWriter) -> None: - if self._iter: - try: - # iter is not None check prevents rare cases - # when the case iterable is used twice - while True: - chunk = await self._iter.__anext__() - await writer.write(chunk) - except StopAsyncIteration: - self._iter = None - - -class StreamReaderPayload(AsyncIterablePayload): - def __init__(self, value: StreamReader, *args: Any, **kwargs: Any) -> None: - super().__init__(value.iter_any(), *args, **kwargs) - - -PAYLOAD_REGISTRY = PayloadRegistry() -PAYLOAD_REGISTRY.register(BytesPayload, (bytes, bytearray, memoryview)) -PAYLOAD_REGISTRY.register(StringPayload, str) -PAYLOAD_REGISTRY.register(StringIOPayload, io.StringIO) -PAYLOAD_REGISTRY.register(TextIOPayload, io.TextIOBase) -PAYLOAD_REGISTRY.register(BytesIOPayload, io.BytesIO) -PAYLOAD_REGISTRY.register(BufferedReaderPayload, (io.BufferedReader, io.BufferedRandom)) -PAYLOAD_REGISTRY.register(IOBasePayload, io.IOBase) -PAYLOAD_REGISTRY.register(StreamReaderPayload, StreamReader) -# try_last for giving a chance to more specialized async interables like -# multidict.BodyPartReaderPayload override the default -PAYLOAD_REGISTRY.register(AsyncIterablePayload, AsyncIterable, order=Order.try_last) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/payload_streamer.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/payload_streamer.py deleted file mode 100644 index 3b2de151..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/payload_streamer.py +++ /dev/null @@ -1,74 +0,0 @@ -""" Payload implemenation for coroutines as data provider. - -As a simple case, you can upload data from file:: - - @aiohttp.streamer - async def file_sender(writer, file_name=None): - with open(file_name, 'rb') as f: - chunk = f.read(2**16) - while chunk: - await writer.write(chunk) - - chunk = f.read(2**16) - -Then you can use `file_sender` like this: - - async with session.post('http://httpbin.org/post', - data=file_sender(file_name='huge_file')) as resp: - print(await resp.text()) - -..note:: Coroutine must accept `writer` as first argument - -""" - -import types -import warnings -from typing import Any, Awaitable, Callable, Dict, Tuple - -from .abc import AbstractStreamWriter -from .payload import Payload, payload_type - -__all__ = ("streamer",) - - -class _stream_wrapper: - def __init__( - self, - coro: Callable[..., Awaitable[None]], - args: Tuple[Any, ...], - kwargs: Dict[str, Any], - ) -> None: - self.coro = types.coroutine(coro) - self.args = args - self.kwargs = kwargs - - async def __call__(self, writer: AbstractStreamWriter) -> None: - await self.coro(writer, *self.args, **self.kwargs) # type: ignore - - -class streamer: - def __init__(self, coro: Callable[..., Awaitable[None]]) -> None: - warnings.warn( - "@streamer is deprecated, use async generators instead", - DeprecationWarning, - stacklevel=2, - ) - self.coro = coro - - def __call__(self, *args: Any, **kwargs: Any) -> _stream_wrapper: - return _stream_wrapper(self.coro, args, kwargs) - - -@payload_type(_stream_wrapper) -class StreamWrapperPayload(Payload): - async def write(self, writer: AbstractStreamWriter) -> None: - await self._value(writer) - - -@payload_type(streamer) -class StreamPayload(StreamWrapperPayload): - def __init__(self, value: Any, *args: Any, **kwargs: Any) -> None: - super().__init__(value(), *args, **kwargs) - - async def write(self, writer: AbstractStreamWriter) -> None: - await self._value(writer) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/py.typed b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/py.typed deleted file mode 100644 index f5642f79..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/py.typed +++ /dev/null @@ -1 +0,0 @@ -Marker diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/pytest_plugin.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/pytest_plugin.py deleted file mode 100644 index 52042934..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/pytest_plugin.py +++ /dev/null @@ -1,380 +0,0 @@ -import asyncio -import contextlib -import warnings -from collections.abc import Callable - -import pytest - -from aiohttp.helpers import PY_37, isasyncgenfunction -from aiohttp.web import Application - -from .test_utils import ( - BaseTestServer, - RawTestServer, - TestClient, - TestServer, - loop_context, - setup_test_loop, - teardown_test_loop, - unused_port as _unused_port, -) - -try: - import uvloop -except ImportError: # pragma: no cover - uvloop = None - -try: - import tokio -except ImportError: # pragma: no cover - tokio = None - - -def pytest_addoption(parser): # type: ignore - parser.addoption( - "--aiohttp-fast", - action="store_true", - default=False, - help="run tests faster by disabling extra checks", - ) - parser.addoption( - "--aiohttp-loop", - action="store", - default="pyloop", - help="run tests with specific loop: pyloop, uvloop, tokio or all", - ) - parser.addoption( - "--aiohttp-enable-loop-debug", - action="store_true", - default=False, - help="enable event loop debug mode", - ) - - -def pytest_fixture_setup(fixturedef): # type: ignore - """ - Allow fixtures to be coroutines. Run coroutine fixtures in an event loop. - """ - func = fixturedef.func - - if isasyncgenfunction(func): - # async generator fixture - is_async_gen = True - elif asyncio.iscoroutinefunction(func): - # regular async fixture - is_async_gen = False - else: - # not an async fixture, nothing to do - return - - strip_request = False - if "request" not in fixturedef.argnames: - fixturedef.argnames += ("request",) - strip_request = True - - def wrapper(*args, **kwargs): # type: ignore - request = kwargs["request"] - if strip_request: - del kwargs["request"] - - # if neither the fixture nor the test use the 'loop' fixture, - # 'getfixturevalue' will fail because the test is not parameterized - # (this can be removed someday if 'loop' is no longer parameterized) - if "loop" not in request.fixturenames: - raise Exception( - "Asynchronous fixtures must depend on the 'loop' fixture or " - "be used in tests depending from it." - ) - - _loop = request.getfixturevalue("loop") - - if is_async_gen: - # for async generators, we need to advance the generator once, - # then advance it again in a finalizer - gen = func(*args, **kwargs) - - def finalizer(): # type: ignore - try: - return _loop.run_until_complete(gen.__anext__()) - except StopAsyncIteration: - pass - - request.addfinalizer(finalizer) - return _loop.run_until_complete(gen.__anext__()) - else: - return _loop.run_until_complete(func(*args, **kwargs)) - - fixturedef.func = wrapper - - -@pytest.fixture -def fast(request): # type: ignore - """--fast config option""" - return request.config.getoption("--aiohttp-fast") - - -@pytest.fixture -def loop_debug(request): # type: ignore - """--enable-loop-debug config option""" - return request.config.getoption("--aiohttp-enable-loop-debug") - - -@contextlib.contextmanager -def _runtime_warning_context(): # type: ignore - """ - Context manager which checks for RuntimeWarnings, specifically to - avoid "coroutine 'X' was never awaited" warnings being missed. - - If RuntimeWarnings occur in the context a RuntimeError is raised. - """ - with warnings.catch_warnings(record=True) as _warnings: - yield - rw = [ - "{w.filename}:{w.lineno}:{w.message}".format(w=w) - for w in _warnings - if w.category == RuntimeWarning - ] - if rw: - raise RuntimeError( - "{} Runtime Warning{},\n{}".format( - len(rw), "" if len(rw) == 1 else "s", "\n".join(rw) - ) - ) - - -@contextlib.contextmanager -def _passthrough_loop_context(loop, fast=False): # type: ignore - """ - setups and tears down a loop unless one is passed in via the loop - argument when it's passed straight through. - """ - if loop: - # loop already exists, pass it straight through - yield loop - else: - # this shadows loop_context's standard behavior - loop = setup_test_loop() - yield loop - teardown_test_loop(loop, fast=fast) - - -def pytest_pycollect_makeitem(collector, name, obj): # type: ignore - """ - Fix pytest collecting for coroutines. - """ - if collector.funcnamefilter(name) and asyncio.iscoroutinefunction(obj): - return list(collector._genfunctions(name, obj)) - - -def pytest_pyfunc_call(pyfuncitem): # type: ignore - """ - Run coroutines in an event loop instead of a normal function call. - """ - fast = pyfuncitem.config.getoption("--aiohttp-fast") - if asyncio.iscoroutinefunction(pyfuncitem.function): - existing_loop = pyfuncitem.funcargs.get( - "proactor_loop" - ) or pyfuncitem.funcargs.get("loop", None) - with _runtime_warning_context(): - with _passthrough_loop_context(existing_loop, fast=fast) as _loop: - testargs = { - arg: pyfuncitem.funcargs[arg] - for arg in pyfuncitem._fixtureinfo.argnames - } - _loop.run_until_complete(pyfuncitem.obj(**testargs)) - - return True - - -def pytest_generate_tests(metafunc): # type: ignore - if "loop_factory" not in metafunc.fixturenames: - return - - loops = metafunc.config.option.aiohttp_loop - avail_factories = {"pyloop": asyncio.DefaultEventLoopPolicy} - - if uvloop is not None: # pragma: no cover - avail_factories["uvloop"] = uvloop.EventLoopPolicy - - if tokio is not None: # pragma: no cover - avail_factories["tokio"] = tokio.EventLoopPolicy - - if loops == "all": - loops = "pyloop,uvloop?,tokio?" - - factories = {} # type: ignore - for name in loops.split(","): - required = not name.endswith("?") - name = name.strip(" ?") - if name not in avail_factories: # pragma: no cover - if required: - raise ValueError( - "Unknown loop '%s', available loops: %s" - % (name, list(factories.keys())) - ) - else: - continue - factories[name] = avail_factories[name] - metafunc.parametrize( - "loop_factory", list(factories.values()), ids=list(factories.keys()) - ) - - -@pytest.fixture -def loop(loop_factory, fast, loop_debug): # type: ignore - """Return an instance of the event loop.""" - policy = loop_factory() - asyncio.set_event_loop_policy(policy) - with loop_context(fast=fast) as _loop: - if loop_debug: - _loop.set_debug(True) # pragma: no cover - asyncio.set_event_loop(_loop) - yield _loop - - -@pytest.fixture -def proactor_loop(): # type: ignore - if not PY_37: - policy = asyncio.get_event_loop_policy() - policy._loop_factory = asyncio.ProactorEventLoop # type: ignore - else: - policy = asyncio.WindowsProactorEventLoopPolicy() # type: ignore - asyncio.set_event_loop_policy(policy) - - with loop_context(policy.new_event_loop) as _loop: - asyncio.set_event_loop(_loop) - yield _loop - - -@pytest.fixture -def unused_port(aiohttp_unused_port): # type: ignore # pragma: no cover - warnings.warn( - "Deprecated, use aiohttp_unused_port fixture instead", - DeprecationWarning, - stacklevel=2, - ) - return aiohttp_unused_port - - -@pytest.fixture -def aiohttp_unused_port(): # type: ignore - """Return a port that is unused on the current host.""" - return _unused_port - - -@pytest.fixture -def aiohttp_server(loop): # type: ignore - """Factory to create a TestServer instance, given an app. - - aiohttp_server(app, **kwargs) - """ - servers = [] - - async def go(app, *, port=None, **kwargs): # type: ignore - server = TestServer(app, port=port) - await server.start_server(loop=loop, **kwargs) - servers.append(server) - return server - - yield go - - async def finalize(): # type: ignore - while servers: - await servers.pop().close() - - loop.run_until_complete(finalize()) - - -@pytest.fixture -def test_server(aiohttp_server): # type: ignore # pragma: no cover - warnings.warn( - "Deprecated, use aiohttp_server fixture instead", - DeprecationWarning, - stacklevel=2, - ) - return aiohttp_server - - -@pytest.fixture -def aiohttp_raw_server(loop): # type: ignore - """Factory to create a RawTestServer instance, given a web handler. - - aiohttp_raw_server(handler, **kwargs) - """ - servers = [] - - async def go(handler, *, port=None, **kwargs): # type: ignore - server = RawTestServer(handler, port=port) - await server.start_server(loop=loop, **kwargs) - servers.append(server) - return server - - yield go - - async def finalize(): # type: ignore - while servers: - await servers.pop().close() - - loop.run_until_complete(finalize()) - - -@pytest.fixture -def raw_test_server(aiohttp_raw_server): # type: ignore # pragma: no cover - warnings.warn( - "Deprecated, use aiohttp_raw_server fixture instead", - DeprecationWarning, - stacklevel=2, - ) - return aiohttp_raw_server - - -@pytest.fixture -def aiohttp_client(loop): # type: ignore - """Factory to create a TestClient instance. - - aiohttp_client(app, **kwargs) - aiohttp_client(server, **kwargs) - aiohttp_client(raw_server, **kwargs) - """ - clients = [] - - async def go(__param, *args, server_kwargs=None, **kwargs): # type: ignore - - if isinstance(__param, Callable) and not isinstance( # type: ignore - __param, (Application, BaseTestServer) - ): - __param = __param(loop, *args, **kwargs) - kwargs = {} - else: - assert not args, "args should be empty" - - if isinstance(__param, Application): - server_kwargs = server_kwargs or {} - server = TestServer(__param, loop=loop, **server_kwargs) - client = TestClient(server, loop=loop, **kwargs) - elif isinstance(__param, BaseTestServer): - client = TestClient(__param, loop=loop, **kwargs) - else: - raise ValueError("Unknown argument type: %r" % type(__param)) - - await client.start_server() - clients.append(client) - return client - - yield go - - async def finalize(): # type: ignore - while clients: - await clients.pop().close() - - loop.run_until_complete(finalize()) - - -@pytest.fixture -def test_client(aiohttp_client): # type: ignore # pragma: no cover - warnings.warn( - "Deprecated, use aiohttp_client fixture instead", - DeprecationWarning, - stacklevel=2, - ) - return aiohttp_client diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/resolver.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/resolver.py deleted file mode 100644 index 2974bcad..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/resolver.py +++ /dev/null @@ -1,149 +0,0 @@ -import asyncio -import socket -from typing import Any, Dict, List, Optional - -from .abc import AbstractResolver -from .helpers import get_running_loop - -__all__ = ("ThreadedResolver", "AsyncResolver", "DefaultResolver") - -try: - import aiodns - - # aiodns_default = hasattr(aiodns.DNSResolver, 'gethostbyname') -except ImportError: # pragma: no cover - aiodns = None - -aiodns_default = False - - -class ThreadedResolver(AbstractResolver): - """Use Executor for synchronous getaddrinfo() calls, which defaults to - concurrent.futures.ThreadPoolExecutor. - """ - - def __init__(self, loop: Optional[asyncio.AbstractEventLoop] = None) -> None: - self._loop = get_running_loop(loop) - - async def resolve( - self, hostname: str, port: int = 0, family: int = socket.AF_INET - ) -> List[Dict[str, Any]]: - infos = await self._loop.getaddrinfo( - hostname, - port, - type=socket.SOCK_STREAM, - family=family, - flags=socket.AI_ADDRCONFIG, - ) - - hosts = [] - for family, _, proto, _, address in infos: - if family == socket.AF_INET6 and address[3]: # type: ignore - # This is essential for link-local IPv6 addresses. - # LL IPv6 is a VERY rare case. Strictly speaking, we should use - # getnameinfo() unconditionally, but performance makes sense. - host, _port = socket.getnameinfo( - address, socket.NI_NUMERICHOST | socket.NI_NUMERICSERV - ) - port = int(_port) - else: - host, port = address[:2] - hosts.append( - { - "hostname": hostname, - "host": host, - "port": port, - "family": family, - "proto": proto, - "flags": socket.AI_NUMERICHOST | socket.AI_NUMERICSERV, - } - ) - - return hosts - - async def close(self) -> None: - pass - - -class AsyncResolver(AbstractResolver): - """Use the `aiodns` package to make asynchronous DNS lookups""" - - def __init__( - self, - loop: Optional[asyncio.AbstractEventLoop] = None, - *args: Any, - **kwargs: Any - ) -> None: - if aiodns is None: - raise RuntimeError("Resolver requires aiodns library") - - self._loop = get_running_loop(loop) - self._resolver = aiodns.DNSResolver(*args, loop=loop, **kwargs) - - if not hasattr(self._resolver, "gethostbyname"): - # aiodns 1.1 is not available, fallback to DNSResolver.query - self.resolve = self._resolve_with_query # type: ignore - - async def resolve( - self, host: str, port: int = 0, family: int = socket.AF_INET - ) -> List[Dict[str, Any]]: - try: - resp = await self._resolver.gethostbyname(host, family) - except aiodns.error.DNSError as exc: - msg = exc.args[1] if len(exc.args) >= 1 else "DNS lookup failed" - raise OSError(msg) from exc - hosts = [] - for address in resp.addresses: - hosts.append( - { - "hostname": host, - "host": address, - "port": port, - "family": family, - "proto": 0, - "flags": socket.AI_NUMERICHOST | socket.AI_NUMERICSERV, - } - ) - - if not hosts: - raise OSError("DNS lookup failed") - - return hosts - - async def _resolve_with_query( - self, host: str, port: int = 0, family: int = socket.AF_INET - ) -> List[Dict[str, Any]]: - if family == socket.AF_INET6: - qtype = "AAAA" - else: - qtype = "A" - - try: - resp = await self._resolver.query(host, qtype) - except aiodns.error.DNSError as exc: - msg = exc.args[1] if len(exc.args) >= 1 else "DNS lookup failed" - raise OSError(msg) from exc - - hosts = [] - for rr in resp: - hosts.append( - { - "hostname": host, - "host": rr.host, - "port": port, - "family": family, - "proto": 0, - "flags": socket.AI_NUMERICHOST, - } - ) - - if not hosts: - raise OSError("DNS lookup failed") - - return hosts - - async def close(self) -> None: - return self._resolver.cancel() - - -DefaultResolver = AsyncResolver if aiodns_default else ThreadedResolver diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/signals.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/signals.py deleted file mode 100644 index d406c024..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/signals.py +++ /dev/null @@ -1,34 +0,0 @@ -from aiohttp.frozenlist import FrozenList - -__all__ = ("Signal",) - - -class Signal(FrozenList): - """Coroutine-based signal implementation. - - To connect a callback to a signal, use any list method. - - Signals are fired using the send() coroutine, which takes named - arguments. - """ - - __slots__ = ("_owner",) - - def __init__(self, owner): - super().__init__() - self._owner = owner - - def __repr__(self): - return "".format( - self._owner, self.frozen, list(self) - ) - - async def send(self, *args, **kwargs): - """ - Sends data to all registered receivers. - """ - if not self.frozen: - raise RuntimeError("Cannot send non-frozen signal.") - - for receiver in self: - await receiver(*args, **kwargs) # type: ignore diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/signals.pyi b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/signals.pyi deleted file mode 100644 index 455f8e2f..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/signals.pyi +++ /dev/null @@ -1,12 +0,0 @@ -from typing import Any, Generic, TypeVar - -from aiohttp.frozenlist import FrozenList - -__all__ = ("Signal",) - -_T = TypeVar("_T") - -class Signal(FrozenList[_T], Generic[_T]): - def __init__(self, owner: Any) -> None: ... - def __repr__(self) -> str: ... - async def send(self, *args: Any, **kwargs: Any) -> None: ... diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/streams.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/streams.py deleted file mode 100644 index 42970b53..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/streams.py +++ /dev/null @@ -1,647 +0,0 @@ -import asyncio -import collections -import warnings -from typing import Awaitable, Callable, Generic, List, Optional, Tuple, TypeVar - -from .base_protocol import BaseProtocol -from .helpers import BaseTimerContext, set_exception, set_result -from .log import internal_logger - -try: # pragma: no cover - from typing import Deque -except ImportError: - from typing_extensions import Deque - -__all__ = ( - "EMPTY_PAYLOAD", - "EofStream", - "StreamReader", - "DataQueue", - "FlowControlDataQueue", -) - -_T = TypeVar("_T") - - -class EofStream(Exception): - """eof stream indication.""" - - -class AsyncStreamIterator(Generic[_T]): - def __init__(self, read_func: Callable[[], Awaitable[_T]]) -> None: - self.read_func = read_func - - def __aiter__(self) -> "AsyncStreamIterator[_T]": - return self - - async def __anext__(self) -> _T: - try: - rv = await self.read_func() - except EofStream: - raise StopAsyncIteration - if rv == b"": - raise StopAsyncIteration - return rv - - -class ChunkTupleAsyncStreamIterator: - def __init__(self, stream: "StreamReader") -> None: - self._stream = stream - - def __aiter__(self) -> "ChunkTupleAsyncStreamIterator": - return self - - async def __anext__(self) -> Tuple[bytes, bool]: - rv = await self._stream.readchunk() - if rv == (b"", False): - raise StopAsyncIteration - return rv - - -class AsyncStreamReaderMixin: - def __aiter__(self) -> AsyncStreamIterator[bytes]: - return AsyncStreamIterator(self.readline) # type: ignore - - def iter_chunked(self, n: int) -> AsyncStreamIterator[bytes]: - """Returns an asynchronous iterator that yields chunks of size n. - - Python-3.5 available for Python 3.5+ only - """ - return AsyncStreamIterator(lambda: self.read(n)) # type: ignore - - def iter_any(self) -> AsyncStreamIterator[bytes]: - """Returns an asynchronous iterator that yields all the available - data as soon as it is received - - Python-3.5 available for Python 3.5+ only - """ - return AsyncStreamIterator(self.readany) # type: ignore - - def iter_chunks(self) -> ChunkTupleAsyncStreamIterator: - """Returns an asynchronous iterator that yields chunks of data - as they are received by the server. The yielded objects are tuples - of (bytes, bool) as returned by the StreamReader.readchunk method. - - Python-3.5 available for Python 3.5+ only - """ - return ChunkTupleAsyncStreamIterator(self) # type: ignore - - -class StreamReader(AsyncStreamReaderMixin): - """An enhancement of asyncio.StreamReader. - - Supports asynchronous iteration by line, chunk or as available:: - - async for line in reader: - ... - async for chunk in reader.iter_chunked(1024): - ... - async for slice in reader.iter_any(): - ... - - """ - - total_bytes = 0 - - def __init__( - self, - protocol: BaseProtocol, - limit: int, - *, - timer: Optional[BaseTimerContext] = None, - loop: Optional[asyncio.AbstractEventLoop] = None - ) -> None: - self._protocol = protocol - self._low_water = limit - self._high_water = limit * 2 - if loop is None: - loop = asyncio.get_event_loop() - self._loop = loop - self._size = 0 - self._cursor = 0 - self._http_chunk_splits = None # type: Optional[List[int]] - self._buffer = collections.deque() # type: Deque[bytes] - self._buffer_offset = 0 - self._eof = False - self._waiter = None # type: Optional[asyncio.Future[None]] - self._eof_waiter = None # type: Optional[asyncio.Future[None]] - self._exception = None # type: Optional[BaseException] - self._timer = timer - self._eof_callbacks = [] # type: List[Callable[[], None]] - - def __repr__(self) -> str: - info = [self.__class__.__name__] - if self._size: - info.append("%d bytes" % self._size) - if self._eof: - info.append("eof") - if self._low_water != 2 ** 16: # default limit - info.append("low=%d high=%d" % (self._low_water, self._high_water)) - if self._waiter: - info.append("w=%r" % self._waiter) - if self._exception: - info.append("e=%r" % self._exception) - return "<%s>" % " ".join(info) - - def get_read_buffer_limits(self) -> Tuple[int, int]: - return (self._low_water, self._high_water) - - def exception(self) -> Optional[BaseException]: - return self._exception - - def set_exception(self, exc: BaseException) -> None: - self._exception = exc - self._eof_callbacks.clear() - - waiter = self._waiter - if waiter is not None: - self._waiter = None - set_exception(waiter, exc) - - waiter = self._eof_waiter - if waiter is not None: - self._eof_waiter = None - set_exception(waiter, exc) - - def on_eof(self, callback: Callable[[], None]) -> None: - if self._eof: - try: - callback() - except Exception: - internal_logger.exception("Exception in eof callback") - else: - self._eof_callbacks.append(callback) - - def feed_eof(self) -> None: - self._eof = True - - waiter = self._waiter - if waiter is not None: - self._waiter = None - set_result(waiter, None) - - waiter = self._eof_waiter - if waiter is not None: - self._eof_waiter = None - set_result(waiter, None) - - for cb in self._eof_callbacks: - try: - cb() - except Exception: - internal_logger.exception("Exception in eof callback") - - self._eof_callbacks.clear() - - def is_eof(self) -> bool: - """Return True if 'feed_eof' was called.""" - return self._eof - - def at_eof(self) -> bool: - """Return True if the buffer is empty and 'feed_eof' was called.""" - return self._eof and not self._buffer - - async def wait_eof(self) -> None: - if self._eof: - return - - assert self._eof_waiter is None - self._eof_waiter = self._loop.create_future() - try: - await self._eof_waiter - finally: - self._eof_waiter = None - - def unread_data(self, data: bytes) -> None: - """rollback reading some data from stream, inserting it to buffer head.""" - warnings.warn( - "unread_data() is deprecated " - "and will be removed in future releases (#3260)", - DeprecationWarning, - stacklevel=2, - ) - if not data: - return - - if self._buffer_offset: - self._buffer[0] = self._buffer[0][self._buffer_offset :] - self._buffer_offset = 0 - self._size += len(data) - self._cursor -= len(data) - self._buffer.appendleft(data) - self._eof_counter = 0 - - # TODO: size is ignored, remove the param later - def feed_data(self, data: bytes, size: int = 0) -> None: - assert not self._eof, "feed_data after feed_eof" - - if not data: - return - - self._size += len(data) - self._buffer.append(data) - self.total_bytes += len(data) - - waiter = self._waiter - if waiter is not None: - self._waiter = None - set_result(waiter, None) - - if self._size > self._high_water and not self._protocol._reading_paused: - self._protocol.pause_reading() - - def begin_http_chunk_receiving(self) -> None: - if self._http_chunk_splits is None: - if self.total_bytes: - raise RuntimeError( - "Called begin_http_chunk_receiving when" "some data was already fed" - ) - self._http_chunk_splits = [] - - def end_http_chunk_receiving(self) -> None: - if self._http_chunk_splits is None: - raise RuntimeError( - "Called end_chunk_receiving without calling " - "begin_chunk_receiving first" - ) - - # self._http_chunk_splits contains logical byte offsets from start of - # the body transfer. Each offset is the offset of the end of a chunk. - # "Logical" means bytes, accessible for a user. - # If no chunks containig logical data were received, current position - # is difinitely zero. - pos = self._http_chunk_splits[-1] if self._http_chunk_splits else 0 - - if self.total_bytes == pos: - # We should not add empty chunks here. So we check for that. - # Note, when chunked + gzip is used, we can receive a chunk - # of compressed data, but that data may not be enough for gzip FSM - # to yield any uncompressed data. That's why current position may - # not change after receiving a chunk. - return - - self._http_chunk_splits.append(self.total_bytes) - - # wake up readchunk when end of http chunk received - waiter = self._waiter - if waiter is not None: - self._waiter = None - set_result(waiter, None) - - async def _wait(self, func_name: str) -> None: - # StreamReader uses a future to link the protocol feed_data() method - # to a read coroutine. Running two read coroutines at the same time - # would have an unexpected behaviour. It would not possible to know - # which coroutine would get the next data. - if self._waiter is not None: - raise RuntimeError( - "%s() called while another coroutine is " - "already waiting for incoming data" % func_name - ) - - waiter = self._waiter = self._loop.create_future() - try: - if self._timer: - with self._timer: - await waiter - else: - await waiter - finally: - self._waiter = None - - async def readline(self) -> bytes: - if self._exception is not None: - raise self._exception - - line = [] - line_size = 0 - not_enough = True - - while not_enough: - while self._buffer and not_enough: - offset = self._buffer_offset - ichar = self._buffer[0].find(b"\n", offset) + 1 - # Read from current offset to found b'\n' or to the end. - data = self._read_nowait_chunk(ichar - offset if ichar else -1) - line.append(data) - line_size += len(data) - if ichar: - not_enough = False - - if line_size > self._high_water: - raise ValueError("Line is too long") - - if self._eof: - break - - if not_enough: - await self._wait("readline") - - return b"".join(line) - - async def read(self, n: int = -1) -> bytes: - if self._exception is not None: - raise self._exception - - # migration problem; with DataQueue you have to catch - # EofStream exception, so common way is to run payload.read() inside - # infinite loop. what can cause real infinite loop with StreamReader - # lets keep this code one major release. - if __debug__: - if self._eof and not self._buffer: - self._eof_counter = getattr(self, "_eof_counter", 0) + 1 - if self._eof_counter > 5: - internal_logger.warning( - "Multiple access to StreamReader in eof state, " - "might be infinite loop.", - stack_info=True, - ) - - if not n: - return b"" - - if n < 0: - # This used to just loop creating a new waiter hoping to - # collect everything in self._buffer, but that would - # deadlock if the subprocess sends more than self.limit - # bytes. So just call self.readany() until EOF. - blocks = [] - while True: - block = await self.readany() - if not block: - break - blocks.append(block) - return b"".join(blocks) - - # TODO: should be `if` instead of `while` - # because waiter maybe triggered on chunk end, - # without feeding any data - while not self._buffer and not self._eof: - await self._wait("read") - - return self._read_nowait(n) - - async def readany(self) -> bytes: - if self._exception is not None: - raise self._exception - - # TODO: should be `if` instead of `while` - # because waiter maybe triggered on chunk end, - # without feeding any data - while not self._buffer and not self._eof: - await self._wait("readany") - - return self._read_nowait(-1) - - async def readchunk(self) -> Tuple[bytes, bool]: - """Returns a tuple of (data, end_of_http_chunk). When chunked transfer - encoding is used, end_of_http_chunk is a boolean indicating if the end - of the data corresponds to the end of a HTTP chunk , otherwise it is - always False. - """ - while True: - if self._exception is not None: - raise self._exception - - while self._http_chunk_splits: - pos = self._http_chunk_splits.pop(0) - if pos == self._cursor: - return (b"", True) - if pos > self._cursor: - return (self._read_nowait(pos - self._cursor), True) - internal_logger.warning( - "Skipping HTTP chunk end due to data " - "consumption beyond chunk boundary" - ) - - if self._buffer: - return (self._read_nowait_chunk(-1), False) - # return (self._read_nowait(-1), False) - - if self._eof: - # Special case for signifying EOF. - # (b'', True) is not a final return value actually. - return (b"", False) - - await self._wait("readchunk") - - async def readexactly(self, n: int) -> bytes: - if self._exception is not None: - raise self._exception - - blocks = [] # type: List[bytes] - while n > 0: - block = await self.read(n) - if not block: - partial = b"".join(blocks) - raise asyncio.IncompleteReadError(partial, len(partial) + n) - blocks.append(block) - n -= len(block) - - return b"".join(blocks) - - def read_nowait(self, n: int = -1) -> bytes: - # default was changed to be consistent with .read(-1) - # - # I believe the most users don't know about the method and - # they are not affected. - if self._exception is not None: - raise self._exception - - if self._waiter and not self._waiter.done(): - raise RuntimeError( - "Called while some coroutine is waiting for incoming data." - ) - - return self._read_nowait(n) - - def _read_nowait_chunk(self, n: int) -> bytes: - first_buffer = self._buffer[0] - offset = self._buffer_offset - if n != -1 and len(first_buffer) - offset > n: - data = first_buffer[offset : offset + n] - self._buffer_offset += n - - elif offset: - self._buffer.popleft() - data = first_buffer[offset:] - self._buffer_offset = 0 - - else: - data = self._buffer.popleft() - - self._size -= len(data) - self._cursor += len(data) - - chunk_splits = self._http_chunk_splits - # Prevent memory leak: drop useless chunk splits - while chunk_splits and chunk_splits[0] < self._cursor: - chunk_splits.pop(0) - - if self._size < self._low_water and self._protocol._reading_paused: - self._protocol.resume_reading() - return data - - def _read_nowait(self, n: int) -> bytes: - """ Read not more than n bytes, or whole buffer if n == -1 """ - chunks = [] - - while self._buffer: - chunk = self._read_nowait_chunk(n) - chunks.append(chunk) - if n != -1: - n -= len(chunk) - if n == 0: - break - - return b"".join(chunks) if chunks else b"" - - -class EmptyStreamReader(AsyncStreamReaderMixin): - def exception(self) -> Optional[BaseException]: - return None - - def set_exception(self, exc: BaseException) -> None: - pass - - def on_eof(self, callback: Callable[[], None]) -> None: - try: - callback() - except Exception: - internal_logger.exception("Exception in eof callback") - - def feed_eof(self) -> None: - pass - - def is_eof(self) -> bool: - return True - - def at_eof(self) -> bool: - return True - - async def wait_eof(self) -> None: - return - - def feed_data(self, data: bytes, n: int = 0) -> None: - pass - - async def readline(self) -> bytes: - return b"" - - async def read(self, n: int = -1) -> bytes: - return b"" - - async def readany(self) -> bytes: - return b"" - - async def readchunk(self) -> Tuple[bytes, bool]: - return (b"", True) - - async def readexactly(self, n: int) -> bytes: - raise asyncio.IncompleteReadError(b"", n) - - def read_nowait(self) -> bytes: - return b"" - - -EMPTY_PAYLOAD = EmptyStreamReader() - - -class DataQueue(Generic[_T]): - """DataQueue is a general-purpose blocking queue with one reader.""" - - def __init__(self, loop: asyncio.AbstractEventLoop) -> None: - self._loop = loop - self._eof = False - self._waiter = None # type: Optional[asyncio.Future[None]] - self._exception = None # type: Optional[BaseException] - self._size = 0 - self._buffer = collections.deque() # type: Deque[Tuple[_T, int]] - - def __len__(self) -> int: - return len(self._buffer) - - def is_eof(self) -> bool: - return self._eof - - def at_eof(self) -> bool: - return self._eof and not self._buffer - - def exception(self) -> Optional[BaseException]: - return self._exception - - def set_exception(self, exc: BaseException) -> None: - self._eof = True - self._exception = exc - - waiter = self._waiter - if waiter is not None: - self._waiter = None - set_exception(waiter, exc) - - def feed_data(self, data: _T, size: int = 0) -> None: - self._size += size - self._buffer.append((data, size)) - - waiter = self._waiter - if waiter is not None: - self._waiter = None - set_result(waiter, None) - - def feed_eof(self) -> None: - self._eof = True - - waiter = self._waiter - if waiter is not None: - self._waiter = None - set_result(waiter, None) - - async def read(self) -> _T: - if not self._buffer and not self._eof: - assert not self._waiter - self._waiter = self._loop.create_future() - try: - await self._waiter - except (asyncio.CancelledError, asyncio.TimeoutError): - self._waiter = None - raise - - if self._buffer: - data, size = self._buffer.popleft() - self._size -= size - return data - else: - if self._exception is not None: - raise self._exception - else: - raise EofStream - - def __aiter__(self) -> AsyncStreamIterator[_T]: - return AsyncStreamIterator(self.read) - - -class FlowControlDataQueue(DataQueue[_T]): - """FlowControlDataQueue resumes and pauses an underlying stream. - - It is a destination for parsed data.""" - - def __init__( - self, protocol: BaseProtocol, limit: int, *, loop: asyncio.AbstractEventLoop - ) -> None: - super().__init__(loop=loop) - - self._protocol = protocol - self._limit = limit * 2 - - def feed_data(self, data: _T, size: int = 0) -> None: - super().feed_data(data, size) - - if self._size > self._limit and not self._protocol._reading_paused: - self._protocol.pause_reading() - - async def read(self) -> _T: - try: - return await super().read() - finally: - if self._size < self._limit and self._protocol._reading_paused: - self._protocol.resume_reading() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/tcp_helpers.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/tcp_helpers.py deleted file mode 100644 index 0e1dbf16..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/tcp_helpers.py +++ /dev/null @@ -1,38 +0,0 @@ -"""Helper methods to tune a TCP connection""" - -import asyncio -import socket -from contextlib import suppress -from typing import Optional # noqa - -__all__ = ("tcp_keepalive", "tcp_nodelay") - - -if hasattr(socket, "SO_KEEPALIVE"): - - def tcp_keepalive(transport: asyncio.Transport) -> None: - sock = transport.get_extra_info("socket") - if sock is not None: - sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) - - -else: - - def tcp_keepalive(transport: asyncio.Transport) -> None: # pragma: no cover - pass - - -def tcp_nodelay(transport: asyncio.Transport, value: bool) -> None: - sock = transport.get_extra_info("socket") - - if sock is None: - return - - if sock.family not in (socket.AF_INET, socket.AF_INET6): - return - - value = bool(value) - - # socket may be closed already, on windows OSError get raised - with suppress(OSError): - sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, value) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/test_utils.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/test_utils.py deleted file mode 100644 index 7a9ca7dd..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/test_utils.py +++ /dev/null @@ -1,676 +0,0 @@ -"""Utilities shared by tests.""" - -import asyncio -import contextlib -import functools -import gc -import inspect -import os -import socket -import sys -import unittest -from abc import ABC, abstractmethod -from types import TracebackType -from typing import TYPE_CHECKING, Any, Callable, Iterator, List, Optional, Type, Union -from unittest import mock - -from multidict import CIMultiDict, CIMultiDictProxy -from yarl import URL - -import aiohttp -from aiohttp.client import ( - ClientResponse, - _RequestContextManager, - _WSRequestContextManager, -) - -from . import ClientSession, hdrs -from .abc import AbstractCookieJar -from .client_reqrep import ClientResponse -from .client_ws import ClientWebSocketResponse -from .helpers import sentinel -from .http import HttpVersion, RawRequestMessage -from .signals import Signal -from .web import ( - Application, - AppRunner, - BaseRunner, - Request, - Server, - ServerRunner, - SockSite, - UrlMappingMatchInfo, -) -from .web_protocol import _RequestHandler - -if TYPE_CHECKING: # pragma: no cover - from ssl import SSLContext -else: - SSLContext = None - - -REUSE_ADDRESS = os.name == "posix" and sys.platform != "cygwin" - - -def get_unused_port_socket(host: str) -> socket.socket: - return get_port_socket(host, 0) - - -def get_port_socket(host: str, port: int) -> socket.socket: - s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - if REUSE_ADDRESS: - # Windows has different semantics for SO_REUSEADDR, - # so don't set it. Ref: - # https://docs.microsoft.com/en-us/windows/win32/winsock/using-so-reuseaddr-and-so-exclusiveaddruse - s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - s.bind((host, port)) - return s - - -def unused_port() -> int: - """Return a port that is unused on the current host.""" - with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: - s.bind(("127.0.0.1", 0)) - return s.getsockname()[1] - - -class BaseTestServer(ABC): - __test__ = False - - def __init__( - self, - *, - scheme: Union[str, object] = sentinel, - loop: Optional[asyncio.AbstractEventLoop] = None, - host: str = "127.0.0.1", - port: Optional[int] = None, - skip_url_asserts: bool = False, - **kwargs: Any, - ) -> None: - self._loop = loop - self.runner = None # type: Optional[BaseRunner] - self._root = None # type: Optional[URL] - self.host = host - self.port = port - self._closed = False - self.scheme = scheme - self.skip_url_asserts = skip_url_asserts - - async def start_server( - self, loop: Optional[asyncio.AbstractEventLoop] = None, **kwargs: Any - ) -> None: - if self.runner: - return - self._loop = loop - self._ssl = kwargs.pop("ssl", None) - self.runner = await self._make_runner(**kwargs) - await self.runner.setup() - if not self.port: - self.port = 0 - _sock = get_port_socket(self.host, self.port) - self.host, self.port = _sock.getsockname()[:2] - site = SockSite(self.runner, sock=_sock, ssl_context=self._ssl) - await site.start() - server = site._server - assert server is not None - sockets = server.sockets - assert sockets is not None - self.port = sockets[0].getsockname()[1] - if self.scheme is sentinel: - if self._ssl: - scheme = "https" - else: - scheme = "http" - self.scheme = scheme - self._root = URL(f"{self.scheme}://{self.host}:{self.port}") - - @abstractmethod # pragma: no cover - async def _make_runner(self, **kwargs: Any) -> BaseRunner: - pass - - def make_url(self, path: str) -> URL: - assert self._root is not None - url = URL(path) - if not self.skip_url_asserts: - assert not url.is_absolute() - return self._root.join(url) - else: - return URL(str(self._root) + path) - - @property - def started(self) -> bool: - return self.runner is not None - - @property - def closed(self) -> bool: - return self._closed - - @property - def handler(self) -> Server: - # for backward compatibility - # web.Server instance - runner = self.runner - assert runner is not None - assert runner.server is not None - return runner.server - - async def close(self) -> None: - """Close all fixtures created by the test client. - - After that point, the TestClient is no longer usable. - - This is an idempotent function: running close multiple times - will not have any additional effects. - - close is also run when the object is garbage collected, and on - exit when used as a context manager. - - """ - if self.started and not self.closed: - assert self.runner is not None - await self.runner.cleanup() - self._root = None - self.port = None - self._closed = True - - def __enter__(self) -> None: - raise TypeError("Use async with instead") - - def __exit__( - self, - exc_type: Optional[Type[BaseException]], - exc_value: Optional[BaseException], - traceback: Optional[TracebackType], - ) -> None: - # __exit__ should exist in pair with __enter__ but never executed - pass # pragma: no cover - - async def __aenter__(self) -> "BaseTestServer": - await self.start_server(loop=self._loop) - return self - - async def __aexit__( - self, - exc_type: Optional[Type[BaseException]], - exc_value: Optional[BaseException], - traceback: Optional[TracebackType], - ) -> None: - await self.close() - - -class TestServer(BaseTestServer): - def __init__( - self, - app: Application, - *, - scheme: Union[str, object] = sentinel, - host: str = "127.0.0.1", - port: Optional[int] = None, - **kwargs: Any, - ): - self.app = app - super().__init__(scheme=scheme, host=host, port=port, **kwargs) - - async def _make_runner(self, **kwargs: Any) -> BaseRunner: - return AppRunner(self.app, **kwargs) - - -class RawTestServer(BaseTestServer): - def __init__( - self, - handler: _RequestHandler, - *, - scheme: Union[str, object] = sentinel, - host: str = "127.0.0.1", - port: Optional[int] = None, - **kwargs: Any, - ) -> None: - self._handler = handler - super().__init__(scheme=scheme, host=host, port=port, **kwargs) - - async def _make_runner(self, debug: bool = True, **kwargs: Any) -> ServerRunner: - srv = Server(self._handler, loop=self._loop, debug=debug, **kwargs) - return ServerRunner(srv, debug=debug, **kwargs) - - -class TestClient: - """ - A test client implementation. - - To write functional tests for aiohttp based servers. - - """ - - __test__ = False - - def __init__( - self, - server: BaseTestServer, - *, - cookie_jar: Optional[AbstractCookieJar] = None, - loop: Optional[asyncio.AbstractEventLoop] = None, - **kwargs: Any, - ) -> None: - if not isinstance(server, BaseTestServer): - raise TypeError( - "server must be TestServer " "instance, found type: %r" % type(server) - ) - self._server = server - self._loop = loop - if cookie_jar is None: - cookie_jar = aiohttp.CookieJar(unsafe=True, loop=loop) - self._session = ClientSession(loop=loop, cookie_jar=cookie_jar, **kwargs) - self._closed = False - self._responses = [] # type: List[ClientResponse] - self._websockets = [] # type: List[ClientWebSocketResponse] - - async def start_server(self) -> None: - await self._server.start_server(loop=self._loop) - - @property - def host(self) -> str: - return self._server.host - - @property - def port(self) -> Optional[int]: - return self._server.port - - @property - def server(self) -> BaseTestServer: - return self._server - - @property - def app(self) -> Application: - return getattr(self._server, "app", None) - - @property - def session(self) -> ClientSession: - """An internal aiohttp.ClientSession. - - Unlike the methods on the TestClient, client session requests - do not automatically include the host in the url queried, and - will require an absolute path to the resource. - - """ - return self._session - - def make_url(self, path: str) -> URL: - return self._server.make_url(path) - - async def _request(self, method: str, path: str, **kwargs: Any) -> ClientResponse: - resp = await self._session.request(method, self.make_url(path), **kwargs) - # save it to close later - self._responses.append(resp) - return resp - - def request(self, method: str, path: str, **kwargs: Any) -> _RequestContextManager: - """Routes a request to tested http server. - - The interface is identical to aiohttp.ClientSession.request, - except the loop kwarg is overridden by the instance used by the - test server. - - """ - return _RequestContextManager(self._request(method, path, **kwargs)) - - def get(self, path: str, **kwargs: Any) -> _RequestContextManager: - """Perform an HTTP GET request.""" - return _RequestContextManager(self._request(hdrs.METH_GET, path, **kwargs)) - - def post(self, path: str, **kwargs: Any) -> _RequestContextManager: - """Perform an HTTP POST request.""" - return _RequestContextManager(self._request(hdrs.METH_POST, path, **kwargs)) - - def options(self, path: str, **kwargs: Any) -> _RequestContextManager: - """Perform an HTTP OPTIONS request.""" - return _RequestContextManager(self._request(hdrs.METH_OPTIONS, path, **kwargs)) - - def head(self, path: str, **kwargs: Any) -> _RequestContextManager: - """Perform an HTTP HEAD request.""" - return _RequestContextManager(self._request(hdrs.METH_HEAD, path, **kwargs)) - - def put(self, path: str, **kwargs: Any) -> _RequestContextManager: - """Perform an HTTP PUT request.""" - return _RequestContextManager(self._request(hdrs.METH_PUT, path, **kwargs)) - - def patch(self, path: str, **kwargs: Any) -> _RequestContextManager: - """Perform an HTTP PATCH request.""" - return _RequestContextManager(self._request(hdrs.METH_PATCH, path, **kwargs)) - - def delete(self, path: str, **kwargs: Any) -> _RequestContextManager: - """Perform an HTTP PATCH request.""" - return _RequestContextManager(self._request(hdrs.METH_DELETE, path, **kwargs)) - - def ws_connect(self, path: str, **kwargs: Any) -> _WSRequestContextManager: - """Initiate websocket connection. - - The api corresponds to aiohttp.ClientSession.ws_connect. - - """ - return _WSRequestContextManager(self._ws_connect(path, **kwargs)) - - async def _ws_connect(self, path: str, **kwargs: Any) -> ClientWebSocketResponse: - ws = await self._session.ws_connect(self.make_url(path), **kwargs) - self._websockets.append(ws) - return ws - - async def close(self) -> None: - """Close all fixtures created by the test client. - - After that point, the TestClient is no longer usable. - - This is an idempotent function: running close multiple times - will not have any additional effects. - - close is also run on exit when used as a(n) (asynchronous) - context manager. - - """ - if not self._closed: - for resp in self._responses: - resp.close() - for ws in self._websockets: - await ws.close() - await self._session.close() - await self._server.close() - self._closed = True - - def __enter__(self) -> None: - raise TypeError("Use async with instead") - - def __exit__( - self, - exc_type: Optional[Type[BaseException]], - exc: Optional[BaseException], - tb: Optional[TracebackType], - ) -> None: - # __exit__ should exist in pair with __enter__ but never executed - pass # pragma: no cover - - async def __aenter__(self) -> "TestClient": - await self.start_server() - return self - - async def __aexit__( - self, - exc_type: Optional[Type[BaseException]], - exc: Optional[BaseException], - tb: Optional[TracebackType], - ) -> None: - await self.close() - - -class AioHTTPTestCase(unittest.TestCase): - """A base class to allow for unittest web applications using - aiohttp. - - Provides the following: - - * self.client (aiohttp.test_utils.TestClient): an aiohttp test client. - * self.loop (asyncio.BaseEventLoop): the event loop in which the - application and server are running. - * self.app (aiohttp.web.Application): the application returned by - self.get_application() - - Note that the TestClient's methods are asynchronous: you have to - execute function on the test client using asynchronous methods. - """ - - async def get_application(self) -> Application: - """ - This method should be overridden - to return the aiohttp.web.Application - object to test. - - """ - return self.get_app() - - def get_app(self) -> Application: - """Obsolete method used to constructing web application. - - Use .get_application() coroutine instead - - """ - raise RuntimeError("Did you forget to define get_application()?") - - def setUp(self) -> None: - self.loop = setup_test_loop() - - self.app = self.loop.run_until_complete(self.get_application()) - self.server = self.loop.run_until_complete(self.get_server(self.app)) - self.client = self.loop.run_until_complete(self.get_client(self.server)) - - self.loop.run_until_complete(self.client.start_server()) - - self.loop.run_until_complete(self.setUpAsync()) - - async def setUpAsync(self) -> None: - pass - - def tearDown(self) -> None: - self.loop.run_until_complete(self.tearDownAsync()) - self.loop.run_until_complete(self.client.close()) - teardown_test_loop(self.loop) - - async def tearDownAsync(self) -> None: - pass - - async def get_server(self, app: Application) -> TestServer: - """Return a TestServer instance.""" - return TestServer(app, loop=self.loop) - - async def get_client(self, server: TestServer) -> TestClient: - """Return a TestClient instance.""" - return TestClient(server, loop=self.loop) - - -def unittest_run_loop(func: Any, *args: Any, **kwargs: Any) -> Any: - """A decorator dedicated to use with asynchronous methods of an - AioHTTPTestCase. - - Handles executing an asynchronous function, using - the self.loop of the AioHTTPTestCase. - """ - - @functools.wraps(func, *args, **kwargs) - def new_func(self: Any, *inner_args: Any, **inner_kwargs: Any) -> Any: - return self.loop.run_until_complete(func(self, *inner_args, **inner_kwargs)) - - return new_func - - -_LOOP_FACTORY = Callable[[], asyncio.AbstractEventLoop] - - -@contextlib.contextmanager -def loop_context( - loop_factory: _LOOP_FACTORY = asyncio.new_event_loop, fast: bool = False -) -> Iterator[asyncio.AbstractEventLoop]: - """A contextmanager that creates an event_loop, for test purposes. - - Handles the creation and cleanup of a test loop. - """ - loop = setup_test_loop(loop_factory) - yield loop - teardown_test_loop(loop, fast=fast) - - -def setup_test_loop( - loop_factory: _LOOP_FACTORY = asyncio.new_event_loop, -) -> asyncio.AbstractEventLoop: - """Create and return an asyncio.BaseEventLoop - instance. - - The caller should also call teardown_test_loop, - once they are done with the loop. - """ - loop = loop_factory() - try: - module = loop.__class__.__module__ - skip_watcher = "uvloop" in module - except AttributeError: # pragma: no cover - # Just in case - skip_watcher = True - asyncio.set_event_loop(loop) - if sys.platform != "win32" and not skip_watcher: - policy = asyncio.get_event_loop_policy() - watcher = asyncio.SafeChildWatcher() - watcher.attach_loop(loop) - with contextlib.suppress(NotImplementedError): - policy.set_child_watcher(watcher) - return loop - - -def teardown_test_loop(loop: asyncio.AbstractEventLoop, fast: bool = False) -> None: - """Teardown and cleanup an event_loop created - by setup_test_loop. - - """ - closed = loop.is_closed() - if not closed: - loop.call_soon(loop.stop) - loop.run_forever() - loop.close() - - if not fast: - gc.collect() - - asyncio.set_event_loop(None) - - -def _create_app_mock() -> mock.MagicMock: - def get_dict(app: Any, key: str) -> Any: - return app.__app_dict[key] - - def set_dict(app: Any, key: str, value: Any) -> None: - app.__app_dict[key] = value - - app = mock.MagicMock() - app.__app_dict = {} - app.__getitem__ = get_dict - app.__setitem__ = set_dict - - app._debug = False - app.on_response_prepare = Signal(app) - app.on_response_prepare.freeze() - return app - - -def _create_transport(sslcontext: Optional[SSLContext] = None) -> mock.Mock: - transport = mock.Mock() - - def get_extra_info(key: str) -> Optional[SSLContext]: - if key == "sslcontext": - return sslcontext - else: - return None - - transport.get_extra_info.side_effect = get_extra_info - return transport - - -def make_mocked_request( - method: str, - path: str, - headers: Any = None, - *, - match_info: Any = sentinel, - version: HttpVersion = HttpVersion(1, 1), - closing: bool = False, - app: Any = None, - writer: Any = sentinel, - protocol: Any = sentinel, - transport: Any = sentinel, - payload: Any = sentinel, - sslcontext: Optional[SSLContext] = None, - client_max_size: int = 1024 ** 2, - loop: Any = ..., -) -> Request: - """Creates mocked web.Request testing purposes. - - Useful in unit tests, when spinning full web server is overkill or - specific conditions and errors are hard to trigger. - - """ - - task = mock.Mock() - if loop is ...: - loop = mock.Mock() - loop.create_future.return_value = () - - if version < HttpVersion(1, 1): - closing = True - - if headers: - headers = CIMultiDictProxy(CIMultiDict(headers)) - raw_hdrs = tuple( - (k.encode("utf-8"), v.encode("utf-8")) for k, v in headers.items() - ) - else: - headers = CIMultiDictProxy(CIMultiDict()) - raw_hdrs = () - - chunked = "chunked" in headers.get(hdrs.TRANSFER_ENCODING, "").lower() - - message = RawRequestMessage( - method, - path, - version, - headers, - raw_hdrs, - closing, - False, - False, - chunked, - URL(path), - ) - if app is None: - app = _create_app_mock() - - if transport is sentinel: - transport = _create_transport(sslcontext) - - if protocol is sentinel: - protocol = mock.Mock() - protocol.transport = transport - - if writer is sentinel: - writer = mock.Mock() - writer.write_headers = make_mocked_coro(None) - writer.write = make_mocked_coro(None) - writer.write_eof = make_mocked_coro(None) - writer.drain = make_mocked_coro(None) - writer.transport = transport - - protocol.transport = transport - protocol.writer = writer - - if payload is sentinel: - payload = mock.Mock() - - req = Request( - message, payload, protocol, writer, task, loop, client_max_size=client_max_size - ) - - match_info = UrlMappingMatchInfo( - {} if match_info is sentinel else match_info, mock.Mock() - ) - match_info.add_app(app) - req._match_info = match_info - - return req - - -def make_mocked_coro( - return_value: Any = sentinel, raise_exception: Any = sentinel -) -> Any: - """Creates a coroutine mock.""" - - async def mock_coro(*args: Any, **kwargs: Any) -> Any: - if raise_exception is not sentinel: - raise raise_exception - if not inspect.isawaitable(return_value): - return return_value - await return_value - - return mock.Mock(wraps=mock_coro) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/tracing.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/tracing.py deleted file mode 100644 index 7ae7948f..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/tracing.py +++ /dev/null @@ -1,442 +0,0 @@ -from types import SimpleNamespace -from typing import TYPE_CHECKING, Awaitable, Optional, Type, TypeVar - -import attr -from multidict import CIMultiDict -from yarl import URL - -from .client_reqrep import ClientResponse -from .signals import Signal - -if TYPE_CHECKING: # pragma: no cover - from typing_extensions import Protocol - - from .client import ClientSession - - _ParamT_contra = TypeVar("_ParamT_contra", contravariant=True) - - class _SignalCallback(Protocol[_ParamT_contra]): - def __call__( - self, - __client_session: ClientSession, - __trace_config_ctx: SimpleNamespace, - __params: _ParamT_contra, - ) -> Awaitable[None]: - ... - - -__all__ = ( - "TraceConfig", - "TraceRequestStartParams", - "TraceRequestEndParams", - "TraceRequestExceptionParams", - "TraceConnectionQueuedStartParams", - "TraceConnectionQueuedEndParams", - "TraceConnectionCreateStartParams", - "TraceConnectionCreateEndParams", - "TraceConnectionReuseconnParams", - "TraceDnsResolveHostStartParams", - "TraceDnsResolveHostEndParams", - "TraceDnsCacheHitParams", - "TraceDnsCacheMissParams", - "TraceRequestRedirectParams", - "TraceRequestChunkSentParams", - "TraceResponseChunkReceivedParams", -) - - -class TraceConfig: - """First-class used to trace requests launched via ClientSession - objects.""" - - def __init__( - self, trace_config_ctx_factory: Type[SimpleNamespace] = SimpleNamespace - ) -> None: - self._on_request_start = Signal( - self - ) # type: Signal[_SignalCallback[TraceRequestStartParams]] - self._on_request_chunk_sent = Signal( - self - ) # type: Signal[_SignalCallback[TraceRequestChunkSentParams]] - self._on_response_chunk_received = Signal( - self - ) # type: Signal[_SignalCallback[TraceResponseChunkReceivedParams]] - self._on_request_end = Signal( - self - ) # type: Signal[_SignalCallback[TraceRequestEndParams]] - self._on_request_exception = Signal( - self - ) # type: Signal[_SignalCallback[TraceRequestExceptionParams]] - self._on_request_redirect = Signal( - self - ) # type: Signal[_SignalCallback[TraceRequestRedirectParams]] - self._on_connection_queued_start = Signal( - self - ) # type: Signal[_SignalCallback[TraceConnectionQueuedStartParams]] - self._on_connection_queued_end = Signal( - self - ) # type: Signal[_SignalCallback[TraceConnectionQueuedEndParams]] - self._on_connection_create_start = Signal( - self - ) # type: Signal[_SignalCallback[TraceConnectionCreateStartParams]] - self._on_connection_create_end = Signal( - self - ) # type: Signal[_SignalCallback[TraceConnectionCreateEndParams]] - self._on_connection_reuseconn = Signal( - self - ) # type: Signal[_SignalCallback[TraceConnectionReuseconnParams]] - self._on_dns_resolvehost_start = Signal( - self - ) # type: Signal[_SignalCallback[TraceDnsResolveHostStartParams]] - self._on_dns_resolvehost_end = Signal( - self - ) # type: Signal[_SignalCallback[TraceDnsResolveHostEndParams]] - self._on_dns_cache_hit = Signal( - self - ) # type: Signal[_SignalCallback[TraceDnsCacheHitParams]] - self._on_dns_cache_miss = Signal( - self - ) # type: Signal[_SignalCallback[TraceDnsCacheMissParams]] - - self._trace_config_ctx_factory = trace_config_ctx_factory - - def trace_config_ctx( - self, trace_request_ctx: Optional[SimpleNamespace] = None - ) -> SimpleNamespace: - """ Return a new trace_config_ctx instance """ - return self._trace_config_ctx_factory(trace_request_ctx=trace_request_ctx) - - def freeze(self) -> None: - self._on_request_start.freeze() - self._on_request_chunk_sent.freeze() - self._on_response_chunk_received.freeze() - self._on_request_end.freeze() - self._on_request_exception.freeze() - self._on_request_redirect.freeze() - self._on_connection_queued_start.freeze() - self._on_connection_queued_end.freeze() - self._on_connection_create_start.freeze() - self._on_connection_create_end.freeze() - self._on_connection_reuseconn.freeze() - self._on_dns_resolvehost_start.freeze() - self._on_dns_resolvehost_end.freeze() - self._on_dns_cache_hit.freeze() - self._on_dns_cache_miss.freeze() - - @property - def on_request_start(self) -> "Signal[_SignalCallback[TraceRequestStartParams]]": - return self._on_request_start - - @property - def on_request_chunk_sent( - self, - ) -> "Signal[_SignalCallback[TraceRequestChunkSentParams]]": - return self._on_request_chunk_sent - - @property - def on_response_chunk_received( - self, - ) -> "Signal[_SignalCallback[TraceResponseChunkReceivedParams]]": - return self._on_response_chunk_received - - @property - def on_request_end(self) -> "Signal[_SignalCallback[TraceRequestEndParams]]": - return self._on_request_end - - @property - def on_request_exception( - self, - ) -> "Signal[_SignalCallback[TraceRequestExceptionParams]]": - return self._on_request_exception - - @property - def on_request_redirect( - self, - ) -> "Signal[_SignalCallback[TraceRequestRedirectParams]]": - return self._on_request_redirect - - @property - def on_connection_queued_start( - self, - ) -> "Signal[_SignalCallback[TraceConnectionQueuedStartParams]]": - return self._on_connection_queued_start - - @property - def on_connection_queued_end( - self, - ) -> "Signal[_SignalCallback[TraceConnectionQueuedEndParams]]": - return self._on_connection_queued_end - - @property - def on_connection_create_start( - self, - ) -> "Signal[_SignalCallback[TraceConnectionCreateStartParams]]": - return self._on_connection_create_start - - @property - def on_connection_create_end( - self, - ) -> "Signal[_SignalCallback[TraceConnectionCreateEndParams]]": - return self._on_connection_create_end - - @property - def on_connection_reuseconn( - self, - ) -> "Signal[_SignalCallback[TraceConnectionReuseconnParams]]": - return self._on_connection_reuseconn - - @property - def on_dns_resolvehost_start( - self, - ) -> "Signal[_SignalCallback[TraceDnsResolveHostStartParams]]": - return self._on_dns_resolvehost_start - - @property - def on_dns_resolvehost_end( - self, - ) -> "Signal[_SignalCallback[TraceDnsResolveHostEndParams]]": - return self._on_dns_resolvehost_end - - @property - def on_dns_cache_hit(self) -> "Signal[_SignalCallback[TraceDnsCacheHitParams]]": - return self._on_dns_cache_hit - - @property - def on_dns_cache_miss(self) -> "Signal[_SignalCallback[TraceDnsCacheMissParams]]": - return self._on_dns_cache_miss - - -@attr.s(auto_attribs=True, frozen=True, slots=True) -class TraceRequestStartParams: - """ Parameters sent by the `on_request_start` signal""" - - method: str - url: URL - headers: "CIMultiDict[str]" - - -@attr.s(auto_attribs=True, frozen=True, slots=True) -class TraceRequestChunkSentParams: - """ Parameters sent by the `on_request_chunk_sent` signal""" - - method: str - url: URL - chunk: bytes - - -@attr.s(auto_attribs=True, frozen=True, slots=True) -class TraceResponseChunkReceivedParams: - """ Parameters sent by the `on_response_chunk_received` signal""" - - method: str - url: URL - chunk: bytes - - -@attr.s(auto_attribs=True, frozen=True, slots=True) -class TraceRequestEndParams: - """ Parameters sent by the `on_request_end` signal""" - - method: str - url: URL - headers: "CIMultiDict[str]" - response: ClientResponse - - -@attr.s(auto_attribs=True, frozen=True, slots=True) -class TraceRequestExceptionParams: - """ Parameters sent by the `on_request_exception` signal""" - - method: str - url: URL - headers: "CIMultiDict[str]" - exception: BaseException - - -@attr.s(auto_attribs=True, frozen=True, slots=True) -class TraceRequestRedirectParams: - """ Parameters sent by the `on_request_redirect` signal""" - - method: str - url: URL - headers: "CIMultiDict[str]" - response: ClientResponse - - -@attr.s(auto_attribs=True, frozen=True, slots=True) -class TraceConnectionQueuedStartParams: - """ Parameters sent by the `on_connection_queued_start` signal""" - - -@attr.s(auto_attribs=True, frozen=True, slots=True) -class TraceConnectionQueuedEndParams: - """ Parameters sent by the `on_connection_queued_end` signal""" - - -@attr.s(auto_attribs=True, frozen=True, slots=True) -class TraceConnectionCreateStartParams: - """ Parameters sent by the `on_connection_create_start` signal""" - - -@attr.s(auto_attribs=True, frozen=True, slots=True) -class TraceConnectionCreateEndParams: - """ Parameters sent by the `on_connection_create_end` signal""" - - -@attr.s(auto_attribs=True, frozen=True, slots=True) -class TraceConnectionReuseconnParams: - """ Parameters sent by the `on_connection_reuseconn` signal""" - - -@attr.s(auto_attribs=True, frozen=True, slots=True) -class TraceDnsResolveHostStartParams: - """ Parameters sent by the `on_dns_resolvehost_start` signal""" - - host: str - - -@attr.s(auto_attribs=True, frozen=True, slots=True) -class TraceDnsResolveHostEndParams: - """ Parameters sent by the `on_dns_resolvehost_end` signal""" - - host: str - - -@attr.s(auto_attribs=True, frozen=True, slots=True) -class TraceDnsCacheHitParams: - """ Parameters sent by the `on_dns_cache_hit` signal""" - - host: str - - -@attr.s(auto_attribs=True, frozen=True, slots=True) -class TraceDnsCacheMissParams: - """ Parameters sent by the `on_dns_cache_miss` signal""" - - host: str - - -class Trace: - """Internal class used to keep together the main dependencies used - at the moment of send a signal.""" - - def __init__( - self, - session: "ClientSession", - trace_config: TraceConfig, - trace_config_ctx: SimpleNamespace, - ) -> None: - self._trace_config = trace_config - self._trace_config_ctx = trace_config_ctx - self._session = session - - async def send_request_start( - self, method: str, url: URL, headers: "CIMultiDict[str]" - ) -> None: - return await self._trace_config.on_request_start.send( - self._session, - self._trace_config_ctx, - TraceRequestStartParams(method, url, headers), - ) - - async def send_request_chunk_sent( - self, method: str, url: URL, chunk: bytes - ) -> None: - return await self._trace_config.on_request_chunk_sent.send( - self._session, - self._trace_config_ctx, - TraceRequestChunkSentParams(method, url, chunk), - ) - - async def send_response_chunk_received( - self, method: str, url: URL, chunk: bytes - ) -> None: - return await self._trace_config.on_response_chunk_received.send( - self._session, - self._trace_config_ctx, - TraceResponseChunkReceivedParams(method, url, chunk), - ) - - async def send_request_end( - self, - method: str, - url: URL, - headers: "CIMultiDict[str]", - response: ClientResponse, - ) -> None: - return await self._trace_config.on_request_end.send( - self._session, - self._trace_config_ctx, - TraceRequestEndParams(method, url, headers, response), - ) - - async def send_request_exception( - self, - method: str, - url: URL, - headers: "CIMultiDict[str]", - exception: BaseException, - ) -> None: - return await self._trace_config.on_request_exception.send( - self._session, - self._trace_config_ctx, - TraceRequestExceptionParams(method, url, headers, exception), - ) - - async def send_request_redirect( - self, - method: str, - url: URL, - headers: "CIMultiDict[str]", - response: ClientResponse, - ) -> None: - return await self._trace_config._on_request_redirect.send( - self._session, - self._trace_config_ctx, - TraceRequestRedirectParams(method, url, headers, response), - ) - - async def send_connection_queued_start(self) -> None: - return await self._trace_config.on_connection_queued_start.send( - self._session, self._trace_config_ctx, TraceConnectionQueuedStartParams() - ) - - async def send_connection_queued_end(self) -> None: - return await self._trace_config.on_connection_queued_end.send( - self._session, self._trace_config_ctx, TraceConnectionQueuedEndParams() - ) - - async def send_connection_create_start(self) -> None: - return await self._trace_config.on_connection_create_start.send( - self._session, self._trace_config_ctx, TraceConnectionCreateStartParams() - ) - - async def send_connection_create_end(self) -> None: - return await self._trace_config.on_connection_create_end.send( - self._session, self._trace_config_ctx, TraceConnectionCreateEndParams() - ) - - async def send_connection_reuseconn(self) -> None: - return await self._trace_config.on_connection_reuseconn.send( - self._session, self._trace_config_ctx, TraceConnectionReuseconnParams() - ) - - async def send_dns_resolvehost_start(self, host: str) -> None: - return await self._trace_config.on_dns_resolvehost_start.send( - self._session, self._trace_config_ctx, TraceDnsResolveHostStartParams(host) - ) - - async def send_dns_resolvehost_end(self, host: str) -> None: - return await self._trace_config.on_dns_resolvehost_end.send( - self._session, self._trace_config_ctx, TraceDnsResolveHostEndParams(host) - ) - - async def send_dns_cache_hit(self, host: str) -> None: - return await self._trace_config.on_dns_cache_hit.send( - self._session, self._trace_config_ctx, TraceDnsCacheHitParams(host) - ) - - async def send_dns_cache_miss(self, host: str) -> None: - return await self._trace_config.on_dns_cache_miss.send( - self._session, self._trace_config_ctx, TraceDnsCacheMissParams(host) - ) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/typedefs.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/typedefs.py deleted file mode 100644 index 1b68a242..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/typedefs.py +++ /dev/null @@ -1,46 +0,0 @@ -import json -import os -import pathlib -import sys -from typing import TYPE_CHECKING, Any, Callable, Iterable, Mapping, Tuple, Union - -from multidict import CIMultiDict, CIMultiDictProxy, MultiDict, MultiDictProxy, istr -from yarl import URL - -DEFAULT_JSON_ENCODER = json.dumps -DEFAULT_JSON_DECODER = json.loads - -if TYPE_CHECKING: # pragma: no cover - _CIMultiDict = CIMultiDict[str] - _CIMultiDictProxy = CIMultiDictProxy[str] - _MultiDict = MultiDict[str] - _MultiDictProxy = MultiDictProxy[str] - from http.cookies import BaseCookie, Morsel -else: - _CIMultiDict = CIMultiDict - _CIMultiDictProxy = CIMultiDictProxy - _MultiDict = MultiDict - _MultiDictProxy = MultiDictProxy - -Byteish = Union[bytes, bytearray, memoryview] -JSONEncoder = Callable[[Any], str] -JSONDecoder = Callable[[str], Any] -LooseHeaders = Union[Mapping[Union[str, istr], str], _CIMultiDict, _CIMultiDictProxy] -RawHeaders = Tuple[Tuple[bytes, bytes], ...] -StrOrURL = Union[str, URL] - -LooseCookiesMappings = Mapping[str, Union[str, "BaseCookie[str]", "Morsel[Any]"]] -LooseCookiesIterables = Iterable[ - Tuple[str, Union[str, "BaseCookie[str]", "Morsel[Any]"]] -] -LooseCookies = Union[ - LooseCookiesMappings, - LooseCookiesIterables, - "BaseCookie[str]", -] - - -if sys.version_info >= (3, 6): - PathLike = Union[str, "os.PathLike[str]"] -else: - PathLike = Union[str, pathlib.PurePath] diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web.py deleted file mode 100644 index 557e3c3b..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web.py +++ /dev/null @@ -1,581 +0,0 @@ -import asyncio -import logging -import socket -import sys -from argparse import ArgumentParser -from collections.abc import Iterable -from importlib import import_module -from typing import ( - Any as Any, - Awaitable as Awaitable, - Callable as Callable, - Iterable as TypingIterable, - List as List, - Optional as Optional, - Set as Set, - Type as Type, - Union as Union, - cast as cast, -) - -from .abc import AbstractAccessLogger -from .helpers import all_tasks -from .log import access_logger -from .web_app import Application as Application, CleanupError as CleanupError -from .web_exceptions import ( - HTTPAccepted as HTTPAccepted, - HTTPBadGateway as HTTPBadGateway, - HTTPBadRequest as HTTPBadRequest, - HTTPClientError as HTTPClientError, - HTTPConflict as HTTPConflict, - HTTPCreated as HTTPCreated, - HTTPError as HTTPError, - HTTPException as HTTPException, - HTTPExpectationFailed as HTTPExpectationFailed, - HTTPFailedDependency as HTTPFailedDependency, - HTTPForbidden as HTTPForbidden, - HTTPFound as HTTPFound, - HTTPGatewayTimeout as HTTPGatewayTimeout, - HTTPGone as HTTPGone, - HTTPInsufficientStorage as HTTPInsufficientStorage, - HTTPInternalServerError as HTTPInternalServerError, - HTTPLengthRequired as HTTPLengthRequired, - HTTPMethodNotAllowed as HTTPMethodNotAllowed, - HTTPMisdirectedRequest as HTTPMisdirectedRequest, - HTTPMovedPermanently as HTTPMovedPermanently, - HTTPMultipleChoices as HTTPMultipleChoices, - HTTPNetworkAuthenticationRequired as HTTPNetworkAuthenticationRequired, - HTTPNoContent as HTTPNoContent, - HTTPNonAuthoritativeInformation as HTTPNonAuthoritativeInformation, - HTTPNotAcceptable as HTTPNotAcceptable, - HTTPNotExtended as HTTPNotExtended, - HTTPNotFound as HTTPNotFound, - HTTPNotImplemented as HTTPNotImplemented, - HTTPNotModified as HTTPNotModified, - HTTPOk as HTTPOk, - HTTPPartialContent as HTTPPartialContent, - HTTPPaymentRequired as HTTPPaymentRequired, - HTTPPermanentRedirect as HTTPPermanentRedirect, - HTTPPreconditionFailed as HTTPPreconditionFailed, - HTTPPreconditionRequired as HTTPPreconditionRequired, - HTTPProxyAuthenticationRequired as HTTPProxyAuthenticationRequired, - HTTPRedirection as HTTPRedirection, - HTTPRequestEntityTooLarge as HTTPRequestEntityTooLarge, - HTTPRequestHeaderFieldsTooLarge as HTTPRequestHeaderFieldsTooLarge, - HTTPRequestRangeNotSatisfiable as HTTPRequestRangeNotSatisfiable, - HTTPRequestTimeout as HTTPRequestTimeout, - HTTPRequestURITooLong as HTTPRequestURITooLong, - HTTPResetContent as HTTPResetContent, - HTTPSeeOther as HTTPSeeOther, - HTTPServerError as HTTPServerError, - HTTPServiceUnavailable as HTTPServiceUnavailable, - HTTPSuccessful as HTTPSuccessful, - HTTPTemporaryRedirect as HTTPTemporaryRedirect, - HTTPTooManyRequests as HTTPTooManyRequests, - HTTPUnauthorized as HTTPUnauthorized, - HTTPUnavailableForLegalReasons as HTTPUnavailableForLegalReasons, - HTTPUnprocessableEntity as HTTPUnprocessableEntity, - HTTPUnsupportedMediaType as HTTPUnsupportedMediaType, - HTTPUpgradeRequired as HTTPUpgradeRequired, - HTTPUseProxy as HTTPUseProxy, - HTTPVariantAlsoNegotiates as HTTPVariantAlsoNegotiates, - HTTPVersionNotSupported as HTTPVersionNotSupported, -) -from .web_fileresponse import FileResponse as FileResponse -from .web_log import AccessLogger -from .web_middlewares import ( - middleware as middleware, - normalize_path_middleware as normalize_path_middleware, -) -from .web_protocol import ( - PayloadAccessError as PayloadAccessError, - RequestHandler as RequestHandler, - RequestPayloadError as RequestPayloadError, -) -from .web_request import ( - BaseRequest as BaseRequest, - FileField as FileField, - Request as Request, -) -from .web_response import ( - ContentCoding as ContentCoding, - Response as Response, - StreamResponse as StreamResponse, - json_response as json_response, -) -from .web_routedef import ( - AbstractRouteDef as AbstractRouteDef, - RouteDef as RouteDef, - RouteTableDef as RouteTableDef, - StaticDef as StaticDef, - delete as delete, - get as get, - head as head, - options as options, - patch as patch, - post as post, - put as put, - route as route, - static as static, - view as view, -) -from .web_runner import ( - AppRunner as AppRunner, - BaseRunner as BaseRunner, - BaseSite as BaseSite, - GracefulExit as GracefulExit, - NamedPipeSite as NamedPipeSite, - ServerRunner as ServerRunner, - SockSite as SockSite, - TCPSite as TCPSite, - UnixSite as UnixSite, -) -from .web_server import Server as Server -from .web_urldispatcher import ( - AbstractResource as AbstractResource, - AbstractRoute as AbstractRoute, - DynamicResource as DynamicResource, - PlainResource as PlainResource, - Resource as Resource, - ResourceRoute as ResourceRoute, - StaticResource as StaticResource, - UrlDispatcher as UrlDispatcher, - UrlMappingMatchInfo as UrlMappingMatchInfo, - View as View, -) -from .web_ws import ( - WebSocketReady as WebSocketReady, - WebSocketResponse as WebSocketResponse, - WSMsgType as WSMsgType, -) - -__all__ = ( - # web_app - "Application", - "CleanupError", - # web_exceptions - "HTTPAccepted", - "HTTPBadGateway", - "HTTPBadRequest", - "HTTPClientError", - "HTTPConflict", - "HTTPCreated", - "HTTPError", - "HTTPException", - "HTTPExpectationFailed", - "HTTPFailedDependency", - "HTTPForbidden", - "HTTPFound", - "HTTPGatewayTimeout", - "HTTPGone", - "HTTPInsufficientStorage", - "HTTPInternalServerError", - "HTTPLengthRequired", - "HTTPMethodNotAllowed", - "HTTPMisdirectedRequest", - "HTTPMovedPermanently", - "HTTPMultipleChoices", - "HTTPNetworkAuthenticationRequired", - "HTTPNoContent", - "HTTPNonAuthoritativeInformation", - "HTTPNotAcceptable", - "HTTPNotExtended", - "HTTPNotFound", - "HTTPNotImplemented", - "HTTPNotModified", - "HTTPOk", - "HTTPPartialContent", - "HTTPPaymentRequired", - "HTTPPermanentRedirect", - "HTTPPreconditionFailed", - "HTTPPreconditionRequired", - "HTTPProxyAuthenticationRequired", - "HTTPRedirection", - "HTTPRequestEntityTooLarge", - "HTTPRequestHeaderFieldsTooLarge", - "HTTPRequestRangeNotSatisfiable", - "HTTPRequestTimeout", - "HTTPRequestURITooLong", - "HTTPResetContent", - "HTTPSeeOther", - "HTTPServerError", - "HTTPServiceUnavailable", - "HTTPSuccessful", - "HTTPTemporaryRedirect", - "HTTPTooManyRequests", - "HTTPUnauthorized", - "HTTPUnavailableForLegalReasons", - "HTTPUnprocessableEntity", - "HTTPUnsupportedMediaType", - "HTTPUpgradeRequired", - "HTTPUseProxy", - "HTTPVariantAlsoNegotiates", - "HTTPVersionNotSupported", - # web_fileresponse - "FileResponse", - # web_middlewares - "middleware", - "normalize_path_middleware", - # web_protocol - "PayloadAccessError", - "RequestHandler", - "RequestPayloadError", - # web_request - "BaseRequest", - "FileField", - "Request", - # web_response - "ContentCoding", - "Response", - "StreamResponse", - "json_response", - # web_routedef - "AbstractRouteDef", - "RouteDef", - "RouteTableDef", - "StaticDef", - "delete", - "get", - "head", - "options", - "patch", - "post", - "put", - "route", - "static", - "view", - # web_runner - "AppRunner", - "BaseRunner", - "BaseSite", - "GracefulExit", - "ServerRunner", - "SockSite", - "TCPSite", - "UnixSite", - "NamedPipeSite", - # web_server - "Server", - # web_urldispatcher - "AbstractResource", - "AbstractRoute", - "DynamicResource", - "PlainResource", - "Resource", - "ResourceRoute", - "StaticResource", - "UrlDispatcher", - "UrlMappingMatchInfo", - "View", - # web_ws - "WebSocketReady", - "WebSocketResponse", - "WSMsgType", - # web - "run_app", -) - - -try: - from ssl import SSLContext -except ImportError: # pragma: no cover - SSLContext = Any # type: ignore - -HostSequence = TypingIterable[str] - - -async def _run_app( - app: Union[Application, Awaitable[Application]], - *, - host: Optional[Union[str, HostSequence]] = None, - port: Optional[int] = None, - path: Optional[str] = None, - sock: Optional[socket.socket] = None, - shutdown_timeout: float = 60.0, - ssl_context: Optional[SSLContext] = None, - print: Callable[..., None] = print, - backlog: int = 128, - access_log_class: Type[AbstractAccessLogger] = AccessLogger, - access_log_format: str = AccessLogger.LOG_FORMAT, - access_log: Optional[logging.Logger] = access_logger, - handle_signals: bool = True, - reuse_address: Optional[bool] = None, - reuse_port: Optional[bool] = None, -) -> None: - # A internal functio to actually do all dirty job for application running - if asyncio.iscoroutine(app): - app = await app # type: ignore - - app = cast(Application, app) - - runner = AppRunner( - app, - handle_signals=handle_signals, - access_log_class=access_log_class, - access_log_format=access_log_format, - access_log=access_log, - ) - - await runner.setup() - - sites = [] # type: List[BaseSite] - - try: - if host is not None: - if isinstance(host, (str, bytes, bytearray, memoryview)): - sites.append( - TCPSite( - runner, - host, - port, - shutdown_timeout=shutdown_timeout, - ssl_context=ssl_context, - backlog=backlog, - reuse_address=reuse_address, - reuse_port=reuse_port, - ) - ) - else: - for h in host: - sites.append( - TCPSite( - runner, - h, - port, - shutdown_timeout=shutdown_timeout, - ssl_context=ssl_context, - backlog=backlog, - reuse_address=reuse_address, - reuse_port=reuse_port, - ) - ) - elif path is None and sock is None or port is not None: - sites.append( - TCPSite( - runner, - port=port, - shutdown_timeout=shutdown_timeout, - ssl_context=ssl_context, - backlog=backlog, - reuse_address=reuse_address, - reuse_port=reuse_port, - ) - ) - - if path is not None: - if isinstance(path, (str, bytes, bytearray, memoryview)): - sites.append( - UnixSite( - runner, - path, - shutdown_timeout=shutdown_timeout, - ssl_context=ssl_context, - backlog=backlog, - ) - ) - else: - for p in path: - sites.append( - UnixSite( - runner, - p, - shutdown_timeout=shutdown_timeout, - ssl_context=ssl_context, - backlog=backlog, - ) - ) - - if sock is not None: - if not isinstance(sock, Iterable): - sites.append( - SockSite( - runner, - sock, - shutdown_timeout=shutdown_timeout, - ssl_context=ssl_context, - backlog=backlog, - ) - ) - else: - for s in sock: - sites.append( - SockSite( - runner, - s, - shutdown_timeout=shutdown_timeout, - ssl_context=ssl_context, - backlog=backlog, - ) - ) - for site in sites: - await site.start() - - if print: # pragma: no branch - names = sorted(str(s.name) for s in runner.sites) - print( - "======== Running on {} ========\n" - "(Press CTRL+C to quit)".format(", ".join(names)) - ) - - # sleep forever by 1 hour intervals, - # on Windows before Python 3.8 wake up every 1 second to handle - # Ctrl+C smoothly - if sys.platform == "win32" and sys.version_info < (3, 8): - delay = 1 - else: - delay = 3600 - - while True: - await asyncio.sleep(delay) - finally: - await runner.cleanup() - - -def _cancel_tasks( - to_cancel: Set["asyncio.Task[Any]"], loop: asyncio.AbstractEventLoop -) -> None: - if not to_cancel: - return - - for task in to_cancel: - task.cancel() - - loop.run_until_complete( - asyncio.gather(*to_cancel, loop=loop, return_exceptions=True) - ) - - for task in to_cancel: - if task.cancelled(): - continue - if task.exception() is not None: - loop.call_exception_handler( - { - "message": "unhandled exception during asyncio.run() shutdown", - "exception": task.exception(), - "task": task, - } - ) - - -def run_app( - app: Union[Application, Awaitable[Application]], - *, - host: Optional[Union[str, HostSequence]] = None, - port: Optional[int] = None, - path: Optional[str] = None, - sock: Optional[socket.socket] = None, - shutdown_timeout: float = 60.0, - ssl_context: Optional[SSLContext] = None, - print: Callable[..., None] = print, - backlog: int = 128, - access_log_class: Type[AbstractAccessLogger] = AccessLogger, - access_log_format: str = AccessLogger.LOG_FORMAT, - access_log: Optional[logging.Logger] = access_logger, - handle_signals: bool = True, - reuse_address: Optional[bool] = None, - reuse_port: Optional[bool] = None, -) -> None: - """Run an app locally""" - loop = asyncio.get_event_loop() - - # Configure if and only if in debugging mode and using the default logger - if loop.get_debug() and access_log and access_log.name == "aiohttp.access": - if access_log.level == logging.NOTSET: - access_log.setLevel(logging.DEBUG) - if not access_log.hasHandlers(): - access_log.addHandler(logging.StreamHandler()) - - try: - main_task = loop.create_task( - _run_app( - app, - host=host, - port=port, - path=path, - sock=sock, - shutdown_timeout=shutdown_timeout, - ssl_context=ssl_context, - print=print, - backlog=backlog, - access_log_class=access_log_class, - access_log_format=access_log_format, - access_log=access_log, - handle_signals=handle_signals, - reuse_address=reuse_address, - reuse_port=reuse_port, - ) - ) - loop.run_until_complete(main_task) - except (GracefulExit, KeyboardInterrupt): # pragma: no cover - pass - finally: - _cancel_tasks({main_task}, loop) - _cancel_tasks(all_tasks(loop), loop) - if sys.version_info >= (3, 6): # don't use PY_36 to pass mypy - loop.run_until_complete(loop.shutdown_asyncgens()) - loop.close() - - -def main(argv: List[str]) -> None: - arg_parser = ArgumentParser( - description="aiohttp.web Application server", prog="aiohttp.web" - ) - arg_parser.add_argument( - "entry_func", - help=( - "Callable returning the `aiohttp.web.Application` instance to " - "run. Should be specified in the 'module:function' syntax." - ), - metavar="entry-func", - ) - arg_parser.add_argument( - "-H", - "--hostname", - help="TCP/IP hostname to serve on (default: %(default)r)", - default="localhost", - ) - arg_parser.add_argument( - "-P", - "--port", - help="TCP/IP port to serve on (default: %(default)r)", - type=int, - default="8080", - ) - arg_parser.add_argument( - "-U", - "--path", - help="Unix file system path to serve on. Specifying a path will cause " - "hostname and port arguments to be ignored.", - ) - args, extra_argv = arg_parser.parse_known_args(argv) - - # Import logic - mod_str, _, func_str = args.entry_func.partition(":") - if not func_str or not mod_str: - arg_parser.error("'entry-func' not in 'module:function' syntax") - if mod_str.startswith("."): - arg_parser.error("relative module names not supported") - try: - module = import_module(mod_str) - except ImportError as ex: - arg_parser.error(f"unable to import {mod_str}: {ex}") - try: - func = getattr(module, func_str) - except AttributeError: - arg_parser.error(f"module {mod_str!r} has no attribute {func_str!r}") - - # Compatibility logic - if args.path is not None and not hasattr(socket, "AF_UNIX"): - arg_parser.error( - "file system paths not supported by your operating" " environment" - ) - - logging.basicConfig(level=logging.DEBUG) - - app = func(extra_argv) - run_app(app, host=args.hostname, port=args.port, path=args.path) - arg_parser.exit(message="Stopped\n") - - -if __name__ == "__main__": # pragma: no branch - main(sys.argv[1:]) # pragma: no cover diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_app.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_app.py deleted file mode 100644 index 14f2937a..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_app.py +++ /dev/null @@ -1,552 +0,0 @@ -import asyncio -import logging -import warnings -from functools import partial, update_wrapper -from typing import ( - TYPE_CHECKING, - Any, - AsyncIterator, - Awaitable, - Callable, - Dict, - Iterable, - Iterator, - List, - Mapping, - MutableMapping, - Optional, - Sequence, - Tuple, - Type, - Union, - cast, -) - -from . import hdrs -from .abc import ( - AbstractAccessLogger, - AbstractMatchInfo, - AbstractRouter, - AbstractStreamWriter, -) -from .frozenlist import FrozenList -from .helpers import DEBUG -from .http_parser import RawRequestMessage -from .log import web_logger -from .signals import Signal -from .streams import StreamReader -from .web_log import AccessLogger -from .web_middlewares import _fix_request_current_app -from .web_protocol import RequestHandler -from .web_request import Request -from .web_response import StreamResponse -from .web_routedef import AbstractRouteDef -from .web_server import Server -from .web_urldispatcher import ( - AbstractResource, - AbstractRoute, - Domain, - MaskDomain, - MatchedSubAppResource, - PrefixedSubAppResource, - UrlDispatcher, -) - -__all__ = ("Application", "CleanupError") - - -if TYPE_CHECKING: # pragma: no cover - _AppSignal = Signal[Callable[["Application"], Awaitable[None]]] - _RespPrepareSignal = Signal[Callable[[Request, StreamResponse], Awaitable[None]]] - _Handler = Callable[[Request], Awaitable[StreamResponse]] - _Middleware = Union[ - Callable[[Request, _Handler], Awaitable[StreamResponse]], - Callable[["Application", _Handler], Awaitable[_Handler]], # old-style - ] - _Middlewares = FrozenList[_Middleware] - _MiddlewaresHandlers = Optional[Sequence[Tuple[_Middleware, bool]]] - _Subapps = List["Application"] -else: - # No type checker mode, skip types - _AppSignal = Signal - _RespPrepareSignal = Signal - _Handler = Callable - _Middleware = Callable - _Middlewares = FrozenList - _MiddlewaresHandlers = Optional[Sequence] - _Subapps = List - - -class Application(MutableMapping[str, Any]): - ATTRS = frozenset( - [ - "logger", - "_debug", - "_router", - "_loop", - "_handler_args", - "_middlewares", - "_middlewares_handlers", - "_run_middlewares", - "_state", - "_frozen", - "_pre_frozen", - "_subapps", - "_on_response_prepare", - "_on_startup", - "_on_shutdown", - "_on_cleanup", - "_client_max_size", - "_cleanup_ctx", - ] - ) - - def __init__( - self, - *, - logger: logging.Logger = web_logger, - router: Optional[UrlDispatcher] = None, - middlewares: Iterable[_Middleware] = (), - handler_args: Optional[Mapping[str, Any]] = None, - client_max_size: int = 1024 ** 2, - loop: Optional[asyncio.AbstractEventLoop] = None, - debug: Any = ..., # mypy doesn't support ellipsis - ) -> None: - if router is None: - router = UrlDispatcher() - else: - warnings.warn( - "router argument is deprecated", DeprecationWarning, stacklevel=2 - ) - assert isinstance(router, AbstractRouter), router - - if loop is not None: - warnings.warn( - "loop argument is deprecated", DeprecationWarning, stacklevel=2 - ) - - if debug is not ...: - warnings.warn( - "debug argument is deprecated", DeprecationWarning, stacklevel=2 - ) - self._debug = debug - self._router = router # type: UrlDispatcher - self._loop = loop - self._handler_args = handler_args - self.logger = logger - - self._middlewares = FrozenList(middlewares) # type: _Middlewares - - # initialized on freezing - self._middlewares_handlers = None # type: _MiddlewaresHandlers - # initialized on freezing - self._run_middlewares = None # type: Optional[bool] - - self._state = {} # type: Dict[str, Any] - self._frozen = False - self._pre_frozen = False - self._subapps = [] # type: _Subapps - - self._on_response_prepare = Signal(self) # type: _RespPrepareSignal - self._on_startup = Signal(self) # type: _AppSignal - self._on_shutdown = Signal(self) # type: _AppSignal - self._on_cleanup = Signal(self) # type: _AppSignal - self._cleanup_ctx = CleanupContext() - self._on_startup.append(self._cleanup_ctx._on_startup) - self._on_cleanup.append(self._cleanup_ctx._on_cleanup) - self._client_max_size = client_max_size - - def __init_subclass__(cls: Type["Application"]) -> None: - warnings.warn( - "Inheritance class {} from web.Application " - "is discouraged".format(cls.__name__), - DeprecationWarning, - stacklevel=2, - ) - - if DEBUG: # pragma: no cover - - def __setattr__(self, name: str, val: Any) -> None: - if name not in self.ATTRS: - warnings.warn( - "Setting custom web.Application.{} attribute " - "is discouraged".format(name), - DeprecationWarning, - stacklevel=2, - ) - super().__setattr__(name, val) - - # MutableMapping API - - def __eq__(self, other: object) -> bool: - return self is other - - def __getitem__(self, key: str) -> Any: - return self._state[key] - - def _check_frozen(self) -> None: - if self._frozen: - warnings.warn( - "Changing state of started or joined " "application is deprecated", - DeprecationWarning, - stacklevel=3, - ) - - def __setitem__(self, key: str, value: Any) -> None: - self._check_frozen() - self._state[key] = value - - def __delitem__(self, key: str) -> None: - self._check_frozen() - del self._state[key] - - def __len__(self) -> int: - return len(self._state) - - def __iter__(self) -> Iterator[str]: - return iter(self._state) - - ######## - @property - def loop(self) -> asyncio.AbstractEventLoop: - # Technically the loop can be None - # but we mask it by explicit type cast - # to provide more convinient type annotation - warnings.warn("loop property is deprecated", DeprecationWarning, stacklevel=2) - return cast(asyncio.AbstractEventLoop, self._loop) - - def _set_loop(self, loop: Optional[asyncio.AbstractEventLoop]) -> None: - if loop is None: - loop = asyncio.get_event_loop() - if self._loop is not None and self._loop is not loop: - raise RuntimeError( - "web.Application instance initialized with different loop" - ) - - self._loop = loop - - # set loop debug - if self._debug is ...: - self._debug = loop.get_debug() - - # set loop to sub applications - for subapp in self._subapps: - subapp._set_loop(loop) - - @property - def pre_frozen(self) -> bool: - return self._pre_frozen - - def pre_freeze(self) -> None: - if self._pre_frozen: - return - - self._pre_frozen = True - self._middlewares.freeze() - self._router.freeze() - self._on_response_prepare.freeze() - self._cleanup_ctx.freeze() - self._on_startup.freeze() - self._on_shutdown.freeze() - self._on_cleanup.freeze() - self._middlewares_handlers = tuple(self._prepare_middleware()) - - # If current app and any subapp do not have middlewares avoid run all - # of the code footprint that it implies, which have a middleware - # hardcoded per app that sets up the current_app attribute. If no - # middlewares are configured the handler will receive the proper - # current_app without needing all of this code. - self._run_middlewares = True if self.middlewares else False - - for subapp in self._subapps: - subapp.pre_freeze() - self._run_middlewares = self._run_middlewares or subapp._run_middlewares - - @property - def frozen(self) -> bool: - return self._frozen - - def freeze(self) -> None: - if self._frozen: - return - - self.pre_freeze() - self._frozen = True - for subapp in self._subapps: - subapp.freeze() - - @property - def debug(self) -> bool: - warnings.warn("debug property is deprecated", DeprecationWarning, stacklevel=2) - return self._debug - - def _reg_subapp_signals(self, subapp: "Application") -> None: - def reg_handler(signame: str) -> None: - subsig = getattr(subapp, signame) - - async def handler(app: "Application") -> None: - await subsig.send(subapp) - - appsig = getattr(self, signame) - appsig.append(handler) - - reg_handler("on_startup") - reg_handler("on_shutdown") - reg_handler("on_cleanup") - - def add_subapp(self, prefix: str, subapp: "Application") -> AbstractResource: - if not isinstance(prefix, str): - raise TypeError("Prefix must be str") - prefix = prefix.rstrip("/") - if not prefix: - raise ValueError("Prefix cannot be empty") - factory = partial(PrefixedSubAppResource, prefix, subapp) - return self._add_subapp(factory, subapp) - - def _add_subapp( - self, resource_factory: Callable[[], AbstractResource], subapp: "Application" - ) -> AbstractResource: - if self.frozen: - raise RuntimeError("Cannot add sub application to frozen application") - if subapp.frozen: - raise RuntimeError("Cannot add frozen application") - resource = resource_factory() - self.router.register_resource(resource) - self._reg_subapp_signals(subapp) - self._subapps.append(subapp) - subapp.pre_freeze() - if self._loop is not None: - subapp._set_loop(self._loop) - return resource - - def add_domain(self, domain: str, subapp: "Application") -> AbstractResource: - if not isinstance(domain, str): - raise TypeError("Domain must be str") - elif "*" in domain: - rule = MaskDomain(domain) # type: Domain - else: - rule = Domain(domain) - factory = partial(MatchedSubAppResource, rule, subapp) - return self._add_subapp(factory, subapp) - - def add_routes(self, routes: Iterable[AbstractRouteDef]) -> List[AbstractRoute]: - return self.router.add_routes(routes) - - @property - def on_response_prepare(self) -> _RespPrepareSignal: - return self._on_response_prepare - - @property - def on_startup(self) -> _AppSignal: - return self._on_startup - - @property - def on_shutdown(self) -> _AppSignal: - return self._on_shutdown - - @property - def on_cleanup(self) -> _AppSignal: - return self._on_cleanup - - @property - def cleanup_ctx(self) -> "CleanupContext": - return self._cleanup_ctx - - @property - def router(self) -> UrlDispatcher: - return self._router - - @property - def middlewares(self) -> _Middlewares: - return self._middlewares - - def _make_handler( - self, - *, - loop: Optional[asyncio.AbstractEventLoop] = None, - access_log_class: Type[AbstractAccessLogger] = AccessLogger, - **kwargs: Any, - ) -> Server: - - if not issubclass(access_log_class, AbstractAccessLogger): - raise TypeError( - "access_log_class must be subclass of " - "aiohttp.abc.AbstractAccessLogger, got {}".format(access_log_class) - ) - - self._set_loop(loop) - self.freeze() - - kwargs["debug"] = self._debug - kwargs["access_log_class"] = access_log_class - if self._handler_args: - for k, v in self._handler_args.items(): - kwargs[k] = v - - return Server( - self._handle, # type: ignore - request_factory=self._make_request, - loop=self._loop, - **kwargs, - ) - - def make_handler( - self, - *, - loop: Optional[asyncio.AbstractEventLoop] = None, - access_log_class: Type[AbstractAccessLogger] = AccessLogger, - **kwargs: Any, - ) -> Server: - - warnings.warn( - "Application.make_handler(...) is deprecated, " "use AppRunner API instead", - DeprecationWarning, - stacklevel=2, - ) - - return self._make_handler( - loop=loop, access_log_class=access_log_class, **kwargs - ) - - async def startup(self) -> None: - """Causes on_startup signal - - Should be called in the event loop along with the request handler. - """ - await self.on_startup.send(self) - - async def shutdown(self) -> None: - """Causes on_shutdown signal - - Should be called before cleanup() - """ - await self.on_shutdown.send(self) - - async def cleanup(self) -> None: - """Causes on_cleanup signal - - Should be called after shutdown() - """ - await self.on_cleanup.send(self) - - def _make_request( - self, - message: RawRequestMessage, - payload: StreamReader, - protocol: RequestHandler, - writer: AbstractStreamWriter, - task: "asyncio.Task[None]", - _cls: Type[Request] = Request, - ) -> Request: - return _cls( - message, - payload, - protocol, - writer, - task, - self._loop, - client_max_size=self._client_max_size, - ) - - def _prepare_middleware(self) -> Iterator[Tuple[_Middleware, bool]]: - for m in reversed(self._middlewares): - if getattr(m, "__middleware_version__", None) == 1: - yield m, True - else: - warnings.warn( - 'old-style middleware "{!r}" deprecated, ' "see #2252".format(m), - DeprecationWarning, - stacklevel=2, - ) - yield m, False - - yield _fix_request_current_app(self), True - - async def _handle(self, request: Request) -> StreamResponse: - loop = asyncio.get_event_loop() - debug = loop.get_debug() - match_info = await self._router.resolve(request) - if debug: # pragma: no cover - if not isinstance(match_info, AbstractMatchInfo): - raise TypeError( - "match_info should be AbstractMatchInfo " - "instance, not {!r}".format(match_info) - ) - match_info.add_app(self) - - match_info.freeze() - - resp = None - request._match_info = match_info # type: ignore - expect = request.headers.get(hdrs.EXPECT) - if expect: - resp = await match_info.expect_handler(request) - await request.writer.drain() - - if resp is None: - handler = match_info.handler - - if self._run_middlewares: - for app in match_info.apps[::-1]: - for m, new_style in app._middlewares_handlers: # type: ignore - if new_style: - handler = update_wrapper( - partial(m, handler=handler), handler - ) - else: - handler = await m(app, handler) # type: ignore - - resp = await handler(request) - - return resp - - def __call__(self) -> "Application": - """gunicorn compatibility""" - return self - - def __repr__(self) -> str: - return "".format(id(self)) - - def __bool__(self) -> bool: - return True - - -class CleanupError(RuntimeError): - @property - def exceptions(self) -> List[BaseException]: - return self.args[1] - - -if TYPE_CHECKING: # pragma: no cover - _CleanupContextBase = FrozenList[Callable[[Application], AsyncIterator[None]]] -else: - _CleanupContextBase = FrozenList - - -class CleanupContext(_CleanupContextBase): - def __init__(self) -> None: - super().__init__() - self._exits = [] # type: List[AsyncIterator[None]] - - async def _on_startup(self, app: Application) -> None: - for cb in self: - it = cb(app).__aiter__() - await it.__anext__() - self._exits.append(it) - - async def _on_cleanup(self, app: Application) -> None: - errors = [] - for it in reversed(self._exits): - try: - await it.__anext__() - except StopAsyncIteration: - pass - except Exception as exc: - errors.append(exc) - else: - errors.append(RuntimeError(f"{it!r} has more than one 'yield'")) - if errors: - if len(errors) == 1: - raise errors[0] - else: - raise CleanupError("Multiple errors on cleanup stage", errors) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_exceptions.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_exceptions.py deleted file mode 100644 index 2eadca03..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_exceptions.py +++ /dev/null @@ -1,441 +0,0 @@ -import warnings -from typing import Any, Dict, Iterable, List, Optional, Set # noqa - -from yarl import URL - -from .typedefs import LooseHeaders, StrOrURL -from .web_response import Response - -__all__ = ( - "HTTPException", - "HTTPError", - "HTTPRedirection", - "HTTPSuccessful", - "HTTPOk", - "HTTPCreated", - "HTTPAccepted", - "HTTPNonAuthoritativeInformation", - "HTTPNoContent", - "HTTPResetContent", - "HTTPPartialContent", - "HTTPMultipleChoices", - "HTTPMovedPermanently", - "HTTPFound", - "HTTPSeeOther", - "HTTPNotModified", - "HTTPUseProxy", - "HTTPTemporaryRedirect", - "HTTPPermanentRedirect", - "HTTPClientError", - "HTTPBadRequest", - "HTTPUnauthorized", - "HTTPPaymentRequired", - "HTTPForbidden", - "HTTPNotFound", - "HTTPMethodNotAllowed", - "HTTPNotAcceptable", - "HTTPProxyAuthenticationRequired", - "HTTPRequestTimeout", - "HTTPConflict", - "HTTPGone", - "HTTPLengthRequired", - "HTTPPreconditionFailed", - "HTTPRequestEntityTooLarge", - "HTTPRequestURITooLong", - "HTTPUnsupportedMediaType", - "HTTPRequestRangeNotSatisfiable", - "HTTPExpectationFailed", - "HTTPMisdirectedRequest", - "HTTPUnprocessableEntity", - "HTTPFailedDependency", - "HTTPUpgradeRequired", - "HTTPPreconditionRequired", - "HTTPTooManyRequests", - "HTTPRequestHeaderFieldsTooLarge", - "HTTPUnavailableForLegalReasons", - "HTTPServerError", - "HTTPInternalServerError", - "HTTPNotImplemented", - "HTTPBadGateway", - "HTTPServiceUnavailable", - "HTTPGatewayTimeout", - "HTTPVersionNotSupported", - "HTTPVariantAlsoNegotiates", - "HTTPInsufficientStorage", - "HTTPNotExtended", - "HTTPNetworkAuthenticationRequired", -) - - -############################################################ -# HTTP Exceptions -############################################################ - - -class HTTPException(Response, Exception): - - # You should set in subclasses: - # status = 200 - - status_code = -1 - empty_body = False - - __http_exception__ = True - - def __init__( - self, - *, - headers: Optional[LooseHeaders] = None, - reason: Optional[str] = None, - body: Any = None, - text: Optional[str] = None, - content_type: Optional[str] = None, - ) -> None: - if body is not None: - warnings.warn( - "body argument is deprecated for http web exceptions", - DeprecationWarning, - ) - Response.__init__( - self, - status=self.status_code, - headers=headers, - reason=reason, - body=body, - text=text, - content_type=content_type, - ) - Exception.__init__(self, self.reason) - if self.body is None and not self.empty_body: - self.text = f"{self.status}: {self.reason}" - - def __bool__(self) -> bool: - return True - - -class HTTPError(HTTPException): - """Base class for exceptions with status codes in the 400s and 500s.""" - - -class HTTPRedirection(HTTPException): - """Base class for exceptions with status codes in the 300s.""" - - -class HTTPSuccessful(HTTPException): - """Base class for exceptions with status codes in the 200s.""" - - -class HTTPOk(HTTPSuccessful): - status_code = 200 - - -class HTTPCreated(HTTPSuccessful): - status_code = 201 - - -class HTTPAccepted(HTTPSuccessful): - status_code = 202 - - -class HTTPNonAuthoritativeInformation(HTTPSuccessful): - status_code = 203 - - -class HTTPNoContent(HTTPSuccessful): - status_code = 204 - empty_body = True - - -class HTTPResetContent(HTTPSuccessful): - status_code = 205 - empty_body = True - - -class HTTPPartialContent(HTTPSuccessful): - status_code = 206 - - -############################################################ -# 3xx redirection -############################################################ - - -class _HTTPMove(HTTPRedirection): - def __init__( - self, - location: StrOrURL, - *, - headers: Optional[LooseHeaders] = None, - reason: Optional[str] = None, - body: Any = None, - text: Optional[str] = None, - content_type: Optional[str] = None, - ) -> None: - if not location: - raise ValueError("HTTP redirects need a location to redirect to.") - super().__init__( - headers=headers, - reason=reason, - body=body, - text=text, - content_type=content_type, - ) - self.headers["Location"] = str(URL(location)) - self.location = location - - -class HTTPMultipleChoices(_HTTPMove): - status_code = 300 - - -class HTTPMovedPermanently(_HTTPMove): - status_code = 301 - - -class HTTPFound(_HTTPMove): - status_code = 302 - - -# This one is safe after a POST (the redirected location will be -# retrieved with GET): -class HTTPSeeOther(_HTTPMove): - status_code = 303 - - -class HTTPNotModified(HTTPRedirection): - # FIXME: this should include a date or etag header - status_code = 304 - empty_body = True - - -class HTTPUseProxy(_HTTPMove): - # Not a move, but looks a little like one - status_code = 305 - - -class HTTPTemporaryRedirect(_HTTPMove): - status_code = 307 - - -class HTTPPermanentRedirect(_HTTPMove): - status_code = 308 - - -############################################################ -# 4xx client error -############################################################ - - -class HTTPClientError(HTTPError): - pass - - -class HTTPBadRequest(HTTPClientError): - status_code = 400 - - -class HTTPUnauthorized(HTTPClientError): - status_code = 401 - - -class HTTPPaymentRequired(HTTPClientError): - status_code = 402 - - -class HTTPForbidden(HTTPClientError): - status_code = 403 - - -class HTTPNotFound(HTTPClientError): - status_code = 404 - - -class HTTPMethodNotAllowed(HTTPClientError): - status_code = 405 - - def __init__( - self, - method: str, - allowed_methods: Iterable[str], - *, - headers: Optional[LooseHeaders] = None, - reason: Optional[str] = None, - body: Any = None, - text: Optional[str] = None, - content_type: Optional[str] = None, - ) -> None: - allow = ",".join(sorted(allowed_methods)) - super().__init__( - headers=headers, - reason=reason, - body=body, - text=text, - content_type=content_type, - ) - self.headers["Allow"] = allow - self.allowed_methods = set(allowed_methods) # type: Set[str] - self.method = method.upper() - - -class HTTPNotAcceptable(HTTPClientError): - status_code = 406 - - -class HTTPProxyAuthenticationRequired(HTTPClientError): - status_code = 407 - - -class HTTPRequestTimeout(HTTPClientError): - status_code = 408 - - -class HTTPConflict(HTTPClientError): - status_code = 409 - - -class HTTPGone(HTTPClientError): - status_code = 410 - - -class HTTPLengthRequired(HTTPClientError): - status_code = 411 - - -class HTTPPreconditionFailed(HTTPClientError): - status_code = 412 - - -class HTTPRequestEntityTooLarge(HTTPClientError): - status_code = 413 - - def __init__(self, max_size: float, actual_size: float, **kwargs: Any) -> None: - kwargs.setdefault( - "text", - "Maximum request body size {} exceeded, " - "actual body size {}".format(max_size, actual_size), - ) - super().__init__(**kwargs) - - -class HTTPRequestURITooLong(HTTPClientError): - status_code = 414 - - -class HTTPUnsupportedMediaType(HTTPClientError): - status_code = 415 - - -class HTTPRequestRangeNotSatisfiable(HTTPClientError): - status_code = 416 - - -class HTTPExpectationFailed(HTTPClientError): - status_code = 417 - - -class HTTPMisdirectedRequest(HTTPClientError): - status_code = 421 - - -class HTTPUnprocessableEntity(HTTPClientError): - status_code = 422 - - -class HTTPFailedDependency(HTTPClientError): - status_code = 424 - - -class HTTPUpgradeRequired(HTTPClientError): - status_code = 426 - - -class HTTPPreconditionRequired(HTTPClientError): - status_code = 428 - - -class HTTPTooManyRequests(HTTPClientError): - status_code = 429 - - -class HTTPRequestHeaderFieldsTooLarge(HTTPClientError): - status_code = 431 - - -class HTTPUnavailableForLegalReasons(HTTPClientError): - status_code = 451 - - def __init__( - self, - link: str, - *, - headers: Optional[LooseHeaders] = None, - reason: Optional[str] = None, - body: Any = None, - text: Optional[str] = None, - content_type: Optional[str] = None, - ) -> None: - super().__init__( - headers=headers, - reason=reason, - body=body, - text=text, - content_type=content_type, - ) - self.headers["Link"] = '<%s>; rel="blocked-by"' % link - self.link = link - - -############################################################ -# 5xx Server Error -############################################################ -# Response status codes beginning with the digit "5" indicate cases in -# which the server is aware that it has erred or is incapable of -# performing the request. Except when responding to a HEAD request, the -# server SHOULD include an entity containing an explanation of the error -# situation, and whether it is a temporary or permanent condition. User -# agents SHOULD display any included entity to the user. These response -# codes are applicable to any request method. - - -class HTTPServerError(HTTPError): - pass - - -class HTTPInternalServerError(HTTPServerError): - status_code = 500 - - -class HTTPNotImplemented(HTTPServerError): - status_code = 501 - - -class HTTPBadGateway(HTTPServerError): - status_code = 502 - - -class HTTPServiceUnavailable(HTTPServerError): - status_code = 503 - - -class HTTPGatewayTimeout(HTTPServerError): - status_code = 504 - - -class HTTPVersionNotSupported(HTTPServerError): - status_code = 505 - - -class HTTPVariantAlsoNegotiates(HTTPServerError): - status_code = 506 - - -class HTTPInsufficientStorage(HTTPServerError): - status_code = 507 - - -class HTTPNotExtended(HTTPServerError): - status_code = 510 - - -class HTTPNetworkAuthenticationRequired(HTTPServerError): - status_code = 511 diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_fileresponse.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_fileresponse.py deleted file mode 100644 index 0737c4f4..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_fileresponse.py +++ /dev/null @@ -1,243 +0,0 @@ -import asyncio -import mimetypes -import os -import pathlib -import sys -from typing import ( # noqa - IO, - TYPE_CHECKING, - Any, - Awaitable, - Callable, - List, - Optional, - Union, - cast, -) - -from . import hdrs -from .abc import AbstractStreamWriter -from .typedefs import LooseHeaders -from .web_exceptions import ( - HTTPNotModified, - HTTPPartialContent, - HTTPPreconditionFailed, - HTTPRequestRangeNotSatisfiable, -) -from .web_response import StreamResponse - -__all__ = ("FileResponse",) - -if TYPE_CHECKING: # pragma: no cover - from .web_request import BaseRequest - - -_T_OnChunkSent = Optional[Callable[[bytes], Awaitable[None]]] - - -NOSENDFILE = bool(os.environ.get("AIOHTTP_NOSENDFILE")) - - -class FileResponse(StreamResponse): - """A response object can be used to send files.""" - - def __init__( - self, - path: Union[str, pathlib.Path], - chunk_size: int = 256 * 1024, - status: int = 200, - reason: Optional[str] = None, - headers: Optional[LooseHeaders] = None, - ) -> None: - super().__init__(status=status, reason=reason, headers=headers) - - if isinstance(path, str): - path = pathlib.Path(path) - - self._path = path - self._chunk_size = chunk_size - - async def _sendfile_fallback( - self, writer: AbstractStreamWriter, fobj: IO[Any], offset: int, count: int - ) -> AbstractStreamWriter: - # To keep memory usage low,fobj is transferred in chunks - # controlled by the constructor's chunk_size argument. - - chunk_size = self._chunk_size - loop = asyncio.get_event_loop() - - await loop.run_in_executor(None, fobj.seek, offset) - - chunk = await loop.run_in_executor(None, fobj.read, chunk_size) - while chunk: - await writer.write(chunk) - count = count - chunk_size - if count <= 0: - break - chunk = await loop.run_in_executor(None, fobj.read, min(chunk_size, count)) - - await writer.drain() - return writer - - async def _sendfile( - self, request: "BaseRequest", fobj: IO[Any], offset: int, count: int - ) -> AbstractStreamWriter: - writer = await super().prepare(request) - assert writer is not None - - if NOSENDFILE or sys.version_info < (3, 7) or self.compression: - return await self._sendfile_fallback(writer, fobj, offset, count) - - loop = request._loop - transport = request.transport - assert transport is not None - - try: - await loop.sendfile(transport, fobj, offset, count) - except NotImplementedError: - return await self._sendfile_fallback(writer, fobj, offset, count) - - await super().write_eof() - return writer - - async def prepare(self, request: "BaseRequest") -> Optional[AbstractStreamWriter]: - filepath = self._path - - gzip = False - if "gzip" in request.headers.get(hdrs.ACCEPT_ENCODING, ""): - gzip_path = filepath.with_name(filepath.name + ".gz") - - if gzip_path.is_file(): - filepath = gzip_path - gzip = True - - loop = asyncio.get_event_loop() - st = await loop.run_in_executor(None, filepath.stat) - - modsince = request.if_modified_since - if modsince is not None and st.st_mtime <= modsince.timestamp(): - self.set_status(HTTPNotModified.status_code) - self._length_check = False - # Delete any Content-Length headers provided by user. HTTP 304 - # should always have empty response body - return await super().prepare(request) - - unmodsince = request.if_unmodified_since - if unmodsince is not None and st.st_mtime > unmodsince.timestamp(): - self.set_status(HTTPPreconditionFailed.status_code) - return await super().prepare(request) - - if hdrs.CONTENT_TYPE not in self.headers: - ct, encoding = mimetypes.guess_type(str(filepath)) - if not ct: - ct = "application/octet-stream" - should_set_ct = True - else: - encoding = "gzip" if gzip else None - should_set_ct = False - - status = self._status - file_size = st.st_size - count = file_size - - start = None - - ifrange = request.if_range - if ifrange is None or st.st_mtime <= ifrange.timestamp(): - # If-Range header check: - # condition = cached date >= last modification date - # return 206 if True else 200. - # if False: - # Range header would not be processed, return 200 - # if True but Range header missing - # return 200 - try: - rng = request.http_range - start = rng.start - end = rng.stop - except ValueError: - # https://tools.ietf.org/html/rfc7233: - # A server generating a 416 (Range Not Satisfiable) response to - # a byte-range request SHOULD send a Content-Range header field - # with an unsatisfied-range value. - # The complete-length in a 416 response indicates the current - # length of the selected representation. - # - # Will do the same below. Many servers ignore this and do not - # send a Content-Range header with HTTP 416 - self.headers[hdrs.CONTENT_RANGE] = f"bytes */{file_size}" - self.set_status(HTTPRequestRangeNotSatisfiable.status_code) - return await super().prepare(request) - - # If a range request has been made, convert start, end slice - # notation into file pointer offset and count - if start is not None or end is not None: - if start < 0 and end is None: # return tail of file - start += file_size - if start < 0: - # if Range:bytes=-1000 in request header but file size - # is only 200, there would be trouble without this - start = 0 - count = file_size - start - else: - # rfc7233:If the last-byte-pos value is - # absent, or if the value is greater than or equal to - # the current length of the representation data, - # the byte range is interpreted as the remainder - # of the representation (i.e., the server replaces the - # value of last-byte-pos with a value that is one less than - # the current length of the selected representation). - count = ( - min(end if end is not None else file_size, file_size) - start - ) - - if start >= file_size: - # HTTP 416 should be returned in this case. - # - # According to https://tools.ietf.org/html/rfc7233: - # If a valid byte-range-set includes at least one - # byte-range-spec with a first-byte-pos that is less than - # the current length of the representation, or at least one - # suffix-byte-range-spec with a non-zero suffix-length, - # then the byte-range-set is satisfiable. Otherwise, the - # byte-range-set is unsatisfiable. - self.headers[hdrs.CONTENT_RANGE] = f"bytes */{file_size}" - self.set_status(HTTPRequestRangeNotSatisfiable.status_code) - return await super().prepare(request) - - status = HTTPPartialContent.status_code - # Even though you are sending the whole file, you should still - # return a HTTP 206 for a Range request. - self.set_status(status) - - if should_set_ct: - self.content_type = ct # type: ignore - if encoding: - self.headers[hdrs.CONTENT_ENCODING] = encoding - if gzip: - self.headers[hdrs.VARY] = hdrs.ACCEPT_ENCODING - self.last_modified = st.st_mtime # type: ignore - self.content_length = count - - self.headers[hdrs.ACCEPT_RANGES] = "bytes" - - real_start = cast(int, start) - - if status == HTTPPartialContent.status_code: - self.headers[hdrs.CONTENT_RANGE] = "bytes {}-{}/{}".format( - real_start, real_start + count - 1, file_size - ) - - if request.method == hdrs.METH_HEAD or self.status in [204, 304]: - return await super().prepare(request) - - fobj = await loop.run_in_executor(None, filepath.open, "rb") - if start: # be aware that start could be None or int=0 here. - offset = start - else: - offset = 0 - - try: - return await self._sendfile(request, fobj, offset, count) - finally: - await loop.run_in_executor(None, fobj.close) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_log.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_log.py deleted file mode 100644 index 4cfa5792..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_log.py +++ /dev/null @@ -1,208 +0,0 @@ -import datetime -import functools -import logging -import os -import re -from collections import namedtuple -from typing import Any, Callable, Dict, Iterable, List, Tuple # noqa - -from .abc import AbstractAccessLogger -from .web_request import BaseRequest -from .web_response import StreamResponse - -KeyMethod = namedtuple("KeyMethod", "key method") - - -class AccessLogger(AbstractAccessLogger): - """Helper object to log access. - - Usage: - log = logging.getLogger("spam") - log_format = "%a %{User-Agent}i" - access_logger = AccessLogger(log, log_format) - access_logger.log(request, response, time) - - Format: - %% The percent sign - %a Remote IP-address (IP-address of proxy if using reverse proxy) - %t Time when the request was started to process - %P The process ID of the child that serviced the request - %r First line of request - %s Response status code - %b Size of response in bytes, including HTTP headers - %T Time taken to serve the request, in seconds - %Tf Time taken to serve the request, in seconds with floating fraction - in .06f format - %D Time taken to serve the request, in microseconds - %{FOO}i request.headers['FOO'] - %{FOO}o response.headers['FOO'] - %{FOO}e os.environ['FOO'] - - """ - - LOG_FORMAT_MAP = { - "a": "remote_address", - "t": "request_start_time", - "P": "process_id", - "r": "first_request_line", - "s": "response_status", - "b": "response_size", - "T": "request_time", - "Tf": "request_time_frac", - "D": "request_time_micro", - "i": "request_header", - "o": "response_header", - } - - LOG_FORMAT = '%a %t "%r" %s %b "%{Referer}i" "%{User-Agent}i"' - FORMAT_RE = re.compile(r"%(\{([A-Za-z0-9\-_]+)\}([ioe])|[atPrsbOD]|Tf?)") - CLEANUP_RE = re.compile(r"(%[^s])") - _FORMAT_CACHE = {} # type: Dict[str, Tuple[str, List[KeyMethod]]] - - def __init__(self, logger: logging.Logger, log_format: str = LOG_FORMAT) -> None: - """Initialise the logger. - - logger is a logger object to be used for logging. - log_format is a string with apache compatible log format description. - - """ - super().__init__(logger, log_format=log_format) - - _compiled_format = AccessLogger._FORMAT_CACHE.get(log_format) - if not _compiled_format: - _compiled_format = self.compile_format(log_format) - AccessLogger._FORMAT_CACHE[log_format] = _compiled_format - - self._log_format, self._methods = _compiled_format - - def compile_format(self, log_format: str) -> Tuple[str, List[KeyMethod]]: - """Translate log_format into form usable by modulo formatting - - All known atoms will be replaced with %s - Also methods for formatting of those atoms will be added to - _methods in appropriate order - - For example we have log_format = "%a %t" - This format will be translated to "%s %s" - Also contents of _methods will be - [self._format_a, self._format_t] - These method will be called and results will be passed - to translated string format. - - Each _format_* method receive 'args' which is list of arguments - given to self.log - - Exceptions are _format_e, _format_i and _format_o methods which - also receive key name (by functools.partial) - - """ - # list of (key, method) tuples, we don't use an OrderedDict as users - # can repeat the same key more than once - methods = list() - - for atom in self.FORMAT_RE.findall(log_format): - if atom[1] == "": - format_key1 = self.LOG_FORMAT_MAP[atom[0]] - m = getattr(AccessLogger, "_format_%s" % atom[0]) - key_method = KeyMethod(format_key1, m) - else: - format_key2 = (self.LOG_FORMAT_MAP[atom[2]], atom[1]) - m = getattr(AccessLogger, "_format_%s" % atom[2]) - key_method = KeyMethod(format_key2, functools.partial(m, atom[1])) - - methods.append(key_method) - - log_format = self.FORMAT_RE.sub(r"%s", log_format) - log_format = self.CLEANUP_RE.sub(r"%\1", log_format) - return log_format, methods - - @staticmethod - def _format_i( - key: str, request: BaseRequest, response: StreamResponse, time: float - ) -> str: - if request is None: - return "(no headers)" - - # suboptimal, make istr(key) once - return request.headers.get(key, "-") - - @staticmethod - def _format_o( - key: str, request: BaseRequest, response: StreamResponse, time: float - ) -> str: - # suboptimal, make istr(key) once - return response.headers.get(key, "-") - - @staticmethod - def _format_a(request: BaseRequest, response: StreamResponse, time: float) -> str: - if request is None: - return "-" - ip = request.remote - return ip if ip is not None else "-" - - @staticmethod - def _format_t(request: BaseRequest, response: StreamResponse, time: float) -> str: - now = datetime.datetime.utcnow() - start_time = now - datetime.timedelta(seconds=time) - return start_time.strftime("[%d/%b/%Y:%H:%M:%S +0000]") - - @staticmethod - def _format_P(request: BaseRequest, response: StreamResponse, time: float) -> str: - return "<%s>" % os.getpid() - - @staticmethod - def _format_r(request: BaseRequest, response: StreamResponse, time: float) -> str: - if request is None: - return "-" - return "{} {} HTTP/{}.{}".format( - request.method, - request.path_qs, - request.version.major, - request.version.minor, - ) - - @staticmethod - def _format_s(request: BaseRequest, response: StreamResponse, time: float) -> int: - return response.status - - @staticmethod - def _format_b(request: BaseRequest, response: StreamResponse, time: float) -> int: - return response.body_length - - @staticmethod - def _format_T(request: BaseRequest, response: StreamResponse, time: float) -> str: - return str(round(time)) - - @staticmethod - def _format_Tf(request: BaseRequest, response: StreamResponse, time: float) -> str: - return "%06f" % time - - @staticmethod - def _format_D(request: BaseRequest, response: StreamResponse, time: float) -> str: - return str(round(time * 1000000)) - - def _format_line( - self, request: BaseRequest, response: StreamResponse, time: float - ) -> Iterable[Tuple[str, Callable[[BaseRequest, StreamResponse, float], str]]]: - return [(key, method(request, response, time)) for key, method in self._methods] - - def log(self, request: BaseRequest, response: StreamResponse, time: float) -> None: - try: - fmt_info = self._format_line(request, response, time) - - values = list() - extra = dict() - for key, value in fmt_info: - values.append(value) - - if key.__class__ is str: - extra[key] = value - else: - k1, k2 = key # type: ignore - dct = extra.get(k1, {}) # type: ignore - dct[k2] = value # type: ignore - extra[k1] = dct # type: ignore - - self.logger.info(self._log_format % tuple(values), extra=extra) - except Exception: - self.logger.exception("Error in logging") diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_middlewares.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_middlewares.py deleted file mode 100644 index 8a8967e8..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_middlewares.py +++ /dev/null @@ -1,121 +0,0 @@ -import re -from typing import TYPE_CHECKING, Awaitable, Callable, Tuple, Type, TypeVar - -from .web_exceptions import HTTPPermanentRedirect, _HTTPMove -from .web_request import Request -from .web_response import StreamResponse -from .web_urldispatcher import SystemRoute - -__all__ = ( - "middleware", - "normalize_path_middleware", -) - -if TYPE_CHECKING: # pragma: no cover - from .web_app import Application - -_Func = TypeVar("_Func") - - -async def _check_request_resolves(request: Request, path: str) -> Tuple[bool, Request]: - alt_request = request.clone(rel_url=path) - - match_info = await request.app.router.resolve(alt_request) - alt_request._match_info = match_info # type: ignore - - if match_info.http_exception is None: - return True, alt_request - - return False, request - - -def middleware(f: _Func) -> _Func: - f.__middleware_version__ = 1 # type: ignore - return f - - -_Handler = Callable[[Request], Awaitable[StreamResponse]] -_Middleware = Callable[[Request, _Handler], Awaitable[StreamResponse]] - - -def normalize_path_middleware( - *, - append_slash: bool = True, - remove_slash: bool = False, - merge_slashes: bool = True, - redirect_class: Type[_HTTPMove] = HTTPPermanentRedirect -) -> _Middleware: - """ - Middleware factory which produces a middleware that normalizes - the path of a request. By normalizing it means: - - - Add or remove a trailing slash to the path. - - Double slashes are replaced by one. - - The middleware returns as soon as it finds a path that resolves - correctly. The order if both merge and append/remove are enabled is - 1) merge slashes - 2) append/remove slash - 3) both merge slashes and append/remove slash. - If the path resolves with at least one of those conditions, it will - redirect to the new path. - - Only one of `append_slash` and `remove_slash` can be enabled. If both - are `True` the factory will raise an assertion error - - If `append_slash` is `True` the middleware will append a slash when - needed. If a resource is defined with trailing slash and the request - comes without it, it will append it automatically. - - If `remove_slash` is `True`, `append_slash` must be `False`. When enabled - the middleware will remove trailing slashes and redirect if the resource - is defined - - If merge_slashes is True, merge multiple consecutive slashes in the - path into one. - """ - - correct_configuration = not (append_slash and remove_slash) - assert correct_configuration, "Cannot both remove and append slash" - - @middleware - async def impl(request: Request, handler: _Handler) -> StreamResponse: - if isinstance(request.match_info.route, SystemRoute): - paths_to_check = [] - if "?" in request.raw_path: - path, query = request.raw_path.split("?", 1) - query = "?" + query - else: - query = "" - path = request.raw_path - - if merge_slashes: - paths_to_check.append(re.sub("//+", "/", path)) - if append_slash and not request.path.endswith("/"): - paths_to_check.append(path + "/") - if remove_slash and request.path.endswith("/"): - paths_to_check.append(path[:-1]) - if merge_slashes and append_slash: - paths_to_check.append(re.sub("//+", "/", path + "/")) - if merge_slashes and remove_slash: - merged_slashes = re.sub("//+", "/", path) - paths_to_check.append(merged_slashes[:-1]) - - for path in paths_to_check: - path = re.sub("^//+", "/", path) # SECURITY: GHSA-v6wp-4m6f-gcjg - resolves, request = await _check_request_resolves(request, path) - if resolves: - raise redirect_class(request.raw_path + query) - - return await handler(request) - - return impl - - -def _fix_request_current_app(app: "Application") -> _Middleware: - @middleware - async def impl(request: Request, handler: _Handler) -> StreamResponse: - with request.match_info.set_current_app(app): - return await handler(request) - - return impl diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_protocol.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_protocol.py deleted file mode 100644 index 8e02bc4a..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_protocol.py +++ /dev/null @@ -1,667 +0,0 @@ -import asyncio -import asyncio.streams -import traceback -import warnings -from collections import deque -from contextlib import suppress -from html import escape as html_escape -from http import HTTPStatus -from logging import Logger -from typing import TYPE_CHECKING, Any, Awaitable, Callable, Optional, Tuple, Type, cast - -import yarl - -from .abc import AbstractAccessLogger, AbstractStreamWriter -from .base_protocol import BaseProtocol -from .helpers import CeilTimeout, current_task -from .http import ( - HttpProcessingError, - HttpRequestParser, - HttpVersion10, - RawRequestMessage, - StreamWriter, -) -from .log import access_logger, server_logger -from .streams import EMPTY_PAYLOAD, StreamReader -from .tcp_helpers import tcp_keepalive -from .web_exceptions import HTTPException -from .web_log import AccessLogger -from .web_request import BaseRequest -from .web_response import Response, StreamResponse - -__all__ = ("RequestHandler", "RequestPayloadError", "PayloadAccessError") - -if TYPE_CHECKING: # pragma: no cover - from .web_server import Server - - -_RequestFactory = Callable[ - [ - RawRequestMessage, - StreamReader, - "RequestHandler", - AbstractStreamWriter, - "asyncio.Task[None]", - ], - BaseRequest, -] - -_RequestHandler = Callable[[BaseRequest], Awaitable[StreamResponse]] - - -ERROR = RawRequestMessage( - "UNKNOWN", "/", HttpVersion10, {}, {}, True, False, False, False, yarl.URL("/") -) - - -class RequestPayloadError(Exception): - """Payload parsing error.""" - - -class PayloadAccessError(Exception): - """Payload was accessed after response was sent.""" - - -class RequestHandler(BaseProtocol): - """HTTP protocol implementation. - - RequestHandler handles incoming HTTP request. It reads request line, - request headers and request payload and calls handle_request() method. - By default it always returns with 404 response. - - RequestHandler handles errors in incoming request, like bad - status line, bad headers or incomplete payload. If any error occurs, - connection gets closed. - - :param keepalive_timeout: number of seconds before closing - keep-alive connection - :type keepalive_timeout: int or None - - :param bool tcp_keepalive: TCP keep-alive is on, default is on - - :param bool debug: enable debug mode - - :param logger: custom logger object - :type logger: aiohttp.log.server_logger - - :param access_log_class: custom class for access_logger - :type access_log_class: aiohttp.abc.AbstractAccessLogger - - :param access_log: custom logging object - :type access_log: aiohttp.log.server_logger - - :param str access_log_format: access log format string - - :param loop: Optional event loop - - :param int max_line_size: Optional maximum header line size - - :param int max_field_size: Optional maximum header field size - - :param int max_headers: Optional maximum header size - - """ - - KEEPALIVE_RESCHEDULE_DELAY = 1 - - __slots__ = ( - "_request_count", - "_keepalive", - "_manager", - "_request_handler", - "_request_factory", - "_tcp_keepalive", - "_keepalive_time", - "_keepalive_handle", - "_keepalive_timeout", - "_lingering_time", - "_messages", - "_message_tail", - "_waiter", - "_error_handler", - "_task_handler", - "_upgrade", - "_payload_parser", - "_request_parser", - "_reading_paused", - "logger", - "debug", - "access_log", - "access_logger", - "_close", - "_force_close", - "_current_request", - ) - - def __init__( - self, - manager: "Server", - *, - loop: asyncio.AbstractEventLoop, - keepalive_timeout: float = 75.0, # NGINX default is 75 secs - tcp_keepalive: bool = True, - logger: Logger = server_logger, - access_log_class: Type[AbstractAccessLogger] = AccessLogger, - access_log: Logger = access_logger, - access_log_format: str = AccessLogger.LOG_FORMAT, - debug: bool = False, - max_line_size: int = 8190, - max_headers: int = 32768, - max_field_size: int = 8190, - lingering_time: float = 10.0, - read_bufsize: int = 2 ** 16, - ): - - super().__init__(loop) - - self._request_count = 0 - self._keepalive = False - self._current_request = None # type: Optional[BaseRequest] - self._manager = manager # type: Optional[Server] - self._request_handler = ( - manager.request_handler - ) # type: Optional[_RequestHandler] - self._request_factory = ( - manager.request_factory - ) # type: Optional[_RequestFactory] - - self._tcp_keepalive = tcp_keepalive - # placeholder to be replaced on keepalive timeout setup - self._keepalive_time = 0.0 - self._keepalive_handle = None # type: Optional[asyncio.Handle] - self._keepalive_timeout = keepalive_timeout - self._lingering_time = float(lingering_time) - - self._messages = deque() # type: Any # Python 3.5 has no typing.Deque - self._message_tail = b"" - - self._waiter = None # type: Optional[asyncio.Future[None]] - self._error_handler = None # type: Optional[asyncio.Task[None]] - self._task_handler = None # type: Optional[asyncio.Task[None]] - - self._upgrade = False - self._payload_parser = None # type: Any - self._request_parser = HttpRequestParser( - self, - loop, - read_bufsize, - max_line_size=max_line_size, - max_field_size=max_field_size, - max_headers=max_headers, - payload_exception=RequestPayloadError, - ) # type: Optional[HttpRequestParser] - - self.logger = logger - self.debug = debug - self.access_log = access_log - if access_log: - self.access_logger = access_log_class( - access_log, access_log_format - ) # type: Optional[AbstractAccessLogger] - else: - self.access_logger = None - - self._close = False - self._force_close = False - - def __repr__(self) -> str: - return "<{} {}>".format( - self.__class__.__name__, - "connected" if self.transport is not None else "disconnected", - ) - - @property - def keepalive_timeout(self) -> float: - return self._keepalive_timeout - - async def shutdown(self, timeout: Optional[float] = 15.0) -> None: - """Worker process is about to exit, we need cleanup everything and - stop accepting requests. It is especially important for keep-alive - connections.""" - self._force_close = True - - if self._keepalive_handle is not None: - self._keepalive_handle.cancel() - - if self._waiter: - self._waiter.cancel() - - # wait for handlers - with suppress(asyncio.CancelledError, asyncio.TimeoutError): - with CeilTimeout(timeout, loop=self._loop): - if self._error_handler is not None and not self._error_handler.done(): - await self._error_handler - - if self._current_request is not None: - self._current_request._cancel(asyncio.CancelledError()) - - if self._task_handler is not None and not self._task_handler.done(): - await self._task_handler - - # force-close non-idle handler - if self._task_handler is not None: - self._task_handler.cancel() - - if self.transport is not None: - self.transport.close() - self.transport = None - - def connection_made(self, transport: asyncio.BaseTransport) -> None: - super().connection_made(transport) - - real_transport = cast(asyncio.Transport, transport) - if self._tcp_keepalive: - tcp_keepalive(real_transport) - - self._task_handler = self._loop.create_task(self.start()) - assert self._manager is not None - self._manager.connection_made(self, real_transport) - - def connection_lost(self, exc: Optional[BaseException]) -> None: - if self._manager is None: - return - self._manager.connection_lost(self, exc) - - super().connection_lost(exc) - - self._manager = None - self._force_close = True - self._request_factory = None - self._request_handler = None - self._request_parser = None - - if self._keepalive_handle is not None: - self._keepalive_handle.cancel() - - if self._current_request is not None: - if exc is None: - exc = ConnectionResetError("Connection lost") - self._current_request._cancel(exc) - - if self._error_handler is not None: - self._error_handler.cancel() - if self._task_handler is not None: - self._task_handler.cancel() - if self._waiter is not None: - self._waiter.cancel() - - self._task_handler = None - - if self._payload_parser is not None: - self._payload_parser.feed_eof() - self._payload_parser = None - - def set_parser(self, parser: Any) -> None: - # Actual type is WebReader - assert self._payload_parser is None - - self._payload_parser = parser - - if self._message_tail: - self._payload_parser.feed_data(self._message_tail) - self._message_tail = b"" - - def eof_received(self) -> None: - pass - - def data_received(self, data: bytes) -> None: - if self._force_close or self._close: - return - # parse http messages - if self._payload_parser is None and not self._upgrade: - assert self._request_parser is not None - try: - messages, upgraded, tail = self._request_parser.feed_data(data) - except HttpProcessingError as exc: - # something happened during parsing - self._error_handler = self._loop.create_task( - self.handle_parse_error( - StreamWriter(self, self._loop), 400, exc, exc.message - ) - ) - self.close() - except Exception as exc: - # 500: internal error - self._error_handler = self._loop.create_task( - self.handle_parse_error(StreamWriter(self, self._loop), 500, exc) - ) - self.close() - else: - if messages: - # sometimes the parser returns no messages - for (msg, payload) in messages: - self._request_count += 1 - self._messages.append((msg, payload)) - - waiter = self._waiter - if waiter is not None: - if not waiter.done(): - # don't set result twice - waiter.set_result(None) - - self._upgrade = upgraded - if upgraded and tail: - self._message_tail = tail - - # no parser, just store - elif self._payload_parser is None and self._upgrade and data: - self._message_tail += data - - # feed payload - elif data: - eof, tail = self._payload_parser.feed_data(data) - if eof: - self.close() - - def keep_alive(self, val: bool) -> None: - """Set keep-alive connection mode. - - :param bool val: new state. - """ - self._keepalive = val - if self._keepalive_handle: - self._keepalive_handle.cancel() - self._keepalive_handle = None - - def close(self) -> None: - """Stop accepting new pipelinig messages and close - connection when handlers done processing messages""" - self._close = True - if self._waiter: - self._waiter.cancel() - - def force_close(self) -> None: - """Force close connection""" - self._force_close = True - if self._waiter: - self._waiter.cancel() - if self.transport is not None: - self.transport.close() - self.transport = None - - def log_access( - self, request: BaseRequest, response: StreamResponse, time: float - ) -> None: - if self.access_logger is not None: - self.access_logger.log(request, response, self._loop.time() - time) - - def log_debug(self, *args: Any, **kw: Any) -> None: - if self.debug: - self.logger.debug(*args, **kw) - - def log_exception(self, *args: Any, **kw: Any) -> None: - self.logger.exception(*args, **kw) - - def _process_keepalive(self) -> None: - if self._force_close or not self._keepalive: - return - - next = self._keepalive_time + self._keepalive_timeout - - # handler in idle state - if self._waiter: - if self._loop.time() > next: - self.force_close() - return - - # not all request handlers are done, - # reschedule itself to next second - self._keepalive_handle = self._loop.call_later( - self.KEEPALIVE_RESCHEDULE_DELAY, self._process_keepalive - ) - - async def _handle_request( - self, - request: BaseRequest, - start_time: float, - ) -> Tuple[StreamResponse, bool]: - assert self._request_handler is not None - try: - try: - self._current_request = request - resp = await self._request_handler(request) - finally: - self._current_request = None - except HTTPException as exc: - resp = Response( - status=exc.status, reason=exc.reason, text=exc.text, headers=exc.headers - ) - reset = await self.finish_response(request, resp, start_time) - except asyncio.CancelledError: - raise - except asyncio.TimeoutError as exc: - self.log_debug("Request handler timed out.", exc_info=exc) - resp = self.handle_error(request, 504) - reset = await self.finish_response(request, resp, start_time) - except Exception as exc: - resp = self.handle_error(request, 500, exc) - reset = await self.finish_response(request, resp, start_time) - else: - reset = await self.finish_response(request, resp, start_time) - - return resp, reset - - async def start(self) -> None: - """Process incoming request. - - It reads request line, request headers and request payload, then - calls handle_request() method. Subclass has to override - handle_request(). start() handles various exceptions in request - or response handling. Connection is being closed always unless - keep_alive(True) specified. - """ - loop = self._loop - handler = self._task_handler - assert handler is not None - manager = self._manager - assert manager is not None - keepalive_timeout = self._keepalive_timeout - resp = None - assert self._request_factory is not None - assert self._request_handler is not None - - while not self._force_close: - if not self._messages: - try: - # wait for next request - self._waiter = loop.create_future() - await self._waiter - except asyncio.CancelledError: - break - finally: - self._waiter = None - - message, payload = self._messages.popleft() - - start = loop.time() - - manager.requests_count += 1 - writer = StreamWriter(self, loop) - request = self._request_factory(message, payload, self, writer, handler) - try: - # a new task is used for copy context vars (#3406) - task = self._loop.create_task(self._handle_request(request, start)) - try: - resp, reset = await task - except (asyncio.CancelledError, ConnectionError): - self.log_debug("Ignored premature client disconnection") - break - # Deprecation warning (See #2415) - if getattr(resp, "__http_exception__", False): - warnings.warn( - "returning HTTPException object is deprecated " - "(#2415) and will be removed, " - "please raise the exception instead", - DeprecationWarning, - ) - - # Drop the processed task from asyncio.Task.all_tasks() early - del task - if reset: - self.log_debug("Ignored premature client disconnection 2") - break - - # notify server about keep-alive - self._keepalive = bool(resp.keep_alive) - - # check payload - if not payload.is_eof(): - lingering_time = self._lingering_time - if not self._force_close and lingering_time: - self.log_debug( - "Start lingering close timer for %s sec.", lingering_time - ) - - now = loop.time() - end_t = now + lingering_time - - with suppress(asyncio.TimeoutError, asyncio.CancelledError): - while not payload.is_eof() and now < end_t: - with CeilTimeout(end_t - now, loop=loop): - # read and ignore - await payload.readany() - now = loop.time() - - # if payload still uncompleted - if not payload.is_eof() and not self._force_close: - self.log_debug("Uncompleted request.") - self.close() - - payload.set_exception(PayloadAccessError()) - - except asyncio.CancelledError: - self.log_debug("Ignored premature client disconnection ") - break - except RuntimeError as exc: - if self.debug: - self.log_exception("Unhandled runtime exception", exc_info=exc) - self.force_close() - except Exception as exc: - self.log_exception("Unhandled exception", exc_info=exc) - self.force_close() - finally: - if self.transport is None and resp is not None: - self.log_debug("Ignored premature client disconnection.") - elif not self._force_close: - if self._keepalive and not self._close: - # start keep-alive timer - if keepalive_timeout is not None: - now = self._loop.time() - self._keepalive_time = now - if self._keepalive_handle is None: - self._keepalive_handle = loop.call_at( - now + keepalive_timeout, self._process_keepalive - ) - else: - break - - # remove handler, close transport if no handlers left - if not self._force_close: - self._task_handler = None - if self.transport is not None and self._error_handler is None: - self.transport.close() - - async def finish_response( - self, request: BaseRequest, resp: StreamResponse, start_time: float - ) -> bool: - """ - Prepare the response and write_eof, then log access. This has to - be called within the context of any exception so the access logger - can get exception information. Returns True if the client disconnects - prematurely. - """ - if self._request_parser is not None: - self._request_parser.set_upgraded(False) - self._upgrade = False - if self._message_tail: - self._request_parser.feed_data(self._message_tail) - self._message_tail = b"" - try: - prepare_meth = resp.prepare - except AttributeError: - if resp is None: - raise RuntimeError("Missing return " "statement on request handler") - else: - raise RuntimeError( - "Web-handler should return " - "a response instance, " - "got {!r}".format(resp) - ) - try: - await prepare_meth(request) - await resp.write_eof() - except ConnectionError: - self.log_access(request, resp, start_time) - return True - else: - self.log_access(request, resp, start_time) - return False - - def handle_error( - self, - request: BaseRequest, - status: int = 500, - exc: Optional[BaseException] = None, - message: Optional[str] = None, - ) -> StreamResponse: - """Handle errors. - - Returns HTTP response with specific status code. Logs additional - information. It always closes current connection.""" - self.log_exception("Error handling request", exc_info=exc) - - ct = "text/plain" - if status == HTTPStatus.INTERNAL_SERVER_ERROR: - title = "{0.value} {0.phrase}".format(HTTPStatus.INTERNAL_SERVER_ERROR) - msg = HTTPStatus.INTERNAL_SERVER_ERROR.description - tb = None - if self.debug: - with suppress(Exception): - tb = traceback.format_exc() - - if "text/html" in request.headers.get("Accept", ""): - if tb: - tb = html_escape(tb) - msg = f"

Traceback:

\n
{tb}
" - message = ( - "" - "{title}" - "\n

{title}

" - "\n{msg}\n\n" - ).format(title=title, msg=msg) - ct = "text/html" - else: - if tb: - msg = tb - message = title + "\n\n" + msg - - resp = Response(status=status, text=message, content_type=ct) - resp.force_close() - - # some data already got sent, connection is broken - if request.writer.output_size > 0 or self.transport is None: - self.force_close() - - return resp - - async def handle_parse_error( - self, - writer: AbstractStreamWriter, - status: int, - exc: Optional[BaseException] = None, - message: Optional[str] = None, - ) -> None: - task = current_task() - assert task is not None - request = BaseRequest( - ERROR, EMPTY_PAYLOAD, self, writer, task, self._loop # type: ignore - ) - - resp = self.handle_error(request, status, exc, message) - await resp.prepare(request) - await resp.write_eof() - - if self.transport is not None: - self.transport.close() - - self._error_handler = None diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_request.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_request.py deleted file mode 100644 index f11e7be4..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_request.py +++ /dev/null @@ -1,824 +0,0 @@ -import asyncio -import datetime -import io -import re -import socket -import string -import tempfile -import types -import warnings -from email.utils import parsedate -from http.cookies import SimpleCookie -from types import MappingProxyType -from typing import ( - TYPE_CHECKING, - Any, - Dict, - Iterator, - Mapping, - MutableMapping, - Optional, - Tuple, - Union, - cast, -) -from urllib.parse import parse_qsl - -import attr -from multidict import CIMultiDict, CIMultiDictProxy, MultiDict, MultiDictProxy -from yarl import URL - -from . import hdrs -from .abc import AbstractStreamWriter -from .helpers import DEBUG, ChainMapProxy, HeadersMixin, reify, sentinel -from .http_parser import RawRequestMessage -from .http_writer import HttpVersion -from .multipart import BodyPartReader, MultipartReader -from .streams import EmptyStreamReader, StreamReader -from .typedefs import ( - DEFAULT_JSON_DECODER, - JSONDecoder, - LooseHeaders, - RawHeaders, - StrOrURL, -) -from .web_exceptions import HTTPRequestEntityTooLarge -from .web_response import StreamResponse - -__all__ = ("BaseRequest", "FileField", "Request") - - -if TYPE_CHECKING: # pragma: no cover - from .web_app import Application - from .web_protocol import RequestHandler - from .web_urldispatcher import UrlMappingMatchInfo - - -@attr.s(auto_attribs=True, frozen=True, slots=True) -class FileField: - name: str - filename: str - file: io.BufferedReader - content_type: str - headers: "CIMultiDictProxy[str]" - - -_TCHAR = string.digits + string.ascii_letters + r"!#$%&'*+.^_`|~-" -# '-' at the end to prevent interpretation as range in a char class - -_TOKEN = fr"[{_TCHAR}]+" - -_QDTEXT = r"[{}]".format( - r"".join(chr(c) for c in (0x09, 0x20, 0x21) + tuple(range(0x23, 0x7F))) -) -# qdtext includes 0x5C to escape 0x5D ('\]') -# qdtext excludes obs-text (because obsoleted, and encoding not specified) - -_QUOTED_PAIR = r"\\[\t !-~]" - -_QUOTED_STRING = r'"(?:{quoted_pair}|{qdtext})*"'.format( - qdtext=_QDTEXT, quoted_pair=_QUOTED_PAIR -) - -_FORWARDED_PAIR = r"({token})=({token}|{quoted_string})(:\d{{1,4}})?".format( - token=_TOKEN, quoted_string=_QUOTED_STRING -) - -_QUOTED_PAIR_REPLACE_RE = re.compile(r"\\([\t !-~])") -# same pattern as _QUOTED_PAIR but contains a capture group - -_FORWARDED_PAIR_RE = re.compile(_FORWARDED_PAIR) - -############################################################ -# HTTP Request -############################################################ - - -class BaseRequest(MutableMapping[str, Any], HeadersMixin): - - POST_METHODS = { - hdrs.METH_PATCH, - hdrs.METH_POST, - hdrs.METH_PUT, - hdrs.METH_TRACE, - hdrs.METH_DELETE, - } - - ATTRS = HeadersMixin.ATTRS | frozenset( - [ - "_message", - "_protocol", - "_payload_writer", - "_payload", - "_headers", - "_method", - "_version", - "_rel_url", - "_post", - "_read_bytes", - "_state", - "_cache", - "_task", - "_client_max_size", - "_loop", - "_transport_sslcontext", - "_transport_peername", - ] - ) - - def __init__( - self, - message: RawRequestMessage, - payload: StreamReader, - protocol: "RequestHandler", - payload_writer: AbstractStreamWriter, - task: "asyncio.Task[None]", - loop: asyncio.AbstractEventLoop, - *, - client_max_size: int = 1024 ** 2, - state: Optional[Dict[str, Any]] = None, - scheme: Optional[str] = None, - host: Optional[str] = None, - remote: Optional[str] = None, - ) -> None: - if state is None: - state = {} - self._message = message - self._protocol = protocol - self._payload_writer = payload_writer - - self._payload = payload - self._headers = message.headers - self._method = message.method - self._version = message.version - self._rel_url = message.url - self._post = ( - None - ) # type: Optional[MultiDictProxy[Union[str, bytes, FileField]]] - self._read_bytes = None # type: Optional[bytes] - - self._state = state - self._cache = {} # type: Dict[str, Any] - self._task = task - self._client_max_size = client_max_size - self._loop = loop - - transport = self._protocol.transport - assert transport is not None - self._transport_sslcontext = transport.get_extra_info("sslcontext") - self._transport_peername = transport.get_extra_info("peername") - - if scheme is not None: - self._cache["scheme"] = scheme - if host is not None: - self._cache["host"] = host - if remote is not None: - self._cache["remote"] = remote - - def clone( - self, - *, - method: str = sentinel, - rel_url: StrOrURL = sentinel, - headers: LooseHeaders = sentinel, - scheme: str = sentinel, - host: str = sentinel, - remote: str = sentinel, - ) -> "BaseRequest": - """Clone itself with replacement some attributes. - - Creates and returns a new instance of Request object. If no parameters - are given, an exact copy is returned. If a parameter is not passed, it - will reuse the one from the current request object. - - """ - - if self._read_bytes: - raise RuntimeError("Cannot clone request " "after reading its content") - - dct = {} # type: Dict[str, Any] - if method is not sentinel: - dct["method"] = method - if rel_url is not sentinel: - new_url = URL(rel_url) - dct["url"] = new_url - dct["path"] = str(new_url) - if headers is not sentinel: - # a copy semantic - dct["headers"] = CIMultiDictProxy(CIMultiDict(headers)) - dct["raw_headers"] = tuple( - (k.encode("utf-8"), v.encode("utf-8")) for k, v in headers.items() - ) - - message = self._message._replace(**dct) - - kwargs = {} - if scheme is not sentinel: - kwargs["scheme"] = scheme - if host is not sentinel: - kwargs["host"] = host - if remote is not sentinel: - kwargs["remote"] = remote - - return self.__class__( - message, - self._payload, - self._protocol, - self._payload_writer, - self._task, - self._loop, - client_max_size=self._client_max_size, - state=self._state.copy(), - **kwargs, - ) - - @property - def task(self) -> "asyncio.Task[None]": - return self._task - - @property - def protocol(self) -> "RequestHandler": - return self._protocol - - @property - def transport(self) -> Optional[asyncio.Transport]: - if self._protocol is None: - return None - return self._protocol.transport - - @property - def writer(self) -> AbstractStreamWriter: - return self._payload_writer - - @reify - def message(self) -> RawRequestMessage: - warnings.warn("Request.message is deprecated", DeprecationWarning, stacklevel=3) - return self._message - - @reify - def rel_url(self) -> URL: - return self._rel_url - - @reify - def loop(self) -> asyncio.AbstractEventLoop: - warnings.warn( - "request.loop property is deprecated", DeprecationWarning, stacklevel=2 - ) - return self._loop - - # MutableMapping API - - def __getitem__(self, key: str) -> Any: - return self._state[key] - - def __setitem__(self, key: str, value: Any) -> None: - self._state[key] = value - - def __delitem__(self, key: str) -> None: - del self._state[key] - - def __len__(self) -> int: - return len(self._state) - - def __iter__(self) -> Iterator[str]: - return iter(self._state) - - ######## - - @reify - def secure(self) -> bool: - """A bool indicating if the request is handled with SSL.""" - return self.scheme == "https" - - @reify - def forwarded(self) -> Tuple[Mapping[str, str], ...]: - """A tuple containing all parsed Forwarded header(s). - - Makes an effort to parse Forwarded headers as specified by RFC 7239: - - - It adds one (immutable) dictionary per Forwarded 'field-value', ie - per proxy. The element corresponds to the data in the Forwarded - field-value added by the first proxy encountered by the client. Each - subsequent item corresponds to those added by later proxies. - - It checks that every value has valid syntax in general as specified - in section 4: either a 'token' or a 'quoted-string'. - - It un-escapes found escape sequences. - - It does NOT validate 'by' and 'for' contents as specified in section - 6. - - It does NOT validate 'host' contents (Host ABNF). - - It does NOT validate 'proto' contents for valid URI scheme names. - - Returns a tuple containing one or more immutable dicts - """ - elems = [] - for field_value in self._message.headers.getall(hdrs.FORWARDED, ()): - length = len(field_value) - pos = 0 - need_separator = False - elem = {} # type: Dict[str, str] - elems.append(types.MappingProxyType(elem)) - while 0 <= pos < length: - match = _FORWARDED_PAIR_RE.match(field_value, pos) - if match is not None: # got a valid forwarded-pair - if need_separator: - # bad syntax here, skip to next comma - pos = field_value.find(",", pos) - else: - name, value, port = match.groups() - if value[0] == '"': - # quoted string: remove quotes and unescape - value = _QUOTED_PAIR_REPLACE_RE.sub(r"\1", value[1:-1]) - if port: - value += port - elem[name.lower()] = value - pos += len(match.group(0)) - need_separator = True - elif field_value[pos] == ",": # next forwarded-element - need_separator = False - elem = {} - elems.append(types.MappingProxyType(elem)) - pos += 1 - elif field_value[pos] == ";": # next forwarded-pair - need_separator = False - pos += 1 - elif field_value[pos] in " \t": - # Allow whitespace even between forwarded-pairs, though - # RFC 7239 doesn't. This simplifies code and is in line - # with Postel's law. - pos += 1 - else: - # bad syntax here, skip to next comma - pos = field_value.find(",", pos) - return tuple(elems) - - @reify - def scheme(self) -> str: - """A string representing the scheme of the request. - - Hostname is resolved in this order: - - - overridden value by .clone(scheme=new_scheme) call. - - type of connection to peer: HTTPS if socket is SSL, HTTP otherwise. - - 'http' or 'https'. - """ - if self._transport_sslcontext: - return "https" - else: - return "http" - - @reify - def method(self) -> str: - """Read only property for getting HTTP method. - - The value is upper-cased str like 'GET', 'POST', 'PUT' etc. - """ - return self._method - - @reify - def version(self) -> HttpVersion: - """Read only property for getting HTTP version of request. - - Returns aiohttp.protocol.HttpVersion instance. - """ - return self._version - - @reify - def host(self) -> str: - """Hostname of the request. - - Hostname is resolved in this order: - - - overridden value by .clone(host=new_host) call. - - HOST HTTP header - - socket.getfqdn() value - """ - host = self._message.headers.get(hdrs.HOST) - if host is not None: - return host - else: - return socket.getfqdn() - - @reify - def remote(self) -> Optional[str]: - """Remote IP of client initiated HTTP request. - - The IP is resolved in this order: - - - overridden value by .clone(remote=new_remote) call. - - peername of opened socket - """ - if isinstance(self._transport_peername, (list, tuple)): - return self._transport_peername[0] - else: - return self._transport_peername - - @reify - def url(self) -> URL: - url = URL.build(scheme=self.scheme, host=self.host) - return url.join(self._rel_url) - - @reify - def path(self) -> str: - """The URL including *PATH INFO* without the host or scheme. - - E.g., ``/app/blog`` - """ - return self._rel_url.path - - @reify - def path_qs(self) -> str: - """The URL including PATH_INFO and the query string. - - E.g, /app/blog?id=10 - """ - return str(self._rel_url) - - @reify - def raw_path(self) -> str: - """The URL including raw *PATH INFO* without the host or scheme. - Warning, the path is unquoted and may contains non valid URL characters - - E.g., ``/my%2Fpath%7Cwith%21some%25strange%24characters`` - """ - return self._message.path - - @reify - def query(self) -> "MultiDictProxy[str]": - """A multidict with all the variables in the query string.""" - return self._rel_url.query - - @reify - def query_string(self) -> str: - """The query string in the URL. - - E.g., id=10 - """ - return self._rel_url.query_string - - @reify - def headers(self) -> "CIMultiDictProxy[str]": - """A case-insensitive multidict proxy with all headers.""" - return self._headers - - @reify - def raw_headers(self) -> RawHeaders: - """A sequence of pairs for all headers.""" - return self._message.raw_headers - - @staticmethod - def _http_date(_date_str: Optional[str]) -> Optional[datetime.datetime]: - """Process a date string, return a datetime object""" - if _date_str is not None: - timetuple = parsedate(_date_str) - if timetuple is not None: - return datetime.datetime(*timetuple[:6], tzinfo=datetime.timezone.utc) - return None - - @reify - def if_modified_since(self) -> Optional[datetime.datetime]: - """The value of If-Modified-Since HTTP header, or None. - - This header is represented as a `datetime` object. - """ - return self._http_date(self.headers.get(hdrs.IF_MODIFIED_SINCE)) - - @reify - def if_unmodified_since(self) -> Optional[datetime.datetime]: - """The value of If-Unmodified-Since HTTP header, or None. - - This header is represented as a `datetime` object. - """ - return self._http_date(self.headers.get(hdrs.IF_UNMODIFIED_SINCE)) - - @reify - def if_range(self) -> Optional[datetime.datetime]: - """The value of If-Range HTTP header, or None. - - This header is represented as a `datetime` object. - """ - return self._http_date(self.headers.get(hdrs.IF_RANGE)) - - @reify - def keep_alive(self) -> bool: - """Is keepalive enabled by client?""" - return not self._message.should_close - - @reify - def cookies(self) -> Mapping[str, str]: - """Return request cookies. - - A read-only dictionary-like object. - """ - raw = self.headers.get(hdrs.COOKIE, "") - parsed = SimpleCookie(raw) # type: SimpleCookie[str] - return MappingProxyType({key: val.value for key, val in parsed.items()}) - - @reify - def http_range(self) -> slice: - """The content of Range HTTP header. - - Return a slice instance. - - """ - rng = self._headers.get(hdrs.RANGE) - start, end = None, None - if rng is not None: - try: - pattern = r"^bytes=(\d*)-(\d*)$" - start, end = re.findall(pattern, rng)[0] - except IndexError: # pattern was not found in header - raise ValueError("range not in acceptable format") - - end = int(end) if end else None - start = int(start) if start else None - - if start is None and end is not None: - # end with no start is to return tail of content - start = -end - end = None - - if start is not None and end is not None: - # end is inclusive in range header, exclusive for slice - end += 1 - - if start >= end: - raise ValueError("start cannot be after end") - - if start is end is None: # No valid range supplied - raise ValueError("No start or end of range specified") - - return slice(start, end, 1) - - @reify - def content(self) -> StreamReader: - """Return raw payload stream.""" - return self._payload - - @property - def has_body(self) -> bool: - """Return True if request's HTTP BODY can be read, False otherwise.""" - warnings.warn( - "Deprecated, use .can_read_body #2005", DeprecationWarning, stacklevel=2 - ) - return not self._payload.at_eof() - - @property - def can_read_body(self) -> bool: - """Return True if request's HTTP BODY can be read, False otherwise.""" - return not self._payload.at_eof() - - @reify - def body_exists(self) -> bool: - """Return True if request has HTTP BODY, False otherwise.""" - return type(self._payload) is not EmptyStreamReader - - async def release(self) -> None: - """Release request. - - Eat unread part of HTTP BODY if present. - """ - while not self._payload.at_eof(): - await self._payload.readany() - - async def read(self) -> bytes: - """Read request body if present. - - Returns bytes object with full request content. - """ - if self._read_bytes is None: - body = bytearray() - while True: - chunk = await self._payload.readany() - body.extend(chunk) - if self._client_max_size: - body_size = len(body) - if body_size >= self._client_max_size: - raise HTTPRequestEntityTooLarge( - max_size=self._client_max_size, actual_size=body_size - ) - if not chunk: - break - self._read_bytes = bytes(body) - return self._read_bytes - - async def text(self) -> str: - """Return BODY as text using encoding from .charset.""" - bytes_body = await self.read() - encoding = self.charset or "utf-8" - return bytes_body.decode(encoding) - - async def json(self, *, loads: JSONDecoder = DEFAULT_JSON_DECODER) -> Any: - """Return BODY as JSON.""" - body = await self.text() - return loads(body) - - async def multipart(self) -> MultipartReader: - """Return async iterator to process BODY as multipart.""" - return MultipartReader(self._headers, self._payload) - - async def post(self) -> "MultiDictProxy[Union[str, bytes, FileField]]": - """Return POST parameters.""" - if self._post is not None: - return self._post - if self._method not in self.POST_METHODS: - self._post = MultiDictProxy(MultiDict()) - return self._post - - content_type = self.content_type - if content_type not in ( - "", - "application/x-www-form-urlencoded", - "multipart/form-data", - ): - self._post = MultiDictProxy(MultiDict()) - return self._post - - out = MultiDict() # type: MultiDict[Union[str, bytes, FileField]] - - if content_type == "multipart/form-data": - multipart = await self.multipart() - max_size = self._client_max_size - - field = await multipart.next() - while field is not None: - size = 0 - field_ct = field.headers.get(hdrs.CONTENT_TYPE) - - if isinstance(field, BodyPartReader): - assert field.name is not None - - # Note that according to RFC 7578, the Content-Type header - # is optional, even for files, so we can't assume it's - # present. - # https://tools.ietf.org/html/rfc7578#section-4.4 - if field.filename: - # store file in temp file - tmp = tempfile.TemporaryFile() - chunk = await field.read_chunk(size=2 ** 16) - while chunk: - chunk = field.decode(chunk) - tmp.write(chunk) - size += len(chunk) - if 0 < max_size < size: - raise HTTPRequestEntityTooLarge( - max_size=max_size, actual_size=size - ) - chunk = await field.read_chunk(size=2 ** 16) - tmp.seek(0) - - if field_ct is None: - field_ct = "application/octet-stream" - - ff = FileField( - field.name, - field.filename, - cast(io.BufferedReader, tmp), - field_ct, - field.headers, - ) - out.add(field.name, ff) - else: - # deal with ordinary data - value = await field.read(decode=True) - if field_ct is None or field_ct.startswith("text/"): - charset = field.get_charset(default="utf-8") - out.add(field.name, value.decode(charset)) - else: - out.add(field.name, value) - size += len(value) - if 0 < max_size < size: - raise HTTPRequestEntityTooLarge( - max_size=max_size, actual_size=size - ) - else: - raise ValueError( - "To decode nested multipart you need " "to use custom reader", - ) - - field = await multipart.next() - else: - data = await self.read() - if data: - charset = self.charset or "utf-8" - out.extend( - parse_qsl( - data.rstrip().decode(charset), - keep_blank_values=True, - encoding=charset, - ) - ) - - self._post = MultiDictProxy(out) - return self._post - - def get_extra_info(self, name: str, default: Any = None) -> Any: - """Extra info from protocol transport""" - protocol = self._protocol - if protocol is None: - return default - - transport = protocol.transport - if transport is None: - return default - - return transport.get_extra_info(name, default) - - def __repr__(self) -> str: - ascii_encodable_path = self.path.encode("ascii", "backslashreplace").decode( - "ascii" - ) - return "<{} {} {} >".format( - self.__class__.__name__, self._method, ascii_encodable_path - ) - - def __eq__(self, other: object) -> bool: - return id(self) == id(other) - - def __bool__(self) -> bool: - return True - - async def _prepare_hook(self, response: StreamResponse) -> None: - return - - def _cancel(self, exc: BaseException) -> None: - self._payload.set_exception(exc) - - -class Request(BaseRequest): - - ATTRS = BaseRequest.ATTRS | frozenset(["_match_info"]) - - def __init__(self, *args: Any, **kwargs: Any) -> None: - super().__init__(*args, **kwargs) - - # matchdict, route_name, handler - # or information about traversal lookup - - # initialized after route resolving - self._match_info = None # type: Optional[UrlMappingMatchInfo] - - if DEBUG: - - def __setattr__(self, name: str, val: Any) -> None: - if name not in self.ATTRS: - warnings.warn( - "Setting custom {}.{} attribute " - "is discouraged".format(self.__class__.__name__, name), - DeprecationWarning, - stacklevel=2, - ) - super().__setattr__(name, val) - - def clone( - self, - *, - method: str = sentinel, - rel_url: StrOrURL = sentinel, - headers: LooseHeaders = sentinel, - scheme: str = sentinel, - host: str = sentinel, - remote: str = sentinel, - ) -> "Request": - ret = super().clone( - method=method, - rel_url=rel_url, - headers=headers, - scheme=scheme, - host=host, - remote=remote, - ) - new_ret = cast(Request, ret) - new_ret._match_info = self._match_info - return new_ret - - @reify - def match_info(self) -> "UrlMappingMatchInfo": - """Result of route resolving.""" - match_info = self._match_info - assert match_info is not None - return match_info - - @property - def app(self) -> "Application": - """Application instance.""" - match_info = self._match_info - assert match_info is not None - return match_info.current_app - - @property - def config_dict(self) -> ChainMapProxy: - match_info = self._match_info - assert match_info is not None - lst = match_info.apps - app = self.app - idx = lst.index(app) - sublist = list(reversed(lst[: idx + 1])) - return ChainMapProxy(sublist) - - async def _prepare_hook(self, response: StreamResponse) -> None: - match_info = self._match_info - if match_info is None: - return - for app in match_info._apps: - await app.on_response_prepare.send(self, response) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_response.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_response.py deleted file mode 100644 index f34b00e2..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_response.py +++ /dev/null @@ -1,781 +0,0 @@ -import asyncio -import collections.abc -import datetime -import enum -import json -import math -import time -import warnings -import zlib -from concurrent.futures import Executor -from email.utils import parsedate -from http.cookies import Morsel, SimpleCookie -from typing import ( - TYPE_CHECKING, - Any, - Dict, - Iterator, - Mapping, - MutableMapping, - Optional, - Tuple, - Union, - cast, -) - -from multidict import CIMultiDict, istr - -from . import hdrs, payload -from .abc import AbstractStreamWriter -from .helpers import PY_38, HeadersMixin, rfc822_formatted_time, sentinel -from .http import RESPONSES, SERVER_SOFTWARE, HttpVersion10, HttpVersion11 -from .payload import Payload -from .typedefs import JSONEncoder, LooseHeaders - -__all__ = ("ContentCoding", "StreamResponse", "Response", "json_response") - - -if TYPE_CHECKING: # pragma: no cover - from .web_request import BaseRequest - - BaseClass = MutableMapping[str, Any] -else: - BaseClass = collections.abc.MutableMapping - - -if not PY_38: - # allow samesite to be used in python < 3.8 - # already permitted in python 3.8, see https://bugs.python.org/issue29613 - Morsel._reserved["samesite"] = "SameSite" # type: ignore - - -class ContentCoding(enum.Enum): - # The content codings that we have support for. - # - # Additional registered codings are listed at: - # https://www.iana.org/assignments/http-parameters/http-parameters.xhtml#content-coding - deflate = "deflate" - gzip = "gzip" - identity = "identity" - - -############################################################ -# HTTP Response classes -############################################################ - - -class StreamResponse(BaseClass, HeadersMixin): - - _length_check = True - - def __init__( - self, - *, - status: int = 200, - reason: Optional[str] = None, - headers: Optional[LooseHeaders] = None, - ) -> None: - self._body = None - self._keep_alive = None # type: Optional[bool] - self._chunked = False - self._compression = False - self._compression_force = None # type: Optional[ContentCoding] - self._cookies = SimpleCookie() # type: SimpleCookie[str] - - self._req = None # type: Optional[BaseRequest] - self._payload_writer = None # type: Optional[AbstractStreamWriter] - self._eof_sent = False - self._body_length = 0 - self._state = {} # type: Dict[str, Any] - - if headers is not None: - self._headers = CIMultiDict(headers) # type: CIMultiDict[str] - else: - self._headers = CIMultiDict() - - self.set_status(status, reason) - - @property - def prepared(self) -> bool: - return self._payload_writer is not None - - @property - def task(self) -> "asyncio.Task[None]": - return getattr(self._req, "task", None) - - @property - def status(self) -> int: - return self._status - - @property - def chunked(self) -> bool: - return self._chunked - - @property - def compression(self) -> bool: - return self._compression - - @property - def reason(self) -> str: - return self._reason - - def set_status( - self, - status: int, - reason: Optional[str] = None, - _RESPONSES: Mapping[int, Tuple[str, str]] = RESPONSES, - ) -> None: - assert not self.prepared, ( - "Cannot change the response status code after " "the headers have been sent" - ) - self._status = int(status) - if reason is None: - try: - reason = _RESPONSES[self._status][0] - except Exception: - reason = "" - self._reason = reason - - @property - def keep_alive(self) -> Optional[bool]: - return self._keep_alive - - def force_close(self) -> None: - self._keep_alive = False - - @property - def body_length(self) -> int: - return self._body_length - - @property - def output_length(self) -> int: - warnings.warn("output_length is deprecated", DeprecationWarning) - assert self._payload_writer - return self._payload_writer.buffer_size - - def enable_chunked_encoding(self, chunk_size: Optional[int] = None) -> None: - """Enables automatic chunked transfer encoding.""" - self._chunked = True - - if hdrs.CONTENT_LENGTH in self._headers: - raise RuntimeError( - "You can't enable chunked encoding when " "a content length is set" - ) - if chunk_size is not None: - warnings.warn("Chunk size is deprecated #1615", DeprecationWarning) - - def enable_compression( - self, force: Optional[Union[bool, ContentCoding]] = None - ) -> None: - """Enables response compression encoding.""" - # Backwards compatibility for when force was a bool <0.17. - if type(force) == bool: - force = ContentCoding.deflate if force else ContentCoding.identity - warnings.warn( - "Using boolean for force is deprecated #3318", DeprecationWarning - ) - elif force is not None: - assert isinstance(force, ContentCoding), ( - "force should one of " "None, bool or " "ContentEncoding" - ) - - self._compression = True - self._compression_force = force - - @property - def headers(self) -> "CIMultiDict[str]": - return self._headers - - @property - def cookies(self) -> "SimpleCookie[str]": - return self._cookies - - def set_cookie( - self, - name: str, - value: str, - *, - expires: Optional[str] = None, - domain: Optional[str] = None, - max_age: Optional[Union[int, str]] = None, - path: str = "/", - secure: Optional[bool] = None, - httponly: Optional[bool] = None, - version: Optional[str] = None, - samesite: Optional[str] = None, - ) -> None: - """Set or update response cookie. - - Sets new cookie or updates existent with new value. - Also updates only those params which are not None. - """ - - old = self._cookies.get(name) - if old is not None and old.coded_value == "": - # deleted cookie - self._cookies.pop(name, None) - - self._cookies[name] = value - c = self._cookies[name] - - if expires is not None: - c["expires"] = expires - elif c.get("expires") == "Thu, 01 Jan 1970 00:00:00 GMT": - del c["expires"] - - if domain is not None: - c["domain"] = domain - - if max_age is not None: - c["max-age"] = str(max_age) - elif "max-age" in c: - del c["max-age"] - - c["path"] = path - - if secure is not None: - c["secure"] = secure - if httponly is not None: - c["httponly"] = httponly - if version is not None: - c["version"] = version - if samesite is not None: - c["samesite"] = samesite - - def del_cookie( - self, name: str, *, domain: Optional[str] = None, path: str = "/" - ) -> None: - """Delete cookie. - - Creates new empty expired cookie. - """ - # TODO: do we need domain/path here? - self._cookies.pop(name, None) - self.set_cookie( - name, - "", - max_age=0, - expires="Thu, 01 Jan 1970 00:00:00 GMT", - domain=domain, - path=path, - ) - - @property - def content_length(self) -> Optional[int]: - # Just a placeholder for adding setter - return super().content_length - - @content_length.setter - def content_length(self, value: Optional[int]) -> None: - if value is not None: - value = int(value) - if self._chunked: - raise RuntimeError( - "You can't set content length when " "chunked encoding is enable" - ) - self._headers[hdrs.CONTENT_LENGTH] = str(value) - else: - self._headers.pop(hdrs.CONTENT_LENGTH, None) - - @property - def content_type(self) -> str: - # Just a placeholder for adding setter - return super().content_type - - @content_type.setter - def content_type(self, value: str) -> None: - self.content_type # read header values if needed - self._content_type = str(value) - self._generate_content_type_header() - - @property - def charset(self) -> Optional[str]: - # Just a placeholder for adding setter - return super().charset - - @charset.setter - def charset(self, value: Optional[str]) -> None: - ctype = self.content_type # read header values if needed - if ctype == "application/octet-stream": - raise RuntimeError( - "Setting charset for application/octet-stream " - "doesn't make sense, setup content_type first" - ) - assert self._content_dict is not None - if value is None: - self._content_dict.pop("charset", None) - else: - self._content_dict["charset"] = str(value).lower() - self._generate_content_type_header() - - @property - def last_modified(self) -> Optional[datetime.datetime]: - """The value of Last-Modified HTTP header, or None. - - This header is represented as a `datetime` object. - """ - httpdate = self._headers.get(hdrs.LAST_MODIFIED) - if httpdate is not None: - timetuple = parsedate(httpdate) - if timetuple is not None: - return datetime.datetime(*timetuple[:6], tzinfo=datetime.timezone.utc) - return None - - @last_modified.setter - def last_modified( - self, value: Optional[Union[int, float, datetime.datetime, str]] - ) -> None: - if value is None: - self._headers.pop(hdrs.LAST_MODIFIED, None) - elif isinstance(value, (int, float)): - self._headers[hdrs.LAST_MODIFIED] = time.strftime( - "%a, %d %b %Y %H:%M:%S GMT", time.gmtime(math.ceil(value)) - ) - elif isinstance(value, datetime.datetime): - self._headers[hdrs.LAST_MODIFIED] = time.strftime( - "%a, %d %b %Y %H:%M:%S GMT", value.utctimetuple() - ) - elif isinstance(value, str): - self._headers[hdrs.LAST_MODIFIED] = value - - def _generate_content_type_header( - self, CONTENT_TYPE: istr = hdrs.CONTENT_TYPE - ) -> None: - assert self._content_dict is not None - assert self._content_type is not None - params = "; ".join(f"{k}={v}" for k, v in self._content_dict.items()) - if params: - ctype = self._content_type + "; " + params - else: - ctype = self._content_type - self._headers[CONTENT_TYPE] = ctype - - async def _do_start_compression(self, coding: ContentCoding) -> None: - if coding != ContentCoding.identity: - assert self._payload_writer is not None - self._headers[hdrs.CONTENT_ENCODING] = coding.value - self._payload_writer.enable_compression(coding.value) - # Compressed payload may have different content length, - # remove the header - self._headers.popall(hdrs.CONTENT_LENGTH, None) - - async def _start_compression(self, request: "BaseRequest") -> None: - if self._compression_force: - await self._do_start_compression(self._compression_force) - else: - accept_encoding = request.headers.get(hdrs.ACCEPT_ENCODING, "").lower() - for coding in ContentCoding: - if coding.value in accept_encoding: - await self._do_start_compression(coding) - return - - async def prepare(self, request: "BaseRequest") -> Optional[AbstractStreamWriter]: - if self._eof_sent: - return None - if self._payload_writer is not None: - return self._payload_writer - - return await self._start(request) - - async def _start(self, request: "BaseRequest") -> AbstractStreamWriter: - self._req = request - writer = self._payload_writer = request._payload_writer - - await self._prepare_headers() - await request._prepare_hook(self) - await self._write_headers() - - return writer - - async def _prepare_headers(self) -> None: - request = self._req - assert request is not None - writer = self._payload_writer - assert writer is not None - keep_alive = self._keep_alive - if keep_alive is None: - keep_alive = request.keep_alive - self._keep_alive = keep_alive - - version = request.version - - headers = self._headers - for cookie in self._cookies.values(): - value = cookie.output(header="")[1:] - headers.add(hdrs.SET_COOKIE, value) - - if self._compression: - await self._start_compression(request) - - if self._chunked: - if version != HttpVersion11: - raise RuntimeError( - "Using chunked encoding is forbidden " - "for HTTP/{0.major}.{0.minor}".format(request.version) - ) - writer.enable_chunking() - headers[hdrs.TRANSFER_ENCODING] = "chunked" - if hdrs.CONTENT_LENGTH in headers: - del headers[hdrs.CONTENT_LENGTH] - elif self._length_check: - writer.length = self.content_length - if writer.length is None: - if version >= HttpVersion11: - writer.enable_chunking() - headers[hdrs.TRANSFER_ENCODING] = "chunked" - if hdrs.CONTENT_LENGTH in headers: - del headers[hdrs.CONTENT_LENGTH] - else: - keep_alive = False - # HTTP 1.1: https://tools.ietf.org/html/rfc7230#section-3.3.2 - # HTTP 1.0: https://tools.ietf.org/html/rfc1945#section-10.4 - elif version >= HttpVersion11 and self.status in (100, 101, 102, 103, 204): - del headers[hdrs.CONTENT_LENGTH] - - headers.setdefault(hdrs.CONTENT_TYPE, "application/octet-stream") - headers.setdefault(hdrs.DATE, rfc822_formatted_time()) - headers.setdefault(hdrs.SERVER, SERVER_SOFTWARE) - - # connection header - if hdrs.CONNECTION not in headers: - if keep_alive: - if version == HttpVersion10: - headers[hdrs.CONNECTION] = "keep-alive" - else: - if version == HttpVersion11: - headers[hdrs.CONNECTION] = "close" - - async def _write_headers(self) -> None: - request = self._req - assert request is not None - writer = self._payload_writer - assert writer is not None - # status line - version = request.version - status_line = "HTTP/{}.{} {} {}".format( - version[0], version[1], self._status, self._reason - ) - await writer.write_headers(status_line, self._headers) - - async def write(self, data: bytes) -> None: - assert isinstance( - data, (bytes, bytearray, memoryview) - ), "data argument must be byte-ish (%r)" % type(data) - - if self._eof_sent: - raise RuntimeError("Cannot call write() after write_eof()") - if self._payload_writer is None: - raise RuntimeError("Cannot call write() before prepare()") - - await self._payload_writer.write(data) - - async def drain(self) -> None: - assert not self._eof_sent, "EOF has already been sent" - assert self._payload_writer is not None, "Response has not been started" - warnings.warn( - "drain method is deprecated, use await resp.write()", - DeprecationWarning, - stacklevel=2, - ) - await self._payload_writer.drain() - - async def write_eof(self, data: bytes = b"") -> None: - assert isinstance( - data, (bytes, bytearray, memoryview) - ), "data argument must be byte-ish (%r)" % type(data) - - if self._eof_sent: - return - - assert self._payload_writer is not None, "Response has not been started" - - await self._payload_writer.write_eof(data) - self._eof_sent = True - self._req = None - self._body_length = self._payload_writer.output_size - self._payload_writer = None - - def __repr__(self) -> str: - if self._eof_sent: - info = "eof" - elif self.prepared: - assert self._req is not None - info = f"{self._req.method} {self._req.path} " - else: - info = "not prepared" - return f"<{self.__class__.__name__} {self.reason} {info}>" - - def __getitem__(self, key: str) -> Any: - return self._state[key] - - def __setitem__(self, key: str, value: Any) -> None: - self._state[key] = value - - def __delitem__(self, key: str) -> None: - del self._state[key] - - def __len__(self) -> int: - return len(self._state) - - def __iter__(self) -> Iterator[str]: - return iter(self._state) - - def __hash__(self) -> int: - return hash(id(self)) - - def __eq__(self, other: object) -> bool: - return self is other - - -class Response(StreamResponse): - def __init__( - self, - *, - body: Any = None, - status: int = 200, - reason: Optional[str] = None, - text: Optional[str] = None, - headers: Optional[LooseHeaders] = None, - content_type: Optional[str] = None, - charset: Optional[str] = None, - zlib_executor_size: Optional[int] = None, - zlib_executor: Optional[Executor] = None, - ) -> None: - if body is not None and text is not None: - raise ValueError("body and text are not allowed together") - - if headers is None: - real_headers = CIMultiDict() # type: CIMultiDict[str] - elif not isinstance(headers, CIMultiDict): - real_headers = CIMultiDict(headers) - else: - real_headers = headers # = cast('CIMultiDict[str]', headers) - - if content_type is not None and "charset" in content_type: - raise ValueError("charset must not be in content_type " "argument") - - if text is not None: - if hdrs.CONTENT_TYPE in real_headers: - if content_type or charset: - raise ValueError( - "passing both Content-Type header and " - "content_type or charset params " - "is forbidden" - ) - else: - # fast path for filling headers - if not isinstance(text, str): - raise TypeError("text argument must be str (%r)" % type(text)) - if content_type is None: - content_type = "text/plain" - if charset is None: - charset = "utf-8" - real_headers[hdrs.CONTENT_TYPE] = content_type + "; charset=" + charset - body = text.encode(charset) - text = None - else: - if hdrs.CONTENT_TYPE in real_headers: - if content_type is not None or charset is not None: - raise ValueError( - "passing both Content-Type header and " - "content_type or charset params " - "is forbidden" - ) - else: - if content_type is not None: - if charset is not None: - content_type += "; charset=" + charset - real_headers[hdrs.CONTENT_TYPE] = content_type - - super().__init__(status=status, reason=reason, headers=real_headers) - - if text is not None: - self.text = text - else: - self.body = body - - self._compressed_body = None # type: Optional[bytes] - self._zlib_executor_size = zlib_executor_size - self._zlib_executor = zlib_executor - - @property - def body(self) -> Optional[Union[bytes, Payload]]: - return self._body - - @body.setter - def body( - self, - body: bytes, - CONTENT_TYPE: istr = hdrs.CONTENT_TYPE, - CONTENT_LENGTH: istr = hdrs.CONTENT_LENGTH, - ) -> None: - if body is None: - self._body = None # type: Optional[bytes] - self._body_payload = False # type: bool - elif isinstance(body, (bytes, bytearray)): - self._body = body - self._body_payload = False - else: - try: - self._body = body = payload.PAYLOAD_REGISTRY.get(body) - except payload.LookupError: - raise ValueError("Unsupported body type %r" % type(body)) - - self._body_payload = True - - headers = self._headers - - # set content-length header if needed - if not self._chunked and CONTENT_LENGTH not in headers: - size = body.size - if size is not None: - headers[CONTENT_LENGTH] = str(size) - - # set content-type - if CONTENT_TYPE not in headers: - headers[CONTENT_TYPE] = body.content_type - - # copy payload headers - if body.headers: - for (key, value) in body.headers.items(): - if key not in headers: - headers[key] = value - - self._compressed_body = None - - @property - def text(self) -> Optional[str]: - if self._body is None: - return None - return self._body.decode(self.charset or "utf-8") - - @text.setter - def text(self, text: str) -> None: - assert text is None or isinstance( - text, str - ), "text argument must be str (%r)" % type(text) - - if self.content_type == "application/octet-stream": - self.content_type = "text/plain" - if self.charset is None: - self.charset = "utf-8" - - self._body = text.encode(self.charset) - self._body_payload = False - self._compressed_body = None - - @property - def content_length(self) -> Optional[int]: - if self._chunked: - return None - - if hdrs.CONTENT_LENGTH in self._headers: - return super().content_length - - if self._compressed_body is not None: - # Return length of the compressed body - return len(self._compressed_body) - elif self._body_payload: - # A payload without content length, or a compressed payload - return None - elif self._body is not None: - return len(self._body) - else: - return 0 - - @content_length.setter - def content_length(self, value: Optional[int]) -> None: - raise RuntimeError("Content length is set automatically") - - async def write_eof(self, data: bytes = b"") -> None: - if self._eof_sent: - return - if self._compressed_body is None: - body = self._body # type: Optional[Union[bytes, Payload]] - else: - body = self._compressed_body - assert not data, f"data arg is not supported, got {data!r}" - assert self._req is not None - assert self._payload_writer is not None - if body is not None: - if self._req._method == hdrs.METH_HEAD or self._status in [204, 304]: - await super().write_eof() - elif self._body_payload: - payload = cast(Payload, body) - await payload.write(self._payload_writer) - await super().write_eof() - else: - await super().write_eof(cast(bytes, body)) - else: - await super().write_eof() - - async def _start(self, request: "BaseRequest") -> AbstractStreamWriter: - if not self._chunked and hdrs.CONTENT_LENGTH not in self._headers: - if not self._body_payload: - if self._body is not None: - self._headers[hdrs.CONTENT_LENGTH] = str(len(self._body)) - else: - self._headers[hdrs.CONTENT_LENGTH] = "0" - - return await super()._start(request) - - def _compress_body(self, zlib_mode: int) -> None: - assert zlib_mode > 0 - compressobj = zlib.compressobj(wbits=zlib_mode) - body_in = self._body - assert body_in is not None - self._compressed_body = compressobj.compress(body_in) + compressobj.flush() - - async def _do_start_compression(self, coding: ContentCoding) -> None: - if self._body_payload or self._chunked: - return await super()._do_start_compression(coding) - - if coding != ContentCoding.identity: - # Instead of using _payload_writer.enable_compression, - # compress the whole body - zlib_mode = ( - 16 + zlib.MAX_WBITS if coding == ContentCoding.gzip else zlib.MAX_WBITS - ) - body_in = self._body - assert body_in is not None - if ( - self._zlib_executor_size is not None - and len(body_in) > self._zlib_executor_size - ): - await asyncio.get_event_loop().run_in_executor( - self._zlib_executor, self._compress_body, zlib_mode - ) - else: - self._compress_body(zlib_mode) - - body_out = self._compressed_body - assert body_out is not None - - self._headers[hdrs.CONTENT_ENCODING] = coding.value - self._headers[hdrs.CONTENT_LENGTH] = str(len(body_out)) - - -def json_response( - data: Any = sentinel, - *, - text: Optional[str] = None, - body: Optional[bytes] = None, - status: int = 200, - reason: Optional[str] = None, - headers: Optional[LooseHeaders] = None, - content_type: str = "application/json", - dumps: JSONEncoder = json.dumps, -) -> Response: - if data is not sentinel: - if text or body: - raise ValueError("only one of data, text, or body should be specified") - else: - text = dumps(data) - return Response( - text=text, - body=body, - status=status, - reason=reason, - headers=headers, - content_type=content_type, - ) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_routedef.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_routedef.py deleted file mode 100644 index 18852510..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_routedef.py +++ /dev/null @@ -1,215 +0,0 @@ -import abc -import os # noqa -from typing import ( - TYPE_CHECKING, - Any, - Awaitable, - Callable, - Dict, - Iterator, - List, - Optional, - Sequence, - Type, - Union, - overload, -) - -import attr - -from . import hdrs -from .abc import AbstractView -from .typedefs import PathLike - -if TYPE_CHECKING: # pragma: no cover - from .web_request import Request - from .web_response import StreamResponse - from .web_urldispatcher import AbstractRoute, UrlDispatcher -else: - Request = StreamResponse = UrlDispatcher = AbstractRoute = None - - -__all__ = ( - "AbstractRouteDef", - "RouteDef", - "StaticDef", - "RouteTableDef", - "head", - "options", - "get", - "post", - "patch", - "put", - "delete", - "route", - "view", - "static", -) - - -class AbstractRouteDef(abc.ABC): - @abc.abstractmethod - def register(self, router: UrlDispatcher) -> List[AbstractRoute]: - pass # pragma: no cover - - -_SimpleHandler = Callable[[Request], Awaitable[StreamResponse]] -_HandlerType = Union[Type[AbstractView], _SimpleHandler] - - -@attr.s(auto_attribs=True, frozen=True, repr=False, slots=True) -class RouteDef(AbstractRouteDef): - method: str - path: str - handler: _HandlerType - kwargs: Dict[str, Any] - - def __repr__(self) -> str: - info = [] - for name, value in sorted(self.kwargs.items()): - info.append(f", {name}={value!r}") - return " {handler.__name__!r}" "{info}>".format( - method=self.method, path=self.path, handler=self.handler, info="".join(info) - ) - - def register(self, router: UrlDispatcher) -> List[AbstractRoute]: - if self.method in hdrs.METH_ALL: - reg = getattr(router, "add_" + self.method.lower()) - return [reg(self.path, self.handler, **self.kwargs)] - else: - return [ - router.add_route(self.method, self.path, self.handler, **self.kwargs) - ] - - -@attr.s(auto_attribs=True, frozen=True, repr=False, slots=True) -class StaticDef(AbstractRouteDef): - prefix: str - path: PathLike - kwargs: Dict[str, Any] - - def __repr__(self) -> str: - info = [] - for name, value in sorted(self.kwargs.items()): - info.append(f", {name}={value!r}") - return " {path}" "{info}>".format( - prefix=self.prefix, path=self.path, info="".join(info) - ) - - def register(self, router: UrlDispatcher) -> List[AbstractRoute]: - resource = router.add_static(self.prefix, self.path, **self.kwargs) - routes = resource.get_info().get("routes", {}) - return list(routes.values()) - - -def route(method: str, path: str, handler: _HandlerType, **kwargs: Any) -> RouteDef: - return RouteDef(method, path, handler, kwargs) - - -def head(path: str, handler: _HandlerType, **kwargs: Any) -> RouteDef: - return route(hdrs.METH_HEAD, path, handler, **kwargs) - - -def options(path: str, handler: _HandlerType, **kwargs: Any) -> RouteDef: - return route(hdrs.METH_OPTIONS, path, handler, **kwargs) - - -def get( - path: str, - handler: _HandlerType, - *, - name: Optional[str] = None, - allow_head: bool = True, - **kwargs: Any, -) -> RouteDef: - return route( - hdrs.METH_GET, path, handler, name=name, allow_head=allow_head, **kwargs - ) - - -def post(path: str, handler: _HandlerType, **kwargs: Any) -> RouteDef: - return route(hdrs.METH_POST, path, handler, **kwargs) - - -def put(path: str, handler: _HandlerType, **kwargs: Any) -> RouteDef: - return route(hdrs.METH_PUT, path, handler, **kwargs) - - -def patch(path: str, handler: _HandlerType, **kwargs: Any) -> RouteDef: - return route(hdrs.METH_PATCH, path, handler, **kwargs) - - -def delete(path: str, handler: _HandlerType, **kwargs: Any) -> RouteDef: - return route(hdrs.METH_DELETE, path, handler, **kwargs) - - -def view(path: str, handler: Type[AbstractView], **kwargs: Any) -> RouteDef: - return route(hdrs.METH_ANY, path, handler, **kwargs) - - -def static(prefix: str, path: PathLike, **kwargs: Any) -> StaticDef: - return StaticDef(prefix, path, kwargs) - - -_Deco = Callable[[_HandlerType], _HandlerType] - - -class RouteTableDef(Sequence[AbstractRouteDef]): - """Route definition table""" - - def __init__(self) -> None: - self._items = [] # type: List[AbstractRouteDef] - - def __repr__(self) -> str: - return "".format(len(self._items)) - - @overload - def __getitem__(self, index: int) -> AbstractRouteDef: - ... - - @overload - def __getitem__(self, index: slice) -> List[AbstractRouteDef]: - ... - - def __getitem__(self, index): # type: ignore - return self._items[index] - - def __iter__(self) -> Iterator[AbstractRouteDef]: - return iter(self._items) - - def __len__(self) -> int: - return len(self._items) - - def __contains__(self, item: object) -> bool: - return item in self._items - - def route(self, method: str, path: str, **kwargs: Any) -> _Deco: - def inner(handler: _HandlerType) -> _HandlerType: - self._items.append(RouteDef(method, path, handler, kwargs)) - return handler - - return inner - - def head(self, path: str, **kwargs: Any) -> _Deco: - return self.route(hdrs.METH_HEAD, path, **kwargs) - - def get(self, path: str, **kwargs: Any) -> _Deco: - return self.route(hdrs.METH_GET, path, **kwargs) - - def post(self, path: str, **kwargs: Any) -> _Deco: - return self.route(hdrs.METH_POST, path, **kwargs) - - def put(self, path: str, **kwargs: Any) -> _Deco: - return self.route(hdrs.METH_PUT, path, **kwargs) - - def patch(self, path: str, **kwargs: Any) -> _Deco: - return self.route(hdrs.METH_PATCH, path, **kwargs) - - def delete(self, path: str, **kwargs: Any) -> _Deco: - return self.route(hdrs.METH_DELETE, path, **kwargs) - - def view(self, path: str, **kwargs: Any) -> _Deco: - return self.route(hdrs.METH_ANY, path, **kwargs) - - def static(self, prefix: str, path: PathLike, **kwargs: Any) -> None: - self._items.append(StaticDef(prefix, path, kwargs)) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_runner.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_runner.py deleted file mode 100644 index 25ac28a7..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_runner.py +++ /dev/null @@ -1,381 +0,0 @@ -import asyncio -import signal -import socket -from abc import ABC, abstractmethod -from typing import Any, List, Optional, Set - -from yarl import URL - -from .web_app import Application -from .web_server import Server - -try: - from ssl import SSLContext -except ImportError: - SSLContext = object # type: ignore - - -__all__ = ( - "BaseSite", - "TCPSite", - "UnixSite", - "NamedPipeSite", - "SockSite", - "BaseRunner", - "AppRunner", - "ServerRunner", - "GracefulExit", -) - - -class GracefulExit(SystemExit): - code = 1 - - -def _raise_graceful_exit() -> None: - raise GracefulExit() - - -class BaseSite(ABC): - __slots__ = ("_runner", "_shutdown_timeout", "_ssl_context", "_backlog", "_server") - - def __init__( - self, - runner: "BaseRunner", - *, - shutdown_timeout: float = 60.0, - ssl_context: Optional[SSLContext] = None, - backlog: int = 128, - ) -> None: - if runner.server is None: - raise RuntimeError("Call runner.setup() before making a site") - self._runner = runner - self._shutdown_timeout = shutdown_timeout - self._ssl_context = ssl_context - self._backlog = backlog - self._server = None # type: Optional[asyncio.AbstractServer] - - @property - @abstractmethod - def name(self) -> str: - pass # pragma: no cover - - @abstractmethod - async def start(self) -> None: - self._runner._reg_site(self) - - async def stop(self) -> None: - self._runner._check_site(self) - if self._server is None: - self._runner._unreg_site(self) - return # not started yet - self._server.close() - # named pipes do not have wait_closed property - if hasattr(self._server, "wait_closed"): - await self._server.wait_closed() - await self._runner.shutdown() - assert self._runner.server - await self._runner.server.shutdown(self._shutdown_timeout) - self._runner._unreg_site(self) - - -class TCPSite(BaseSite): - __slots__ = ("_host", "_port", "_reuse_address", "_reuse_port") - - def __init__( - self, - runner: "BaseRunner", - host: Optional[str] = None, - port: Optional[int] = None, - *, - shutdown_timeout: float = 60.0, - ssl_context: Optional[SSLContext] = None, - backlog: int = 128, - reuse_address: Optional[bool] = None, - reuse_port: Optional[bool] = None, - ) -> None: - super().__init__( - runner, - shutdown_timeout=shutdown_timeout, - ssl_context=ssl_context, - backlog=backlog, - ) - self._host = host - if port is None: - port = 8443 if self._ssl_context else 8080 - self._port = port - self._reuse_address = reuse_address - self._reuse_port = reuse_port - - @property - def name(self) -> str: - scheme = "https" if self._ssl_context else "http" - host = "0.0.0.0" if self._host is None else self._host - return str(URL.build(scheme=scheme, host=host, port=self._port)) - - async def start(self) -> None: - await super().start() - loop = asyncio.get_event_loop() - server = self._runner.server - assert server is not None - self._server = await loop.create_server( - server, - self._host, - self._port, - ssl=self._ssl_context, - backlog=self._backlog, - reuse_address=self._reuse_address, - reuse_port=self._reuse_port, - ) - - -class UnixSite(BaseSite): - __slots__ = ("_path",) - - def __init__( - self, - runner: "BaseRunner", - path: str, - *, - shutdown_timeout: float = 60.0, - ssl_context: Optional[SSLContext] = None, - backlog: int = 128, - ) -> None: - super().__init__( - runner, - shutdown_timeout=shutdown_timeout, - ssl_context=ssl_context, - backlog=backlog, - ) - self._path = path - - @property - def name(self) -> str: - scheme = "https" if self._ssl_context else "http" - return f"{scheme}://unix:{self._path}:" - - async def start(self) -> None: - await super().start() - loop = asyncio.get_event_loop() - server = self._runner.server - assert server is not None - self._server = await loop.create_unix_server( - server, self._path, ssl=self._ssl_context, backlog=self._backlog - ) - - -class NamedPipeSite(BaseSite): - __slots__ = ("_path",) - - def __init__( - self, runner: "BaseRunner", path: str, *, shutdown_timeout: float = 60.0 - ) -> None: - loop = asyncio.get_event_loop() - if not isinstance(loop, asyncio.ProactorEventLoop): # type: ignore - raise RuntimeError( - "Named Pipes only available in proactor" "loop under windows" - ) - super().__init__(runner, shutdown_timeout=shutdown_timeout) - self._path = path - - @property - def name(self) -> str: - return self._path - - async def start(self) -> None: - await super().start() - loop = asyncio.get_event_loop() - server = self._runner.server - assert server is not None - _server = await loop.start_serving_pipe(server, self._path) # type: ignore - self._server = _server[0] - - -class SockSite(BaseSite): - __slots__ = ("_sock", "_name") - - def __init__( - self, - runner: "BaseRunner", - sock: socket.socket, - *, - shutdown_timeout: float = 60.0, - ssl_context: Optional[SSLContext] = None, - backlog: int = 128, - ) -> None: - super().__init__( - runner, - shutdown_timeout=shutdown_timeout, - ssl_context=ssl_context, - backlog=backlog, - ) - self._sock = sock - scheme = "https" if self._ssl_context else "http" - if hasattr(socket, "AF_UNIX") and sock.family == socket.AF_UNIX: - name = f"{scheme}://unix:{sock.getsockname()}:" - else: - host, port = sock.getsockname()[:2] - name = str(URL.build(scheme=scheme, host=host, port=port)) - self._name = name - - @property - def name(self) -> str: - return self._name - - async def start(self) -> None: - await super().start() - loop = asyncio.get_event_loop() - server = self._runner.server - assert server is not None - self._server = await loop.create_server( - server, sock=self._sock, ssl=self._ssl_context, backlog=self._backlog - ) - - -class BaseRunner(ABC): - __slots__ = ("_handle_signals", "_kwargs", "_server", "_sites") - - def __init__(self, *, handle_signals: bool = False, **kwargs: Any) -> None: - self._handle_signals = handle_signals - self._kwargs = kwargs - self._server = None # type: Optional[Server] - self._sites = [] # type: List[BaseSite] - - @property - def server(self) -> Optional[Server]: - return self._server - - @property - def addresses(self) -> List[Any]: - ret = [] # type: List[Any] - for site in self._sites: - server = site._server - if server is not None: - sockets = server.sockets - if sockets is not None: - for sock in sockets: - ret.append(sock.getsockname()) - return ret - - @property - def sites(self) -> Set[BaseSite]: - return set(self._sites) - - async def setup(self) -> None: - loop = asyncio.get_event_loop() - - if self._handle_signals: - try: - loop.add_signal_handler(signal.SIGINT, _raise_graceful_exit) - loop.add_signal_handler(signal.SIGTERM, _raise_graceful_exit) - except NotImplementedError: # pragma: no cover - # add_signal_handler is not implemented on Windows - pass - - self._server = await self._make_server() - - @abstractmethod - async def shutdown(self) -> None: - pass # pragma: no cover - - async def cleanup(self) -> None: - loop = asyncio.get_event_loop() - - if self._server is None: - # no started yet, do nothing - return - - # The loop over sites is intentional, an exception on gather() - # leaves self._sites in unpredictable state. - # The loop guaranties that a site is either deleted on success or - # still present on failure - for site in list(self._sites): - await site.stop() - await self._cleanup_server() - self._server = None - if self._handle_signals: - try: - loop.remove_signal_handler(signal.SIGINT) - loop.remove_signal_handler(signal.SIGTERM) - except NotImplementedError: # pragma: no cover - # remove_signal_handler is not implemented on Windows - pass - - @abstractmethod - async def _make_server(self) -> Server: - pass # pragma: no cover - - @abstractmethod - async def _cleanup_server(self) -> None: - pass # pragma: no cover - - def _reg_site(self, site: BaseSite) -> None: - if site in self._sites: - raise RuntimeError(f"Site {site} is already registered in runner {self}") - self._sites.append(site) - - def _check_site(self, site: BaseSite) -> None: - if site not in self._sites: - raise RuntimeError(f"Site {site} is not registered in runner {self}") - - def _unreg_site(self, site: BaseSite) -> None: - if site not in self._sites: - raise RuntimeError(f"Site {site} is not registered in runner {self}") - self._sites.remove(site) - - -class ServerRunner(BaseRunner): - """Low-level web server runner""" - - __slots__ = ("_web_server",) - - def __init__( - self, web_server: Server, *, handle_signals: bool = False, **kwargs: Any - ) -> None: - super().__init__(handle_signals=handle_signals, **kwargs) - self._web_server = web_server - - async def shutdown(self) -> None: - pass - - async def _make_server(self) -> Server: - return self._web_server - - async def _cleanup_server(self) -> None: - pass - - -class AppRunner(BaseRunner): - """Web Application runner""" - - __slots__ = ("_app",) - - def __init__( - self, app: Application, *, handle_signals: bool = False, **kwargs: Any - ) -> None: - super().__init__(handle_signals=handle_signals, **kwargs) - if not isinstance(app, Application): - raise TypeError( - "The first argument should be web.Application " - "instance, got {!r}".format(app) - ) - self._app = app - - @property - def app(self) -> Application: - return self._app - - async def shutdown(self) -> None: - await self._app.shutdown() - - async def _make_server(self) -> Server: - loop = asyncio.get_event_loop() - self._app._set_loop(loop) - self._app.on_startup.freeze() - await self._app.startup() - self._app.freeze() - - return self._app._make_handler(loop=loop, **self._kwargs) - - async def _cleanup_server(self) -> None: - await self._app.cleanup() diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_server.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_server.py deleted file mode 100644 index 5657ed9c..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_server.py +++ /dev/null @@ -1,62 +0,0 @@ -"""Low level HTTP server.""" -import asyncio -from typing import Any, Awaitable, Callable, Dict, List, Optional # noqa - -from .abc import AbstractStreamWriter -from .helpers import get_running_loop -from .http_parser import RawRequestMessage -from .streams import StreamReader -from .web_protocol import RequestHandler, _RequestFactory, _RequestHandler -from .web_request import BaseRequest - -__all__ = ("Server",) - - -class Server: - def __init__( - self, - handler: _RequestHandler, - *, - request_factory: Optional[_RequestFactory] = None, - loop: Optional[asyncio.AbstractEventLoop] = None, - **kwargs: Any - ) -> None: - self._loop = get_running_loop(loop) - self._connections = {} # type: Dict[RequestHandler, asyncio.Transport] - self._kwargs = kwargs - self.requests_count = 0 - self.request_handler = handler - self.request_factory = request_factory or self._make_request - - @property - def connections(self) -> List[RequestHandler]: - return list(self._connections.keys()) - - def connection_made( - self, handler: RequestHandler, transport: asyncio.Transport - ) -> None: - self._connections[handler] = transport - - def connection_lost( - self, handler: RequestHandler, exc: Optional[BaseException] = None - ) -> None: - if handler in self._connections: - del self._connections[handler] - - def _make_request( - self, - message: RawRequestMessage, - payload: StreamReader, - protocol: RequestHandler, - writer: AbstractStreamWriter, - task: "asyncio.Task[None]", - ) -> BaseRequest: - return BaseRequest(message, payload, protocol, writer, task, self._loop) - - async def shutdown(self, timeout: Optional[float] = None) -> None: - coros = [conn.shutdown(timeout) for conn in self._connections] - await asyncio.gather(*coros) - self._connections.clear() - - def __call__(self) -> RequestHandler: - return RequestHandler(self, loop=self._loop, **self._kwargs) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_urldispatcher.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_urldispatcher.py deleted file mode 100644 index 2afd72f1..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_urldispatcher.py +++ /dev/null @@ -1,1233 +0,0 @@ -import abc -import asyncio -import base64 -import hashlib -import inspect -import keyword -import os -import re -import warnings -from contextlib import contextmanager -from functools import wraps -from pathlib import Path -from types import MappingProxyType -from typing import ( - TYPE_CHECKING, - Any, - Awaitable, - Callable, - Container, - Dict, - Generator, - Iterable, - Iterator, - List, - Mapping, - Optional, - Pattern, - Set, - Sized, - Tuple, - Type, - Union, - cast, -) - -from typing_extensions import TypedDict -from yarl import URL, __version__ as yarl_version # type: ignore - -from . import hdrs -from .abc import AbstractMatchInfo, AbstractRouter, AbstractView -from .helpers import DEBUG -from .http import HttpVersion11 -from .typedefs import PathLike -from .web_exceptions import ( - HTTPException, - HTTPExpectationFailed, - HTTPForbidden, - HTTPMethodNotAllowed, - HTTPNotFound, -) -from .web_fileresponse import FileResponse -from .web_request import Request -from .web_response import Response, StreamResponse -from .web_routedef import AbstractRouteDef - -__all__ = ( - "UrlDispatcher", - "UrlMappingMatchInfo", - "AbstractResource", - "Resource", - "PlainResource", - "DynamicResource", - "AbstractRoute", - "ResourceRoute", - "StaticResource", - "View", -) - - -if TYPE_CHECKING: # pragma: no cover - from .web_app import Application - - BaseDict = Dict[str, str] -else: - BaseDict = dict - -YARL_VERSION = tuple(map(int, yarl_version.split(".")[:2])) - -HTTP_METHOD_RE = re.compile(r"^[0-9A-Za-z!#\$%&'\*\+\-\.\^_`\|~]+$") -ROUTE_RE = re.compile(r"(\{[_a-zA-Z][^{}]*(?:\{[^{}]*\}[^{}]*)*\})") -PATH_SEP = re.escape("/") - - -_WebHandler = Callable[[Request], Awaitable[StreamResponse]] -_ExpectHandler = Callable[[Request], Awaitable[None]] -_Resolve = Tuple[Optional[AbstractMatchInfo], Set[str]] - - -class _InfoDict(TypedDict, total=False): - path: str - - formatter: str - pattern: Pattern[str] - - directory: Path - prefix: str - routes: Mapping[str, "AbstractRoute"] - - app: "Application" - - domain: str - - rule: "AbstractRuleMatching" - - http_exception: HTTPException - - -class AbstractResource(Sized, Iterable["AbstractRoute"]): - def __init__(self, *, name: Optional[str] = None) -> None: - self._name = name - - @property - def name(self) -> Optional[str]: - return self._name - - @property - @abc.abstractmethod - def canonical(self) -> str: - """Exposes the resource's canonical path. - - For example '/foo/bar/{name}' - - """ - - @abc.abstractmethod # pragma: no branch - def url_for(self, **kwargs: str) -> URL: - """Construct url for resource with additional params.""" - - @abc.abstractmethod # pragma: no branch - async def resolve(self, request: Request) -> _Resolve: - """Resolve resource - - Return (UrlMappingMatchInfo, allowed_methods) pair.""" - - @abc.abstractmethod - def add_prefix(self, prefix: str) -> None: - """Add a prefix to processed URLs. - - Required for subapplications support. - - """ - - @abc.abstractmethod - def get_info(self) -> _InfoDict: - """Return a dict with additional info useful for introspection""" - - def freeze(self) -> None: - pass - - @abc.abstractmethod - def raw_match(self, path: str) -> bool: - """Perform a raw match against path""" - - -class AbstractRoute(abc.ABC): - def __init__( - self, - method: str, - handler: Union[_WebHandler, Type[AbstractView]], - *, - expect_handler: Optional[_ExpectHandler] = None, - resource: Optional[AbstractResource] = None, - ) -> None: - - if expect_handler is None: - expect_handler = _default_expect_handler - - assert asyncio.iscoroutinefunction( - expect_handler - ), f"Coroutine is expected, got {expect_handler!r}" - - method = method.upper() - if not HTTP_METHOD_RE.match(method): - raise ValueError(f"{method} is not allowed HTTP method") - - assert callable(handler), handler - if asyncio.iscoroutinefunction(handler): - pass - elif inspect.isgeneratorfunction(handler): - warnings.warn( - "Bare generators are deprecated, " "use @coroutine wrapper", - DeprecationWarning, - ) - elif isinstance(handler, type) and issubclass(handler, AbstractView): - pass - else: - warnings.warn( - "Bare functions are deprecated, " "use async ones", DeprecationWarning - ) - - @wraps(handler) - async def handler_wrapper(request: Request) -> StreamResponse: - result = old_handler(request) - if asyncio.iscoroutine(result): - return await result - return result # type: ignore - - old_handler = handler - handler = handler_wrapper - - self._method = method - self._handler = handler - self._expect_handler = expect_handler - self._resource = resource - - @property - def method(self) -> str: - return self._method - - @property - def handler(self) -> _WebHandler: - return self._handler - - @property - @abc.abstractmethod - def name(self) -> Optional[str]: - """Optional route's name, always equals to resource's name.""" - - @property - def resource(self) -> Optional[AbstractResource]: - return self._resource - - @abc.abstractmethod - def get_info(self) -> _InfoDict: - """Return a dict with additional info useful for introspection""" - - @abc.abstractmethod # pragma: no branch - def url_for(self, *args: str, **kwargs: str) -> URL: - """Construct url for route with additional params.""" - - async def handle_expect_header(self, request: Request) -> None: - await self._expect_handler(request) - - -class UrlMappingMatchInfo(BaseDict, AbstractMatchInfo): - def __init__(self, match_dict: Dict[str, str], route: AbstractRoute): - super().__init__(match_dict) - self._route = route - self._apps = [] # type: List[Application] - self._current_app = None # type: Optional[Application] - self._frozen = False - - @property - def handler(self) -> _WebHandler: - return self._route.handler - - @property - def route(self) -> AbstractRoute: - return self._route - - @property - def expect_handler(self) -> _ExpectHandler: - return self._route.handle_expect_header - - @property - def http_exception(self) -> Optional[HTTPException]: - return None - - def get_info(self) -> _InfoDict: # type: ignore - return self._route.get_info() - - @property - def apps(self) -> Tuple["Application", ...]: - return tuple(self._apps) - - def add_app(self, app: "Application") -> None: - if self._frozen: - raise RuntimeError("Cannot change apps stack after .freeze() call") - if self._current_app is None: - self._current_app = app - self._apps.insert(0, app) - - @property - def current_app(self) -> "Application": - app = self._current_app - assert app is not None - return app - - @contextmanager - def set_current_app(self, app: "Application") -> Generator[None, None, None]: - if DEBUG: # pragma: no cover - if app not in self._apps: - raise RuntimeError( - "Expected one of the following apps {!r}, got {!r}".format( - self._apps, app - ) - ) - prev = self._current_app - self._current_app = app - try: - yield - finally: - self._current_app = prev - - def freeze(self) -> None: - self._frozen = True - - def __repr__(self) -> str: - return f"" - - -class MatchInfoError(UrlMappingMatchInfo): - def __init__(self, http_exception: HTTPException) -> None: - self._exception = http_exception - super().__init__({}, SystemRoute(self._exception)) - - @property - def http_exception(self) -> HTTPException: - return self._exception - - def __repr__(self) -> str: - return "".format( - self._exception.status, self._exception.reason - ) - - -async def _default_expect_handler(request: Request) -> None: - """Default handler for Expect header. - - Just send "100 Continue" to client. - raise HTTPExpectationFailed if value of header is not "100-continue" - """ - expect = request.headers.get(hdrs.EXPECT, "") - if request.version == HttpVersion11: - if expect.lower() == "100-continue": - await request.writer.write(b"HTTP/1.1 100 Continue\r\n\r\n") - else: - raise HTTPExpectationFailed(text="Unknown Expect: %s" % expect) - - -class Resource(AbstractResource): - def __init__(self, *, name: Optional[str] = None) -> None: - super().__init__(name=name) - self._routes = [] # type: List[ResourceRoute] - - def add_route( - self, - method: str, - handler: Union[Type[AbstractView], _WebHandler], - *, - expect_handler: Optional[_ExpectHandler] = None, - ) -> "ResourceRoute": - - for route_obj in self._routes: - if route_obj.method == method or route_obj.method == hdrs.METH_ANY: - raise RuntimeError( - "Added route will never be executed, " - "method {route.method} is already " - "registered".format(route=route_obj) - ) - - route_obj = ResourceRoute(method, handler, self, expect_handler=expect_handler) - self.register_route(route_obj) - return route_obj - - def register_route(self, route: "ResourceRoute") -> None: - assert isinstance( - route, ResourceRoute - ), f"Instance of Route class is required, got {route!r}" - self._routes.append(route) - - async def resolve(self, request: Request) -> _Resolve: - allowed_methods = set() # type: Set[str] - - match_dict = self._match(request.rel_url.raw_path) - if match_dict is None: - return None, allowed_methods - - for route_obj in self._routes: - route_method = route_obj.method - allowed_methods.add(route_method) - - if route_method == request.method or route_method == hdrs.METH_ANY: - return (UrlMappingMatchInfo(match_dict, route_obj), allowed_methods) - else: - return None, allowed_methods - - @abc.abstractmethod - def _match(self, path: str) -> Optional[Dict[str, str]]: - pass # pragma: no cover - - def __len__(self) -> int: - return len(self._routes) - - def __iter__(self) -> Iterator[AbstractRoute]: - return iter(self._routes) - - # TODO: implement all abstract methods - - -class PlainResource(Resource): - def __init__(self, path: str, *, name: Optional[str] = None) -> None: - super().__init__(name=name) - assert not path or path.startswith("/") - self._path = path - - @property - def canonical(self) -> str: - return self._path - - def freeze(self) -> None: - if not self._path: - self._path = "/" - - def add_prefix(self, prefix: str) -> None: - assert prefix.startswith("/") - assert not prefix.endswith("/") - assert len(prefix) > 1 - self._path = prefix + self._path - - def _match(self, path: str) -> Optional[Dict[str, str]]: - # string comparison is about 10 times faster than regexp matching - if self._path == path: - return {} - else: - return None - - def raw_match(self, path: str) -> bool: - return self._path == path - - def get_info(self) -> _InfoDict: - return {"path": self._path} - - def url_for(self) -> URL: # type: ignore - return URL.build(path=self._path, encoded=True) - - def __repr__(self) -> str: - name = "'" + self.name + "' " if self.name is not None else "" - return f"" - - -class DynamicResource(Resource): - - DYN = re.compile(r"\{(?P[_a-zA-Z][_a-zA-Z0-9]*)\}") - DYN_WITH_RE = re.compile(r"\{(?P[_a-zA-Z][_a-zA-Z0-9]*):(?P.+)\}") - GOOD = r"[^{}/]+" - - def __init__(self, path: str, *, name: Optional[str] = None) -> None: - super().__init__(name=name) - pattern = "" - formatter = "" - for part in ROUTE_RE.split(path): - match = self.DYN.fullmatch(part) - if match: - pattern += "(?P<{}>{})".format(match.group("var"), self.GOOD) - formatter += "{" + match.group("var") + "}" - continue - - match = self.DYN_WITH_RE.fullmatch(part) - if match: - pattern += "(?P<{var}>{re})".format(**match.groupdict()) - formatter += "{" + match.group("var") + "}" - continue - - if "{" in part or "}" in part: - raise ValueError(f"Invalid path '{path}'['{part}']") - - part = _requote_path(part) - formatter += part - pattern += re.escape(part) - - try: - compiled = re.compile(pattern) - except re.error as exc: - raise ValueError(f"Bad pattern '{pattern}': {exc}") from None - assert compiled.pattern.startswith(PATH_SEP) - assert formatter.startswith("/") - self._pattern = compiled - self._formatter = formatter - - @property - def canonical(self) -> str: - return self._formatter - - def add_prefix(self, prefix: str) -> None: - assert prefix.startswith("/") - assert not prefix.endswith("/") - assert len(prefix) > 1 - self._pattern = re.compile(re.escape(prefix) + self._pattern.pattern) - self._formatter = prefix + self._formatter - - def _match(self, path: str) -> Optional[Dict[str, str]]: - match = self._pattern.fullmatch(path) - if match is None: - return None - else: - return { - key: _unquote_path(value) for key, value in match.groupdict().items() - } - - def raw_match(self, path: str) -> bool: - return self._formatter == path - - def get_info(self) -> _InfoDict: - return {"formatter": self._formatter, "pattern": self._pattern} - - def url_for(self, **parts: str) -> URL: - url = self._formatter.format_map({k: _quote_path(v) for k, v in parts.items()}) - return URL.build(path=url, encoded=True) - - def __repr__(self) -> str: - name = "'" + self.name + "' " if self.name is not None else "" - return "".format( - name=name, formatter=self._formatter - ) - - -class PrefixResource(AbstractResource): - def __init__(self, prefix: str, *, name: Optional[str] = None) -> None: - assert not prefix or prefix.startswith("/"), prefix - assert prefix in ("", "/") or not prefix.endswith("/"), prefix - super().__init__(name=name) - self._prefix = _requote_path(prefix) - - @property - def canonical(self) -> str: - return self._prefix - - def add_prefix(self, prefix: str) -> None: - assert prefix.startswith("/") - assert not prefix.endswith("/") - assert len(prefix) > 1 - self._prefix = prefix + self._prefix - - def raw_match(self, prefix: str) -> bool: - return False - - # TODO: impl missing abstract methods - - -class StaticResource(PrefixResource): - VERSION_KEY = "v" - - def __init__( - self, - prefix: str, - directory: PathLike, - *, - name: Optional[str] = None, - expect_handler: Optional[_ExpectHandler] = None, - chunk_size: int = 256 * 1024, - show_index: bool = False, - follow_symlinks: bool = False, - append_version: bool = False, - ) -> None: - super().__init__(prefix, name=name) - try: - directory = Path(directory) - if str(directory).startswith("~"): - directory = Path(os.path.expanduser(str(directory))) - directory = directory.resolve() - if not directory.is_dir(): - raise ValueError("Not a directory") - except (FileNotFoundError, ValueError) as error: - raise ValueError(f"No directory exists at '{directory}'") from error - self._directory = directory - self._show_index = show_index - self._chunk_size = chunk_size - self._follow_symlinks = follow_symlinks - self._expect_handler = expect_handler - self._append_version = append_version - - self._routes = { - "GET": ResourceRoute( - "GET", self._handle, self, expect_handler=expect_handler - ), - "HEAD": ResourceRoute( - "HEAD", self._handle, self, expect_handler=expect_handler - ), - } - - def url_for( # type: ignore - self, - *, - filename: Union[str, Path], - append_version: Optional[bool] = None, - ) -> URL: - if append_version is None: - append_version = self._append_version - if isinstance(filename, Path): - filename = str(filename) - filename = filename.lstrip("/") - - url = URL.build(path=self._prefix, encoded=True) - # filename is not encoded - if YARL_VERSION < (1, 6): - url = url / filename.replace("%", "%25") - else: - url = url / filename - - if append_version: - try: - filepath = self._directory.joinpath(filename).resolve() - if not self._follow_symlinks: - filepath.relative_to(self._directory) - except (ValueError, FileNotFoundError): - # ValueError for case when path point to symlink - # with follow_symlinks is False - return url # relatively safe - if filepath.is_file(): - # TODO cache file content - # with file watcher for cache invalidation - with filepath.open("rb") as f: - file_bytes = f.read() - h = self._get_file_hash(file_bytes) - url = url.with_query({self.VERSION_KEY: h}) - return url - return url - - @staticmethod - def _get_file_hash(byte_array: bytes) -> str: - m = hashlib.sha256() # todo sha256 can be configurable param - m.update(byte_array) - b64 = base64.urlsafe_b64encode(m.digest()) - return b64.decode("ascii") - - def get_info(self) -> _InfoDict: - return { - "directory": self._directory, - "prefix": self._prefix, - "routes": self._routes, - } - - def set_options_route(self, handler: _WebHandler) -> None: - if "OPTIONS" in self._routes: - raise RuntimeError("OPTIONS route was set already") - self._routes["OPTIONS"] = ResourceRoute( - "OPTIONS", handler, self, expect_handler=self._expect_handler - ) - - async def resolve(self, request: Request) -> _Resolve: - path = request.rel_url.raw_path - method = request.method - allowed_methods = set(self._routes) - if not path.startswith(self._prefix): - return None, set() - - if method not in allowed_methods: - return None, allowed_methods - - match_dict = {"filename": _unquote_path(path[len(self._prefix) + 1 :])} - return (UrlMappingMatchInfo(match_dict, self._routes[method]), allowed_methods) - - def __len__(self) -> int: - return len(self._routes) - - def __iter__(self) -> Iterator[AbstractRoute]: - return iter(self._routes.values()) - - async def _handle(self, request: Request) -> StreamResponse: - rel_url = request.match_info["filename"] - try: - filename = Path(rel_url) - if filename.anchor: - # rel_url is an absolute name like - # /static/\\machine_name\c$ or /static/D:\path - # where the static dir is totally different - raise HTTPForbidden() - filepath = self._directory.joinpath(filename).resolve() - if not self._follow_symlinks: - filepath.relative_to(self._directory) - except (ValueError, FileNotFoundError) as error: - # relatively safe - raise HTTPNotFound() from error - except HTTPForbidden: - raise - except Exception as error: - # perm error or other kind! - request.app.logger.exception(error) - raise HTTPNotFound() from error - - # on opening a dir, load its contents if allowed - if filepath.is_dir(): - if self._show_index: - try: - return Response( - text=self._directory_as_html(filepath), content_type="text/html" - ) - except PermissionError: - raise HTTPForbidden() - else: - raise HTTPForbidden() - elif filepath.is_file(): - return FileResponse(filepath, chunk_size=self._chunk_size) - else: - raise HTTPNotFound - - def _directory_as_html(self, filepath: Path) -> str: - # returns directory's index as html - - # sanity check - assert filepath.is_dir() - - relative_path_to_dir = filepath.relative_to(self._directory).as_posix() - index_of = f"Index of /{relative_path_to_dir}" - h1 = f"

{index_of}

" - - index_list = [] - dir_index = filepath.iterdir() - for _file in sorted(dir_index): - # show file url as relative to static path - rel_path = _file.relative_to(self._directory).as_posix() - file_url = self._prefix + "/" + rel_path - - # if file is a directory, add '/' to the end of the name - if _file.is_dir(): - file_name = f"{_file.name}/" - else: - file_name = _file.name - - index_list.append( - '
  • {name}
  • '.format( - url=file_url, name=file_name - ) - ) - ul = "
      \n{}\n
    ".format("\n".join(index_list)) - body = f"\n{h1}\n{ul}\n" - - head_str = f"\n{index_of}\n" - html = f"\n{head_str}\n{body}\n" - - return html - - def __repr__(self) -> str: - name = "'" + self.name + "'" if self.name is not None else "" - return " {directory!r}>".format( - name=name, path=self._prefix, directory=self._directory - ) - - -class PrefixedSubAppResource(PrefixResource): - def __init__(self, prefix: str, app: "Application") -> None: - super().__init__(prefix) - self._app = app - for resource in app.router.resources(): - resource.add_prefix(prefix) - - def add_prefix(self, prefix: str) -> None: - super().add_prefix(prefix) - for resource in self._app.router.resources(): - resource.add_prefix(prefix) - - def url_for(self, *args: str, **kwargs: str) -> URL: - raise RuntimeError(".url_for() is not supported " "by sub-application root") - - def get_info(self) -> _InfoDict: - return {"app": self._app, "prefix": self._prefix} - - async def resolve(self, request: Request) -> _Resolve: - if ( - not request.url.raw_path.startswith(self._prefix + "/") - and request.url.raw_path != self._prefix - ): - return None, set() - match_info = await self._app.router.resolve(request) - match_info.add_app(self._app) - if isinstance(match_info.http_exception, HTTPMethodNotAllowed): - methods = match_info.http_exception.allowed_methods - else: - methods = set() - return match_info, methods - - def __len__(self) -> int: - return len(self._app.router.routes()) - - def __iter__(self) -> Iterator[AbstractRoute]: - return iter(self._app.router.routes()) - - def __repr__(self) -> str: - return " {app!r}>".format( - prefix=self._prefix, app=self._app - ) - - -class AbstractRuleMatching(abc.ABC): - @abc.abstractmethod # pragma: no branch - async def match(self, request: Request) -> bool: - """Return bool if the request satisfies the criteria""" - - @abc.abstractmethod # pragma: no branch - def get_info(self) -> _InfoDict: - """Return a dict with additional info useful for introspection""" - - @property - @abc.abstractmethod # pragma: no branch - def canonical(self) -> str: - """Return a str""" - - -class Domain(AbstractRuleMatching): - re_part = re.compile(r"(?!-)[a-z\d-]{1,63}(? None: - super().__init__() - self._domain = self.validation(domain) - - @property - def canonical(self) -> str: - return self._domain - - def validation(self, domain: str) -> str: - if not isinstance(domain, str): - raise TypeError("Domain must be str") - domain = domain.rstrip(".").lower() - if not domain: - raise ValueError("Domain cannot be empty") - elif "://" in domain: - raise ValueError("Scheme not supported") - url = URL("http://" + domain) - assert url.raw_host is not None - if not all(self.re_part.fullmatch(x) for x in url.raw_host.split(".")): - raise ValueError("Domain not valid") - if url.port == 80: - return url.raw_host - return f"{url.raw_host}:{url.port}" - - async def match(self, request: Request) -> bool: - host = request.headers.get(hdrs.HOST) - if not host: - return False - return self.match_domain(host) - - def match_domain(self, host: str) -> bool: - return host.lower() == self._domain - - def get_info(self) -> _InfoDict: - return {"domain": self._domain} - - -class MaskDomain(Domain): - re_part = re.compile(r"(?!-)[a-z\d\*-]{1,63}(? None: - super().__init__(domain) - mask = self._domain.replace(".", r"\.").replace("*", ".*") - self._mask = re.compile(mask) - - @property - def canonical(self) -> str: - return self._mask.pattern - - def match_domain(self, host: str) -> bool: - return self._mask.fullmatch(host) is not None - - -class MatchedSubAppResource(PrefixedSubAppResource): - def __init__(self, rule: AbstractRuleMatching, app: "Application") -> None: - AbstractResource.__init__(self) - self._prefix = "" - self._app = app - self._rule = rule - - @property - def canonical(self) -> str: - return self._rule.canonical - - def get_info(self) -> _InfoDict: - return {"app": self._app, "rule": self._rule} - - async def resolve(self, request: Request) -> _Resolve: - if not await self._rule.match(request): - return None, set() - match_info = await self._app.router.resolve(request) - match_info.add_app(self._app) - if isinstance(match_info.http_exception, HTTPMethodNotAllowed): - methods = match_info.http_exception.allowed_methods - else: - methods = set() - return match_info, methods - - def __repr__(self) -> str: - return " {app!r}>" "".format(app=self._app) - - -class ResourceRoute(AbstractRoute): - """A route with resource""" - - def __init__( - self, - method: str, - handler: Union[_WebHandler, Type[AbstractView]], - resource: AbstractResource, - *, - expect_handler: Optional[_ExpectHandler] = None, - ) -> None: - super().__init__( - method, handler, expect_handler=expect_handler, resource=resource - ) - - def __repr__(self) -> str: - return " {handler!r}".format( - method=self.method, resource=self._resource, handler=self.handler - ) - - @property - def name(self) -> Optional[str]: - if self._resource is None: - return None - return self._resource.name - - def url_for(self, *args: str, **kwargs: str) -> URL: - """Construct url for route with additional params.""" - assert self._resource is not None - return self._resource.url_for(*args, **kwargs) - - def get_info(self) -> _InfoDict: - assert self._resource is not None - return self._resource.get_info() - - -class SystemRoute(AbstractRoute): - def __init__(self, http_exception: HTTPException) -> None: - super().__init__(hdrs.METH_ANY, self._handle) - self._http_exception = http_exception - - def url_for(self, *args: str, **kwargs: str) -> URL: - raise RuntimeError(".url_for() is not allowed for SystemRoute") - - @property - def name(self) -> Optional[str]: - return None - - def get_info(self) -> _InfoDict: - return {"http_exception": self._http_exception} - - async def _handle(self, request: Request) -> StreamResponse: - raise self._http_exception - - @property - def status(self) -> int: - return self._http_exception.status - - @property - def reason(self) -> str: - return self._http_exception.reason - - def __repr__(self) -> str: - return "".format(self=self) - - -class View(AbstractView): - async def _iter(self) -> StreamResponse: - if self.request.method not in hdrs.METH_ALL: - self._raise_allowed_methods() - method = getattr(self, self.request.method.lower(), None) - if method is None: - self._raise_allowed_methods() - resp = await method() - return resp - - def __await__(self) -> Generator[Any, None, StreamResponse]: - return self._iter().__await__() - - def _raise_allowed_methods(self) -> None: - allowed_methods = {m for m in hdrs.METH_ALL if hasattr(self, m.lower())} - raise HTTPMethodNotAllowed(self.request.method, allowed_methods) - - -class ResourcesView(Sized, Iterable[AbstractResource], Container[AbstractResource]): - def __init__(self, resources: List[AbstractResource]) -> None: - self._resources = resources - - def __len__(self) -> int: - return len(self._resources) - - def __iter__(self) -> Iterator[AbstractResource]: - yield from self._resources - - def __contains__(self, resource: object) -> bool: - return resource in self._resources - - -class RoutesView(Sized, Iterable[AbstractRoute], Container[AbstractRoute]): - def __init__(self, resources: List[AbstractResource]): - self._routes = [] # type: List[AbstractRoute] - for resource in resources: - for route in resource: - self._routes.append(route) - - def __len__(self) -> int: - return len(self._routes) - - def __iter__(self) -> Iterator[AbstractRoute]: - yield from self._routes - - def __contains__(self, route: object) -> bool: - return route in self._routes - - -class UrlDispatcher(AbstractRouter, Mapping[str, AbstractResource]): - - NAME_SPLIT_RE = re.compile(r"[.:-]") - - def __init__(self) -> None: - super().__init__() - self._resources = [] # type: List[AbstractResource] - self._named_resources = {} # type: Dict[str, AbstractResource] - - async def resolve(self, request: Request) -> AbstractMatchInfo: - method = request.method - allowed_methods = set() # type: Set[str] - - for resource in self._resources: - match_dict, allowed = await resource.resolve(request) - if match_dict is not None: - return match_dict - else: - allowed_methods |= allowed - else: - if allowed_methods: - return MatchInfoError(HTTPMethodNotAllowed(method, allowed_methods)) - else: - return MatchInfoError(HTTPNotFound()) - - def __iter__(self) -> Iterator[str]: - return iter(self._named_resources) - - def __len__(self) -> int: - return len(self._named_resources) - - def __contains__(self, resource: object) -> bool: - return resource in self._named_resources - - def __getitem__(self, name: str) -> AbstractResource: - return self._named_resources[name] - - def resources(self) -> ResourcesView: - return ResourcesView(self._resources) - - def routes(self) -> RoutesView: - return RoutesView(self._resources) - - def named_resources(self) -> Mapping[str, AbstractResource]: - return MappingProxyType(self._named_resources) - - def register_resource(self, resource: AbstractResource) -> None: - assert isinstance( - resource, AbstractResource - ), f"Instance of AbstractResource class is required, got {resource!r}" - if self.frozen: - raise RuntimeError("Cannot register a resource into frozen router.") - - name = resource.name - - if name is not None: - parts = self.NAME_SPLIT_RE.split(name) - for part in parts: - if keyword.iskeyword(part): - raise ValueError( - f"Incorrect route name {name!r}, " - "python keywords cannot be used " - "for route name" - ) - if not part.isidentifier(): - raise ValueError( - "Incorrect route name {!r}, " - "the name should be a sequence of " - "python identifiers separated " - "by dash, dot or column".format(name) - ) - if name in self._named_resources: - raise ValueError( - "Duplicate {!r}, " - "already handled by {!r}".format(name, self._named_resources[name]) - ) - self._named_resources[name] = resource - self._resources.append(resource) - - def add_resource(self, path: str, *, name: Optional[str] = None) -> Resource: - if path and not path.startswith("/"): - raise ValueError("path should be started with / or be empty") - # Reuse last added resource if path and name are the same - if self._resources: - resource = self._resources[-1] - if resource.name == name and resource.raw_match(path): - return cast(Resource, resource) - if not ("{" in path or "}" in path or ROUTE_RE.search(path)): - resource = PlainResource(_requote_path(path), name=name) - self.register_resource(resource) - return resource - resource = DynamicResource(path, name=name) - self.register_resource(resource) - return resource - - def add_route( - self, - method: str, - path: str, - handler: Union[_WebHandler, Type[AbstractView]], - *, - name: Optional[str] = None, - expect_handler: Optional[_ExpectHandler] = None, - ) -> AbstractRoute: - resource = self.add_resource(path, name=name) - return resource.add_route(method, handler, expect_handler=expect_handler) - - def add_static( - self, - prefix: str, - path: PathLike, - *, - name: Optional[str] = None, - expect_handler: Optional[_ExpectHandler] = None, - chunk_size: int = 256 * 1024, - show_index: bool = False, - follow_symlinks: bool = False, - append_version: bool = False, - ) -> AbstractResource: - """Add static files view. - - prefix - url prefix - path - folder with files - - """ - assert prefix.startswith("/") - if prefix.endswith("/"): - prefix = prefix[:-1] - resource = StaticResource( - prefix, - path, - name=name, - expect_handler=expect_handler, - chunk_size=chunk_size, - show_index=show_index, - follow_symlinks=follow_symlinks, - append_version=append_version, - ) - self.register_resource(resource) - return resource - - def add_head(self, path: str, handler: _WebHandler, **kwargs: Any) -> AbstractRoute: - """ - Shortcut for add_route with method HEAD - """ - return self.add_route(hdrs.METH_HEAD, path, handler, **kwargs) - - def add_options( - self, path: str, handler: _WebHandler, **kwargs: Any - ) -> AbstractRoute: - """ - Shortcut for add_route with method OPTIONS - """ - return self.add_route(hdrs.METH_OPTIONS, path, handler, **kwargs) - - def add_get( - self, - path: str, - handler: _WebHandler, - *, - name: Optional[str] = None, - allow_head: bool = True, - **kwargs: Any, - ) -> AbstractRoute: - """ - Shortcut for add_route with method GET, if allow_head is true another - route is added allowing head requests to the same endpoint - """ - resource = self.add_resource(path, name=name) - if allow_head: - resource.add_route(hdrs.METH_HEAD, handler, **kwargs) - return resource.add_route(hdrs.METH_GET, handler, **kwargs) - - def add_post(self, path: str, handler: _WebHandler, **kwargs: Any) -> AbstractRoute: - """ - Shortcut for add_route with method POST - """ - return self.add_route(hdrs.METH_POST, path, handler, **kwargs) - - def add_put(self, path: str, handler: _WebHandler, **kwargs: Any) -> AbstractRoute: - """ - Shortcut for add_route with method PUT - """ - return self.add_route(hdrs.METH_PUT, path, handler, **kwargs) - - def add_patch( - self, path: str, handler: _WebHandler, **kwargs: Any - ) -> AbstractRoute: - """ - Shortcut for add_route with method PATCH - """ - return self.add_route(hdrs.METH_PATCH, path, handler, **kwargs) - - def add_delete( - self, path: str, handler: _WebHandler, **kwargs: Any - ) -> AbstractRoute: - """ - Shortcut for add_route with method DELETE - """ - return self.add_route(hdrs.METH_DELETE, path, handler, **kwargs) - - def add_view( - self, path: str, handler: Type[AbstractView], **kwargs: Any - ) -> AbstractRoute: - """ - Shortcut for add_route with ANY methods for a class-based view - """ - return self.add_route(hdrs.METH_ANY, path, handler, **kwargs) - - def freeze(self) -> None: - super().freeze() - for resource in self._resources: - resource.freeze() - - def add_routes(self, routes: Iterable[AbstractRouteDef]) -> List[AbstractRoute]: - """Append routes to route table. - - Parameter should be a sequence of RouteDef objects. - - Returns a list of registered AbstractRoute instances. - """ - registered_routes = [] - for route_def in routes: - registered_routes.extend(route_def.register(self)) - return registered_routes - - -def _quote_path(value: str) -> str: - if YARL_VERSION < (1, 6): - value = value.replace("%", "%25") - return URL.build(path=value, encoded=False).raw_path - - -def _unquote_path(value: str) -> str: - return URL.build(path=value, encoded=True).path - - -def _requote_path(value: str) -> str: - # Quote non-ascii characters and other characters which must be quoted, - # but preserve existing %-sequences. - result = _quote_path(value) - if "%" in value: - result = result.replace("%25", "%") - return result diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_ws.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_ws.py deleted file mode 100644 index da7ce6df..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/web_ws.py +++ /dev/null @@ -1,481 +0,0 @@ -import asyncio -import base64 -import binascii -import hashlib -import json -from typing import Any, Iterable, Optional, Tuple - -import async_timeout -import attr -from multidict import CIMultiDict - -from . import hdrs -from .abc import AbstractStreamWriter -from .helpers import call_later, set_result -from .http import ( - WS_CLOSED_MESSAGE, - WS_CLOSING_MESSAGE, - WS_KEY, - WebSocketError, - WebSocketReader, - WebSocketWriter, - WSMessage, - WSMsgType as WSMsgType, - ws_ext_gen, - ws_ext_parse, -) -from .log import ws_logger -from .streams import EofStream, FlowControlDataQueue -from .typedefs import JSONDecoder, JSONEncoder -from .web_exceptions import HTTPBadRequest, HTTPException -from .web_request import BaseRequest -from .web_response import StreamResponse - -__all__ = ( - "WebSocketResponse", - "WebSocketReady", - "WSMsgType", -) - -THRESHOLD_CONNLOST_ACCESS = 5 - - -@attr.s(auto_attribs=True, frozen=True, slots=True) -class WebSocketReady: - ok: bool - protocol: Optional[str] - - def __bool__(self) -> bool: - return self.ok - - -class WebSocketResponse(StreamResponse): - - _length_check = False - - def __init__( - self, - *, - timeout: float = 10.0, - receive_timeout: Optional[float] = None, - autoclose: bool = True, - autoping: bool = True, - heartbeat: Optional[float] = None, - protocols: Iterable[str] = (), - compress: bool = True, - max_msg_size: int = 4 * 1024 * 1024, - ) -> None: - super().__init__(status=101) - self._protocols = protocols - self._ws_protocol = None # type: Optional[str] - self._writer = None # type: Optional[WebSocketWriter] - self._reader = None # type: Optional[FlowControlDataQueue[WSMessage]] - self._closed = False - self._closing = False - self._conn_lost = 0 - self._close_code = None # type: Optional[int] - self._loop = None # type: Optional[asyncio.AbstractEventLoop] - self._waiting = None # type: Optional[asyncio.Future[bool]] - self._exception = None # type: Optional[BaseException] - self._timeout = timeout - self._receive_timeout = receive_timeout - self._autoclose = autoclose - self._autoping = autoping - self._heartbeat = heartbeat - self._heartbeat_cb = None - if heartbeat is not None: - self._pong_heartbeat = heartbeat / 2.0 - self._pong_response_cb = None - self._compress = compress - self._max_msg_size = max_msg_size - - def _cancel_heartbeat(self) -> None: - if self._pong_response_cb is not None: - self._pong_response_cb.cancel() - self._pong_response_cb = None - - if self._heartbeat_cb is not None: - self._heartbeat_cb.cancel() - self._heartbeat_cb = None - - def _reset_heartbeat(self) -> None: - self._cancel_heartbeat() - - if self._heartbeat is not None: - self._heartbeat_cb = call_later( - self._send_heartbeat, self._heartbeat, self._loop - ) - - def _send_heartbeat(self) -> None: - if self._heartbeat is not None and not self._closed: - # fire-and-forget a task is not perfect but maybe ok for - # sending ping. Otherwise we need a long-living heartbeat - # task in the class. - self._loop.create_task(self._writer.ping()) # type: ignore - - if self._pong_response_cb is not None: - self._pong_response_cb.cancel() - self._pong_response_cb = call_later( - self._pong_not_received, self._pong_heartbeat, self._loop - ) - - def _pong_not_received(self) -> None: - if self._req is not None and self._req.transport is not None: - self._closed = True - self._close_code = 1006 - self._exception = asyncio.TimeoutError() - self._req.transport.close() - - async def prepare(self, request: BaseRequest) -> AbstractStreamWriter: - # make pre-check to don't hide it by do_handshake() exceptions - if self._payload_writer is not None: - return self._payload_writer - - protocol, writer = self._pre_start(request) - payload_writer = await super().prepare(request) - assert payload_writer is not None - self._post_start(request, protocol, writer) - await payload_writer.drain() - return payload_writer - - def _handshake( - self, request: BaseRequest - ) -> Tuple["CIMultiDict[str]", str, bool, bool]: - headers = request.headers - if "websocket" != headers.get(hdrs.UPGRADE, "").lower().strip(): - raise HTTPBadRequest( - text=( - "No WebSocket UPGRADE hdr: {}\n Can " - '"Upgrade" only to "WebSocket".' - ).format(headers.get(hdrs.UPGRADE)) - ) - - if "upgrade" not in headers.get(hdrs.CONNECTION, "").lower(): - raise HTTPBadRequest( - text="No CONNECTION upgrade hdr: {}".format( - headers.get(hdrs.CONNECTION) - ) - ) - - # find common sub-protocol between client and server - protocol = None - if hdrs.SEC_WEBSOCKET_PROTOCOL in headers: - req_protocols = [ - str(proto.strip()) - for proto in headers[hdrs.SEC_WEBSOCKET_PROTOCOL].split(",") - ] - - for proto in req_protocols: - if proto in self._protocols: - protocol = proto - break - else: - # No overlap found: Return no protocol as per spec - ws_logger.warning( - "Client protocols %r don’t overlap server-known ones %r", - req_protocols, - self._protocols, - ) - - # check supported version - version = headers.get(hdrs.SEC_WEBSOCKET_VERSION, "") - if version not in ("13", "8", "7"): - raise HTTPBadRequest(text=f"Unsupported version: {version}") - - # check client handshake for validity - key = headers.get(hdrs.SEC_WEBSOCKET_KEY) - try: - if not key or len(base64.b64decode(key)) != 16: - raise HTTPBadRequest(text=f"Handshake error: {key!r}") - except binascii.Error: - raise HTTPBadRequest(text=f"Handshake error: {key!r}") from None - - accept_val = base64.b64encode( - hashlib.sha1(key.encode() + WS_KEY).digest() - ).decode() - response_headers = CIMultiDict( # type: ignore - { - hdrs.UPGRADE: "websocket", # type: ignore - hdrs.CONNECTION: "upgrade", - hdrs.SEC_WEBSOCKET_ACCEPT: accept_val, - } - ) - - notakeover = False - compress = 0 - if self._compress: - extensions = headers.get(hdrs.SEC_WEBSOCKET_EXTENSIONS) - # Server side always get return with no exception. - # If something happened, just drop compress extension - compress, notakeover = ws_ext_parse(extensions, isserver=True) - if compress: - enabledext = ws_ext_gen( - compress=compress, isserver=True, server_notakeover=notakeover - ) - response_headers[hdrs.SEC_WEBSOCKET_EXTENSIONS] = enabledext - - if protocol: - response_headers[hdrs.SEC_WEBSOCKET_PROTOCOL] = protocol - return (response_headers, protocol, compress, notakeover) # type: ignore - - def _pre_start(self, request: BaseRequest) -> Tuple[str, WebSocketWriter]: - self._loop = request._loop - - headers, protocol, compress, notakeover = self._handshake(request) - - self.set_status(101) - self.headers.update(headers) - self.force_close() - self._compress = compress - transport = request._protocol.transport - assert transport is not None - writer = WebSocketWriter( - request._protocol, transport, compress=compress, notakeover=notakeover - ) - - return protocol, writer - - def _post_start( - self, request: BaseRequest, protocol: str, writer: WebSocketWriter - ) -> None: - self._ws_protocol = protocol - self._writer = writer - - self._reset_heartbeat() - - loop = self._loop - assert loop is not None - self._reader = FlowControlDataQueue(request._protocol, 2 ** 16, loop=loop) - request.protocol.set_parser( - WebSocketReader(self._reader, self._max_msg_size, compress=self._compress) - ) - # disable HTTP keepalive for WebSocket - request.protocol.keep_alive(False) - - def can_prepare(self, request: BaseRequest) -> WebSocketReady: - if self._writer is not None: - raise RuntimeError("Already started") - try: - _, protocol, _, _ = self._handshake(request) - except HTTPException: - return WebSocketReady(False, None) - else: - return WebSocketReady(True, protocol) - - @property - def closed(self) -> bool: - return self._closed - - @property - def close_code(self) -> Optional[int]: - return self._close_code - - @property - def ws_protocol(self) -> Optional[str]: - return self._ws_protocol - - @property - def compress(self) -> bool: - return self._compress - - def exception(self) -> Optional[BaseException]: - return self._exception - - async def ping(self, message: bytes = b"") -> None: - if self._writer is None: - raise RuntimeError("Call .prepare() first") - await self._writer.ping(message) - - async def pong(self, message: bytes = b"") -> None: - # unsolicited pong - if self._writer is None: - raise RuntimeError("Call .prepare() first") - await self._writer.pong(message) - - async def send_str(self, data: str, compress: Optional[bool] = None) -> None: - if self._writer is None: - raise RuntimeError("Call .prepare() first") - if not isinstance(data, str): - raise TypeError("data argument must be str (%r)" % type(data)) - await self._writer.send(data, binary=False, compress=compress) - - async def send_bytes(self, data: bytes, compress: Optional[bool] = None) -> None: - if self._writer is None: - raise RuntimeError("Call .prepare() first") - if not isinstance(data, (bytes, bytearray, memoryview)): - raise TypeError("data argument must be byte-ish (%r)" % type(data)) - await self._writer.send(data, binary=True, compress=compress) - - async def send_json( - self, - data: Any, - compress: Optional[bool] = None, - *, - dumps: JSONEncoder = json.dumps, - ) -> None: - await self.send_str(dumps(data), compress=compress) - - async def write_eof(self) -> None: # type: ignore - if self._eof_sent: - return - if self._payload_writer is None: - raise RuntimeError("Response has not been started") - - await self.close() - self._eof_sent = True - - async def close(self, *, code: int = 1000, message: bytes = b"") -> bool: - if self._writer is None: - raise RuntimeError("Call .prepare() first") - - self._cancel_heartbeat() - reader = self._reader - assert reader is not None - - # we need to break `receive()` cycle first, - # `close()` may be called from different task - if self._waiting is not None and not self._closed: - reader.feed_data(WS_CLOSING_MESSAGE, 0) - await self._waiting - - if not self._closed: - self._closed = True - try: - await self._writer.close(code, message) - writer = self._payload_writer - assert writer is not None - await writer.drain() - except (asyncio.CancelledError, asyncio.TimeoutError): - self._close_code = 1006 - raise - except Exception as exc: - self._close_code = 1006 - self._exception = exc - return True - - if self._closing: - return True - - reader = self._reader - assert reader is not None - try: - with async_timeout.timeout(self._timeout, loop=self._loop): - msg = await reader.read() - except asyncio.CancelledError: - self._close_code = 1006 - raise - except Exception as exc: - self._close_code = 1006 - self._exception = exc - return True - - if msg.type == WSMsgType.CLOSE: - self._close_code = msg.data - return True - - self._close_code = 1006 - self._exception = asyncio.TimeoutError() - return True - else: - return False - - async def receive(self, timeout: Optional[float] = None) -> WSMessage: - if self._reader is None: - raise RuntimeError("Call .prepare() first") - - loop = self._loop - assert loop is not None - while True: - if self._waiting is not None: - raise RuntimeError("Concurrent call to receive() is not allowed") - - if self._closed: - self._conn_lost += 1 - if self._conn_lost >= THRESHOLD_CONNLOST_ACCESS: - raise RuntimeError("WebSocket connection is closed.") - return WS_CLOSED_MESSAGE - elif self._closing: - return WS_CLOSING_MESSAGE - - try: - self._waiting = loop.create_future() - try: - with async_timeout.timeout( - timeout or self._receive_timeout, loop=self._loop - ): - msg = await self._reader.read() - self._reset_heartbeat() - finally: - waiter = self._waiting - set_result(waiter, True) - self._waiting = None - except (asyncio.CancelledError, asyncio.TimeoutError): - self._close_code = 1006 - raise - except EofStream: - self._close_code = 1000 - await self.close() - return WSMessage(WSMsgType.CLOSED, None, None) - except WebSocketError as exc: - self._close_code = exc.code - await self.close(code=exc.code) - return WSMessage(WSMsgType.ERROR, exc, None) - except Exception as exc: - self._exception = exc - self._closing = True - self._close_code = 1006 - await self.close() - return WSMessage(WSMsgType.ERROR, exc, None) - - if msg.type == WSMsgType.CLOSE: - self._closing = True - self._close_code = msg.data - if not self._closed and self._autoclose: - await self.close() - elif msg.type == WSMsgType.CLOSING: - self._closing = True - elif msg.type == WSMsgType.PING and self._autoping: - await self.pong(msg.data) - continue - elif msg.type == WSMsgType.PONG and self._autoping: - continue - - return msg - - async def receive_str(self, *, timeout: Optional[float] = None) -> str: - msg = await self.receive(timeout) - if msg.type != WSMsgType.TEXT: - raise TypeError( - "Received message {}:{!r} is not WSMsgType.TEXT".format( - msg.type, msg.data - ) - ) - return msg.data - - async def receive_bytes(self, *, timeout: Optional[float] = None) -> bytes: - msg = await self.receive(timeout) - if msg.type != WSMsgType.BINARY: - raise TypeError(f"Received message {msg.type}:{msg.data!r} is not bytes") - return msg.data - - async def receive_json( - self, *, loads: JSONDecoder = json.loads, timeout: Optional[float] = None - ) -> Any: - data = await self.receive_str(timeout=timeout) - return loads(data) - - async def write(self, data: bytes) -> None: - raise RuntimeError("Cannot call .write() for websocket") - - def __aiter__(self) -> "WebSocketResponse": - return self - - async def __anext__(self) -> WSMessage: - msg = await self.receive() - if msg.type in (WSMsgType.CLOSE, WSMsgType.CLOSING, WSMsgType.CLOSED): - raise StopAsyncIteration - return msg - - def _cancel(self, exc: BaseException) -> None: - if self._reader is not None: - self._reader.set_exception(exc) diff --git a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/worker.py b/IKEA_scraper/.venv/Lib/site-packages/aiohttp/worker.py deleted file mode 100644 index 67b244bb..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/aiohttp/worker.py +++ /dev/null @@ -1,252 +0,0 @@ -"""Async gunicorn worker for aiohttp.web""" - -import asyncio -import os -import re -import signal -import sys -from types import FrameType -from typing import Any, Awaitable, Callable, Optional, Union # noqa - -from gunicorn.config import AccessLogFormat as GunicornAccessLogFormat -from gunicorn.workers import base - -from aiohttp import web - -from .helpers import set_result -from .web_app import Application -from .web_log import AccessLogger - -try: - import ssl - - SSLContext = ssl.SSLContext -except ImportError: # pragma: no cover - ssl = None # type: ignore - SSLContext = object # type: ignore - - -__all__ = ("GunicornWebWorker", "GunicornUVLoopWebWorker", "GunicornTokioWebWorker") - - -class GunicornWebWorker(base.Worker): - - DEFAULT_AIOHTTP_LOG_FORMAT = AccessLogger.LOG_FORMAT - DEFAULT_GUNICORN_LOG_FORMAT = GunicornAccessLogFormat.default - - def __init__(self, *args: Any, **kw: Any) -> None: # pragma: no cover - super().__init__(*args, **kw) - - self._task = None # type: Optional[asyncio.Task[None]] - self.exit_code = 0 - self._notify_waiter = None # type: Optional[asyncio.Future[bool]] - - def init_process(self) -> None: - # create new event_loop after fork - asyncio.get_event_loop().close() - - self.loop = asyncio.new_event_loop() - asyncio.set_event_loop(self.loop) - - super().init_process() - - def run(self) -> None: - self._task = self.loop.create_task(self._run()) - - try: # ignore all finalization problems - self.loop.run_until_complete(self._task) - except Exception: - self.log.exception("Exception in gunicorn worker") - if sys.version_info >= (3, 6): - self.loop.run_until_complete(self.loop.shutdown_asyncgens()) - self.loop.close() - - sys.exit(self.exit_code) - - async def _run(self) -> None: - if isinstance(self.wsgi, Application): - app = self.wsgi - elif asyncio.iscoroutinefunction(self.wsgi): - app = await self.wsgi() - else: - raise RuntimeError( - "wsgi app should be either Application or " - "async function returning Application, got {}".format(self.wsgi) - ) - access_log = self.log.access_log if self.cfg.accesslog else None - runner = web.AppRunner( - app, - logger=self.log, - keepalive_timeout=self.cfg.keepalive, - access_log=access_log, - access_log_format=self._get_valid_log_format(self.cfg.access_log_format), - ) - await runner.setup() - - ctx = self._create_ssl_context(self.cfg) if self.cfg.is_ssl else None - - runner = runner - assert runner is not None - server = runner.server - assert server is not None - for sock in self.sockets: - site = web.SockSite( - runner, - sock, - ssl_context=ctx, - shutdown_timeout=self.cfg.graceful_timeout / 100 * 95, - ) - await site.start() - - # If our parent changed then we shut down. - pid = os.getpid() - try: - while self.alive: # type: ignore - self.notify() - - cnt = server.requests_count - if self.cfg.max_requests and cnt > self.cfg.max_requests: - self.alive = False - self.log.info("Max requests, shutting down: %s", self) - - elif pid == os.getpid() and self.ppid != os.getppid(): - self.alive = False - self.log.info("Parent changed, shutting down: %s", self) - else: - await self._wait_next_notify() - except BaseException: - pass - - await runner.cleanup() - - def _wait_next_notify(self) -> "asyncio.Future[bool]": - self._notify_waiter_done() - - loop = self.loop - assert loop is not None - self._notify_waiter = waiter = loop.create_future() - self.loop.call_later(1.0, self._notify_waiter_done, waiter) - - return waiter - - def _notify_waiter_done( - self, waiter: Optional["asyncio.Future[bool]"] = None - ) -> None: - if waiter is None: - waiter = self._notify_waiter - if waiter is not None: - set_result(waiter, True) - - if waiter is self._notify_waiter: - self._notify_waiter = None - - def init_signals(self) -> None: - # Set up signals through the event loop API. - - self.loop.add_signal_handler( - signal.SIGQUIT, self.handle_quit, signal.SIGQUIT, None - ) - - self.loop.add_signal_handler( - signal.SIGTERM, self.handle_exit, signal.SIGTERM, None - ) - - self.loop.add_signal_handler( - signal.SIGINT, self.handle_quit, signal.SIGINT, None - ) - - self.loop.add_signal_handler( - signal.SIGWINCH, self.handle_winch, signal.SIGWINCH, None - ) - - self.loop.add_signal_handler( - signal.SIGUSR1, self.handle_usr1, signal.SIGUSR1, None - ) - - self.loop.add_signal_handler( - signal.SIGABRT, self.handle_abort, signal.SIGABRT, None - ) - - # Don't let SIGTERM and SIGUSR1 disturb active requests - # by interrupting system calls - signal.siginterrupt(signal.SIGTERM, False) - signal.siginterrupt(signal.SIGUSR1, False) - - def handle_quit(self, sig: int, frame: FrameType) -> None: - self.alive = False - - # worker_int callback - self.cfg.worker_int(self) - - # wakeup closing process - self._notify_waiter_done() - - def handle_abort(self, sig: int, frame: FrameType) -> None: - self.alive = False - self.exit_code = 1 - self.cfg.worker_abort(self) - sys.exit(1) - - @staticmethod - def _create_ssl_context(cfg: Any) -> "SSLContext": - """Creates SSLContext instance for usage in asyncio.create_server. - - See ssl.SSLSocket.__init__ for more details. - """ - if ssl is None: # pragma: no cover - raise RuntimeError("SSL is not supported.") - - ctx = ssl.SSLContext(cfg.ssl_version) - ctx.load_cert_chain(cfg.certfile, cfg.keyfile) - ctx.verify_mode = cfg.cert_reqs - if cfg.ca_certs: - ctx.load_verify_locations(cfg.ca_certs) - if cfg.ciphers: - ctx.set_ciphers(cfg.ciphers) - return ctx - - def _get_valid_log_format(self, source_format: str) -> str: - if source_format == self.DEFAULT_GUNICORN_LOG_FORMAT: - return self.DEFAULT_AIOHTTP_LOG_FORMAT - elif re.search(r"%\([^\)]+\)", source_format): - raise ValueError( - "Gunicorn's style options in form of `%(name)s` are not " - "supported for the log formatting. Please use aiohttp's " - "format specification to configure access log formatting: " - "http://docs.aiohttp.org/en/stable/logging.html" - "#format-specification" - ) - else: - return source_format - - -class GunicornUVLoopWebWorker(GunicornWebWorker): - def init_process(self) -> None: - import uvloop - - # Close any existing event loop before setting a - # new policy. - asyncio.get_event_loop().close() - - # Setup uvloop policy, so that every - # asyncio.get_event_loop() will create an instance - # of uvloop event loop. - asyncio.set_event_loop_policy(uvloop.EventLoopPolicy()) - - super().init_process() - - -class GunicornTokioWebWorker(GunicornWebWorker): - def init_process(self) -> None: # pragma: no cover - import tokio - - # Close any existing event loop before setting a - # new policy. - asyncio.get_event_loop().close() - - # Setup tokio policy, so that every - # asyncio.get_event_loop() will create an instance - # of tokio event loop. - asyncio.set_event_loop_policy(tokio.EventLoopPolicy()) - - super().init_process() diff --git a/IKEA_scraper/.venv/Lib/site-packages/async_timeout-3.0.1.dist-info/INSTALLER b/IKEA_scraper/.venv/Lib/site-packages/async_timeout-3.0.1.dist-info/INSTALLER deleted file mode 100644 index a1b589e3..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/async_timeout-3.0.1.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/IKEA_scraper/.venv/Lib/site-packages/async_timeout-3.0.1.dist-info/LICENSE b/IKEA_scraper/.venv/Lib/site-packages/async_timeout-3.0.1.dist-info/LICENSE deleted file mode 100644 index 8dada3ed..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/async_timeout-3.0.1.dist-info/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/IKEA_scraper/.venv/Lib/site-packages/async_timeout-3.0.1.dist-info/METADATA b/IKEA_scraper/.venv/Lib/site-packages/async_timeout-3.0.1.dist-info/METADATA deleted file mode 100644 index 5ec05a27..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/async_timeout-3.0.1.dist-info/METADATA +++ /dev/null @@ -1,165 +0,0 @@ -Metadata-Version: 2.1 -Name: async-timeout -Version: 3.0.1 -Summary: Timeout context manager for asyncio programs -Home-page: https://github.com/aio-libs/async_timeout/ -Author: Andrew Svetlov -Author-email: andrew.svetlov@gmail.com -License: Apache 2 -Platform: UNKNOWN -Classifier: License :: OSI Approved :: Apache Software License -Classifier: Intended Audience :: Developers -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Topic :: Internet :: WWW/HTTP -Classifier: Framework :: AsyncIO -Requires-Python: >=3.5.3 - -async-timeout -============= -.. image:: https://travis-ci.org/aio-libs/async-timeout.svg?branch=master - :target: https://travis-ci.org/aio-libs/async-timeout -.. image:: https://codecov.io/gh/aio-libs/async-timeout/branch/master/graph/badge.svg - :target: https://codecov.io/gh/aio-libs/async-timeout -.. image:: https://img.shields.io/pypi/v/async-timeout.svg - :target: https://pypi.python.org/pypi/async-timeout -.. image:: https://badges.gitter.im/Join%20Chat.svg - :target: https://gitter.im/aio-libs/Lobby - :alt: Chat on Gitter - -asyncio-compatible timeout context manager. - - -Usage example -------------- - - -The context manager is useful in cases when you want to apply timeout -logic around block of code or in cases when ``asyncio.wait_for()`` is -not suitable. Also it's much faster than ``asyncio.wait_for()`` -because ``timeout`` doesn't create a new task. - -The ``timeout(timeout, *, loop=None)`` call returns a context manager -that cancels a block on *timeout* expiring:: - - async with timeout(1.5): - await inner() - -1. If ``inner()`` is executed faster than in ``1.5`` seconds nothing - happens. -2. Otherwise ``inner()`` is cancelled internally by sending - ``asyncio.CancelledError`` into but ``asyncio.TimeoutError`` is - raised outside of context manager scope. - -*timeout* parameter could be ``None`` for skipping timeout functionality. - - -Context manager has ``.expired`` property for check if timeout happens -exactly in context manager:: - - async with timeout(1.5) as cm: - await inner() - print(cm.expired) - -The property is ``True`` if ``inner()`` execution is cancelled by -timeout context manager. - -If ``inner()`` call explicitly raises ``TimeoutError`` ``cm.expired`` -is ``False``. - -Installation ------------- - -:: - - $ pip install async-timeout - -The library is Python 3 only! - - - -Authors and License -------------------- - -The module is written by Andrew Svetlov. - -It's *Apache 2* licensed and freely available. - - -CHANGES -======= - -3.0.1 (2018-10-09) ------------------- - -- More aggressive typing (#48) - -3.0.0 (2018-05-05) ------------------- - -- Drop Python 3.4, the minimal supported version is Python 3.5.3 - -- Provide type annotations - -2.0.1 (2018-03-13) ------------------- - -* Fix ``PendingDeprecationWarning`` on Python 3.7 (#33) - - -2.0.0 (2017-10-09) ------------------- - -* Changed `timeout <= 0` behaviour - - * Backward incompatibility change, prior this version `0` was - shortcut for `None` - * when timeout <= 0 `TimeoutError` raised faster - -1.4.0 (2017-09-09) ------------------- - -* Implement `remaining` property (#20) - - * If timeout is not started yet or started unconstrained: - `remaining` is `None` - * If timeout is expired: `remaining` is `0.0` - * All others: roughly amount of time before `TimeoutError` is triggered - -1.3.0 (2017-08-23) ------------------- - -* Don't suppress nested exception on timeout. Exception context points - on cancelled line with suspended `await` (#13) - -* Introduce `.timeout` property (#16) - -* Add methods for using as async context manager (#9) - -1.2.1 (2017-05-02) ------------------- - -* Support unpublished event loop's "current_task" api. - - -1.2.0 (2017-03-11) ------------------- - -* Extra check on context manager exit - -* 0 is no-op timeout - - -1.1.0 (2016-10-20) ------------------- - -* Rename to `async-timeout` - -1.0.0 (2016-09-09) ------------------- - -* The first release. - - diff --git a/IKEA_scraper/.venv/Lib/site-packages/async_timeout-3.0.1.dist-info/RECORD b/IKEA_scraper/.venv/Lib/site-packages/async_timeout-3.0.1.dist-info/RECORD deleted file mode 100644 index 7c450cc8..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/async_timeout-3.0.1.dist-info/RECORD +++ /dev/null @@ -1,9 +0,0 @@ -async_timeout-3.0.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -async_timeout-3.0.1.dist-info/LICENSE,sha256=tAkwu8-AdEyGxGoSvJ2gVmQdcicWw3j1ZZueVV74M-E,11357 -async_timeout-3.0.1.dist-info/METADATA,sha256=_3ByJ8L0-cU5wWu75_Rl8n0ZkbSCgW15fMAu_DzwTm0,4013 -async_timeout-3.0.1.dist-info/RECORD,, -async_timeout-3.0.1.dist-info/WHEEL,sha256=-ZFxwj8mZJPIVcZGLrsQ8UGRcxVAOExzPLVBGR7u7bE,92 -async_timeout-3.0.1.dist-info/top_level.txt,sha256=9oM4e7Twq8iD_7_Q3Mz0E6GPIB6vJvRFo-UBwUQtBDU,14 -async_timeout/__init__.py,sha256=mGvWOoRqLtScEU3kmzqtTSH7EQsHvu8zhgHxOTXCn7c,3654 -async_timeout/__pycache__/__init__.cpython-39.pyc,, -async_timeout/py.typed,sha256=9LJP7QJ0oxYYrBtmXuFirzMbS3D9_3Tz-d3tyUtNp0U,11 diff --git a/IKEA_scraper/.venv/Lib/site-packages/async_timeout-3.0.1.dist-info/WHEEL b/IKEA_scraper/.venv/Lib/site-packages/async_timeout-3.0.1.dist-info/WHEEL deleted file mode 100644 index f87af075..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/async_timeout-3.0.1.dist-info/WHEEL +++ /dev/null @@ -1,5 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.32.1) -Root-Is-Purelib: true -Tag: py3-none-any - diff --git a/IKEA_scraper/.venv/Lib/site-packages/async_timeout-3.0.1.dist-info/top_level.txt b/IKEA_scraper/.venv/Lib/site-packages/async_timeout-3.0.1.dist-info/top_level.txt deleted file mode 100644 index ad29955e..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/async_timeout-3.0.1.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -async_timeout diff --git a/IKEA_scraper/.venv/Lib/site-packages/async_timeout/__init__.py b/IKEA_scraper/.venv/Lib/site-packages/async_timeout/__init__.py deleted file mode 100644 index dcc55f0c..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/async_timeout/__init__.py +++ /dev/null @@ -1,115 +0,0 @@ -import asyncio -import sys - -from types import TracebackType -from typing import Optional, Type, Any # noqa - - -__version__ = '3.0.1' - -PY_37 = sys.version_info >= (3, 7) - - -class timeout: - """timeout context manager. - - Useful in cases when you want to apply timeout logic around block - of code or in cases when asyncio.wait_for is not suitable. For example: - - >>> with timeout(0.001): - ... async with aiohttp.get('https://github.com') as r: - ... await r.text() - - - timeout - value in seconds or None to disable timeout logic - loop - asyncio compatible event loop - """ - def __init__(self, timeout: Optional[float], - *, loop: Optional[asyncio.AbstractEventLoop] = None) -> None: - self._timeout = timeout - if loop is None: - loop = asyncio.get_event_loop() - self._loop = loop - self._task = None # type: Optional[asyncio.Task[Any]] - self._cancelled = False - self._cancel_handler = None # type: Optional[asyncio.Handle] - self._cancel_at = None # type: Optional[float] - - def __enter__(self) -> 'timeout': - return self._do_enter() - - def __exit__(self, - exc_type: Type[BaseException], - exc_val: BaseException, - exc_tb: TracebackType) -> Optional[bool]: - self._do_exit(exc_type) - return None - - async def __aenter__(self) -> 'timeout': - return self._do_enter() - - async def __aexit__(self, - exc_type: Type[BaseException], - exc_val: BaseException, - exc_tb: TracebackType) -> None: - self._do_exit(exc_type) - - @property - def expired(self) -> bool: - return self._cancelled - - @property - def remaining(self) -> Optional[float]: - if self._cancel_at is not None: - return max(self._cancel_at - self._loop.time(), 0.0) - else: - return None - - def _do_enter(self) -> 'timeout': - # Support Tornado 5- without timeout - # Details: https://github.com/python/asyncio/issues/392 - if self._timeout is None: - return self - - self._task = current_task(self._loop) - if self._task is None: - raise RuntimeError('Timeout context manager should be used ' - 'inside a task') - - if self._timeout <= 0: - self._loop.call_soon(self._cancel_task) - return self - - self._cancel_at = self._loop.time() + self._timeout - self._cancel_handler = self._loop.call_at( - self._cancel_at, self._cancel_task) - return self - - def _do_exit(self, exc_type: Type[BaseException]) -> None: - if exc_type is asyncio.CancelledError and self._cancelled: - self._cancel_handler = None - self._task = None - raise asyncio.TimeoutError - if self._timeout is not None and self._cancel_handler is not None: - self._cancel_handler.cancel() - self._cancel_handler = None - self._task = None - return None - - def _cancel_task(self) -> None: - if self._task is not None: - self._task.cancel() - self._cancelled = True - - -def current_task(loop: asyncio.AbstractEventLoop) -> 'asyncio.Task[Any]': - if PY_37: - task = asyncio.current_task(loop=loop) # type: ignore - else: - task = asyncio.Task.current_task(loop=loop) - if task is None: - # this should be removed, tokio must use register_task and family API - if hasattr(loop, 'current_task'): - task = loop.current_task() # type: ignore - - return task diff --git a/IKEA_scraper/.venv/Lib/site-packages/async_timeout/__pycache__/__init__.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/async_timeout/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index 624ff2e7d115572414d1ba6b1450b8c83bb7ee35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3480 zcmZ`+TW{RP73Pp!F10sZyp}IXTh_hA4C1v67f7SFLQ>am9|AR~6(HSiKyW!Di4vFG z&Twr>*t}GJ?Q>uBAU*1L^k49)K%e{<3Iy(VhTPT0mMQS)%*^4LbDQtXhV6F4!1EvL zv+!BRF#bz}#mBF17+mLOX*}TbH zSnE`hZQj9X`AQP{NNSm{V17lcini9c%GX}mr>wt*8NI)ry}`SB_C}@cCSS)_-BKGg z-9oT#^E;Tki4j?Lmw$lKIyVuz4~u#pk3=@f!+$ZusCX~R(p((n-Y87NJt2FIhKJ{C zC3Yu?7pGnnDxtiW`y%y@vx)aIOmi>Kyl^~Dj=h4E+l6{A zyiC5ODOAU46lcAcVVnoMw5+@|%RM!T^Kh7mp7#us;wT)A6R}yEw6(S6y^Qny*{1h5 zdK(*${7t=6uh%29J*~JD3*&4*&&Rzzk>CG_IJNok;T{xBhP@~oedI&flRx}it01F1 z*`ui3_Z#KrGe;kIFT!LZ$Q>mRIc5Yr6-v0U-Newgw^$oXOr<~WeoZ8hk*3 zSphLjhq?H3s=t$!%G2IV)Mv5@xrpLAdx)RMmr^k`&W#Ji>ylBDmI9syNS%dKBg`=m2rCBx<%pT$?^*Zf< zWNp@zT`1^;Zmm3gu}bFW%^XCv}eZ*;%f z2nU%-FUO%hppDIQ>%zE=9(xKnr(9QucMszF@ojknOks_}Be_hRO?zHz;gS@i5Qiq+ z`yB)o`DU06wr*a9WG?Z3OC`P{>onwarm#s{Yn~F&SXcq@0E|A#0X?VeAKDXc9y0kS z?N1HVp~|H%^-TRj>$?RSxO!#@lsM;tfUH51zO{YwtDUl!z1_b&wVzEAG$G+ll;8kr z6{7=%9zm9*T>4Gf!oQ*wO{7E_26~0UB?&Bw)?X$mh3%=7nJku~Fi8THWoglxVVwSe zl2nGfu0_IJuF=#rKP;`F%@@?pc8md$~3j-K;pZy z4c$fO$qearRLa8F?v^2|l2I<|=sIO@fc+X9wG%(Y9Qjjd{syliMFv}`(7B7q5K=FI z476>92Y_%5PEj2)d6&3zrk$cXL_^d~ZU-%u%$1LbyzlJF2Uv~pmS+OS00+BN z5V$$@7E8dtMZG2sMQqfUe{bHzc z++y>mbO-nn9ai2V(>^3ZXi&6&kK5PNqe$qhtt5X7dx$P6e?~GtC-MuLbjLD7yUdRz zH5*ANuB%Q5S-Z3V!a5JsqjX0mQ`9FQF0(u48~FRC)$G^~GnxB+t6p;U_bta{E0)Q+ zPN&;#>Mu`LXZN@r9In6NzWpuoO&6ATyD6DY0eFH}ZGq&5T+7)34mD^0WZ$v0gOPPL zp5h*kYTnFkNSLRl+(iGS8x5P%4*_diEcr}NN%}2O zG=t!UkP5#=s1{~yoZ_DQ8?2YtpihaTofoW`=cRCeTNcw60hYE4_ZMJB*Rsuq)fxOB Dh@%)I diff --git a/IKEA_scraper/.venv/Lib/site-packages/async_timeout/py.typed b/IKEA_scraper/.venv/Lib/site-packages/async_timeout/py.typed deleted file mode 100644 index f6e0339a..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/async_timeout/py.typed +++ /dev/null @@ -1 +0,0 @@ -Placeholder \ No newline at end of file diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/__init__.py b/IKEA_scraper/.venv/Lib/site-packages/attr/__init__.py deleted file mode 100644 index b1ce7fe2..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/attr/__init__.py +++ /dev/null @@ -1,78 +0,0 @@ -from __future__ import absolute_import, division, print_function - -import sys - -from functools import partial - -from . import converters, exceptions, filters, setters, validators -from ._cmp import cmp_using -from ._config import get_run_validators, set_run_validators -from ._funcs import asdict, assoc, astuple, evolve, has, resolve_types -from ._make import ( - NOTHING, - Attribute, - Factory, - attrib, - attrs, - fields, - fields_dict, - make_class, - validate, -) -from ._version_info import VersionInfo - - -__version__ = "21.2.0" -__version_info__ = VersionInfo._from_version_string(__version__) - -__title__ = "attrs" -__description__ = "Classes Without Boilerplate" -__url__ = "https://www.attrs.org/" -__uri__ = __url__ -__doc__ = __description__ + " <" + __uri__ + ">" - -__author__ = "Hynek Schlawack" -__email__ = "hs@ox.cx" - -__license__ = "MIT" -__copyright__ = "Copyright (c) 2015 Hynek Schlawack" - - -s = attributes = attrs -ib = attr = attrib -dataclass = partial(attrs, auto_attribs=True) # happy Easter ;) - -__all__ = [ - "Attribute", - "Factory", - "NOTHING", - "asdict", - "assoc", - "astuple", - "attr", - "attrib", - "attributes", - "attrs", - "cmp_using", - "converters", - "evolve", - "exceptions", - "fields", - "fields_dict", - "filters", - "get_run_validators", - "has", - "ib", - "make_class", - "resolve_types", - "s", - "set_run_validators", - "setters", - "validate", - "validators", -] - -if sys.version_info[:2] >= (3, 6): - from ._next_gen import define, field, frozen, mutable - - __all__.extend((define, field, frozen, mutable)) diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/__init__.pyi b/IKEA_scraper/.venv/Lib/site-packages/attr/__init__.pyi deleted file mode 100644 index 3503b073..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/attr/__init__.pyi +++ /dev/null @@ -1,475 +0,0 @@ -import sys - -from typing import ( - Any, - Callable, - Dict, - Generic, - List, - Mapping, - Optional, - Sequence, - Tuple, - Type, - TypeVar, - Union, - overload, -) - -# `import X as X` is required to make these public -from . import converters as converters -from . import exceptions as exceptions -from . import filters as filters -from . import setters as setters -from . import validators as validators -from ._version_info import VersionInfo - - -__version__: str -__version_info__: VersionInfo -__title__: str -__description__: str -__url__: str -__uri__: str -__author__: str -__email__: str -__license__: str -__copyright__: str - -_T = TypeVar("_T") -_C = TypeVar("_C", bound=type) - -_EqOrderType = Union[bool, Callable[[Any], Any]] -_ValidatorType = Callable[[Any, Attribute[_T], _T], Any] -_ConverterType = Callable[[Any], Any] -_FilterType = Callable[[Attribute[_T], _T], bool] -_ReprType = Callable[[Any], str] -_ReprArgType = Union[bool, _ReprType] -_OnSetAttrType = Callable[[Any, Attribute[Any], Any], Any] -_OnSetAttrArgType = Union[ - _OnSetAttrType, List[_OnSetAttrType], setters._NoOpType -] -_FieldTransformer = Callable[[type, List[Attribute[Any]]], List[Attribute[Any]]] -# FIXME: in reality, if multiple validators are passed they must be in a list -# or tuple, but those are invariant and so would prevent subtypes of -# _ValidatorType from working when passed in a list or tuple. -_ValidatorArgType = Union[_ValidatorType[_T], Sequence[_ValidatorType[_T]]] - -# _make -- - -NOTHING: object - -# NOTE: Factory lies about its return type to make this possible: -# `x: List[int] # = Factory(list)` -# Work around mypy issue #4554 in the common case by using an overload. -if sys.version_info >= (3, 8): - from typing import Literal - - @overload - def Factory(factory: Callable[[], _T]) -> _T: ... - @overload - def Factory( - factory: Callable[[Any], _T], - takes_self: Literal[True], - ) -> _T: ... - @overload - def Factory( - factory: Callable[[], _T], - takes_self: Literal[False], - ) -> _T: ... -else: - @overload - def Factory(factory: Callable[[], _T]) -> _T: ... - @overload - def Factory( - factory: Union[Callable[[Any], _T], Callable[[], _T]], - takes_self: bool = ..., - ) -> _T: ... - -# Static type inference support via __dataclass_transform__ implemented as per: -# https://github.com/microsoft/pyright/blob/1.1.135/specs/dataclass_transforms.md -# This annotation must be applied to all overloads of "define" and "attrs" -# -# NOTE: This is a typing construct and does not exist at runtime. Extensions -# wrapping attrs decorators should declare a separate __dataclass_transform__ -# signature in the extension module using the specification linked above to -# provide pyright support. -def __dataclass_transform__( - *, - eq_default: bool = True, - order_default: bool = False, - kw_only_default: bool = False, - field_descriptors: Tuple[Union[type, Callable[..., Any]], ...] = (()), -) -> Callable[[_T], _T]: ... - -class Attribute(Generic[_T]): - name: str - default: Optional[_T] - validator: Optional[_ValidatorType[_T]] - repr: _ReprArgType - cmp: _EqOrderType - eq: _EqOrderType - order: _EqOrderType - hash: Optional[bool] - init: bool - converter: Optional[_ConverterType] - metadata: Dict[Any, Any] - type: Optional[Type[_T]] - kw_only: bool - on_setattr: _OnSetAttrType - - def evolve(self, **changes: Any) -> "Attribute[Any]": ... - -# NOTE: We had several choices for the annotation to use for type arg: -# 1) Type[_T] -# - Pros: Handles simple cases correctly -# - Cons: Might produce less informative errors in the case of conflicting -# TypeVars e.g. `attr.ib(default='bad', type=int)` -# 2) Callable[..., _T] -# - Pros: Better error messages than #1 for conflicting TypeVars -# - Cons: Terrible error messages for validator checks. -# e.g. attr.ib(type=int, validator=validate_str) -# -> error: Cannot infer function type argument -# 3) type (and do all of the work in the mypy plugin) -# - Pros: Simple here, and we could customize the plugin with our own errors. -# - Cons: Would need to write mypy plugin code to handle all the cases. -# We chose option #1. - -# `attr` lies about its return type to make the following possible: -# attr() -> Any -# attr(8) -> int -# attr(validator=) -> Whatever the callable expects. -# This makes this type of assignments possible: -# x: int = attr(8) -# -# This form catches explicit None or no default but with no other arguments -# returns Any. -@overload -def attrib( - default: None = ..., - validator: None = ..., - repr: _ReprArgType = ..., - cmp: Optional[_EqOrderType] = ..., - hash: Optional[bool] = ..., - init: bool = ..., - metadata: Optional[Mapping[Any, Any]] = ..., - type: None = ..., - converter: None = ..., - factory: None = ..., - kw_only: bool = ..., - eq: Optional[_EqOrderType] = ..., - order: Optional[_EqOrderType] = ..., - on_setattr: Optional[_OnSetAttrArgType] = ..., -) -> Any: ... - -# This form catches an explicit None or no default and infers the type from the -# other arguments. -@overload -def attrib( - default: None = ..., - validator: Optional[_ValidatorArgType[_T]] = ..., - repr: _ReprArgType = ..., - cmp: Optional[_EqOrderType] = ..., - hash: Optional[bool] = ..., - init: bool = ..., - metadata: Optional[Mapping[Any, Any]] = ..., - type: Optional[Type[_T]] = ..., - converter: Optional[_ConverterType] = ..., - factory: Optional[Callable[[], _T]] = ..., - kw_only: bool = ..., - eq: Optional[_EqOrderType] = ..., - order: Optional[_EqOrderType] = ..., - on_setattr: Optional[_OnSetAttrArgType] = ..., -) -> _T: ... - -# This form catches an explicit default argument. -@overload -def attrib( - default: _T, - validator: Optional[_ValidatorArgType[_T]] = ..., - repr: _ReprArgType = ..., - cmp: Optional[_EqOrderType] = ..., - hash: Optional[bool] = ..., - init: bool = ..., - metadata: Optional[Mapping[Any, Any]] = ..., - type: Optional[Type[_T]] = ..., - converter: Optional[_ConverterType] = ..., - factory: Optional[Callable[[], _T]] = ..., - kw_only: bool = ..., - eq: Optional[_EqOrderType] = ..., - order: Optional[_EqOrderType] = ..., - on_setattr: Optional[_OnSetAttrArgType] = ..., -) -> _T: ... - -# This form covers type=non-Type: e.g. forward references (str), Any -@overload -def attrib( - default: Optional[_T] = ..., - validator: Optional[_ValidatorArgType[_T]] = ..., - repr: _ReprArgType = ..., - cmp: Optional[_EqOrderType] = ..., - hash: Optional[bool] = ..., - init: bool = ..., - metadata: Optional[Mapping[Any, Any]] = ..., - type: object = ..., - converter: Optional[_ConverterType] = ..., - factory: Optional[Callable[[], _T]] = ..., - kw_only: bool = ..., - eq: Optional[_EqOrderType] = ..., - order: Optional[_EqOrderType] = ..., - on_setattr: Optional[_OnSetAttrArgType] = ..., -) -> Any: ... -@overload -def field( - *, - default: None = ..., - validator: None = ..., - repr: _ReprArgType = ..., - hash: Optional[bool] = ..., - init: bool = ..., - metadata: Optional[Mapping[Any, Any]] = ..., - converter: None = ..., - factory: None = ..., - kw_only: bool = ..., - eq: Optional[bool] = ..., - order: Optional[bool] = ..., - on_setattr: Optional[_OnSetAttrArgType] = ..., -) -> Any: ... - -# This form catches an explicit None or no default and infers the type from the -# other arguments. -@overload -def field( - *, - default: None = ..., - validator: Optional[_ValidatorArgType[_T]] = ..., - repr: _ReprArgType = ..., - hash: Optional[bool] = ..., - init: bool = ..., - metadata: Optional[Mapping[Any, Any]] = ..., - converter: Optional[_ConverterType] = ..., - factory: Optional[Callable[[], _T]] = ..., - kw_only: bool = ..., - eq: Optional[_EqOrderType] = ..., - order: Optional[_EqOrderType] = ..., - on_setattr: Optional[_OnSetAttrArgType] = ..., -) -> _T: ... - -# This form catches an explicit default argument. -@overload -def field( - *, - default: _T, - validator: Optional[_ValidatorArgType[_T]] = ..., - repr: _ReprArgType = ..., - hash: Optional[bool] = ..., - init: bool = ..., - metadata: Optional[Mapping[Any, Any]] = ..., - converter: Optional[_ConverterType] = ..., - factory: Optional[Callable[[], _T]] = ..., - kw_only: bool = ..., - eq: Optional[_EqOrderType] = ..., - order: Optional[_EqOrderType] = ..., - on_setattr: Optional[_OnSetAttrArgType] = ..., -) -> _T: ... - -# This form covers type=non-Type: e.g. forward references (str), Any -@overload -def field( - *, - default: Optional[_T] = ..., - validator: Optional[_ValidatorArgType[_T]] = ..., - repr: _ReprArgType = ..., - hash: Optional[bool] = ..., - init: bool = ..., - metadata: Optional[Mapping[Any, Any]] = ..., - converter: Optional[_ConverterType] = ..., - factory: Optional[Callable[[], _T]] = ..., - kw_only: bool = ..., - eq: Optional[_EqOrderType] = ..., - order: Optional[_EqOrderType] = ..., - on_setattr: Optional[_OnSetAttrArgType] = ..., -) -> Any: ... -@overload -@__dataclass_transform__(order_default=True, field_descriptors=(attrib, field)) -def attrs( - maybe_cls: _C, - these: Optional[Dict[str, Any]] = ..., - repr_ns: Optional[str] = ..., - repr: bool = ..., - cmp: Optional[_EqOrderType] = ..., - hash: Optional[bool] = ..., - init: bool = ..., - slots: bool = ..., - frozen: bool = ..., - weakref_slot: bool = ..., - str: bool = ..., - auto_attribs: bool = ..., - kw_only: bool = ..., - cache_hash: bool = ..., - auto_exc: bool = ..., - eq: Optional[_EqOrderType] = ..., - order: Optional[_EqOrderType] = ..., - auto_detect: bool = ..., - collect_by_mro: bool = ..., - getstate_setstate: Optional[bool] = ..., - on_setattr: Optional[_OnSetAttrArgType] = ..., - field_transformer: Optional[_FieldTransformer] = ..., -) -> _C: ... -@overload -@__dataclass_transform__(order_default=True, field_descriptors=(attrib, field)) -def attrs( - maybe_cls: None = ..., - these: Optional[Dict[str, Any]] = ..., - repr_ns: Optional[str] = ..., - repr: bool = ..., - cmp: Optional[_EqOrderType] = ..., - hash: Optional[bool] = ..., - init: bool = ..., - slots: bool = ..., - frozen: bool = ..., - weakref_slot: bool = ..., - str: bool = ..., - auto_attribs: bool = ..., - kw_only: bool = ..., - cache_hash: bool = ..., - auto_exc: bool = ..., - eq: Optional[_EqOrderType] = ..., - order: Optional[_EqOrderType] = ..., - auto_detect: bool = ..., - collect_by_mro: bool = ..., - getstate_setstate: Optional[bool] = ..., - on_setattr: Optional[_OnSetAttrArgType] = ..., - field_transformer: Optional[_FieldTransformer] = ..., -) -> Callable[[_C], _C]: ... -@overload -@__dataclass_transform__(field_descriptors=(attrib, field)) -def define( - maybe_cls: _C, - *, - these: Optional[Dict[str, Any]] = ..., - repr: bool = ..., - hash: Optional[bool] = ..., - init: bool = ..., - slots: bool = ..., - frozen: bool = ..., - weakref_slot: bool = ..., - str: bool = ..., - auto_attribs: bool = ..., - kw_only: bool = ..., - cache_hash: bool = ..., - auto_exc: bool = ..., - eq: Optional[bool] = ..., - order: Optional[bool] = ..., - auto_detect: bool = ..., - getstate_setstate: Optional[bool] = ..., - on_setattr: Optional[_OnSetAttrArgType] = ..., - field_transformer: Optional[_FieldTransformer] = ..., -) -> _C: ... -@overload -@__dataclass_transform__(field_descriptors=(attrib, field)) -def define( - maybe_cls: None = ..., - *, - these: Optional[Dict[str, Any]] = ..., - repr: bool = ..., - hash: Optional[bool] = ..., - init: bool = ..., - slots: bool = ..., - frozen: bool = ..., - weakref_slot: bool = ..., - str: bool = ..., - auto_attribs: bool = ..., - kw_only: bool = ..., - cache_hash: bool = ..., - auto_exc: bool = ..., - eq: Optional[bool] = ..., - order: Optional[bool] = ..., - auto_detect: bool = ..., - getstate_setstate: Optional[bool] = ..., - on_setattr: Optional[_OnSetAttrArgType] = ..., - field_transformer: Optional[_FieldTransformer] = ..., -) -> Callable[[_C], _C]: ... - -mutable = define -frozen = define # they differ only in their defaults - -# TODO: add support for returning NamedTuple from the mypy plugin -class _Fields(Tuple[Attribute[Any], ...]): - def __getattr__(self, name: str) -> Attribute[Any]: ... - -def fields(cls: type) -> _Fields: ... -def fields_dict(cls: type) -> Dict[str, Attribute[Any]]: ... -def validate(inst: Any) -> None: ... -def resolve_types( - cls: _C, - globalns: Optional[Dict[str, Any]] = ..., - localns: Optional[Dict[str, Any]] = ..., - attribs: Optional[List[Attribute[Any]]] = ..., -) -> _C: ... - -# TODO: add support for returning a proper attrs class from the mypy plugin -# we use Any instead of _CountingAttr so that e.g. `make_class('Foo', -# [attr.ib()])` is valid -def make_class( - name: str, - attrs: Union[List[str], Tuple[str, ...], Dict[str, Any]], - bases: Tuple[type, ...] = ..., - repr_ns: Optional[str] = ..., - repr: bool = ..., - cmp: Optional[_EqOrderType] = ..., - hash: Optional[bool] = ..., - init: bool = ..., - slots: bool = ..., - frozen: bool = ..., - weakref_slot: bool = ..., - str: bool = ..., - auto_attribs: bool = ..., - kw_only: bool = ..., - cache_hash: bool = ..., - auto_exc: bool = ..., - eq: Optional[_EqOrderType] = ..., - order: Optional[_EqOrderType] = ..., - collect_by_mro: bool = ..., - on_setattr: Optional[_OnSetAttrArgType] = ..., - field_transformer: Optional[_FieldTransformer] = ..., -) -> type: ... - -# _funcs -- - -# TODO: add support for returning TypedDict from the mypy plugin -# FIXME: asdict/astuple do not honor their factory args. Waiting on one of -# these: -# https://github.com/python/mypy/issues/4236 -# https://github.com/python/typing/issues/253 -def asdict( - inst: Any, - recurse: bool = ..., - filter: Optional[_FilterType[Any]] = ..., - dict_factory: Type[Mapping[Any, Any]] = ..., - retain_collection_types: bool = ..., - value_serializer: Optional[Callable[[type, Attribute[Any], Any], Any]] = ..., -) -> Dict[str, Any]: ... - -# TODO: add support for returning NamedTuple from the mypy plugin -def astuple( - inst: Any, - recurse: bool = ..., - filter: Optional[_FilterType[Any]] = ..., - tuple_factory: Type[Sequence[Any]] = ..., - retain_collection_types: bool = ..., -) -> Tuple[Any, ...]: ... -def has(cls: type) -> bool: ... -def assoc(inst: _T, **changes: Any) -> _T: ... -def evolve(inst: _T, **changes: Any) -> _T: ... - -# _config -- - -def set_run_validators(run: bool) -> None: ... -def get_run_validators() -> bool: ... - -# aliases -- - -s = attributes = attrs -ib = attr = attrib -dataclass = attrs # Technically, partial(attrs, auto_attribs=True) ;) diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/__pycache__/__init__.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/attr/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index a0b81633ebacc3d3f2a57f763d15c03cba6d9ad2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1711 zcmZ8hOK%%D5Z+zAUw+&2JBs79**xULP14$NgQNl4q-fGZg0>h4Al6GtVomNYNJ_SK z@3BCCLeg9R5>Ews@?XfQ!&O=bSz$j8XNTl`A7>P`T6GVfzY7P^%d+SF<0cIwSd>e!B$r`XuE2_HLtC!GYW}?@*5o>@%MI9&o3JUj zU`uYpw!8vYWCuF(DqNL2u#?Bu#WlGLyJ$DyI@^8w8N2?@htFvfZqOElbOvs+n{bPT zbhhoWTWycdwLQ2^=iv@rfG%BxJ-P&U*>=%`d$7;8aQp)9vohPJ%XH=U03HlH+Wymr zhphPPmo%WOzXfX^T{|iL;j3Rzg>~_jJb(jv2#4|!Jd#InrVLZs*4bIiG8d_BrO!p~tY~JYU&oQ)G%~5uxKAyX85wDw48p)J445Hm zl#t61yMXIH@r7kujx^=5v871sG`5vUn^7j1Ewgbd#>^Imk+vEWg*lwx@dy}AZ^xl6wnSFkqu#?W~cqpRNC_b4~hx$o+){W0>;pK}rlbvU2cCPqf zXgW9Iu(N;n-h<93OWuS&G^3G8$&{TAH`EH|rP>ab9n3nIb1;u!i!M;DIYrV*nl6aO*dO|GheG2H*syRwj4ANE&_xwxF|T=^?X>g zWy<(UiR7IHgu1t}3QtUTW(UoT_%I zP%eif4=sYt;wpx4EE%4jA(ZJ@ z@x1lWQ6Xfc#D4~#8Z?d3KnbxbhN(guw_q~jE)Y`?JZ6b@`?Uxv@}a;`>0L)?$H6rR zR}r9weH=~O0S}9W+oSn0GpLb-of$GdwST* z&U-3KXexU;9^y^*_z8;$l8ds8sa|)?l5y_`e%#aCusazxM>Jr%=L&X@pr+gq(#_6o z^+=|4B-ms3H>K|*ECtn|8EpDZf6njtw;Rnu(XR(ZfBKtqmU|0Tzv?%G>h_Yq8vG0K C7~|yt diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/__pycache__/_cmp.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/attr/__pycache__/_cmp.cpython-39.pyc deleted file mode 100644 index 6df74c94f8ca1d574d2ed33ab01a7e8aa42f64c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3859 zcmb_f&2JmW72jDd$t5LGvZdHgQv{O&j!RW#;-DX?APYt98VFFRNG!A{D`UCj49S)D zgPIvi6-!+z15JC%A%`Avu#f%+`p4{{DA1G7?WIA1_-!BKil_=-)I?n@d{S=L#4XVf%THLlE>^^~Cr*1oToWJdi;uC+@v_pR%oqyM@p8#NEEvEa$E~%-z_a$=n^_JCM71{eG5= zLKSvn*&{v7f21**m(cVYE)#6PjC1A;9K(eBiT4L+;It~dQ-A7+@|dY@Q91REE2>lH z%>B?2{+44(XAVZSEoaK?p1o;R)PLxlR|pX>D3of0@?yD^IJ&f5ym~ z)2fHZ9ysbB;*|sEBc@hTk2&eBss9nv6;l&8&e-pmsXtwq)}AqNsKIhK!;d}3sdN19 zD;XNeLvD@1%`h~)7pA-``3TmLg2R3p?}WyvR@Cj>(Y(`y_zL^qI(J)Mf<<{x+ zl2NC_Lp2yDGBujxY;UYhmP8ZD`;m+V?^)ADI!jx1dun$mxsrMung&>d(7qGChyFr9X=+#;AQeCjK`!tc{mQ^$edVF zNUe~-9A`Z1?#rIhExZ15_ObbD_Qyj!R;ml`^hV2?M;dR`(DM*R3)77D&1nDeR{8(A zHB-g=NhANA1cR^j?tz7_`d^+t_*zfDa`9Ka{<7J-Sr!B3hvP`eK!=G8%*hC1{BkH$ z-q}@S2|t?S$RhQNP(L@n^$jJ>SmESOX5LFiu_Sksq62@Jqs~Gch_GOUi_xW=E`15y zwNZ}??+a3F-Q+uT07$l>p~WA_eh446K7HpR{@$6fdn6@%;zv?Zb_fN0Z*!BsbGLQ3^|mGEWpXLm^zvE|=r}Vv2#_CwD2)t8OTkQoHn`;1 zf=CC&mE@;^$rR<6hdaB95-o5Q;0%Y zvZs4PAYv~%kYS*EDjbcZ+G`!j^l0yAQFl*AMt*k`_71{<)O!?t-wF_0TceZQ--^Se zE5hyfarxiToXKk-1!Il4*xHIS1S-9aL9y!vLcKG2AP;$hKum#M$bN(fg3w_hW@9w$ z7E463bI|owmhh_~wAEb9>qV|6d#E)q&Kt!-2Ju7aUs3i|6{1v%5T!^_d4(RBihL#L z4Q21(!UOX9FUaCQRVq_?%@zvKi_RM+GhrOeEP!l-jl}TPE&j=JJ@n5Iz4HCO{u2@2f{s}tgO^0Y?(wl^G{tAMJSqXpghBqJ%gveI-k2!DqPD~^*M*`%k??G zY85xx>&WG&>>1My1D$>dGwr)mwvXEH6jvBFcGS0tLf5I+aH?6FdCS#sU1+tW-o}=^ zY?F6hDM}#<90blnI~I(UqUQMxNkJfSSRMFl0C%1{dHt#%UZ}h{G(il!jbJ+Y)(1u6 z2>ETzyDe0JaDCM7f_G0i#Tnf~Nso|AIRLS9B`EZRcx{(-UJU|~^@0G~Jldqb4^h+) zsN>Xqk2(@qy@^g!v(lCq>x=N4%4fc3DPOWE+1q*m#{epI9ypKJNTE|G`^?q!?+cWA zSh4?plqT;MUP1AM&q^fTu}VZ5)U!I15(7oJ4gt4QVEW-Mphw1pSxEKj9qQ~eIE`#) zUqB)5k7(LQ=XiB!+-KI5SEQdioRywD1z>RYfjsKRhRZV^aBeIb(0|hluG|r}FMN(n#Utmrd6Kh;n5S?*gn`JcvV(OK)jn`Z3zfK^4uL z)gAins%4riBfKLbqOhQJNRLtkeMN>*-$B=|7U|X$5x#6OSA_g`X%7W9>#f$nR!{bt rLJCe)+gUjKTS+FyvD{`@*R;Oo`tBlv<%;L9OMm~Y|H^OpH~sqOG+70b diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/__pycache__/_compat.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/attr/__pycache__/_compat.cpython-39.pyc deleted file mode 100644 index 1fc3ba9495c59c8796bf16ce4b3bfd65010ae058..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6078 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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/__pycache__/_config.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/attr/__pycache__/_config.cpython-39.pyc deleted file mode 100644 index 2684c1becf4407980b0bf5cca700543024a36cab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 738 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 G4gUv!&-fq! diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/__pycache__/_next_gen.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/attr/__pycache__/_next_gen.cpython-39.pyc deleted file mode 100644 index 53ec5dad83f37b343c65c3d83c82395e0920656c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3242 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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/__pycache__/exceptions.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/attr/__pycache__/exceptions.cpython-39.pyc deleted file mode 100644 index d2b54b19e6943ccd560fd2a83eb59dc6c45c3764..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3236 zcmbtWTW=gS6!z@QUXx8WO1yl(<-@ddyO7PkN|@;2bMSb+D7fS33(;AM;3fIEBz@QTGtfY0z% zz^h^z#&`JICh4C219nTgZnn&ZItf!Fd>M@sWwHjBds53J&X&eX#>O9|abN%k_(l10 z0NjCFzXgpTeTS2Ng*$zhSNfjtcAS2dyRep*E!<6rtq@9t$<-?TL7A@K6p1S{iX_%z`ICPY=+-m&Lb%7^AqlH{MrOm>1ny*Pv-QUdwZA z-^t2%VBoy+ptqZ?=6XLU1kH6H%;`Q;dza~B^`$Rq`>K_%emJ%A#*wFR*9t=A&`(3hS20>ph1#`9G!e5A!3*f)q=R$WyXeBss)6# zegfe;O4Nyw1DakdBIh-9SAgDoCAx@DO?M3luE&=1U5xOYrz|9lllan%syzbWEGkqS z!*C!1$76zYXX7R&`JepG0G|&^{1Bg--?>l4h^3)f50zkie^Z#8;g1DFp1+>4!Xqj_ z6LUg6IlR~fo$(ly`sMSNDghtZxn>6`7eS(!d7Z#FWtc2UICBtAN~9O{p^R4RZwNlSEDMaRsqK#|8OsWKg zEyS)8Pg4m}1KC(SgBZ@Iw)QKs-pPzV`ZvLR78u?uF-H6fV;4H{(ifpAr<@mLC!6HR z+2~fYs!k!jXU#3}KuZh@3K>h|`wA=8tZH`(+1S$}9N9jFDdNb#$pbW;L0VFOjXGmxAW5Q6ST3$+1A|7a;H)JnjQH44VxPWr2qf` diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/__pycache__/filters.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/attr/__pycache__/filters.cpython-39.pyc deleted file mode 100644 index 2b82445faa9885ec8ece07d18892554fa4649d56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1738 zcmbtUO^+Kz5bd6^*W+35W)l`65QIJ;Bu6m75o@&qk_#xxfk;HM2DQi2?d-5UA9S}( z)^bj}Qj#0uU-&Q035iqA+&CbrdOY?95JE~zUG6H^R9Dq|)ycs@NMQZyf1Z5PA>=ny zt}hRiFJPPdAOsl`L4~Ji?v1_NANzS{+@VDHqNBR`-gwWQyQ-H5;{eWkqIX5ceG!O0 z{DvYF`|!Ij1`o;bVEIvax6JdhP#0`&eOT$NuzWTzQVaS^3SX>g-OEg>5@Uw6?tcj}vnhO? z;-BrpGZatm!Zsg(u&&H2vLg4$CB3Ae`@-AlGY<;rEboO3*0<8mbzxY-?7UKvl`}S( z>2fIxBkjbX?(Uc1QV51+xfD#~K7S<>Y`2eD;C=_hihO_TDcrw;EVQ?x-w{fF^aObb zl|9gV;IZ~^yv{q{v9@1-sYxKndLv7B{n)yWtu2+ z8f_i_Q4qG)74$9~prGTXAWJX3S4+};a2R@Z2zVC8CPgZB049wbb)_}p5Y-zXZsGwG zLu|J_2c?6#{q2i-|61Pr@R7mxk?s*a`cognDMhtiEfPI2nA;!#1K>jJy`V41GxChi zJRF6q;3-{EV1vK>*}?hf4Em`uW7!?d;Z77f^QcO6k~1`o*dvh4mY{8X8zzkGMI|>b z6AUqNTtX|H+KJdwcoH+S39iv+#3q1*N~TIq8fIY)?ZPweH(;AvAXfAT@|-S6b+jVS z$pRSV+P{WQa_$JrIdH4LoP$eaZ}eLzT;Fj1o8|@bNdw1cVA{g5G49}Kz4UwF)`IaqMscC8 zfwA%Y5W~62X~1BhKNt?`9_OM=Ij=(wPcS@*l5>qL(DWp4{C#;n)zIDe>q#-}w%c-QAGD_{+VU{MjSqZ(Lj* z4lKR}(=j+fVj`$;a#}dCQ@F8Pc(F%`aD|um3P1MkyqEWjAP!*ei~cJT4@4ja@C-#L zcHp@qhGG|{S)-+3M^$yA*`iXcD!G;>F-Aq<8-PJ3 zZZ}Tmy2=|Pc~;bwGF>3DWu~*L>_)Z9O2ZdTnHpHXp?HFJeV$h3B763lb~hiYY9-6> zAYwL$7(XagsT3n$3{2Yv>x1bV;C?3yimAT}&S*;ku)A7>48~7Q$&x&0Q-Els(o>d{ zf+=YlRWfrVFQ&^RZzQW0b}vt~fwW{4+89y9mT(lnCPGMYaKOI46MYrku`g4^aWSAo z1nqq={VBNCIdlIY-;`saD50Yv}jM{zK#PiG2ps*0ITp(yz*JCO<3sY>cvs#&y@<#P5Y zo6mG+Lehb*EJ9)M}oydi7y8`Kn7a#oKl z)lZa!WDHc0ZD;~*FjKL)WJM*iMJB~{Dt4$)HXu^UJBRbw<(zLIBc~h4{=!P|6GVez zBfh!?ehV@tgJvOr0TV-x0dPaqsCAw~sgI%ft*bw_E7um^S-TWOVUzmhQlQgKI@8;l zLCrIf7~58CdZ~gb%N8s%>?qOK73RZk&BOhad}|df8pgY=Pyz)>H; z&f#PX_ZSyd%6S)ZxZ~iOk)SSQL!rbK3Z^5rFkL8Lq_W0KP%CUU+Z9%4mQx$D^Q-x> rOikQ7e9Rv|xq|0Eu?F`*{!K3LV*_dIK+n7B4C&Af_JRS}$fy4T(NuqX diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/__pycache__/validators.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/attr/__pycache__/validators.cpython-39.pyc deleted file mode 100644 index 2ef9fdbce3df168080f8e0b07107e739cf1e8da6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11382 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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/_cmp.py b/IKEA_scraper/.venv/Lib/site-packages/attr/_cmp.py deleted file mode 100644 index b747b603..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/attr/_cmp.py +++ /dev/null @@ -1,152 +0,0 @@ -from __future__ import absolute_import, division, print_function - -import functools - -from ._compat import new_class -from ._make import _make_ne - - -_operation_names = {"eq": "==", "lt": "<", "le": "<=", "gt": ">", "ge": ">="} - - -def cmp_using( - eq=None, - lt=None, - le=None, - gt=None, - ge=None, - require_same_type=True, - class_name="Comparable", -): - """ - Create a class that can be passed into `attr.ib`'s ``eq``, ``order``, and - ``cmp`` arguments to customize field comparison. - - The resulting class will have a full set of ordering methods if - at least one of ``{lt, le, gt, ge}`` and ``eq`` are provided. - - :param Optional[callable] eq: `callable` used to evaluate equality - of two objects. - :param Optional[callable] lt: `callable` used to evaluate whether - one object is less than another object. - :param Optional[callable] le: `callable` used to evaluate whether - one object is less than or equal to another object. - :param Optional[callable] gt: `callable` used to evaluate whether - one object is greater than another object. - :param Optional[callable] ge: `callable` used to evaluate whether - one object is greater than or equal to another object. - - :param bool require_same_type: When `True`, equality and ordering methods - will return `NotImplemented` if objects are not of the same type. - - :param Optional[str] class_name: Name of class. Defaults to 'Comparable'. - - See `comparison` for more details. - - .. versionadded:: 21.1.0 - """ - - body = { - "__slots__": ["value"], - "__init__": _make_init(), - "_requirements": [], - "_is_comparable_to": _is_comparable_to, - } - - # Add operations. - num_order_functions = 0 - has_eq_function = False - - if eq is not None: - has_eq_function = True - body["__eq__"] = _make_operator("eq", eq) - body["__ne__"] = _make_ne() - - if lt is not None: - num_order_functions += 1 - body["__lt__"] = _make_operator("lt", lt) - - if le is not None: - num_order_functions += 1 - body["__le__"] = _make_operator("le", le) - - if gt is not None: - num_order_functions += 1 - body["__gt__"] = _make_operator("gt", gt) - - if ge is not None: - num_order_functions += 1 - body["__ge__"] = _make_operator("ge", ge) - - type_ = new_class(class_name, (object,), {}, lambda ns: ns.update(body)) - - # Add same type requirement. - if require_same_type: - type_._requirements.append(_check_same_type) - - # Add total ordering if at least one operation was defined. - if 0 < num_order_functions < 4: - if not has_eq_function: - # functools.total_ordering requires __eq__ to be defined, - # so raise early error here to keep a nice stack. - raise ValueError( - "eq must be define is order to complete ordering from " - "lt, le, gt, ge." - ) - type_ = functools.total_ordering(type_) - - return type_ - - -def _make_init(): - """ - Create __init__ method. - """ - - def __init__(self, value): - """ - Initialize object with *value*. - """ - self.value = value - - return __init__ - - -def _make_operator(name, func): - """ - Create operator method. - """ - - def method(self, other): - if not self._is_comparable_to(other): - return NotImplemented - - result = func(self.value, other.value) - if result is NotImplemented: - return NotImplemented - - return result - - method.__name__ = "__%s__" % (name,) - method.__doc__ = "Return a %s b. Computed by attrs." % ( - _operation_names[name], - ) - - return method - - -def _is_comparable_to(self, other): - """ - Check whether `other` is comparable to `self`. - """ - for func in self._requirements: - if not func(self, other): - return False - return True - - -def _check_same_type(self, other): - """ - Return True if *self* and *other* are of the same type, False otherwise. - """ - return other.value.__class__ is self.value.__class__ diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/_cmp.pyi b/IKEA_scraper/.venv/Lib/site-packages/attr/_cmp.pyi deleted file mode 100644 index 7093550f..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/attr/_cmp.pyi +++ /dev/null @@ -1,14 +0,0 @@ -from typing import Type - -from . import _CompareWithType - - -def cmp_using( - eq: Optional[_CompareWithType], - lt: Optional[_CompareWithType], - le: Optional[_CompareWithType], - gt: Optional[_CompareWithType], - ge: Optional[_CompareWithType], - require_same_type: bool, - class_name: str, -) -> Type: ... diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/_compat.py b/IKEA_scraper/.venv/Lib/site-packages/attr/_compat.py deleted file mode 100644 index 6939f338..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/attr/_compat.py +++ /dev/null @@ -1,242 +0,0 @@ -from __future__ import absolute_import, division, print_function - -import platform -import sys -import types -import warnings - - -PY2 = sys.version_info[0] == 2 -PYPY = platform.python_implementation() == "PyPy" - - -if PYPY or sys.version_info[:2] >= (3, 6): - ordered_dict = dict -else: - from collections import OrderedDict - - ordered_dict = OrderedDict - - -if PY2: - from collections import Mapping, Sequence - - from UserDict import IterableUserDict - - # We 'bundle' isclass instead of using inspect as importing inspect is - # fairly expensive (order of 10-15 ms for a modern machine in 2016) - def isclass(klass): - return isinstance(klass, (type, types.ClassType)) - - def new_class(name, bases, kwds, exec_body): - """ - A minimal stub of types.new_class that we need for make_class. - """ - ns = {} - exec_body(ns) - - return type(name, bases, ns) - - # TYPE is used in exceptions, repr(int) is different on Python 2 and 3. - TYPE = "type" - - def iteritems(d): - return d.iteritems() - - # Python 2 is bereft of a read-only dict proxy, so we make one! - class ReadOnlyDict(IterableUserDict): - """ - Best-effort read-only dict wrapper. - """ - - def __setitem__(self, key, val): - # We gently pretend we're a Python 3 mappingproxy. - raise TypeError( - "'mappingproxy' object does not support item assignment" - ) - - def update(self, _): - # We gently pretend we're a Python 3 mappingproxy. - raise AttributeError( - "'mappingproxy' object has no attribute 'update'" - ) - - def __delitem__(self, _): - # We gently pretend we're a Python 3 mappingproxy. - raise TypeError( - "'mappingproxy' object does not support item deletion" - ) - - def clear(self): - # We gently pretend we're a Python 3 mappingproxy. - raise AttributeError( - "'mappingproxy' object has no attribute 'clear'" - ) - - def pop(self, key, default=None): - # We gently pretend we're a Python 3 mappingproxy. - raise AttributeError( - "'mappingproxy' object has no attribute 'pop'" - ) - - def popitem(self): - # We gently pretend we're a Python 3 mappingproxy. - raise AttributeError( - "'mappingproxy' object has no attribute 'popitem'" - ) - - def setdefault(self, key, default=None): - # We gently pretend we're a Python 3 mappingproxy. - raise AttributeError( - "'mappingproxy' object has no attribute 'setdefault'" - ) - - def __repr__(self): - # Override to be identical to the Python 3 version. - return "mappingproxy(" + repr(self.data) + ")" - - def metadata_proxy(d): - res = ReadOnlyDict() - res.data.update(d) # We blocked update, so we have to do it like this. - return res - - def just_warn(*args, **kw): # pragma: no cover - """ - We only warn on Python 3 because we are not aware of any concrete - consequences of not setting the cell on Python 2. - """ - - -else: # Python 3 and later. - from collections.abc import Mapping, Sequence # noqa - - def just_warn(*args, **kw): - """ - We only warn on Python 3 because we are not aware of any concrete - consequences of not setting the cell on Python 2. - """ - warnings.warn( - "Running interpreter doesn't sufficiently support code object " - "introspection. Some features like bare super() or accessing " - "__class__ will not work with slotted classes.", - RuntimeWarning, - stacklevel=2, - ) - - def isclass(klass): - return isinstance(klass, type) - - TYPE = "class" - - def iteritems(d): - return d.items() - - new_class = types.new_class - - def metadata_proxy(d): - return types.MappingProxyType(dict(d)) - - -def make_set_closure_cell(): - """Return a function of two arguments (cell, value) which sets - the value stored in the closure cell `cell` to `value`. - """ - # pypy makes this easy. (It also supports the logic below, but - # why not do the easy/fast thing?) - if PYPY: - - def set_closure_cell(cell, value): - cell.__setstate__((value,)) - - return set_closure_cell - - # Otherwise gotta do it the hard way. - - # Create a function that will set its first cellvar to `value`. - def set_first_cellvar_to(value): - x = value - return - - # This function will be eliminated as dead code, but - # not before its reference to `x` forces `x` to be - # represented as a closure cell rather than a local. - def force_x_to_be_a_cell(): # pragma: no cover - return x - - try: - # Extract the code object and make sure our assumptions about - # the closure behavior are correct. - if PY2: - co = set_first_cellvar_to.func_code - else: - co = set_first_cellvar_to.__code__ - if co.co_cellvars != ("x",) or co.co_freevars != (): - raise AssertionError # pragma: no cover - - # Convert this code object to a code object that sets the - # function's first _freevar_ (not cellvar) to the argument. - if sys.version_info >= (3, 8): - # CPython 3.8+ has an incompatible CodeType signature - # (added a posonlyargcount argument) but also added - # CodeType.replace() to do this without counting parameters. - set_first_freevar_code = co.replace( - co_cellvars=co.co_freevars, co_freevars=co.co_cellvars - ) - else: - args = [co.co_argcount] - if not PY2: - args.append(co.co_kwonlyargcount) - args.extend( - [ - co.co_nlocals, - co.co_stacksize, - co.co_flags, - co.co_code, - co.co_consts, - co.co_names, - co.co_varnames, - co.co_filename, - co.co_name, - co.co_firstlineno, - co.co_lnotab, - # These two arguments are reversed: - co.co_cellvars, - co.co_freevars, - ] - ) - set_first_freevar_code = types.CodeType(*args) - - def set_closure_cell(cell, value): - # Create a function using the set_first_freevar_code, - # whose first closure cell is `cell`. Calling it will - # change the value of that cell. - setter = types.FunctionType( - set_first_freevar_code, {}, "setter", (), (cell,) - ) - # And call it to set the cell. - setter(value) - - # Make sure it works on this interpreter: - def make_func_with_cell(): - x = None - - def func(): - return x # pragma: no cover - - return func - - if PY2: - cell = make_func_with_cell().func_closure[0] - else: - cell = make_func_with_cell().__closure__[0] - set_closure_cell(cell, 100) - if cell.cell_contents != 100: - raise AssertionError # pragma: no cover - - except Exception: - return just_warn - else: - return set_closure_cell - - -set_closure_cell = make_set_closure_cell() diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/_config.py b/IKEA_scraper/.venv/Lib/site-packages/attr/_config.py deleted file mode 100644 index 8ec92096..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/attr/_config.py +++ /dev/null @@ -1,23 +0,0 @@ -from __future__ import absolute_import, division, print_function - - -__all__ = ["set_run_validators", "get_run_validators"] - -_run_validators = True - - -def set_run_validators(run): - """ - Set whether or not validators are run. By default, they are run. - """ - if not isinstance(run, bool): - raise TypeError("'run' must be bool.") - global _run_validators - _run_validators = run - - -def get_run_validators(): - """ - Return whether or not validators are run. - """ - return _run_validators diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/_funcs.py b/IKEA_scraper/.venv/Lib/site-packages/attr/_funcs.py deleted file mode 100644 index fda508c5..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/attr/_funcs.py +++ /dev/null @@ -1,395 +0,0 @@ -from __future__ import absolute_import, division, print_function - -import copy - -from ._compat import iteritems -from ._make import NOTHING, _obj_setattr, fields -from .exceptions import AttrsAttributeNotFoundError - - -def asdict( - inst, - recurse=True, - filter=None, - dict_factory=dict, - retain_collection_types=False, - value_serializer=None, -): - """ - Return the ``attrs`` attribute values of *inst* as a dict. - - Optionally recurse into other ``attrs``-decorated classes. - - :param inst: Instance of an ``attrs``-decorated class. - :param bool recurse: Recurse into classes that are also - ``attrs``-decorated. - :param callable filter: A callable whose return code determines whether an - attribute or element is included (``True``) or dropped (``False``). Is - called with the `attr.Attribute` as the first argument and the - value as the second argument. - :param callable dict_factory: A callable to produce dictionaries from. For - example, to produce ordered dictionaries instead of normal Python - dictionaries, pass in ``collections.OrderedDict``. - :param bool retain_collection_types: Do not convert to ``list`` when - encountering an attribute whose type is ``tuple`` or ``set``. Only - meaningful if ``recurse`` is ``True``. - :param Optional[callable] value_serializer: A hook that is called for every - attribute or dict key/value. It receives the current instance, field - and value and must return the (updated) value. The hook is run *after* - the optional *filter* has been applied. - - :rtype: return type of *dict_factory* - - :raise attr.exceptions.NotAnAttrsClassError: If *cls* is not an ``attrs`` - class. - - .. versionadded:: 16.0.0 *dict_factory* - .. versionadded:: 16.1.0 *retain_collection_types* - .. versionadded:: 20.3.0 *value_serializer* - """ - attrs = fields(inst.__class__) - rv = dict_factory() - for a in attrs: - v = getattr(inst, a.name) - if filter is not None and not filter(a, v): - continue - - if value_serializer is not None: - v = value_serializer(inst, a, v) - - if recurse is True: - if has(v.__class__): - rv[a.name] = asdict( - v, - True, - filter, - dict_factory, - retain_collection_types, - value_serializer, - ) - elif isinstance(v, (tuple, list, set, frozenset)): - cf = v.__class__ if retain_collection_types is True else list - rv[a.name] = cf( - [ - _asdict_anything( - i, - filter, - dict_factory, - retain_collection_types, - value_serializer, - ) - for i in v - ] - ) - elif isinstance(v, dict): - df = dict_factory - rv[a.name] = df( - ( - _asdict_anything( - kk, - filter, - df, - retain_collection_types, - value_serializer, - ), - _asdict_anything( - vv, - filter, - df, - retain_collection_types, - value_serializer, - ), - ) - for kk, vv in iteritems(v) - ) - else: - rv[a.name] = v - else: - rv[a.name] = v - return rv - - -def _asdict_anything( - val, - filter, - dict_factory, - retain_collection_types, - value_serializer, -): - """ - ``asdict`` only works on attrs instances, this works on anything. - """ - if getattr(val.__class__, "__attrs_attrs__", None) is not None: - # Attrs class. - rv = asdict( - val, - True, - filter, - dict_factory, - retain_collection_types, - value_serializer, - ) - elif isinstance(val, (tuple, list, set, frozenset)): - cf = val.__class__ if retain_collection_types is True else list - rv = cf( - [ - _asdict_anything( - i, - filter, - dict_factory, - retain_collection_types, - value_serializer, - ) - for i in val - ] - ) - elif isinstance(val, dict): - df = dict_factory - rv = df( - ( - _asdict_anything( - kk, filter, df, retain_collection_types, value_serializer - ), - _asdict_anything( - vv, filter, df, retain_collection_types, value_serializer - ), - ) - for kk, vv in iteritems(val) - ) - else: - rv = val - if value_serializer is not None: - rv = value_serializer(None, None, rv) - - return rv - - -def astuple( - inst, - recurse=True, - filter=None, - tuple_factory=tuple, - retain_collection_types=False, -): - """ - Return the ``attrs`` attribute values of *inst* as a tuple. - - Optionally recurse into other ``attrs``-decorated classes. - - :param inst: Instance of an ``attrs``-decorated class. - :param bool recurse: Recurse into classes that are also - ``attrs``-decorated. - :param callable filter: A callable whose return code determines whether an - attribute or element is included (``True``) or dropped (``False``). Is - called with the `attr.Attribute` as the first argument and the - value as the second argument. - :param callable tuple_factory: A callable to produce tuples from. For - example, to produce lists instead of tuples. - :param bool retain_collection_types: Do not convert to ``list`` - or ``dict`` when encountering an attribute which type is - ``tuple``, ``dict`` or ``set``. Only meaningful if ``recurse`` is - ``True``. - - :rtype: return type of *tuple_factory* - - :raise attr.exceptions.NotAnAttrsClassError: If *cls* is not an ``attrs`` - class. - - .. versionadded:: 16.2.0 - """ - attrs = fields(inst.__class__) - rv = [] - retain = retain_collection_types # Very long. :/ - for a in attrs: - v = getattr(inst, a.name) - if filter is not None and not filter(a, v): - continue - if recurse is True: - if has(v.__class__): - rv.append( - astuple( - v, - recurse=True, - filter=filter, - tuple_factory=tuple_factory, - retain_collection_types=retain, - ) - ) - elif isinstance(v, (tuple, list, set, frozenset)): - cf = v.__class__ if retain is True else list - rv.append( - cf( - [ - astuple( - j, - recurse=True, - filter=filter, - tuple_factory=tuple_factory, - retain_collection_types=retain, - ) - if has(j.__class__) - else j - for j in v - ] - ) - ) - elif isinstance(v, dict): - df = v.__class__ if retain is True else dict - rv.append( - df( - ( - astuple( - kk, - tuple_factory=tuple_factory, - retain_collection_types=retain, - ) - if has(kk.__class__) - else kk, - astuple( - vv, - tuple_factory=tuple_factory, - retain_collection_types=retain, - ) - if has(vv.__class__) - else vv, - ) - for kk, vv in iteritems(v) - ) - ) - else: - rv.append(v) - else: - rv.append(v) - - return rv if tuple_factory is list else tuple_factory(rv) - - -def has(cls): - """ - Check whether *cls* is a class with ``attrs`` attributes. - - :param type cls: Class to introspect. - :raise TypeError: If *cls* is not a class. - - :rtype: bool - """ - return getattr(cls, "__attrs_attrs__", None) is not None - - -def assoc(inst, **changes): - """ - Copy *inst* and apply *changes*. - - :param inst: Instance of a class with ``attrs`` attributes. - :param changes: Keyword changes in the new copy. - - :return: A copy of inst with *changes* incorporated. - - :raise attr.exceptions.AttrsAttributeNotFoundError: If *attr_name* couldn't - be found on *cls*. - :raise attr.exceptions.NotAnAttrsClassError: If *cls* is not an ``attrs`` - class. - - .. deprecated:: 17.1.0 - Use `evolve` instead. - """ - import warnings - - warnings.warn( - "assoc is deprecated and will be removed after 2018/01.", - DeprecationWarning, - stacklevel=2, - ) - new = copy.copy(inst) - attrs = fields(inst.__class__) - for k, v in iteritems(changes): - a = getattr(attrs, k, NOTHING) - if a is NOTHING: - raise AttrsAttributeNotFoundError( - "{k} is not an attrs attribute on {cl}.".format( - k=k, cl=new.__class__ - ) - ) - _obj_setattr(new, k, v) - return new - - -def evolve(inst, **changes): - """ - Create a new instance, based on *inst* with *changes* applied. - - :param inst: Instance of a class with ``attrs`` attributes. - :param changes: Keyword changes in the new copy. - - :return: A copy of inst with *changes* incorporated. - - :raise TypeError: If *attr_name* couldn't be found in the class - ``__init__``. - :raise attr.exceptions.NotAnAttrsClassError: If *cls* is not an ``attrs`` - class. - - .. versionadded:: 17.1.0 - """ - cls = inst.__class__ - attrs = fields(cls) - for a in attrs: - if not a.init: - continue - attr_name = a.name # To deal with private attributes. - init_name = attr_name if attr_name[0] != "_" else attr_name[1:] - if init_name not in changes: - changes[init_name] = getattr(inst, attr_name) - - return cls(**changes) - - -def resolve_types(cls, globalns=None, localns=None, attribs=None): - """ - Resolve any strings and forward annotations in type annotations. - - This is only required if you need concrete types in `Attribute`'s *type* - field. In other words, you don't need to resolve your types if you only - use them for static type checking. - - With no arguments, names will be looked up in the module in which the class - was created. If this is not what you want, e.g. if the name only exists - inside a method, you may pass *globalns* or *localns* to specify other - dictionaries in which to look up these names. See the docs of - `typing.get_type_hints` for more details. - - :param type cls: Class to resolve. - :param Optional[dict] globalns: Dictionary containing global variables. - :param Optional[dict] localns: Dictionary containing local variables. - :param Optional[list] attribs: List of attribs for the given class. - This is necessary when calling from inside a ``field_transformer`` - since *cls* is not an ``attrs`` class yet. - - :raise TypeError: If *cls* is not a class. - :raise attr.exceptions.NotAnAttrsClassError: If *cls* is not an ``attrs`` - class and you didn't pass any attribs. - :raise NameError: If types cannot be resolved because of missing variables. - - :returns: *cls* so you can use this function also as a class decorator. - Please note that you have to apply it **after** `attr.s`. That means - the decorator has to come in the line **before** `attr.s`. - - .. versionadded:: 20.1.0 - .. versionadded:: 21.1.0 *attribs* - - """ - try: - # Since calling get_type_hints is expensive we cache whether we've - # done it already. - cls.__attrs_types_resolved__ - except AttributeError: - import typing - - hints = typing.get_type_hints(cls, globalns=globalns, localns=localns) - for field in fields(cls) if attribs is None else attribs: - if field.name in hints: - # Since fields have been frozen we must work around it. - _obj_setattr(field, "type", hints[field.name]) - cls.__attrs_types_resolved__ = True - - # Return the class so you can use it as a decorator too. - return cls diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/_make.py b/IKEA_scraper/.venv/Lib/site-packages/attr/_make.py deleted file mode 100644 index a1912b12..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/attr/_make.py +++ /dev/null @@ -1,3052 +0,0 @@ -from __future__ import absolute_import, division, print_function - -import copy -import inspect -import linecache -import sys -import threading -import uuid -import warnings - -from operator import itemgetter - -from . import _config, setters -from ._compat import ( - PY2, - PYPY, - isclass, - iteritems, - metadata_proxy, - new_class, - ordered_dict, - set_closure_cell, -) -from .exceptions import ( - DefaultAlreadySetError, - FrozenInstanceError, - NotAnAttrsClassError, - PythonTooOldError, - UnannotatedAttributeError, -) - - -if not PY2: - import typing - - -# This is used at least twice, so cache it here. -_obj_setattr = object.__setattr__ -_init_converter_pat = "__attr_converter_%s" -_init_factory_pat = "__attr_factory_{}" -_tuple_property_pat = ( - " {attr_name} = _attrs_property(_attrs_itemgetter({index}))" -) -_classvar_prefixes = ( - "typing.ClassVar", - "t.ClassVar", - "ClassVar", - "typing_extensions.ClassVar", -) -# we don't use a double-underscore prefix because that triggers -# name mangling when trying to create a slot for the field -# (when slots=True) -_hash_cache_field = "_attrs_cached_hash" - -_empty_metadata_singleton = metadata_proxy({}) - -# Unique object for unequivocal getattr() defaults. -_sentinel = object() - - -class _Nothing(object): - """ - Sentinel class to indicate the lack of a value when ``None`` is ambiguous. - - ``_Nothing`` is a singleton. There is only ever one of it. - - .. versionchanged:: 21.1.0 ``bool(NOTHING)`` is now False. - """ - - _singleton = None - - def __new__(cls): - if _Nothing._singleton is None: - _Nothing._singleton = super(_Nothing, cls).__new__(cls) - return _Nothing._singleton - - def __repr__(self): - return "NOTHING" - - def __bool__(self): - return False - - def __len__(self): - return 0 # __bool__ for Python 2 - - -NOTHING = _Nothing() -""" -Sentinel to indicate the lack of a value when ``None`` is ambiguous. -""" - - -class _CacheHashWrapper(int): - """ - An integer subclass that pickles / copies as None - - This is used for non-slots classes with ``cache_hash=True``, to avoid - serializing a potentially (even likely) invalid hash value. Since ``None`` - is the default value for uncalculated hashes, whenever this is copied, - the copy's value for the hash should automatically reset. - - See GH #613 for more details. - """ - - if PY2: - # For some reason `type(None)` isn't callable in Python 2, but we don't - # actually need a constructor for None objects, we just need any - # available function that returns None. - def __reduce__(self, _none_constructor=getattr, _args=(0, "", None)): - return _none_constructor, _args - - else: - - def __reduce__(self, _none_constructor=type(None), _args=()): - return _none_constructor, _args - - -def attrib( - default=NOTHING, - validator=None, - repr=True, - cmp=None, - hash=None, - init=True, - metadata=None, - type=None, - converter=None, - factory=None, - kw_only=False, - eq=None, - order=None, - on_setattr=None, -): - """ - Create a new attribute on a class. - - .. warning:: - - Does *not* do anything unless the class is also decorated with - `attr.s`! - - :param default: A value that is used if an ``attrs``-generated ``__init__`` - is used and no value is passed while instantiating or the attribute is - excluded using ``init=False``. - - If the value is an instance of `Factory`, its callable will be - used to construct a new value (useful for mutable data types like lists - or dicts). - - If a default is not set (or set manually to `attr.NOTHING`), a value - *must* be supplied when instantiating; otherwise a `TypeError` - will be raised. - - The default can also be set using decorator notation as shown below. - - :type default: Any value - - :param callable factory: Syntactic sugar for - ``default=attr.Factory(factory)``. - - :param validator: `callable` that is called by ``attrs``-generated - ``__init__`` methods after the instance has been initialized. They - receive the initialized instance, the `Attribute`, and the - passed value. - - The return value is *not* inspected so the validator has to throw an - exception itself. - - If a `list` is passed, its items are treated as validators and must - all pass. - - Validators can be globally disabled and re-enabled using - `get_run_validators`. - - The validator can also be set using decorator notation as shown below. - - :type validator: `callable` or a `list` of `callable`\\ s. - - :param repr: Include this attribute in the generated ``__repr__`` - method. If ``True``, include the attribute; if ``False``, omit it. By - default, the built-in ``repr()`` function is used. To override how the - attribute value is formatted, pass a ``callable`` that takes a single - value and returns a string. Note that the resulting string is used - as-is, i.e. it will be used directly *instead* of calling ``repr()`` - (the default). - :type repr: a `bool` or a `callable` to use a custom function. - - :param eq: If ``True`` (default), include this attribute in the - generated ``__eq__`` and ``__ne__`` methods that check two instances - for equality. To override how the attribute value is compared, - pass a ``callable`` that takes a single value and returns the value - to be compared. - :type eq: a `bool` or a `callable`. - - :param order: If ``True`` (default), include this attributes in the - generated ``__lt__``, ``__le__``, ``__gt__`` and ``__ge__`` methods. - To override how the attribute value is ordered, - pass a ``callable`` that takes a single value and returns the value - to be ordered. - :type order: a `bool` or a `callable`. - - :param cmp: Setting *cmp* is equivalent to setting *eq* and *order* to the - same value. Must not be mixed with *eq* or *order*. - :type cmp: a `bool` or a `callable`. - - :param Optional[bool] hash: Include this attribute in the generated - ``__hash__`` method. If ``None`` (default), mirror *eq*'s value. This - is the correct behavior according the Python spec. Setting this value - to anything else than ``None`` is *discouraged*. - :param bool init: Include this attribute in the generated ``__init__`` - method. It is possible to set this to ``False`` and set a default - value. In that case this attributed is unconditionally initialized - with the specified default value or factory. - :param callable converter: `callable` that is called by - ``attrs``-generated ``__init__`` methods to convert attribute's value - to the desired format. It is given the passed-in value, and the - returned value will be used as the new value of the attribute. The - value is converted before being passed to the validator, if any. - :param metadata: An arbitrary mapping, to be used by third-party - components. See `extending_metadata`. - :param type: The type of the attribute. In Python 3.6 or greater, the - preferred method to specify the type is using a variable annotation - (see `PEP 526 `_). - This argument is provided for backward compatibility. - Regardless of the approach used, the type will be stored on - ``Attribute.type``. - - Please note that ``attrs`` doesn't do anything with this metadata by - itself. You can use it as part of your own code or for - `static type checking `. - :param kw_only: Make this attribute keyword-only (Python 3+) - in the generated ``__init__`` (if ``init`` is ``False``, this - parameter is ignored). - :param on_setattr: Allows to overwrite the *on_setattr* setting from - `attr.s`. If left `None`, the *on_setattr* value from `attr.s` is used. - Set to `attr.setters.NO_OP` to run **no** `setattr` hooks for this - attribute -- regardless of the setting in `attr.s`. - :type on_setattr: `callable`, or a list of callables, or `None`, or - `attr.setters.NO_OP` - - .. versionadded:: 15.2.0 *convert* - .. versionadded:: 16.3.0 *metadata* - .. versionchanged:: 17.1.0 *validator* can be a ``list`` now. - .. versionchanged:: 17.1.0 - *hash* is ``None`` and therefore mirrors *eq* by default. - .. versionadded:: 17.3.0 *type* - .. deprecated:: 17.4.0 *convert* - .. versionadded:: 17.4.0 *converter* as a replacement for the deprecated - *convert* to achieve consistency with other noun-based arguments. - .. versionadded:: 18.1.0 - ``factory=f`` is syntactic sugar for ``default=attr.Factory(f)``. - .. versionadded:: 18.2.0 *kw_only* - .. versionchanged:: 19.2.0 *convert* keyword argument removed. - .. versionchanged:: 19.2.0 *repr* also accepts a custom callable. - .. deprecated:: 19.2.0 *cmp* Removal on or after 2021-06-01. - .. versionadded:: 19.2.0 *eq* and *order* - .. versionadded:: 20.1.0 *on_setattr* - .. versionchanged:: 20.3.0 *kw_only* backported to Python 2 - .. versionchanged:: 21.1.0 - *eq*, *order*, and *cmp* also accept a custom callable - .. versionchanged:: 21.1.0 *cmp* undeprecated - """ - eq, eq_key, order, order_key = _determine_attrib_eq_order( - cmp, eq, order, True - ) - - if hash is not None and hash is not True and hash is not False: - raise TypeError( - "Invalid value for hash. Must be True, False, or None." - ) - - if factory is not None: - if default is not NOTHING: - raise ValueError( - "The `default` and `factory` arguments are mutually " - "exclusive." - ) - if not callable(factory): - raise ValueError("The `factory` argument must be a callable.") - default = Factory(factory) - - if metadata is None: - metadata = {} - - # Apply syntactic sugar by auto-wrapping. - if isinstance(on_setattr, (list, tuple)): - on_setattr = setters.pipe(*on_setattr) - - if validator and isinstance(validator, (list, tuple)): - validator = and_(*validator) - - if converter and isinstance(converter, (list, tuple)): - converter = pipe(*converter) - - return _CountingAttr( - default=default, - validator=validator, - repr=repr, - cmp=None, - hash=hash, - init=init, - converter=converter, - metadata=metadata, - type=type, - kw_only=kw_only, - eq=eq, - eq_key=eq_key, - order=order, - order_key=order_key, - on_setattr=on_setattr, - ) - - -def _compile_and_eval(script, globs, locs=None, filename=""): - """ - "Exec" the script with the given global (globs) and local (locs) variables. - """ - bytecode = compile(script, filename, "exec") - eval(bytecode, globs, locs) - - -def _make_method(name, script, filename, globs=None): - """ - Create the method with the script given and return the method object. - """ - locs = {} - if globs is None: - globs = {} - - _compile_and_eval(script, globs, locs, filename) - - # In order of debuggers like PDB being able to step through the code, - # we add a fake linecache entry. - linecache.cache[filename] = ( - len(script), - None, - script.splitlines(True), - filename, - ) - - return locs[name] - - -def _make_attr_tuple_class(cls_name, attr_names): - """ - Create a tuple subclass to hold `Attribute`s for an `attrs` class. - - The subclass is a bare tuple with properties for names. - - class MyClassAttributes(tuple): - __slots__ = () - x = property(itemgetter(0)) - """ - attr_class_name = "{}Attributes".format(cls_name) - attr_class_template = [ - "class {}(tuple):".format(attr_class_name), - " __slots__ = ()", - ] - if attr_names: - for i, attr_name in enumerate(attr_names): - attr_class_template.append( - _tuple_property_pat.format(index=i, attr_name=attr_name) - ) - else: - attr_class_template.append(" pass") - globs = {"_attrs_itemgetter": itemgetter, "_attrs_property": property} - _compile_and_eval("\n".join(attr_class_template), globs) - return globs[attr_class_name] - - -# Tuple class for extracted attributes from a class definition. -# `base_attrs` is a subset of `attrs`. -_Attributes = _make_attr_tuple_class( - "_Attributes", - [ - # all attributes to build dunder methods for - "attrs", - # attributes that have been inherited - "base_attrs", - # map inherited attributes to their originating classes - "base_attrs_map", - ], -) - - -def _is_class_var(annot): - """ - Check whether *annot* is a typing.ClassVar. - - The string comparison hack is used to avoid evaluating all string - annotations which would put attrs-based classes at a performance - disadvantage compared to plain old classes. - """ - annot = str(annot) - - # Annotation can be quoted. - if annot.startswith(("'", '"')) and annot.endswith(("'", '"')): - annot = annot[1:-1] - - return annot.startswith(_classvar_prefixes) - - -def _has_own_attribute(cls, attrib_name): - """ - Check whether *cls* defines *attrib_name* (and doesn't just inherit it). - - Requires Python 3. - """ - attr = getattr(cls, attrib_name, _sentinel) - if attr is _sentinel: - return False - - for base_cls in cls.__mro__[1:]: - a = getattr(base_cls, attrib_name, None) - if attr is a: - return False - - return True - - -def _get_annotations(cls): - """ - Get annotations for *cls*. - """ - if _has_own_attribute(cls, "__annotations__"): - return cls.__annotations__ - - return {} - - -def _counter_getter(e): - """ - Key function for sorting to avoid re-creating a lambda for every class. - """ - return e[1].counter - - -def _collect_base_attrs(cls, taken_attr_names): - """ - Collect attr.ibs from base classes of *cls*, except *taken_attr_names*. - """ - base_attrs = [] - base_attr_map = {} # A dictionary of base attrs to their classes. - - # Traverse the MRO and collect attributes. - for base_cls in reversed(cls.__mro__[1:-1]): - for a in getattr(base_cls, "__attrs_attrs__", []): - if a.inherited or a.name in taken_attr_names: - continue - - a = a.evolve(inherited=True) - base_attrs.append(a) - base_attr_map[a.name] = base_cls - - # For each name, only keep the freshest definition i.e. the furthest at the - # back. base_attr_map is fine because it gets overwritten with every new - # instance. - filtered = [] - seen = set() - for a in reversed(base_attrs): - if a.name in seen: - continue - filtered.insert(0, a) - seen.add(a.name) - - return filtered, base_attr_map - - -def _collect_base_attrs_broken(cls, taken_attr_names): - """ - Collect attr.ibs from base classes of *cls*, except *taken_attr_names*. - - N.B. *taken_attr_names* will be mutated. - - Adhere to the old incorrect behavior. - - Notably it collects from the front and considers inherited attributes which - leads to the buggy behavior reported in #428. - """ - base_attrs = [] - base_attr_map = {} # A dictionary of base attrs to their classes. - - # Traverse the MRO and collect attributes. - for base_cls in cls.__mro__[1:-1]: - for a in getattr(base_cls, "__attrs_attrs__", []): - if a.name in taken_attr_names: - continue - - a = a.evolve(inherited=True) - taken_attr_names.add(a.name) - base_attrs.append(a) - base_attr_map[a.name] = base_cls - - return base_attrs, base_attr_map - - -def _transform_attrs( - cls, these, auto_attribs, kw_only, collect_by_mro, field_transformer -): - """ - Transform all `_CountingAttr`s on a class into `Attribute`s. - - If *these* is passed, use that and don't look for them on the class. - - *collect_by_mro* is True, collect them in the correct MRO order, otherwise - use the old -- incorrect -- order. See #428. - - Return an `_Attributes`. - """ - cd = cls.__dict__ - anns = _get_annotations(cls) - - if these is not None: - ca_list = [(name, ca) for name, ca in iteritems(these)] - - if not isinstance(these, ordered_dict): - ca_list.sort(key=_counter_getter) - elif auto_attribs is True: - ca_names = { - name - for name, attr in cd.items() - if isinstance(attr, _CountingAttr) - } - ca_list = [] - annot_names = set() - for attr_name, type in anns.items(): - if _is_class_var(type): - continue - annot_names.add(attr_name) - a = cd.get(attr_name, NOTHING) - - if not isinstance(a, _CountingAttr): - if a is NOTHING: - a = attrib() - else: - a = attrib(default=a) - ca_list.append((attr_name, a)) - - unannotated = ca_names - annot_names - if len(unannotated) > 0: - raise UnannotatedAttributeError( - "The following `attr.ib`s lack a type annotation: " - + ", ".join( - sorted(unannotated, key=lambda n: cd.get(n).counter) - ) - + "." - ) - else: - ca_list = sorted( - ( - (name, attr) - for name, attr in cd.items() - if isinstance(attr, _CountingAttr) - ), - key=lambda e: e[1].counter, - ) - - own_attrs = [ - Attribute.from_counting_attr( - name=attr_name, ca=ca, type=anns.get(attr_name) - ) - for attr_name, ca in ca_list - ] - - if collect_by_mro: - base_attrs, base_attr_map = _collect_base_attrs( - cls, {a.name for a in own_attrs} - ) - else: - base_attrs, base_attr_map = _collect_base_attrs_broken( - cls, {a.name for a in own_attrs} - ) - - attr_names = [a.name for a in base_attrs + own_attrs] - - AttrsClass = _make_attr_tuple_class(cls.__name__, attr_names) - - if kw_only: - own_attrs = [a.evolve(kw_only=True) for a in own_attrs] - base_attrs = [a.evolve(kw_only=True) for a in base_attrs] - - attrs = AttrsClass(base_attrs + own_attrs) - - # Mandatory vs non-mandatory attr order only matters when they are part of - # the __init__ signature and when they aren't kw_only (which are moved to - # the end and can be mandatory or non-mandatory in any order, as they will - # be specified as keyword args anyway). Check the order of those attrs: - had_default = False - for a in (a for a in attrs if a.init is not False and a.kw_only is False): - if had_default is True and a.default is NOTHING: - raise ValueError( - "No mandatory attributes allowed after an attribute with a " - "default value or factory. Attribute in question: %r" % (a,) - ) - - if had_default is False and a.default is not NOTHING: - had_default = True - - if field_transformer is not None: - attrs = field_transformer(cls, attrs) - return _Attributes((attrs, base_attrs, base_attr_map)) - - -if PYPY: - - def _frozen_setattrs(self, name, value): - """ - Attached to frozen classes as __setattr__. - """ - if isinstance(self, BaseException) and name in ( - "__cause__", - "__context__", - ): - BaseException.__setattr__(self, name, value) - return - - raise FrozenInstanceError() - - -else: - - def _frozen_setattrs(self, name, value): - """ - Attached to frozen classes as __setattr__. - """ - raise FrozenInstanceError() - - -def _frozen_delattrs(self, name): - """ - Attached to frozen classes as __delattr__. - """ - raise FrozenInstanceError() - - -class _ClassBuilder(object): - """ - Iteratively build *one* class. - """ - - __slots__ = ( - "_attr_names", - "_attrs", - "_base_attr_map", - "_base_names", - "_cache_hash", - "_cls", - "_cls_dict", - "_delete_attribs", - "_frozen", - "_has_pre_init", - "_has_post_init", - "_is_exc", - "_on_setattr", - "_slots", - "_weakref_slot", - "_has_own_setattr", - "_has_custom_setattr", - ) - - def __init__( - self, - cls, - these, - slots, - frozen, - weakref_slot, - getstate_setstate, - auto_attribs, - kw_only, - cache_hash, - is_exc, - collect_by_mro, - on_setattr, - has_custom_setattr, - field_transformer, - ): - attrs, base_attrs, base_map = _transform_attrs( - cls, - these, - auto_attribs, - kw_only, - collect_by_mro, - field_transformer, - ) - - self._cls = cls - self._cls_dict = dict(cls.__dict__) if slots else {} - self._attrs = attrs - self._base_names = set(a.name for a in base_attrs) - self._base_attr_map = base_map - self._attr_names = tuple(a.name for a in attrs) - self._slots = slots - self._frozen = frozen - self._weakref_slot = weakref_slot - self._cache_hash = cache_hash - self._has_pre_init = bool(getattr(cls, "__attrs_pre_init__", False)) - self._has_post_init = bool(getattr(cls, "__attrs_post_init__", False)) - self._delete_attribs = not bool(these) - self._is_exc = is_exc - self._on_setattr = on_setattr - - self._has_custom_setattr = has_custom_setattr - self._has_own_setattr = False - - self._cls_dict["__attrs_attrs__"] = self._attrs - - if frozen: - self._cls_dict["__setattr__"] = _frozen_setattrs - self._cls_dict["__delattr__"] = _frozen_delattrs - - self._has_own_setattr = True - - if getstate_setstate: - ( - self._cls_dict["__getstate__"], - self._cls_dict["__setstate__"], - ) = self._make_getstate_setstate() - - def __repr__(self): - return "<_ClassBuilder(cls={cls})>".format(cls=self._cls.__name__) - - def build_class(self): - """ - Finalize class based on the accumulated configuration. - - Builder cannot be used after calling this method. - """ - if self._slots is True: - return self._create_slots_class() - else: - return self._patch_original_class() - - def _patch_original_class(self): - """ - Apply accumulated methods and return the class. - """ - cls = self._cls - base_names = self._base_names - - # Clean class of attribute definitions (`attr.ib()`s). - if self._delete_attribs: - for name in self._attr_names: - if ( - name not in base_names - and getattr(cls, name, _sentinel) is not _sentinel - ): - try: - delattr(cls, name) - except AttributeError: - # This can happen if a base class defines a class - # variable and we want to set an attribute with the - # same name by using only a type annotation. - pass - - # Attach our dunder methods. - for name, value in self._cls_dict.items(): - setattr(cls, name, value) - - # If we've inherited an attrs __setattr__ and don't write our own, - # reset it to object's. - if not self._has_own_setattr and getattr( - cls, "__attrs_own_setattr__", False - ): - cls.__attrs_own_setattr__ = False - - if not self._has_custom_setattr: - cls.__setattr__ = object.__setattr__ - - return cls - - def _create_slots_class(self): - """ - Build and return a new class with a `__slots__` attribute. - """ - cd = { - k: v - for k, v in iteritems(self._cls_dict) - if k not in tuple(self._attr_names) + ("__dict__", "__weakref__") - } - - # If our class doesn't have its own implementation of __setattr__ - # (either from the user or by us), check the bases, if one of them has - # an attrs-made __setattr__, that needs to be reset. We don't walk the - # MRO because we only care about our immediate base classes. - # XXX: This can be confused by subclassing a slotted attrs class with - # XXX: a non-attrs class and subclass the resulting class with an attrs - # XXX: class. See `test_slotted_confused` for details. For now that's - # XXX: OK with us. - if not self._has_own_setattr: - cd["__attrs_own_setattr__"] = False - - if not self._has_custom_setattr: - for base_cls in self._cls.__bases__: - if base_cls.__dict__.get("__attrs_own_setattr__", False): - cd["__setattr__"] = object.__setattr__ - break - - # Traverse the MRO to collect existing slots - # and check for an existing __weakref__. - existing_slots = dict() - weakref_inherited = False - for base_cls in self._cls.__mro__[1:-1]: - if base_cls.__dict__.get("__weakref__", None) is not None: - weakref_inherited = True - existing_slots.update( - { - name: getattr(base_cls, name) - for name in getattr(base_cls, "__slots__", []) - } - ) - - base_names = set(self._base_names) - - names = self._attr_names - if ( - self._weakref_slot - and "__weakref__" not in getattr(self._cls, "__slots__", ()) - and "__weakref__" not in names - and not weakref_inherited - ): - names += ("__weakref__",) - - # We only add the names of attributes that aren't inherited. - # Setting __slots__ to inherited attributes wastes memory. - slot_names = [name for name in names if name not in base_names] - # There are slots for attributes from current class - # that are defined in parent classes. - # As their descriptors may be overriden by a child class, - # we collect them here and update the class dict - reused_slots = { - slot: slot_descriptor - for slot, slot_descriptor in iteritems(existing_slots) - if slot in slot_names - } - slot_names = [name for name in slot_names if name not in reused_slots] - cd.update(reused_slots) - if self._cache_hash: - slot_names.append(_hash_cache_field) - cd["__slots__"] = tuple(slot_names) - - qualname = getattr(self._cls, "__qualname__", None) - if qualname is not None: - cd["__qualname__"] = qualname - - # Create new class based on old class and our methods. - cls = type(self._cls)(self._cls.__name__, self._cls.__bases__, cd) - - # The following is a fix for - # https://github.com/python-attrs/attrs/issues/102. On Python 3, - # if a method mentions `__class__` or uses the no-arg super(), the - # compiler will bake a reference to the class in the method itself - # as `method.__closure__`. Since we replace the class with a - # clone, we rewrite these references so it keeps working. - for item in cls.__dict__.values(): - if isinstance(item, (classmethod, staticmethod)): - # Class- and staticmethods hide their functions inside. - # These might need to be rewritten as well. - closure_cells = getattr(item.__func__, "__closure__", None) - elif isinstance(item, property): - # Workaround for property `super()` shortcut (PY3-only). - # There is no universal way for other descriptors. - closure_cells = getattr(item.fget, "__closure__", None) - else: - closure_cells = getattr(item, "__closure__", None) - - if not closure_cells: # Catch None or the empty list. - continue - for cell in closure_cells: - try: - match = cell.cell_contents is self._cls - except ValueError: # ValueError: Cell is empty - pass - else: - if match: - set_closure_cell(cell, cls) - - return cls - - def add_repr(self, ns): - self._cls_dict["__repr__"] = self._add_method_dunders( - _make_repr(self._attrs, ns=ns) - ) - return self - - def add_str(self): - repr = self._cls_dict.get("__repr__") - if repr is None: - raise ValueError( - "__str__ can only be generated if a __repr__ exists." - ) - - def __str__(self): - return self.__repr__() - - self._cls_dict["__str__"] = self._add_method_dunders(__str__) - return self - - def _make_getstate_setstate(self): - """ - Create custom __setstate__ and __getstate__ methods. - """ - # __weakref__ is not writable. - state_attr_names = tuple( - an for an in self._attr_names if an != "__weakref__" - ) - - def slots_getstate(self): - """ - Automatically created by attrs. - """ - return tuple(getattr(self, name) for name in state_attr_names) - - hash_caching_enabled = self._cache_hash - - def slots_setstate(self, state): - """ - Automatically created by attrs. - """ - __bound_setattr = _obj_setattr.__get__(self, Attribute) - for name, value in zip(state_attr_names, state): - __bound_setattr(name, value) - - # The hash code cache is not included when the object is - # serialized, but it still needs to be initialized to None to - # indicate that the first call to __hash__ should be a cache - # miss. - if hash_caching_enabled: - __bound_setattr(_hash_cache_field, None) - - return slots_getstate, slots_setstate - - def make_unhashable(self): - self._cls_dict["__hash__"] = None - return self - - def add_hash(self): - self._cls_dict["__hash__"] = self._add_method_dunders( - _make_hash( - self._cls, - self._attrs, - frozen=self._frozen, - cache_hash=self._cache_hash, - ) - ) - - return self - - def add_init(self): - self._cls_dict["__init__"] = self._add_method_dunders( - _make_init( - self._cls, - self._attrs, - self._has_pre_init, - self._has_post_init, - self._frozen, - self._slots, - self._cache_hash, - self._base_attr_map, - self._is_exc, - self._on_setattr is not None - and self._on_setattr is not setters.NO_OP, - attrs_init=False, - ) - ) - - return self - - def add_attrs_init(self): - self._cls_dict["__attrs_init__"] = self._add_method_dunders( - _make_init( - self._cls, - self._attrs, - self._has_pre_init, - self._has_post_init, - self._frozen, - self._slots, - self._cache_hash, - self._base_attr_map, - self._is_exc, - self._on_setattr is not None - and self._on_setattr is not setters.NO_OP, - attrs_init=True, - ) - ) - - return self - - def add_eq(self): - cd = self._cls_dict - - cd["__eq__"] = self._add_method_dunders( - _make_eq(self._cls, self._attrs) - ) - cd["__ne__"] = self._add_method_dunders(_make_ne()) - - return self - - def add_order(self): - cd = self._cls_dict - - cd["__lt__"], cd["__le__"], cd["__gt__"], cd["__ge__"] = ( - self._add_method_dunders(meth) - for meth in _make_order(self._cls, self._attrs) - ) - - return self - - def add_setattr(self): - if self._frozen: - return self - - sa_attrs = {} - for a in self._attrs: - on_setattr = a.on_setattr or self._on_setattr - if on_setattr and on_setattr is not setters.NO_OP: - sa_attrs[a.name] = a, on_setattr - - if not sa_attrs: - return self - - if self._has_custom_setattr: - # We need to write a __setattr__ but there already is one! - raise ValueError( - "Can't combine custom __setattr__ with on_setattr hooks." - ) - - # docstring comes from _add_method_dunders - def __setattr__(self, name, val): - try: - a, hook = sa_attrs[name] - except KeyError: - nval = val - else: - nval = hook(self, a, val) - - _obj_setattr(self, name, nval) - - self._cls_dict["__attrs_own_setattr__"] = True - self._cls_dict["__setattr__"] = self._add_method_dunders(__setattr__) - self._has_own_setattr = True - - return self - - def _add_method_dunders(self, method): - """ - Add __module__ and __qualname__ to a *method* if possible. - """ - try: - method.__module__ = self._cls.__module__ - except AttributeError: - pass - - try: - method.__qualname__ = ".".join( - (self._cls.__qualname__, method.__name__) - ) - except AttributeError: - pass - - try: - method.__doc__ = "Method generated by attrs for class %s." % ( - self._cls.__qualname__, - ) - except AttributeError: - pass - - return method - - -_CMP_DEPRECATION = ( - "The usage of `cmp` is deprecated and will be removed on or after " - "2021-06-01. Please use `eq` and `order` instead." -) - - -def _determine_attrs_eq_order(cmp, eq, order, default_eq): - """ - Validate the combination of *cmp*, *eq*, and *order*. Derive the effective - values of eq and order. If *eq* is None, set it to *default_eq*. - """ - if cmp is not None and any((eq is not None, order is not None)): - raise ValueError("Don't mix `cmp` with `eq' and `order`.") - - # cmp takes precedence due to bw-compatibility. - if cmp is not None: - return cmp, cmp - - # If left None, equality is set to the specified default and ordering - # mirrors equality. - if eq is None: - eq = default_eq - - if order is None: - order = eq - - if eq is False and order is True: - raise ValueError("`order` can only be True if `eq` is True too.") - - return eq, order - - -def _determine_attrib_eq_order(cmp, eq, order, default_eq): - """ - Validate the combination of *cmp*, *eq*, and *order*. Derive the effective - values of eq and order. If *eq* is None, set it to *default_eq*. - """ - if cmp is not None and any((eq is not None, order is not None)): - raise ValueError("Don't mix `cmp` with `eq' and `order`.") - - def decide_callable_or_boolean(value): - """ - Decide whether a key function is used. - """ - if callable(value): - value, key = True, value - else: - key = None - return value, key - - # cmp takes precedence due to bw-compatibility. - if cmp is not None: - cmp, cmp_key = decide_callable_or_boolean(cmp) - return cmp, cmp_key, cmp, cmp_key - - # If left None, equality is set to the specified default and ordering - # mirrors equality. - if eq is None: - eq, eq_key = default_eq, None - else: - eq, eq_key = decide_callable_or_boolean(eq) - - if order is None: - order, order_key = eq, eq_key - else: - order, order_key = decide_callable_or_boolean(order) - - if eq is False and order is True: - raise ValueError("`order` can only be True if `eq` is True too.") - - return eq, eq_key, order, order_key - - -def _determine_whether_to_implement( - cls, flag, auto_detect, dunders, default=True -): - """ - Check whether we should implement a set of methods for *cls*. - - *flag* is the argument passed into @attr.s like 'init', *auto_detect* the - same as passed into @attr.s and *dunders* is a tuple of attribute names - whose presence signal that the user has implemented it themselves. - - Return *default* if no reason for either for or against is found. - - auto_detect must be False on Python 2. - """ - if flag is True or flag is False: - return flag - - if flag is None and auto_detect is False: - return default - - # Logically, flag is None and auto_detect is True here. - for dunder in dunders: - if _has_own_attribute(cls, dunder): - return False - - return default - - -def attrs( - maybe_cls=None, - these=None, - repr_ns=None, - repr=None, - cmp=None, - hash=None, - init=None, - slots=False, - frozen=False, - weakref_slot=True, - str=False, - auto_attribs=False, - kw_only=False, - cache_hash=False, - auto_exc=False, - eq=None, - order=None, - auto_detect=False, - collect_by_mro=False, - getstate_setstate=None, - on_setattr=None, - field_transformer=None, -): - r""" - A class decorator that adds `dunder - `_\ -methods according to the - specified attributes using `attr.ib` or the *these* argument. - - :param these: A dictionary of name to `attr.ib` mappings. This is - useful to avoid the definition of your attributes within the class body - because you can't (e.g. if you want to add ``__repr__`` methods to - Django models) or don't want to. - - If *these* is not ``None``, ``attrs`` will *not* search the class body - for attributes and will *not* remove any attributes from it. - - If *these* is an ordered dict (`dict` on Python 3.6+, - `collections.OrderedDict` otherwise), the order is deduced from - the order of the attributes inside *these*. Otherwise the order - of the definition of the attributes is used. - - :type these: `dict` of `str` to `attr.ib` - - :param str repr_ns: When using nested classes, there's no way in Python 2 - to automatically detect that. Therefore it's possible to set the - namespace explicitly for a more meaningful ``repr`` output. - :param bool auto_detect: Instead of setting the *init*, *repr*, *eq*, - *order*, and *hash* arguments explicitly, assume they are set to - ``True`` **unless any** of the involved methods for one of the - arguments is implemented in the *current* class (i.e. it is *not* - inherited from some base class). - - So for example by implementing ``__eq__`` on a class yourself, - ``attrs`` will deduce ``eq=False`` and will create *neither* - ``__eq__`` *nor* ``__ne__`` (but Python classes come with a sensible - ``__ne__`` by default, so it *should* be enough to only implement - ``__eq__`` in most cases). - - .. warning:: - - If you prevent ``attrs`` from creating the ordering methods for you - (``order=False``, e.g. by implementing ``__le__``), it becomes - *your* responsibility to make sure its ordering is sound. The best - way is to use the `functools.total_ordering` decorator. - - - Passing ``True`` or ``False`` to *init*, *repr*, *eq*, *order*, - *cmp*, or *hash* overrides whatever *auto_detect* would determine. - - *auto_detect* requires Python 3. Setting it ``True`` on Python 2 raises - a `PythonTooOldError`. - - :param bool repr: Create a ``__repr__`` method with a human readable - representation of ``attrs`` attributes.. - :param bool str: Create a ``__str__`` method that is identical to - ``__repr__``. This is usually not necessary except for - `Exception`\ s. - :param Optional[bool] eq: If ``True`` or ``None`` (default), add ``__eq__`` - and ``__ne__`` methods that check two instances for equality. - - They compare the instances as if they were tuples of their ``attrs`` - attributes if and only if the types of both classes are *identical*! - :param Optional[bool] order: If ``True``, add ``__lt__``, ``__le__``, - ``__gt__``, and ``__ge__`` methods that behave like *eq* above and - allow instances to be ordered. If ``None`` (default) mirror value of - *eq*. - :param Optional[bool] cmp: Setting *cmp* is equivalent to setting *eq* - and *order* to the same value. Must not be mixed with *eq* or *order*. - :param Optional[bool] hash: If ``None`` (default), the ``__hash__`` method - is generated according how *eq* and *frozen* are set. - - 1. If *both* are True, ``attrs`` will generate a ``__hash__`` for you. - 2. If *eq* is True and *frozen* is False, ``__hash__`` will be set to - None, marking it unhashable (which it is). - 3. If *eq* is False, ``__hash__`` will be left untouched meaning the - ``__hash__`` method of the base class will be used (if base class is - ``object``, this means it will fall back to id-based hashing.). - - Although not recommended, you can decide for yourself and force - ``attrs`` to create one (e.g. if the class is immutable even though you - didn't freeze it programmatically) by passing ``True`` or not. Both of - these cases are rather special and should be used carefully. - - See our documentation on `hashing`, Python's documentation on - `object.__hash__`, and the `GitHub issue that led to the default \ - behavior `_ for more - details. - :param bool init: Create a ``__init__`` method that initializes the - ``attrs`` attributes. Leading underscores are stripped for the argument - name. If a ``__attrs_pre_init__`` method exists on the class, it will - be called before the class is initialized. If a ``__attrs_post_init__`` - method exists on the class, it will be called after the class is fully - initialized. - - If ``init`` is ``False``, an ``__attrs_init__`` method will be - injected instead. This allows you to define a custom ``__init__`` - method that can do pre-init work such as ``super().__init__()``, - and then call ``__attrs_init__()`` and ``__attrs_post_init__()``. - :param bool slots: Create a `slotted class ` that's more - memory-efficient. Slotted classes are generally superior to the default - dict classes, but have some gotchas you should know about, so we - encourage you to read the `glossary entry `. - :param bool frozen: Make instances immutable after initialization. If - someone attempts to modify a frozen instance, - `attr.exceptions.FrozenInstanceError` is raised. - - .. note:: - - 1. This is achieved by installing a custom ``__setattr__`` method - on your class, so you can't implement your own. - - 2. True immutability is impossible in Python. - - 3. This *does* have a minor a runtime performance `impact - ` when initializing new instances. In other words: - ``__init__`` is slightly slower with ``frozen=True``. - - 4. If a class is frozen, you cannot modify ``self`` in - ``__attrs_post_init__`` or a self-written ``__init__``. You can - circumvent that limitation by using - ``object.__setattr__(self, "attribute_name", value)``. - - 5. Subclasses of a frozen class are frozen too. - - :param bool weakref_slot: Make instances weak-referenceable. This has no - effect unless ``slots`` is also enabled. - :param bool auto_attribs: If ``True``, collect `PEP 526`_-annotated - attributes (Python 3.6 and later only) from the class body. - - In this case, you **must** annotate every field. If ``attrs`` - encounters a field that is set to an `attr.ib` but lacks a type - annotation, an `attr.exceptions.UnannotatedAttributeError` is - raised. Use ``field_name: typing.Any = attr.ib(...)`` if you don't - want to set a type. - - If you assign a value to those attributes (e.g. ``x: int = 42``), that - value becomes the default value like if it were passed using - ``attr.ib(default=42)``. Passing an instance of `Factory` also - works as expected in most cases (see warning below). - - Attributes annotated as `typing.ClassVar`, and attributes that are - neither annotated nor set to an `attr.ib` are **ignored**. - - .. warning:: - For features that use the attribute name to create decorators (e.g. - `validators `), you still *must* assign `attr.ib` to - them. Otherwise Python will either not find the name or try to use - the default value to call e.g. ``validator`` on it. - - These errors can be quite confusing and probably the most common bug - report on our bug tracker. - - .. _`PEP 526`: https://www.python.org/dev/peps/pep-0526/ - :param bool kw_only: Make all attributes keyword-only (Python 3+) - in the generated ``__init__`` (if ``init`` is ``False``, this - parameter is ignored). - :param bool cache_hash: Ensure that the object's hash code is computed - only once and stored on the object. If this is set to ``True``, - hashing must be either explicitly or implicitly enabled for this - class. If the hash code is cached, avoid any reassignments of - fields involved in hash code computation or mutations of the objects - those fields point to after object creation. If such changes occur, - the behavior of the object's hash code is undefined. - :param bool auto_exc: If the class subclasses `BaseException` - (which implicitly includes any subclass of any exception), the - following happens to behave like a well-behaved Python exceptions - class: - - - the values for *eq*, *order*, and *hash* are ignored and the - instances compare and hash by the instance's ids (N.B. ``attrs`` will - *not* remove existing implementations of ``__hash__`` or the equality - methods. It just won't add own ones.), - - all attributes that are either passed into ``__init__`` or have a - default value are additionally available as a tuple in the ``args`` - attribute, - - the value of *str* is ignored leaving ``__str__`` to base classes. - :param bool collect_by_mro: Setting this to `True` fixes the way ``attrs`` - collects attributes from base classes. The default behavior is - incorrect in certain cases of multiple inheritance. It should be on by - default but is kept off for backward-compatability. - - See issue `#428 `_ for - more details. - - :param Optional[bool] getstate_setstate: - .. note:: - This is usually only interesting for slotted classes and you should - probably just set *auto_detect* to `True`. - - If `True`, ``__getstate__`` and - ``__setstate__`` are generated and attached to the class. This is - necessary for slotted classes to be pickleable. If left `None`, it's - `True` by default for slotted classes and ``False`` for dict classes. - - If *auto_detect* is `True`, and *getstate_setstate* is left `None`, - and **either** ``__getstate__`` or ``__setstate__`` is detected directly - on the class (i.e. not inherited), it is set to `False` (this is usually - what you want). - - :param on_setattr: A callable that is run whenever the user attempts to set - an attribute (either by assignment like ``i.x = 42`` or by using - `setattr` like ``setattr(i, "x", 42)``). It receives the same arguments - as validators: the instance, the attribute that is being modified, and - the new value. - - If no exception is raised, the attribute is set to the return value of - the callable. - - If a list of callables is passed, they're automatically wrapped in an - `attr.setters.pipe`. - - :param Optional[callable] field_transformer: - A function that is called with the original class object and all - fields right before ``attrs`` finalizes the class. You can use - this, e.g., to automatically add converters or validators to - fields based on their types. See `transform-fields` for more details. - - .. versionadded:: 16.0.0 *slots* - .. versionadded:: 16.1.0 *frozen* - .. versionadded:: 16.3.0 *str* - .. versionadded:: 16.3.0 Support for ``__attrs_post_init__``. - .. versionchanged:: 17.1.0 - *hash* supports ``None`` as value which is also the default now. - .. versionadded:: 17.3.0 *auto_attribs* - .. versionchanged:: 18.1.0 - If *these* is passed, no attributes are deleted from the class body. - .. versionchanged:: 18.1.0 If *these* is ordered, the order is retained. - .. versionadded:: 18.2.0 *weakref_slot* - .. deprecated:: 18.2.0 - ``__lt__``, ``__le__``, ``__gt__``, and ``__ge__`` now raise a - `DeprecationWarning` if the classes compared are subclasses of - each other. ``__eq`` and ``__ne__`` never tried to compared subclasses - to each other. - .. versionchanged:: 19.2.0 - ``__lt__``, ``__le__``, ``__gt__``, and ``__ge__`` now do not consider - subclasses comparable anymore. - .. versionadded:: 18.2.0 *kw_only* - .. versionadded:: 18.2.0 *cache_hash* - .. versionadded:: 19.1.0 *auto_exc* - .. deprecated:: 19.2.0 *cmp* Removal on or after 2021-06-01. - .. versionadded:: 19.2.0 *eq* and *order* - .. versionadded:: 20.1.0 *auto_detect* - .. versionadded:: 20.1.0 *collect_by_mro* - .. versionadded:: 20.1.0 *getstate_setstate* - .. versionadded:: 20.1.0 *on_setattr* - .. versionadded:: 20.3.0 *field_transformer* - .. versionchanged:: 21.1.0 - ``init=False`` injects ``__attrs_init__`` - .. versionchanged:: 21.1.0 Support for ``__attrs_pre_init__`` - .. versionchanged:: 21.1.0 *cmp* undeprecated - """ - if auto_detect and PY2: - raise PythonTooOldError( - "auto_detect only works on Python 3 and later." - ) - - eq_, order_ = _determine_attrs_eq_order(cmp, eq, order, None) - hash_ = hash # work around the lack of nonlocal - - if isinstance(on_setattr, (list, tuple)): - on_setattr = setters.pipe(*on_setattr) - - def wrap(cls): - - if getattr(cls, "__class__", None) is None: - raise TypeError("attrs only works with new-style classes.") - - is_frozen = frozen or _has_frozen_base_class(cls) - is_exc = auto_exc is True and issubclass(cls, BaseException) - has_own_setattr = auto_detect and _has_own_attribute( - cls, "__setattr__" - ) - - if has_own_setattr and is_frozen: - raise ValueError("Can't freeze a class with a custom __setattr__.") - - builder = _ClassBuilder( - cls, - these, - slots, - is_frozen, - weakref_slot, - _determine_whether_to_implement( - cls, - getstate_setstate, - auto_detect, - ("__getstate__", "__setstate__"), - default=slots, - ), - auto_attribs, - kw_only, - cache_hash, - is_exc, - collect_by_mro, - on_setattr, - has_own_setattr, - field_transformer, - ) - if _determine_whether_to_implement( - cls, repr, auto_detect, ("__repr__",) - ): - builder.add_repr(repr_ns) - if str is True: - builder.add_str() - - eq = _determine_whether_to_implement( - cls, eq_, auto_detect, ("__eq__", "__ne__") - ) - if not is_exc and eq is True: - builder.add_eq() - if not is_exc and _determine_whether_to_implement( - cls, order_, auto_detect, ("__lt__", "__le__", "__gt__", "__ge__") - ): - builder.add_order() - - builder.add_setattr() - - if ( - hash_ is None - and auto_detect is True - and _has_own_attribute(cls, "__hash__") - ): - hash = False - else: - hash = hash_ - if hash is not True and hash is not False and hash is not None: - # Can't use `hash in` because 1 == True for example. - raise TypeError( - "Invalid value for hash. Must be True, False, or None." - ) - elif hash is False or (hash is None and eq is False) or is_exc: - # Don't do anything. Should fall back to __object__'s __hash__ - # which is by id. - if cache_hash: - raise TypeError( - "Invalid value for cache_hash. To use hash caching," - " hashing must be either explicitly or implicitly " - "enabled." - ) - elif hash is True or ( - hash is None and eq is True and is_frozen is True - ): - # Build a __hash__ if told so, or if it's safe. - builder.add_hash() - else: - # Raise TypeError on attempts to hash. - if cache_hash: - raise TypeError( - "Invalid value for cache_hash. To use hash caching," - " hashing must be either explicitly or implicitly " - "enabled." - ) - builder.make_unhashable() - - if _determine_whether_to_implement( - cls, init, auto_detect, ("__init__",) - ): - builder.add_init() - else: - builder.add_attrs_init() - if cache_hash: - raise TypeError( - "Invalid value for cache_hash. To use hash caching," - " init must be True." - ) - - return builder.build_class() - - # maybe_cls's type depends on the usage of the decorator. It's a class - # if it's used as `@attrs` but ``None`` if used as `@attrs()`. - if maybe_cls is None: - return wrap - else: - return wrap(maybe_cls) - - -_attrs = attrs -""" -Internal alias so we can use it in functions that take an argument called -*attrs*. -""" - - -if PY2: - - def _has_frozen_base_class(cls): - """ - Check whether *cls* has a frozen ancestor by looking at its - __setattr__. - """ - return ( - getattr(cls.__setattr__, "__module__", None) - == _frozen_setattrs.__module__ - and cls.__setattr__.__name__ == _frozen_setattrs.__name__ - ) - - -else: - - def _has_frozen_base_class(cls): - """ - Check whether *cls* has a frozen ancestor by looking at its - __setattr__. - """ - return cls.__setattr__ == _frozen_setattrs - - -def _generate_unique_filename(cls, func_name): - """ - Create a "filename" suitable for a function being generated. - """ - unique_id = uuid.uuid4() - extra = "" - count = 1 - - while True: - unique_filename = "".format( - func_name, - cls.__module__, - getattr(cls, "__qualname__", cls.__name__), - extra, - ) - # To handle concurrency we essentially "reserve" our spot in - # the linecache with a dummy line. The caller can then - # set this value correctly. - cache_line = (1, None, (str(unique_id),), unique_filename) - if ( - linecache.cache.setdefault(unique_filename, cache_line) - == cache_line - ): - return unique_filename - - # Looks like this spot is taken. Try again. - count += 1 - extra = "-{0}".format(count) - - -def _make_hash(cls, attrs, frozen, cache_hash): - attrs = tuple( - a for a in attrs if a.hash is True or (a.hash is None and a.eq is True) - ) - - tab = " " - - unique_filename = _generate_unique_filename(cls, "hash") - type_hash = hash(unique_filename) - - hash_def = "def __hash__(self" - hash_func = "hash((" - closing_braces = "))" - if not cache_hash: - hash_def += "):" - else: - if not PY2: - hash_def += ", *" - - hash_def += ( - ", _cache_wrapper=" - + "__import__('attr._make')._make._CacheHashWrapper):" - ) - hash_func = "_cache_wrapper(" + hash_func - closing_braces += ")" - - method_lines = [hash_def] - - def append_hash_computation_lines(prefix, indent): - """ - Generate the code for actually computing the hash code. - Below this will either be returned directly or used to compute - a value which is then cached, depending on the value of cache_hash - """ - - method_lines.extend( - [ - indent + prefix + hash_func, - indent + " %d," % (type_hash,), - ] - ) - - for a in attrs: - method_lines.append(indent + " self.%s," % a.name) - - method_lines.append(indent + " " + closing_braces) - - if cache_hash: - method_lines.append(tab + "if self.%s is None:" % _hash_cache_field) - if frozen: - append_hash_computation_lines( - "object.__setattr__(self, '%s', " % _hash_cache_field, tab * 2 - ) - method_lines.append(tab * 2 + ")") # close __setattr__ - else: - append_hash_computation_lines( - "self.%s = " % _hash_cache_field, tab * 2 - ) - method_lines.append(tab + "return self.%s" % _hash_cache_field) - else: - append_hash_computation_lines("return ", tab) - - script = "\n".join(method_lines) - return _make_method("__hash__", script, unique_filename) - - -def _add_hash(cls, attrs): - """ - Add a hash method to *cls*. - """ - cls.__hash__ = _make_hash(cls, attrs, frozen=False, cache_hash=False) - return cls - - -def _make_ne(): - """ - Create __ne__ method. - """ - - def __ne__(self, other): - """ - Check equality and either forward a NotImplemented or - return the result negated. - """ - result = self.__eq__(other) - if result is NotImplemented: - return NotImplemented - - return not result - - return __ne__ - - -def _make_eq(cls, attrs): - """ - Create __eq__ method for *cls* with *attrs*. - """ - attrs = [a for a in attrs if a.eq] - - unique_filename = _generate_unique_filename(cls, "eq") - lines = [ - "def __eq__(self, other):", - " if other.__class__ is not self.__class__:", - " return NotImplemented", - ] - - # We can't just do a big self.x = other.x and... clause due to - # irregularities like nan == nan is false but (nan,) == (nan,) is true. - globs = {} - if attrs: - lines.append(" return (") - others = [" ) == ("] - for a in attrs: - if a.eq_key: - cmp_name = "_%s_key" % (a.name,) - # Add the key function to the global namespace - # of the evaluated function. - globs[cmp_name] = a.eq_key - lines.append( - " %s(self.%s)," - % ( - cmp_name, - a.name, - ) - ) - others.append( - " %s(other.%s)," - % ( - cmp_name, - a.name, - ) - ) - else: - lines.append(" self.%s," % (a.name,)) - others.append(" other.%s," % (a.name,)) - - lines += others + [" )"] - else: - lines.append(" return True") - - script = "\n".join(lines) - - return _make_method("__eq__", script, unique_filename, globs) - - -def _make_order(cls, attrs): - """ - Create ordering methods for *cls* with *attrs*. - """ - attrs = [a for a in attrs if a.order] - - def attrs_to_tuple(obj): - """ - Save us some typing. - """ - return tuple( - key(value) if key else value - for value, key in ( - (getattr(obj, a.name), a.order_key) for a in attrs - ) - ) - - def __lt__(self, other): - """ - Automatically created by attrs. - """ - if other.__class__ is self.__class__: - return attrs_to_tuple(self) < attrs_to_tuple(other) - - return NotImplemented - - def __le__(self, other): - """ - Automatically created by attrs. - """ - if other.__class__ is self.__class__: - return attrs_to_tuple(self) <= attrs_to_tuple(other) - - return NotImplemented - - def __gt__(self, other): - """ - Automatically created by attrs. - """ - if other.__class__ is self.__class__: - return attrs_to_tuple(self) > attrs_to_tuple(other) - - return NotImplemented - - def __ge__(self, other): - """ - Automatically created by attrs. - """ - if other.__class__ is self.__class__: - return attrs_to_tuple(self) >= attrs_to_tuple(other) - - return NotImplemented - - return __lt__, __le__, __gt__, __ge__ - - -def _add_eq(cls, attrs=None): - """ - Add equality methods to *cls* with *attrs*. - """ - if attrs is None: - attrs = cls.__attrs_attrs__ - - cls.__eq__ = _make_eq(cls, attrs) - cls.__ne__ = _make_ne() - - return cls - - -_already_repring = threading.local() - - -def _make_repr(attrs, ns): - """ - Make a repr method that includes relevant *attrs*, adding *ns* to the full - name. - """ - - # Figure out which attributes to include, and which function to use to - # format them. The a.repr value can be either bool or a custom callable. - attr_names_with_reprs = tuple( - (a.name, repr if a.repr is True else a.repr) - for a in attrs - if a.repr is not False - ) - - def __repr__(self): - """ - Automatically created by attrs. - """ - try: - working_set = _already_repring.working_set - except AttributeError: - working_set = set() - _already_repring.working_set = working_set - - if id(self) in working_set: - return "..." - real_cls = self.__class__ - if ns is None: - qualname = getattr(real_cls, "__qualname__", None) - if qualname is not None: - class_name = qualname.rsplit(">.", 1)[-1] - else: - class_name = real_cls.__name__ - else: - class_name = ns + "." + real_cls.__name__ - - # Since 'self' remains on the stack (i.e.: strongly referenced) for the - # duration of this call, it's safe to depend on id(...) stability, and - # not need to track the instance and therefore worry about properties - # like weakref- or hash-ability. - working_set.add(id(self)) - try: - result = [class_name, "("] - first = True - for name, attr_repr in attr_names_with_reprs: - if first: - first = False - else: - result.append(", ") - result.extend( - (name, "=", attr_repr(getattr(self, name, NOTHING))) - ) - return "".join(result) + ")" - finally: - working_set.remove(id(self)) - - return __repr__ - - -def _add_repr(cls, ns=None, attrs=None): - """ - Add a repr method to *cls*. - """ - if attrs is None: - attrs = cls.__attrs_attrs__ - - cls.__repr__ = _make_repr(attrs, ns) - return cls - - -def fields(cls): - """ - Return the tuple of ``attrs`` attributes for a class. - - The tuple also allows accessing the fields by their names (see below for - examples). - - :param type cls: Class to introspect. - - :raise TypeError: If *cls* is not a class. - :raise attr.exceptions.NotAnAttrsClassError: If *cls* is not an ``attrs`` - class. - - :rtype: tuple (with name accessors) of `attr.Attribute` - - .. versionchanged:: 16.2.0 Returned tuple allows accessing the fields - by name. - """ - if not isclass(cls): - raise TypeError("Passed object must be a class.") - attrs = getattr(cls, "__attrs_attrs__", None) - if attrs is None: - raise NotAnAttrsClassError( - "{cls!r} is not an attrs-decorated class.".format(cls=cls) - ) - return attrs - - -def fields_dict(cls): - """ - Return an ordered dictionary of ``attrs`` attributes for a class, whose - keys are the attribute names. - - :param type cls: Class to introspect. - - :raise TypeError: If *cls* is not a class. - :raise attr.exceptions.NotAnAttrsClassError: If *cls* is not an ``attrs`` - class. - - :rtype: an ordered dict where keys are attribute names and values are - `attr.Attribute`\\ s. This will be a `dict` if it's - naturally ordered like on Python 3.6+ or an - :class:`~collections.OrderedDict` otherwise. - - .. versionadded:: 18.1.0 - """ - if not isclass(cls): - raise TypeError("Passed object must be a class.") - attrs = getattr(cls, "__attrs_attrs__", None) - if attrs is None: - raise NotAnAttrsClassError( - "{cls!r} is not an attrs-decorated class.".format(cls=cls) - ) - return ordered_dict(((a.name, a) for a in attrs)) - - -def validate(inst): - """ - Validate all attributes on *inst* that have a validator. - - Leaves all exceptions through. - - :param inst: Instance of a class with ``attrs`` attributes. - """ - if _config._run_validators is False: - return - - for a in fields(inst.__class__): - v = a.validator - if v is not None: - v(inst, a, getattr(inst, a.name)) - - -def _is_slot_cls(cls): - return "__slots__" in cls.__dict__ - - -def _is_slot_attr(a_name, base_attr_map): - """ - Check if the attribute name comes from a slot class. - """ - return a_name in base_attr_map and _is_slot_cls(base_attr_map[a_name]) - - -def _make_init( - cls, - attrs, - pre_init, - post_init, - frozen, - slots, - cache_hash, - base_attr_map, - is_exc, - has_global_on_setattr, - attrs_init, -): - if frozen and has_global_on_setattr: - raise ValueError("Frozen classes can't use on_setattr.") - - needs_cached_setattr = cache_hash or frozen - filtered_attrs = [] - attr_dict = {} - for a in attrs: - if not a.init and a.default is NOTHING: - continue - - filtered_attrs.append(a) - attr_dict[a.name] = a - - if a.on_setattr is not None: - if frozen is True: - raise ValueError("Frozen classes can't use on_setattr.") - - needs_cached_setattr = True - elif ( - has_global_on_setattr and a.on_setattr is not setters.NO_OP - ) or _is_slot_attr(a.name, base_attr_map): - needs_cached_setattr = True - - unique_filename = _generate_unique_filename(cls, "init") - - script, globs, annotations = _attrs_to_init_script( - filtered_attrs, - frozen, - slots, - pre_init, - post_init, - cache_hash, - base_attr_map, - is_exc, - needs_cached_setattr, - has_global_on_setattr, - attrs_init, - ) - if cls.__module__ in sys.modules: - # This makes typing.get_type_hints(CLS.__init__) resolve string types. - globs.update(sys.modules[cls.__module__].__dict__) - - globs.update({"NOTHING": NOTHING, "attr_dict": attr_dict}) - - if needs_cached_setattr: - # Save the lookup overhead in __init__ if we need to circumvent - # setattr hooks. - globs["_cached_setattr"] = _obj_setattr - - init = _make_method( - "__attrs_init__" if attrs_init else "__init__", - script, - unique_filename, - globs, - ) - init.__annotations__ = annotations - - return init - - -def _setattr(attr_name, value_var, has_on_setattr): - """ - Use the cached object.setattr to set *attr_name* to *value_var*. - """ - return "_setattr('%s', %s)" % (attr_name, value_var) - - -def _setattr_with_converter(attr_name, value_var, has_on_setattr): - """ - Use the cached object.setattr to set *attr_name* to *value_var*, but run - its converter first. - """ - return "_setattr('%s', %s(%s))" % ( - attr_name, - _init_converter_pat % (attr_name,), - value_var, - ) - - -def _assign(attr_name, value, has_on_setattr): - """ - Unless *attr_name* has an on_setattr hook, use normal assignment. Otherwise - relegate to _setattr. - """ - if has_on_setattr: - return _setattr(attr_name, value, True) - - return "self.%s = %s" % (attr_name, value) - - -def _assign_with_converter(attr_name, value_var, has_on_setattr): - """ - Unless *attr_name* has an on_setattr hook, use normal assignment after - conversion. Otherwise relegate to _setattr_with_converter. - """ - if has_on_setattr: - return _setattr_with_converter(attr_name, value_var, True) - - return "self.%s = %s(%s)" % ( - attr_name, - _init_converter_pat % (attr_name,), - value_var, - ) - - -if PY2: - - def _unpack_kw_only_py2(attr_name, default=None): - """ - Unpack *attr_name* from _kw_only dict. - """ - if default is not None: - arg_default = ", %s" % default - else: - arg_default = "" - return "%s = _kw_only.pop('%s'%s)" % ( - attr_name, - attr_name, - arg_default, - ) - - def _unpack_kw_only_lines_py2(kw_only_args): - """ - Unpack all *kw_only_args* from _kw_only dict and handle errors. - - Given a list of strings "{attr_name}" and "{attr_name}={default}" - generates list of lines of code that pop attrs from _kw_only dict and - raise TypeError similar to builtin if required attr is missing or - extra key is passed. - - >>> print("\n".join(_unpack_kw_only_lines_py2(["a", "b=42"]))) - try: - a = _kw_only.pop('a') - b = _kw_only.pop('b', 42) - except KeyError as _key_error: - raise TypeError( - ... - if _kw_only: - raise TypeError( - ... - """ - lines = ["try:"] - lines.extend( - " " + _unpack_kw_only_py2(*arg.split("=")) - for arg in kw_only_args - ) - lines += """\ -except KeyError as _key_error: - raise TypeError( - '__init__() missing required keyword-only argument: %s' % _key_error - ) -if _kw_only: - raise TypeError( - '__init__() got an unexpected keyword argument %r' - % next(iter(_kw_only)) - ) -""".split( - "\n" - ) - return lines - - -def _attrs_to_init_script( - attrs, - frozen, - slots, - pre_init, - post_init, - cache_hash, - base_attr_map, - is_exc, - needs_cached_setattr, - has_global_on_setattr, - attrs_init, -): - """ - Return a script of an initializer for *attrs* and a dict of globals. - - The globals are expected by the generated script. - - If *frozen* is True, we cannot set the attributes directly so we use - a cached ``object.__setattr__``. - """ - lines = [] - if pre_init: - lines.append("self.__attrs_pre_init__()") - - if needs_cached_setattr: - lines.append( - # Circumvent the __setattr__ descriptor to save one lookup per - # assignment. - # Note _setattr will be used again below if cache_hash is True - "_setattr = _cached_setattr.__get__(self, self.__class__)" - ) - - if frozen is True: - if slots is True: - fmt_setter = _setattr - fmt_setter_with_converter = _setattr_with_converter - else: - # Dict frozen classes assign directly to __dict__. - # But only if the attribute doesn't come from an ancestor slot - # class. - # Note _inst_dict will be used again below if cache_hash is True - lines.append("_inst_dict = self.__dict__") - - def fmt_setter(attr_name, value_var, has_on_setattr): - if _is_slot_attr(attr_name, base_attr_map): - return _setattr(attr_name, value_var, has_on_setattr) - - return "_inst_dict['%s'] = %s" % (attr_name, value_var) - - def fmt_setter_with_converter( - attr_name, value_var, has_on_setattr - ): - if has_on_setattr or _is_slot_attr(attr_name, base_attr_map): - return _setattr_with_converter( - attr_name, value_var, has_on_setattr - ) - - return "_inst_dict['%s'] = %s(%s)" % ( - attr_name, - _init_converter_pat % (attr_name,), - value_var, - ) - - else: - # Not frozen. - fmt_setter = _assign - fmt_setter_with_converter = _assign_with_converter - - args = [] - kw_only_args = [] - attrs_to_validate = [] - - # This is a dictionary of names to validator and converter callables. - # Injecting this into __init__ globals lets us avoid lookups. - names_for_globals = {} - annotations = {"return": None} - - for a in attrs: - if a.validator: - attrs_to_validate.append(a) - - attr_name = a.name - has_on_setattr = a.on_setattr is not None or ( - a.on_setattr is not setters.NO_OP and has_global_on_setattr - ) - arg_name = a.name.lstrip("_") - - has_factory = isinstance(a.default, Factory) - if has_factory and a.default.takes_self: - maybe_self = "self" - else: - maybe_self = "" - - if a.init is False: - if has_factory: - init_factory_name = _init_factory_pat.format(a.name) - if a.converter is not None: - lines.append( - fmt_setter_with_converter( - attr_name, - init_factory_name + "(%s)" % (maybe_self,), - has_on_setattr, - ) - ) - conv_name = _init_converter_pat % (a.name,) - names_for_globals[conv_name] = a.converter - else: - lines.append( - fmt_setter( - attr_name, - init_factory_name + "(%s)" % (maybe_self,), - has_on_setattr, - ) - ) - names_for_globals[init_factory_name] = a.default.factory - else: - if a.converter is not None: - lines.append( - fmt_setter_with_converter( - attr_name, - "attr_dict['%s'].default" % (attr_name,), - has_on_setattr, - ) - ) - conv_name = _init_converter_pat % (a.name,) - names_for_globals[conv_name] = a.converter - else: - lines.append( - fmt_setter( - attr_name, - "attr_dict['%s'].default" % (attr_name,), - has_on_setattr, - ) - ) - elif a.default is not NOTHING and not has_factory: - arg = "%s=attr_dict['%s'].default" % (arg_name, attr_name) - if a.kw_only: - kw_only_args.append(arg) - else: - args.append(arg) - - if a.converter is not None: - lines.append( - fmt_setter_with_converter( - attr_name, arg_name, has_on_setattr - ) - ) - names_for_globals[ - _init_converter_pat % (a.name,) - ] = a.converter - else: - lines.append(fmt_setter(attr_name, arg_name, has_on_setattr)) - - elif has_factory: - arg = "%s=NOTHING" % (arg_name,) - if a.kw_only: - kw_only_args.append(arg) - else: - args.append(arg) - lines.append("if %s is not NOTHING:" % (arg_name,)) - - init_factory_name = _init_factory_pat.format(a.name) - if a.converter is not None: - lines.append( - " " - + fmt_setter_with_converter( - attr_name, arg_name, has_on_setattr - ) - ) - lines.append("else:") - lines.append( - " " - + fmt_setter_with_converter( - attr_name, - init_factory_name + "(" + maybe_self + ")", - has_on_setattr, - ) - ) - names_for_globals[ - _init_converter_pat % (a.name,) - ] = a.converter - else: - lines.append( - " " + fmt_setter(attr_name, arg_name, has_on_setattr) - ) - lines.append("else:") - lines.append( - " " - + fmt_setter( - attr_name, - init_factory_name + "(" + maybe_self + ")", - has_on_setattr, - ) - ) - names_for_globals[init_factory_name] = a.default.factory - else: - if a.kw_only: - kw_only_args.append(arg_name) - else: - args.append(arg_name) - - if a.converter is not None: - lines.append( - fmt_setter_with_converter( - attr_name, arg_name, has_on_setattr - ) - ) - names_for_globals[ - _init_converter_pat % (a.name,) - ] = a.converter - else: - lines.append(fmt_setter(attr_name, arg_name, has_on_setattr)) - - if a.init is True: - if a.type is not None and a.converter is None: - annotations[arg_name] = a.type - elif a.converter is not None and not PY2: - # Try to get the type from the converter. - sig = None - try: - sig = inspect.signature(a.converter) - except (ValueError, TypeError): # inspect failed - pass - if sig: - sig_params = list(sig.parameters.values()) - if ( - sig_params - and sig_params[0].annotation - is not inspect.Parameter.empty - ): - annotations[arg_name] = sig_params[0].annotation - - if attrs_to_validate: # we can skip this if there are no validators. - names_for_globals["_config"] = _config - lines.append("if _config._run_validators is True:") - for a in attrs_to_validate: - val_name = "__attr_validator_" + a.name - attr_name = "__attr_" + a.name - lines.append( - " %s(self, %s, self.%s)" % (val_name, attr_name, a.name) - ) - names_for_globals[val_name] = a.validator - names_for_globals[attr_name] = a - - if post_init: - lines.append("self.__attrs_post_init__()") - - # because this is set only after __attrs_post_init is called, a crash - # will result if post-init tries to access the hash code. This seemed - # preferable to setting this beforehand, in which case alteration to - # field values during post-init combined with post-init accessing the - # hash code would result in silent bugs. - if cache_hash: - if frozen: - if slots: - # if frozen and slots, then _setattr defined above - init_hash_cache = "_setattr('%s', %s)" - else: - # if frozen and not slots, then _inst_dict defined above - init_hash_cache = "_inst_dict['%s'] = %s" - else: - init_hash_cache = "self.%s = %s" - lines.append(init_hash_cache % (_hash_cache_field, "None")) - - # For exceptions we rely on BaseException.__init__ for proper - # initialization. - if is_exc: - vals = ",".join("self." + a.name for a in attrs if a.init) - - lines.append("BaseException.__init__(self, %s)" % (vals,)) - - args = ", ".join(args) - if kw_only_args: - if PY2: - lines = _unpack_kw_only_lines_py2(kw_only_args) + lines - - args += "%s**_kw_only" % (", " if args else "",) # leading comma - else: - args += "%s*, %s" % ( - ", " if args else "", # leading comma - ", ".join(kw_only_args), # kw_only args - ) - return ( - """\ -def {init_name}(self, {args}): - {lines} -""".format( - init_name=("__attrs_init__" if attrs_init else "__init__"), - args=args, - lines="\n ".join(lines) if lines else "pass", - ), - names_for_globals, - annotations, - ) - - -class Attribute(object): - """ - *Read-only* representation of an attribute. - - Instances of this class are frequently used for introspection purposes - like: - - - `fields` returns a tuple of them. - - Validators get them passed as the first argument. - - The *field transformer* hook receives a list of them. - - :attribute name: The name of the attribute. - :attribute inherited: Whether or not that attribute has been inherited from - a base class. - - Plus *all* arguments of `attr.ib` (except for ``factory`` - which is only syntactic sugar for ``default=Factory(...)``. - - .. versionadded:: 20.1.0 *inherited* - .. versionadded:: 20.1.0 *on_setattr* - .. versionchanged:: 20.2.0 *inherited* is not taken into account for - equality checks and hashing anymore. - .. versionadded:: 21.1.0 *eq_key* and *order_key* - - For the full version history of the fields, see `attr.ib`. - """ - - __slots__ = ( - "name", - "default", - "validator", - "repr", - "eq", - "eq_key", - "order", - "order_key", - "hash", - "init", - "metadata", - "type", - "converter", - "kw_only", - "inherited", - "on_setattr", - ) - - def __init__( - self, - name, - default, - validator, - repr, - cmp, # XXX: unused, remove along with other cmp code. - hash, - init, - inherited, - metadata=None, - type=None, - converter=None, - kw_only=False, - eq=None, - eq_key=None, - order=None, - order_key=None, - on_setattr=None, - ): - eq, eq_key, order, order_key = _determine_attrib_eq_order( - cmp, eq_key or eq, order_key or order, True - ) - - # Cache this descriptor here to speed things up later. - bound_setattr = _obj_setattr.__get__(self, Attribute) - - # Despite the big red warning, people *do* instantiate `Attribute` - # themselves. - bound_setattr("name", name) - bound_setattr("default", default) - bound_setattr("validator", validator) - bound_setattr("repr", repr) - bound_setattr("eq", eq) - bound_setattr("eq_key", eq_key) - bound_setattr("order", order) - bound_setattr("order_key", order_key) - bound_setattr("hash", hash) - bound_setattr("init", init) - bound_setattr("converter", converter) - bound_setattr( - "metadata", - ( - metadata_proxy(metadata) - if metadata - else _empty_metadata_singleton - ), - ) - bound_setattr("type", type) - bound_setattr("kw_only", kw_only) - bound_setattr("inherited", inherited) - bound_setattr("on_setattr", on_setattr) - - def __setattr__(self, name, value): - raise FrozenInstanceError() - - @classmethod - def from_counting_attr(cls, name, ca, type=None): - # type holds the annotated value. deal with conflicts: - if type is None: - type = ca.type - elif ca.type is not None: - raise ValueError( - "Type annotation and type argument cannot both be present" - ) - inst_dict = { - k: getattr(ca, k) - for k in Attribute.__slots__ - if k - not in ( - "name", - "validator", - "default", - "type", - "inherited", - ) # exclude methods and deprecated alias - } - return cls( - name=name, - validator=ca._validator, - default=ca._default, - type=type, - cmp=None, - inherited=False, - **inst_dict - ) - - @property - def cmp(self): - """ - Simulate the presence of a cmp attribute and warn. - """ - warnings.warn(_CMP_DEPRECATION, DeprecationWarning, stacklevel=2) - - return self.eq and self.order - - # Don't use attr.evolve since fields(Attribute) doesn't work - def evolve(self, **changes): - """ - Copy *self* and apply *changes*. - - This works similarly to `attr.evolve` but that function does not work - with ``Attribute``. - - It is mainly meant to be used for `transform-fields`. - - .. versionadded:: 20.3.0 - """ - new = copy.copy(self) - - new._setattrs(changes.items()) - - return new - - # Don't use _add_pickle since fields(Attribute) doesn't work - def __getstate__(self): - """ - Play nice with pickle. - """ - return tuple( - getattr(self, name) if name != "metadata" else dict(self.metadata) - for name in self.__slots__ - ) - - def __setstate__(self, state): - """ - Play nice with pickle. - """ - self._setattrs(zip(self.__slots__, state)) - - def _setattrs(self, name_values_pairs): - bound_setattr = _obj_setattr.__get__(self, Attribute) - for name, value in name_values_pairs: - if name != "metadata": - bound_setattr(name, value) - else: - bound_setattr( - name, - metadata_proxy(value) - if value - else _empty_metadata_singleton, - ) - - -_a = [ - Attribute( - name=name, - default=NOTHING, - validator=None, - repr=True, - cmp=None, - eq=True, - order=False, - hash=(name != "metadata"), - init=True, - inherited=False, - ) - for name in Attribute.__slots__ -] - -Attribute = _add_hash( - _add_eq( - _add_repr(Attribute, attrs=_a), - attrs=[a for a in _a if a.name != "inherited"], - ), - attrs=[a for a in _a if a.hash and a.name != "inherited"], -) - - -class _CountingAttr(object): - """ - Intermediate representation of attributes that uses a counter to preserve - the order in which the attributes have been defined. - - *Internal* data structure of the attrs library. Running into is most - likely the result of a bug like a forgotten `@attr.s` decorator. - """ - - __slots__ = ( - "counter", - "_default", - "repr", - "eq", - "eq_key", - "order", - "order_key", - "hash", - "init", - "metadata", - "_validator", - "converter", - "type", - "kw_only", - "on_setattr", - ) - __attrs_attrs__ = tuple( - Attribute( - name=name, - default=NOTHING, - validator=None, - repr=True, - cmp=None, - hash=True, - init=True, - kw_only=False, - eq=True, - eq_key=None, - order=False, - order_key=None, - inherited=False, - on_setattr=None, - ) - for name in ( - "counter", - "_default", - "repr", - "eq", - "order", - "hash", - "init", - "on_setattr", - ) - ) + ( - Attribute( - name="metadata", - default=None, - validator=None, - repr=True, - cmp=None, - hash=False, - init=True, - kw_only=False, - eq=True, - eq_key=None, - order=False, - order_key=None, - inherited=False, - on_setattr=None, - ), - ) - cls_counter = 0 - - def __init__( - self, - default, - validator, - repr, - cmp, - hash, - init, - converter, - metadata, - type, - kw_only, - eq, - eq_key, - order, - order_key, - on_setattr, - ): - _CountingAttr.cls_counter += 1 - self.counter = _CountingAttr.cls_counter - self._default = default - self._validator = validator - self.converter = converter - self.repr = repr - self.eq = eq - self.eq_key = eq_key - self.order = order - self.order_key = order_key - self.hash = hash - self.init = init - self.metadata = metadata - self.type = type - self.kw_only = kw_only - self.on_setattr = on_setattr - - def validator(self, meth): - """ - Decorator that adds *meth* to the list of validators. - - Returns *meth* unchanged. - - .. versionadded:: 17.1.0 - """ - if self._validator is None: - self._validator = meth - else: - self._validator = and_(self._validator, meth) - return meth - - def default(self, meth): - """ - Decorator that allows to set the default for an attribute. - - Returns *meth* unchanged. - - :raises DefaultAlreadySetError: If default has been set before. - - .. versionadded:: 17.1.0 - """ - if self._default is not NOTHING: - raise DefaultAlreadySetError() - - self._default = Factory(meth, takes_self=True) - - return meth - - -_CountingAttr = _add_eq(_add_repr(_CountingAttr)) - - -class Factory(object): - """ - Stores a factory callable. - - If passed as the default value to `attr.ib`, the factory is used to - generate a new value. - - :param callable factory: A callable that takes either none or exactly one - mandatory positional argument depending on *takes_self*. - :param bool takes_self: Pass the partially initialized instance that is - being initialized as a positional argument. - - .. versionadded:: 17.1.0 *takes_self* - """ - - __slots__ = ("factory", "takes_self") - - def __init__(self, factory, takes_self=False): - """ - `Factory` is part of the default machinery so if we want a default - value here, we have to implement it ourselves. - """ - self.factory = factory - self.takes_self = takes_self - - def __getstate__(self): - """ - Play nice with pickle. - """ - return tuple(getattr(self, name) for name in self.__slots__) - - def __setstate__(self, state): - """ - Play nice with pickle. - """ - for name, value in zip(self.__slots__, state): - setattr(self, name, value) - - -_f = [ - Attribute( - name=name, - default=NOTHING, - validator=None, - repr=True, - cmp=None, - eq=True, - order=False, - hash=True, - init=True, - inherited=False, - ) - for name in Factory.__slots__ -] - -Factory = _add_hash(_add_eq(_add_repr(Factory, attrs=_f), attrs=_f), attrs=_f) - - -def make_class(name, attrs, bases=(object,), **attributes_arguments): - """ - A quick way to create a new class called *name* with *attrs*. - - :param str name: The name for the new class. - - :param attrs: A list of names or a dictionary of mappings of names to - attributes. - - If *attrs* is a list or an ordered dict (`dict` on Python 3.6+, - `collections.OrderedDict` otherwise), the order is deduced from - the order of the names or attributes inside *attrs*. Otherwise the - order of the definition of the attributes is used. - :type attrs: `list` or `dict` - - :param tuple bases: Classes that the new class will subclass. - - :param attributes_arguments: Passed unmodified to `attr.s`. - - :return: A new class with *attrs*. - :rtype: type - - .. versionadded:: 17.1.0 *bases* - .. versionchanged:: 18.1.0 If *attrs* is ordered, the order is retained. - """ - if isinstance(attrs, dict): - cls_dict = attrs - elif isinstance(attrs, (list, tuple)): - cls_dict = dict((a, attrib()) for a in attrs) - else: - raise TypeError("attrs argument must be a dict or a list.") - - pre_init = cls_dict.pop("__attrs_pre_init__", None) - post_init = cls_dict.pop("__attrs_post_init__", None) - user_init = cls_dict.pop("__init__", None) - - body = {} - if pre_init is not None: - body["__attrs_pre_init__"] = pre_init - if post_init is not None: - body["__attrs_post_init__"] = post_init - if user_init is not None: - body["__init__"] = user_init - - type_ = new_class(name, bases, {}, lambda ns: ns.update(body)) - - # For pickling to work, the __module__ variable needs to be set to the - # frame where the class is created. Bypass this step in environments where - # sys._getframe is not defined (Jython for example) or sys._getframe is not - # defined for arguments greater than 0 (IronPython). - try: - type_.__module__ = sys._getframe(1).f_globals.get( - "__name__", "__main__" - ) - except (AttributeError, ValueError): - pass - - # We do it here for proper warnings with meaningful stacklevel. - cmp = attributes_arguments.pop("cmp", None) - ( - attributes_arguments["eq"], - attributes_arguments["order"], - ) = _determine_attrs_eq_order( - cmp, - attributes_arguments.get("eq"), - attributes_arguments.get("order"), - True, - ) - - return _attrs(these=cls_dict, **attributes_arguments)(type_) - - -# These are required by within this module so we define them here and merely -# import into .validators / .converters. - - -@attrs(slots=True, hash=True) -class _AndValidator(object): - """ - Compose many validators to a single one. - """ - - _validators = attrib() - - def __call__(self, inst, attr, value): - for v in self._validators: - v(inst, attr, value) - - -def and_(*validators): - """ - A validator that composes multiple validators into one. - - When called on a value, it runs all wrapped validators. - - :param callables validators: Arbitrary number of validators. - - .. versionadded:: 17.1.0 - """ - vals = [] - for validator in validators: - vals.extend( - validator._validators - if isinstance(validator, _AndValidator) - else [validator] - ) - - return _AndValidator(tuple(vals)) - - -def pipe(*converters): - """ - A converter that composes multiple converters into one. - - When called on a value, it runs all wrapped converters, returning the - *last* value. - - Type annotations will be inferred from the wrapped converters', if - they have any. - - :param callables converters: Arbitrary number of converters. - - .. versionadded:: 20.1.0 - """ - - def pipe_converter(val): - for converter in converters: - val = converter(val) - - return val - - if not PY2: - if not converters: - # If the converter list is empty, pipe_converter is the identity. - A = typing.TypeVar("A") - pipe_converter.__annotations__ = {"val": A, "return": A} - else: - # Get parameter type. - sig = None - try: - sig = inspect.signature(converters[0]) - except (ValueError, TypeError): # inspect failed - pass - if sig: - params = list(sig.parameters.values()) - if ( - params - and params[0].annotation is not inspect.Parameter.empty - ): - pipe_converter.__annotations__["val"] = params[ - 0 - ].annotation - # Get return type. - sig = None - try: - sig = inspect.signature(converters[-1]) - except (ValueError, TypeError): # inspect failed - pass - if sig and sig.return_annotation is not inspect.Signature().empty: - pipe_converter.__annotations__[ - "return" - ] = sig.return_annotation - - return pipe_converter diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/_next_gen.py b/IKEA_scraper/.venv/Lib/site-packages/attr/_next_gen.py deleted file mode 100644 index fab0af96..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/attr/_next_gen.py +++ /dev/null @@ -1,158 +0,0 @@ -""" -These are Python 3.6+-only and keyword-only APIs that call `attr.s` and -`attr.ib` with different default values. -""" - -from functools import partial - -from attr.exceptions import UnannotatedAttributeError - -from . import setters -from ._make import NOTHING, _frozen_setattrs, attrib, attrs - - -def define( - maybe_cls=None, - *, - these=None, - repr=None, - hash=None, - init=None, - slots=True, - frozen=False, - weakref_slot=True, - str=False, - auto_attribs=None, - kw_only=False, - cache_hash=False, - auto_exc=True, - eq=None, - order=False, - auto_detect=True, - getstate_setstate=None, - on_setattr=None, - field_transformer=None, -): - r""" - The only behavioral differences are the handling of the *auto_attribs* - option: - - :param Optional[bool] auto_attribs: If set to `True` or `False`, it behaves - exactly like `attr.s`. If left `None`, `attr.s` will try to guess: - - 1. If any attributes are annotated and no unannotated `attr.ib`\ s - are found, it assumes *auto_attribs=True*. - 2. Otherwise it assumes *auto_attribs=False* and tries to collect - `attr.ib`\ s. - - and that mutable classes (``frozen=False``) validate on ``__setattr__``. - - .. versionadded:: 20.1.0 - """ - - def do_it(cls, auto_attribs): - return attrs( - maybe_cls=cls, - these=these, - repr=repr, - hash=hash, - init=init, - slots=slots, - frozen=frozen, - weakref_slot=weakref_slot, - str=str, - auto_attribs=auto_attribs, - kw_only=kw_only, - cache_hash=cache_hash, - auto_exc=auto_exc, - eq=eq, - order=order, - auto_detect=auto_detect, - collect_by_mro=True, - getstate_setstate=getstate_setstate, - on_setattr=on_setattr, - field_transformer=field_transformer, - ) - - def wrap(cls): - """ - Making this a wrapper ensures this code runs during class creation. - - We also ensure that frozen-ness of classes is inherited. - """ - nonlocal frozen, on_setattr - - had_on_setattr = on_setattr not in (None, setters.NO_OP) - - # By default, mutable classes validate on setattr. - if frozen is False and on_setattr is None: - on_setattr = setters.validate - - # However, if we subclass a frozen class, we inherit the immutability - # and disable on_setattr. - for base_cls in cls.__bases__: - if base_cls.__setattr__ is _frozen_setattrs: - if had_on_setattr: - raise ValueError( - "Frozen classes can't use on_setattr " - "(frozen-ness was inherited)." - ) - - on_setattr = setters.NO_OP - break - - if auto_attribs is not None: - return do_it(cls, auto_attribs) - - try: - return do_it(cls, True) - except UnannotatedAttributeError: - return do_it(cls, False) - - # maybe_cls's type depends on the usage of the decorator. It's a class - # if it's used as `@attrs` but ``None`` if used as `@attrs()`. - if maybe_cls is None: - return wrap - else: - return wrap(maybe_cls) - - -mutable = define -frozen = partial(define, frozen=True, on_setattr=None) - - -def field( - *, - default=NOTHING, - validator=None, - repr=True, - hash=None, - init=True, - metadata=None, - converter=None, - factory=None, - kw_only=False, - eq=None, - order=None, - on_setattr=None, -): - """ - Identical to `attr.ib`, except keyword-only and with some arguments - removed. - - .. versionadded:: 20.1.0 - """ - return attrib( - default=default, - validator=validator, - repr=repr, - hash=hash, - init=init, - metadata=metadata, - converter=converter, - factory=factory, - kw_only=kw_only, - eq=eq, - order=order, - on_setattr=on_setattr, - ) diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/_version_info.py b/IKEA_scraper/.venv/Lib/site-packages/attr/_version_info.py deleted file mode 100644 index 014e78a1..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/attr/_version_info.py +++ /dev/null @@ -1,85 +0,0 @@ -from __future__ import absolute_import, division, print_function - -from functools import total_ordering - -from ._funcs import astuple -from ._make import attrib, attrs - - -@total_ordering -@attrs(eq=False, order=False, slots=True, frozen=True) -class VersionInfo(object): - """ - A version object that can be compared to tuple of length 1--4: - - >>> attr.VersionInfo(19, 1, 0, "final") <= (19, 2) - True - >>> attr.VersionInfo(19, 1, 0, "final") < (19, 1, 1) - True - >>> vi = attr.VersionInfo(19, 2, 0, "final") - >>> vi < (19, 1, 1) - False - >>> vi < (19,) - False - >>> vi == (19, 2,) - True - >>> vi == (19, 2, 1) - False - - .. versionadded:: 19.2 - """ - - year = attrib(type=int) - minor = attrib(type=int) - micro = attrib(type=int) - releaselevel = attrib(type=str) - - @classmethod - def _from_version_string(cls, s): - """ - Parse *s* and return a _VersionInfo. - """ - v = s.split(".") - if len(v) == 3: - v.append("final") - - return cls( - year=int(v[0]), minor=int(v[1]), micro=int(v[2]), releaselevel=v[3] - ) - - def _ensure_tuple(self, other): - """ - Ensure *other* is a tuple of a valid length. - - Returns a possibly transformed *other* and ourselves as a tuple of - the same length as *other*. - """ - - if self.__class__ is other.__class__: - other = astuple(other) - - if not isinstance(other, tuple): - raise NotImplementedError - - if not (1 <= len(other) <= 4): - raise NotImplementedError - - return astuple(self)[: len(other)], other - - def __eq__(self, other): - try: - us, them = self._ensure_tuple(other) - except NotImplementedError: - return NotImplemented - - return us == them - - def __lt__(self, other): - try: - us, them = self._ensure_tuple(other) - except NotImplementedError: - return NotImplemented - - # Since alphabetically "dev0" < "final" < "post1" < "post2", we don't - # have to do anything special with releaselevel for now. - return us < them diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/_version_info.pyi b/IKEA_scraper/.venv/Lib/site-packages/attr/_version_info.pyi deleted file mode 100644 index 45ced086..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/attr/_version_info.pyi +++ /dev/null @@ -1,9 +0,0 @@ -class VersionInfo: - @property - def year(self) -> int: ... - @property - def minor(self) -> int: ... - @property - def micro(self) -> int: ... - @property - def releaselevel(self) -> str: ... diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/converters.py b/IKEA_scraper/.venv/Lib/site-packages/attr/converters.py deleted file mode 100644 index 2777db6d..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/attr/converters.py +++ /dev/null @@ -1,111 +0,0 @@ -""" -Commonly useful converters. -""" - -from __future__ import absolute_import, division, print_function - -from ._compat import PY2 -from ._make import NOTHING, Factory, pipe - - -if not PY2: - import inspect - import typing - - -__all__ = [ - "pipe", - "optional", - "default_if_none", -] - - -def optional(converter): - """ - A converter that allows an attribute to be optional. An optional attribute - is one which can be set to ``None``. - - Type annotations will be inferred from the wrapped converter's, if it - has any. - - :param callable converter: the converter that is used for non-``None`` - values. - - .. versionadded:: 17.1.0 - """ - - def optional_converter(val): - if val is None: - return None - return converter(val) - - if not PY2: - sig = None - try: - sig = inspect.signature(converter) - except (ValueError, TypeError): # inspect failed - pass - if sig: - params = list(sig.parameters.values()) - if params and params[0].annotation is not inspect.Parameter.empty: - optional_converter.__annotations__["val"] = typing.Optional[ - params[0].annotation - ] - if sig.return_annotation is not inspect.Signature.empty: - optional_converter.__annotations__["return"] = typing.Optional[ - sig.return_annotation - ] - - return optional_converter - - -def default_if_none(default=NOTHING, factory=None): - """ - A converter that allows to replace ``None`` values by *default* or the - result of *factory*. - - :param default: Value to be used if ``None`` is passed. Passing an instance - of `attr.Factory` is supported, however the ``takes_self`` option - is *not*. - :param callable factory: A callable that takes no parameters whose result - is used if ``None`` is passed. - - :raises TypeError: If **neither** *default* or *factory* is passed. - :raises TypeError: If **both** *default* and *factory* are passed. - :raises ValueError: If an instance of `attr.Factory` is passed with - ``takes_self=True``. - - .. versionadded:: 18.2.0 - """ - if default is NOTHING and factory is None: - raise TypeError("Must pass either `default` or `factory`.") - - if default is not NOTHING and factory is not None: - raise TypeError( - "Must pass either `default` or `factory` but not both." - ) - - if factory is not None: - default = Factory(factory) - - if isinstance(default, Factory): - if default.takes_self: - raise ValueError( - "`takes_self` is not supported by default_if_none." - ) - - def default_if_none_converter(val): - if val is not None: - return val - - return default.factory() - - else: - - def default_if_none_converter(val): - if val is not None: - return val - - return default - - return default_if_none_converter diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/converters.pyi b/IKEA_scraper/.venv/Lib/site-packages/attr/converters.pyi deleted file mode 100644 index 84a57590..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/attr/converters.pyi +++ /dev/null @@ -1,13 +0,0 @@ -from typing import Callable, Optional, TypeVar, overload - -from . import _ConverterType - - -_T = TypeVar("_T") - -def pipe(*validators: _ConverterType) -> _ConverterType: ... -def optional(converter: _ConverterType) -> _ConverterType: ... -@overload -def default_if_none(default: _T) -> _ConverterType: ... -@overload -def default_if_none(*, factory: Callable[[], _T]) -> _ConverterType: ... diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/exceptions.py b/IKEA_scraper/.venv/Lib/site-packages/attr/exceptions.py deleted file mode 100644 index f6f9861b..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/attr/exceptions.py +++ /dev/null @@ -1,92 +0,0 @@ -from __future__ import absolute_import, division, print_function - - -class FrozenError(AttributeError): - """ - A frozen/immutable instance or attribute have been attempted to be - modified. - - It mirrors the behavior of ``namedtuples`` by using the same error message - and subclassing `AttributeError`. - - .. versionadded:: 20.1.0 - """ - - msg = "can't set attribute" - args = [msg] - - -class FrozenInstanceError(FrozenError): - """ - A frozen instance has been attempted to be modified. - - .. versionadded:: 16.1.0 - """ - - -class FrozenAttributeError(FrozenError): - """ - A frozen attribute has been attempted to be modified. - - .. versionadded:: 20.1.0 - """ - - -class AttrsAttributeNotFoundError(ValueError): - """ - An ``attrs`` function couldn't find an attribute that the user asked for. - - .. versionadded:: 16.2.0 - """ - - -class NotAnAttrsClassError(ValueError): - """ - A non-``attrs`` class has been passed into an ``attrs`` function. - - .. versionadded:: 16.2.0 - """ - - -class DefaultAlreadySetError(RuntimeError): - """ - A default has been set using ``attr.ib()`` and is attempted to be reset - using the decorator. - - .. versionadded:: 17.1.0 - """ - - -class UnannotatedAttributeError(RuntimeError): - """ - A class with ``auto_attribs=True`` has an ``attr.ib()`` without a type - annotation. - - .. versionadded:: 17.3.0 - """ - - -class PythonTooOldError(RuntimeError): - """ - It was attempted to use an ``attrs`` feature that requires a newer Python - version. - - .. versionadded:: 18.2.0 - """ - - -class NotCallableError(TypeError): - """ - A ``attr.ib()`` requiring a callable has been set with a value - that is not callable. - - .. versionadded:: 19.2.0 - """ - - def __init__(self, msg, value): - super(TypeError, self).__init__(msg, value) - self.msg = msg - self.value = value - - def __str__(self): - return str(self.msg) diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/exceptions.pyi b/IKEA_scraper/.venv/Lib/site-packages/attr/exceptions.pyi deleted file mode 100644 index a800fb26..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/attr/exceptions.pyi +++ /dev/null @@ -1,18 +0,0 @@ -from typing import Any - - -class FrozenError(AttributeError): - msg: str = ... - -class FrozenInstanceError(FrozenError): ... -class FrozenAttributeError(FrozenError): ... -class AttrsAttributeNotFoundError(ValueError): ... -class NotAnAttrsClassError(ValueError): ... -class DefaultAlreadySetError(RuntimeError): ... -class UnannotatedAttributeError(RuntimeError): ... -class PythonTooOldError(RuntimeError): ... - -class NotCallableError(TypeError): - msg: str = ... - value: Any = ... - def __init__(self, msg: str, value: Any) -> None: ... diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/filters.py b/IKEA_scraper/.venv/Lib/site-packages/attr/filters.py deleted file mode 100644 index dc47e8fa..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/attr/filters.py +++ /dev/null @@ -1,52 +0,0 @@ -""" -Commonly useful filters for `attr.asdict`. -""" - -from __future__ import absolute_import, division, print_function - -from ._compat import isclass -from ._make import Attribute - - -def _split_what(what): - """ - Returns a tuple of `frozenset`s of classes and attributes. - """ - return ( - frozenset(cls for cls in what if isclass(cls)), - frozenset(cls for cls in what if isinstance(cls, Attribute)), - ) - - -def include(*what): - """ - Whitelist *what*. - - :param what: What to whitelist. - :type what: `list` of `type` or `attr.Attribute`\\ s - - :rtype: `callable` - """ - cls, attrs = _split_what(what) - - def include_(attribute, value): - return value.__class__ in cls or attribute in attrs - - return include_ - - -def exclude(*what): - """ - Blacklist *what*. - - :param what: What to blacklist. - :type what: `list` of classes or `attr.Attribute`\\ s. - - :rtype: `callable` - """ - cls, attrs = _split_what(what) - - def exclude_(attribute, value): - return value.__class__ not in cls and attribute not in attrs - - return exclude_ diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/filters.pyi b/IKEA_scraper/.venv/Lib/site-packages/attr/filters.pyi deleted file mode 100644 index f7b63f1b..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/attr/filters.pyi +++ /dev/null @@ -1,7 +0,0 @@ -from typing import Any, Union - -from . import Attribute, _FilterType - - -def include(*what: Union[type, Attribute[Any]]) -> _FilterType[Any]: ... -def exclude(*what: Union[type, Attribute[Any]]) -> _FilterType[Any]: ... diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/py.typed b/IKEA_scraper/.venv/Lib/site-packages/attr/py.typed deleted file mode 100644 index e69de29b..00000000 diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/setters.py b/IKEA_scraper/.venv/Lib/site-packages/attr/setters.py deleted file mode 100644 index 240014b3..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/attr/setters.py +++ /dev/null @@ -1,77 +0,0 @@ -""" -Commonly used hooks for on_setattr. -""" - -from __future__ import absolute_import, division, print_function - -from . import _config -from .exceptions import FrozenAttributeError - - -def pipe(*setters): - """ - Run all *setters* and return the return value of the last one. - - .. versionadded:: 20.1.0 - """ - - def wrapped_pipe(instance, attrib, new_value): - rv = new_value - - for setter in setters: - rv = setter(instance, attrib, rv) - - return rv - - return wrapped_pipe - - -def frozen(_, __, ___): - """ - Prevent an attribute to be modified. - - .. versionadded:: 20.1.0 - """ - raise FrozenAttributeError() - - -def validate(instance, attrib, new_value): - """ - Run *attrib*'s validator on *new_value* if it has one. - - .. versionadded:: 20.1.0 - """ - if _config._run_validators is False: - return new_value - - v = attrib.validator - if not v: - return new_value - - v(instance, attrib, new_value) - - return new_value - - -def convert(instance, attrib, new_value): - """ - Run *attrib*'s converter -- if it has one -- on *new_value* and return the - result. - - .. versionadded:: 20.1.0 - """ - c = attrib.converter - if c: - return c(new_value) - - return new_value - - -NO_OP = object() -""" -Sentinel for disabling class-wide *on_setattr* hooks for certain attributes. - -Does not work in `pipe` or within lists. - -.. versionadded:: 20.1.0 -""" diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/setters.pyi b/IKEA_scraper/.venv/Lib/site-packages/attr/setters.pyi deleted file mode 100644 index a921e07d..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/attr/setters.pyi +++ /dev/null @@ -1,20 +0,0 @@ -from typing import Any, NewType, NoReturn, TypeVar, cast - -from . import Attribute, _OnSetAttrType - - -_T = TypeVar("_T") - -def frozen( - instance: Any, attribute: Attribute[Any], new_value: Any -) -> NoReturn: ... -def pipe(*setters: _OnSetAttrType) -> _OnSetAttrType: ... -def validate(instance: Any, attribute: Attribute[_T], new_value: _T) -> _T: ... - -# convert is allowed to return Any, because they can be chained using pipe. -def convert( - instance: Any, attribute: Attribute[Any], new_value: Any -) -> Any: ... - -_NoOpType = NewType("_NoOpType", object) -NO_OP: _NoOpType diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/validators.py b/IKEA_scraper/.venv/Lib/site-packages/attr/validators.py deleted file mode 100644 index b9a73054..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/attr/validators.py +++ /dev/null @@ -1,379 +0,0 @@ -""" -Commonly useful validators. -""" - -from __future__ import absolute_import, division, print_function - -import re - -from ._make import _AndValidator, and_, attrib, attrs -from .exceptions import NotCallableError - - -__all__ = [ - "and_", - "deep_iterable", - "deep_mapping", - "in_", - "instance_of", - "is_callable", - "matches_re", - "optional", - "provides", -] - - -@attrs(repr=False, slots=True, hash=True) -class _InstanceOfValidator(object): - type = attrib() - - def __call__(self, inst, attr, value): - """ - We use a callable class to be able to change the ``__repr__``. - """ - if not isinstance(value, self.type): - raise TypeError( - "'{name}' must be {type!r} (got {value!r} that is a " - "{actual!r}).".format( - name=attr.name, - type=self.type, - actual=value.__class__, - value=value, - ), - attr, - self.type, - value, - ) - - def __repr__(self): - return "".format( - type=self.type - ) - - -def instance_of(type): - """ - A validator that raises a `TypeError` if the initializer is called - with a wrong type for this particular attribute (checks are performed using - `isinstance` therefore it's also valid to pass a tuple of types). - - :param type: The type to check for. - :type type: type or tuple of types - - :raises TypeError: With a human readable error message, the attribute - (of type `attr.Attribute`), the expected type, and the value it - got. - """ - return _InstanceOfValidator(type) - - -@attrs(repr=False, frozen=True, slots=True) -class _MatchesReValidator(object): - regex = attrib() - flags = attrib() - match_func = attrib() - - def __call__(self, inst, attr, value): - """ - We use a callable class to be able to change the ``__repr__``. - """ - if not self.match_func(value): - raise ValueError( - "'{name}' must match regex {regex!r}" - " ({value!r} doesn't)".format( - name=attr.name, regex=self.regex.pattern, value=value - ), - attr, - self.regex, - value, - ) - - def __repr__(self): - return "".format( - regex=self.regex - ) - - -def matches_re(regex, flags=0, func=None): - r""" - A validator that raises `ValueError` if the initializer is called - with a string that doesn't match *regex*. - - :param str regex: a regex string to match against - :param int flags: flags that will be passed to the underlying re function - (default 0) - :param callable func: which underlying `re` function to call (options - are `re.fullmatch`, `re.search`, `re.match`, default - is ``None`` which means either `re.fullmatch` or an emulation of - it on Python 2). For performance reasons, they won't be used directly - but on a pre-`re.compile`\ ed pattern. - - .. versionadded:: 19.2.0 - """ - fullmatch = getattr(re, "fullmatch", None) - valid_funcs = (fullmatch, None, re.search, re.match) - if func not in valid_funcs: - raise ValueError( - "'func' must be one of %s." - % ( - ", ".join( - sorted( - e and e.__name__ or "None" for e in set(valid_funcs) - ) - ), - ) - ) - - pattern = re.compile(regex, flags) - if func is re.match: - match_func = pattern.match - elif func is re.search: - match_func = pattern.search - else: - if fullmatch: - match_func = pattern.fullmatch - else: - pattern = re.compile(r"(?:{})\Z".format(regex), flags) - match_func = pattern.match - - return _MatchesReValidator(pattern, flags, match_func) - - -@attrs(repr=False, slots=True, hash=True) -class _ProvidesValidator(object): - interface = attrib() - - def __call__(self, inst, attr, value): - """ - We use a callable class to be able to change the ``__repr__``. - """ - if not self.interface.providedBy(value): - raise TypeError( - "'{name}' must provide {interface!r} which {value!r} " - "doesn't.".format( - name=attr.name, interface=self.interface, value=value - ), - attr, - self.interface, - value, - ) - - def __repr__(self): - return "".format( - interface=self.interface - ) - - -def provides(interface): - """ - A validator that raises a `TypeError` if the initializer is called - with an object that does not provide the requested *interface* (checks are - performed using ``interface.providedBy(value)`` (see `zope.interface - `_). - - :param interface: The interface to check for. - :type interface: ``zope.interface.Interface`` - - :raises TypeError: With a human readable error message, the attribute - (of type `attr.Attribute`), the expected interface, and the - value it got. - """ - return _ProvidesValidator(interface) - - -@attrs(repr=False, slots=True, hash=True) -class _OptionalValidator(object): - validator = attrib() - - def __call__(self, inst, attr, value): - if value is None: - return - - self.validator(inst, attr, value) - - def __repr__(self): - return "".format( - what=repr(self.validator) - ) - - -def optional(validator): - """ - A validator that makes an attribute optional. An optional attribute is one - which can be set to ``None`` in addition to satisfying the requirements of - the sub-validator. - - :param validator: A validator (or a list of validators) that is used for - non-``None`` values. - :type validator: callable or `list` of callables. - - .. versionadded:: 15.1.0 - .. versionchanged:: 17.1.0 *validator* can be a list of validators. - """ - if isinstance(validator, list): - return _OptionalValidator(_AndValidator(validator)) - return _OptionalValidator(validator) - - -@attrs(repr=False, slots=True, hash=True) -class _InValidator(object): - options = attrib() - - def __call__(self, inst, attr, value): - try: - in_options = value in self.options - except TypeError: # e.g. `1 in "abc"` - in_options = False - - if not in_options: - raise ValueError( - "'{name}' must be in {options!r} (got {value!r})".format( - name=attr.name, options=self.options, value=value - ) - ) - - def __repr__(self): - return "".format( - options=self.options - ) - - -def in_(options): - """ - A validator that raises a `ValueError` if the initializer is called - with a value that does not belong in the options provided. The check is - performed using ``value in options``. - - :param options: Allowed options. - :type options: list, tuple, `enum.Enum`, ... - - :raises ValueError: With a human readable error message, the attribute (of - type `attr.Attribute`), the expected options, and the value it - got. - - .. versionadded:: 17.1.0 - """ - return _InValidator(options) - - -@attrs(repr=False, slots=False, hash=True) -class _IsCallableValidator(object): - def __call__(self, inst, attr, value): - """ - We use a callable class to be able to change the ``__repr__``. - """ - if not callable(value): - message = ( - "'{name}' must be callable " - "(got {value!r} that is a {actual!r})." - ) - raise NotCallableError( - msg=message.format( - name=attr.name, value=value, actual=value.__class__ - ), - value=value, - ) - - def __repr__(self): - return "" - - -def is_callable(): - """ - A validator that raises a `attr.exceptions.NotCallableError` if the - initializer is called with a value for this particular attribute - that is not callable. - - .. versionadded:: 19.1.0 - - :raises `attr.exceptions.NotCallableError`: With a human readable error - message containing the attribute (`attr.Attribute`) name, - and the value it got. - """ - return _IsCallableValidator() - - -@attrs(repr=False, slots=True, hash=True) -class _DeepIterable(object): - member_validator = attrib(validator=is_callable()) - iterable_validator = attrib( - default=None, validator=optional(is_callable()) - ) - - def __call__(self, inst, attr, value): - """ - We use a callable class to be able to change the ``__repr__``. - """ - if self.iterable_validator is not None: - self.iterable_validator(inst, attr, value) - - for member in value: - self.member_validator(inst, attr, member) - - def __repr__(self): - iterable_identifier = ( - "" - if self.iterable_validator is None - else " {iterable!r}".format(iterable=self.iterable_validator) - ) - return ( - "" - ).format( - iterable_identifier=iterable_identifier, - member=self.member_validator, - ) - - -def deep_iterable(member_validator, iterable_validator=None): - """ - A validator that performs deep validation of an iterable. - - :param member_validator: Validator to apply to iterable members - :param iterable_validator: Validator to apply to iterable itself - (optional) - - .. versionadded:: 19.1.0 - - :raises TypeError: if any sub-validators fail - """ - return _DeepIterable(member_validator, iterable_validator) - - -@attrs(repr=False, slots=True, hash=True) -class _DeepMapping(object): - key_validator = attrib(validator=is_callable()) - value_validator = attrib(validator=is_callable()) - mapping_validator = attrib(default=None, validator=optional(is_callable())) - - def __call__(self, inst, attr, value): - """ - We use a callable class to be able to change the ``__repr__``. - """ - if self.mapping_validator is not None: - self.mapping_validator(inst, attr, value) - - for key in value: - self.key_validator(inst, attr, key) - self.value_validator(inst, attr, value[key]) - - def __repr__(self): - return ( - "" - ).format(key=self.key_validator, value=self.value_validator) - - -def deep_mapping(key_validator, value_validator, mapping_validator=None): - """ - A validator that performs deep validation of a dictionary. - - :param key_validator: Validator to apply to dictionary keys - :param value_validator: Validator to apply to dictionary values - :param mapping_validator: Validator to apply to top-level mapping - attribute (optional) - - .. versionadded:: 19.1.0 - - :raises TypeError: if any sub-validators fail - """ - return _DeepMapping(key_validator, value_validator, mapping_validator) diff --git a/IKEA_scraper/.venv/Lib/site-packages/attr/validators.pyi b/IKEA_scraper/.venv/Lib/site-packages/attr/validators.pyi deleted file mode 100644 index fe92aac4..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/attr/validators.pyi +++ /dev/null @@ -1,68 +0,0 @@ -from typing import ( - Any, - AnyStr, - Callable, - Container, - Iterable, - List, - Mapping, - Match, - Optional, - Tuple, - Type, - TypeVar, - Union, - overload, -) - -from . import _ValidatorType - - -_T = TypeVar("_T") -_T1 = TypeVar("_T1") -_T2 = TypeVar("_T2") -_T3 = TypeVar("_T3") -_I = TypeVar("_I", bound=Iterable) -_K = TypeVar("_K") -_V = TypeVar("_V") -_M = TypeVar("_M", bound=Mapping) - -# To be more precise on instance_of use some overloads. -# If there are more than 3 items in the tuple then we fall back to Any -@overload -def instance_of(type: Type[_T]) -> _ValidatorType[_T]: ... -@overload -def instance_of(type: Tuple[Type[_T]]) -> _ValidatorType[_T]: ... -@overload -def instance_of( - type: Tuple[Type[_T1], Type[_T2]] -) -> _ValidatorType[Union[_T1, _T2]]: ... -@overload -def instance_of( - type: Tuple[Type[_T1], Type[_T2], Type[_T3]] -) -> _ValidatorType[Union[_T1, _T2, _T3]]: ... -@overload -def instance_of(type: Tuple[type, ...]) -> _ValidatorType[Any]: ... -def provides(interface: Any) -> _ValidatorType[Any]: ... -def optional( - validator: Union[_ValidatorType[_T], List[_ValidatorType[_T]]] -) -> _ValidatorType[Optional[_T]]: ... -def in_(options: Container[_T]) -> _ValidatorType[_T]: ... -def and_(*validators: _ValidatorType[_T]) -> _ValidatorType[_T]: ... -def matches_re( - regex: AnyStr, - flags: int = ..., - func: Optional[ - Callable[[AnyStr, AnyStr, int], Optional[Match[AnyStr]]] - ] = ..., -) -> _ValidatorType[AnyStr]: ... -def deep_iterable( - member_validator: _ValidatorType[_T], - iterable_validator: Optional[_ValidatorType[_I]] = ..., -) -> _ValidatorType[_I]: ... -def deep_mapping( - key_validator: _ValidatorType[_K], - value_validator: _ValidatorType[_V], - mapping_validator: Optional[_ValidatorType[_M]] = ..., -) -> _ValidatorType[_M]: ... -def is_callable() -> _ValidatorType[_T]: ... diff --git a/IKEA_scraper/.venv/Lib/site-packages/attrs-21.2.0.dist-info/AUTHORS.rst b/IKEA_scraper/.venv/Lib/site-packages/attrs-21.2.0.dist-info/AUTHORS.rst deleted file mode 100644 index f14ef6c6..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/attrs-21.2.0.dist-info/AUTHORS.rst +++ /dev/null @@ -1,11 +0,0 @@ -Credits -======= - -``attrs`` is written and maintained by `Hynek Schlawack `_. - -The development is kindly supported by `Variomedia AG `_. - -A full list of contributors can be found in `GitHub's overview `_. - -It’s the spiritual successor of `characteristic `_ and aspires to fix some of it clunkiness and unfortunate decisions. -Both were inspired by Twisted’s `FancyEqMixin `_ but both are implemented using class decorators because `subclassing is bad for you `_, m’kay? diff --git a/IKEA_scraper/.venv/Lib/site-packages/attrs-21.2.0.dist-info/INSTALLER b/IKEA_scraper/.venv/Lib/site-packages/attrs-21.2.0.dist-info/INSTALLER deleted file mode 100644 index a1b589e3..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/attrs-21.2.0.dist-info/INSTALLER +++ /dev/null @@ -1 +0,0 @@ -pip diff --git a/IKEA_scraper/.venv/Lib/site-packages/attrs-21.2.0.dist-info/LICENSE b/IKEA_scraper/.venv/Lib/site-packages/attrs-21.2.0.dist-info/LICENSE deleted file mode 100644 index 7ae3df93..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/attrs-21.2.0.dist-info/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Hynek Schlawack - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/IKEA_scraper/.venv/Lib/site-packages/attrs-21.2.0.dist-info/METADATA b/IKEA_scraper/.venv/Lib/site-packages/attrs-21.2.0.dist-info/METADATA deleted file mode 100644 index ceca5b9a..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/attrs-21.2.0.dist-info/METADATA +++ /dev/null @@ -1,211 +0,0 @@ -Metadata-Version: 2.1 -Name: attrs -Version: 21.2.0 -Summary: Classes Without Boilerplate -Home-page: https://www.attrs.org/ -Author: Hynek Schlawack -Author-email: hs@ox.cx -Maintainer: Hynek Schlawack -Maintainer-email: hs@ox.cx -License: MIT -Project-URL: Documentation, https://www.attrs.org/ -Project-URL: Changelog, https://www.attrs.org/en/stable/changelog.html -Project-URL: Bug Tracker, https://github.com/python-attrs/attrs/issues -Project-URL: Source Code, https://github.com/python-attrs/attrs -Project-URL: Funding, https://github.com/sponsors/hynek -Project-URL: Tidelift, https://tidelift.com/subscription/pkg/pypi-attrs?utm_source=pypi-attrs&utm_medium=pypi -Project-URL: Ko-fi, https://ko-fi.com/the_hynek -Keywords: class,attribute,boilerplate -Platform: UNKNOWN -Classifier: Development Status :: 5 - Production/Stable -Classifier: Intended Audience :: Developers -Classifier: Natural Language :: English -Classifier: License :: OSI Approved :: MIT License -Classifier: Operating System :: OS Independent -Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 2 -Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: 3.7 -Classifier: Programming Language :: Python :: 3.8 -Classifier: Programming Language :: Python :: 3.9 -Classifier: Programming Language :: Python :: 3.10 -Classifier: Programming Language :: Python :: Implementation :: CPython -Classifier: Programming Language :: Python :: Implementation :: PyPy -Classifier: Topic :: Software Development :: Libraries :: Python Modules -Requires-Python: >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.* -Description-Content-Type: text/x-rst -Provides-Extra: dev -Requires-Dist: coverage[toml] (>=5.0.2) ; extra == 'dev' -Requires-Dist: hypothesis ; extra == 'dev' -Requires-Dist: pympler ; extra == 'dev' -Requires-Dist: pytest (>=4.3.0) ; extra == 'dev' -Requires-Dist: six ; extra == 'dev' -Requires-Dist: mypy ; extra == 'dev' -Requires-Dist: pytest-mypy-plugins ; extra == 'dev' -Requires-Dist: zope.interface ; extra == 'dev' -Requires-Dist: furo ; extra == 'dev' -Requires-Dist: sphinx ; extra == 'dev' -Requires-Dist: sphinx-notfound-page ; extra == 'dev' -Requires-Dist: pre-commit ; extra == 'dev' -Provides-Extra: docs -Requires-Dist: furo ; extra == 'docs' -Requires-Dist: sphinx ; extra == 'docs' -Requires-Dist: zope.interface ; extra == 'docs' -Requires-Dist: sphinx-notfound-page ; extra == 'docs' -Provides-Extra: tests -Requires-Dist: coverage[toml] (>=5.0.2) ; extra == 'tests' -Requires-Dist: hypothesis ; extra == 'tests' -Requires-Dist: pympler ; extra == 'tests' -Requires-Dist: pytest (>=4.3.0) ; extra == 'tests' -Requires-Dist: six ; extra == 'tests' -Requires-Dist: mypy ; extra == 'tests' -Requires-Dist: pytest-mypy-plugins ; extra == 'tests' -Requires-Dist: zope.interface ; extra == 'tests' -Provides-Extra: tests_no_zope -Requires-Dist: coverage[toml] (>=5.0.2) ; extra == 'tests_no_zope' -Requires-Dist: hypothesis ; extra == 'tests_no_zope' -Requires-Dist: pympler ; extra == 'tests_no_zope' -Requires-Dist: pytest (>=4.3.0) ; extra == 'tests_no_zope' -Requires-Dist: six ; extra == 'tests_no_zope' -Requires-Dist: mypy ; extra == 'tests_no_zope' -Requires-Dist: pytest-mypy-plugins ; extra == 'tests_no_zope' - -====================================== -``attrs``: Classes Without Boilerplate -====================================== - - -``attrs`` is the Python package that will bring back the **joy** of **writing classes** by relieving you from the drudgery of implementing object protocols (aka `dunder `_ methods). -`Trusted by NASA `_ for Mars missions since 2020! - -Its main goal is to help you to write **concise** and **correct** software without slowing down your code. - -.. teaser-end - -For that, it gives you a class decorator and a way to declaratively define the attributes on that class: - -.. -code-begin- - -.. code-block:: pycon - - >>> import attr - - >>> @attr.s - ... class SomeClass(object): - ... a_number = attr.ib(default=42) - ... list_of_numbers = attr.ib(factory=list) - ... - ... def hard_math(self, another_number): - ... return self.a_number + sum(self.list_of_numbers) * another_number - - - >>> sc = SomeClass(1, [1, 2, 3]) - >>> sc - SomeClass(a_number=1, list_of_numbers=[1, 2, 3]) - - >>> sc.hard_math(3) - 19 - >>> sc == SomeClass(1, [1, 2, 3]) - True - >>> sc != SomeClass(2, [3, 2, 1]) - True - - >>> attr.asdict(sc) - {'a_number': 1, 'list_of_numbers': [1, 2, 3]} - - >>> SomeClass() - SomeClass(a_number=42, list_of_numbers=[]) - - >>> C = attr.make_class("C", ["a", "b"]) - >>> C("foo", "bar") - C(a='foo', b='bar') - - -After *declaring* your attributes ``attrs`` gives you: - -- a concise and explicit overview of the class's attributes, -- a nice human-readable ``__repr__``, -- a complete set of comparison methods (equality and ordering), -- an initializer, -- and much more, - -*without* writing dull boilerplate code again and again and *without* runtime performance penalties. - -On Python 3.6 and later, you can often even drop the calls to ``attr.ib()`` by using `type annotations `_. - -This gives you the power to use actual classes with actual types in your code instead of confusing ``tuple``\ s or `confusingly behaving `_ ``namedtuple``\ s. -Which in turn encourages you to write *small classes* that do `one thing well `_. -Never again violate the `single responsibility principle `_ just because implementing ``__init__`` et al is a painful drag. - - -.. -getting-help- - -Getting Help -============ - -Please use the ``python-attrs`` tag on `StackOverflow `_ to get help. - -Answering questions of your fellow developers is also a great way to help the project! - - -.. -project-information- - -Project Information -=================== - -``attrs`` is released under the `MIT `_ license, -its documentation lives at `Read the Docs `_, -the code on `GitHub `_, -and the latest release on `PyPI `_. -It’s rigorously tested on Python 2.7, 3.5+, and PyPy. - -We collect information on **third-party extensions** in our `wiki `_. -Feel free to browse and add your own! - -If you'd like to contribute to ``attrs`` you're most welcome and we've written `a little guide `_ to get you started! - - -``attrs`` for Enterprise ------------------------- - -Available as part of the Tidelift Subscription. - -The maintainers of ``attrs`` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source packages you use to build your applications. -Save time, reduce risk, and improve code health, while paying the maintainers of the exact packages you use. -`Learn more. `_ - - -Release Information -=================== - -21.2.0 (2021-05-07) -------------------- - -Backward-incompatible Changes -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -- We had to revert the recursive feature for ``attr.evolve()`` because it broke some use-cases -- sorry! - `#806 `_ -- Python 3.4 is now blocked using packaging metadata because ``attrs`` can't be imported on it anymore. - To ensure that 3.4 users can keep installing ``attrs`` easily, we will `yank `_ 21.1.0 from PyPI. - This has **no** consequences if you pin ``attrs`` to 21.1.0. - `#807 `_ - -`Full changelog `_. - -Credits -======= - -``attrs`` is written and maintained by `Hynek Schlawack `_. - -The development is kindly supported by `Variomedia AG `_. - -A full list of contributors can be found in `GitHub's overview `_. - -It’s the spiritual successor of `characteristic `_ and aspires to fix some of it clunkiness and unfortunate decisions. -Both were inspired by Twisted’s `FancyEqMixin `_ but both are implemented using class decorators because `subclassing is bad for you `_, m’kay? - - diff --git a/IKEA_scraper/.venv/Lib/site-packages/attrs-21.2.0.dist-info/RECORD b/IKEA_scraper/.venv/Lib/site-packages/attrs-21.2.0.dist-info/RECORD deleted file mode 100644 index 00904251..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/attrs-21.2.0.dist-info/RECORD +++ /dev/null @@ -1,42 +0,0 @@ -attr/__init__.py,sha256=OlF8DYZfrT1KFU6VKHkW4ia76ntgvvaqBbsNf8j6Woc,1613 -attr/__init__.pyi,sha256=bNx5qLa3MBtgaf9P5OP2uwuv0xbS7HUrEfLlkrAsrr8,14837 -attr/__pycache__/__init__.cpython-39.pyc,, -attr/__pycache__/_cmp.cpython-39.pyc,, -attr/__pycache__/_compat.cpython-39.pyc,, -attr/__pycache__/_config.cpython-39.pyc,, -attr/__pycache__/_funcs.cpython-39.pyc,, -attr/__pycache__/_make.cpython-39.pyc,, -attr/__pycache__/_next_gen.cpython-39.pyc,, -attr/__pycache__/_version_info.cpython-39.pyc,, -attr/__pycache__/converters.cpython-39.pyc,, -attr/__pycache__/exceptions.cpython-39.pyc,, -attr/__pycache__/filters.cpython-39.pyc,, -attr/__pycache__/setters.cpython-39.pyc,, -attr/__pycache__/validators.cpython-39.pyc,, -attr/_cmp.py,sha256=CB01fdAcVk9Uwho7qdhrpK1ss9lilIeKoY-WJ-EaZYA,4133 -attr/_cmp.pyi,sha256=APRWqmFwHtTrapyy-vNKovjF9dA-HPi-AqqidjgvLpQ,318 -attr/_compat.py,sha256=hYZsXQOKJzAIAPPEzo-Y4aF0DMjhCXEp-nr1gSxVVG4,7562 -attr/_config.py,sha256=_KvW0mQdH2PYjHc0YfIUaV_o2pVfM7ziMEYTxwmEhOA,514 -attr/_funcs.py,sha256=azJeF9YIMg3lP2qeQyuGhrrcJkfTjm7OLm2u4MhPTqs,13398 -attr/_make.py,sha256=xrK0rSAYDINJF-yGgb_Qb2DHuEaKRmrs102mkO0LI5c,97743 -attr/_next_gen.py,sha256=aZEIlr2XlPVzJ_SWSNRAEx07jgqbtHWQm3PnaOXTMyw,4072 -attr/_version_info.py,sha256=azMi1lNelb3cJvvYUMXsXVbUANkRzbD5IEiaXVpeVr4,2162 -attr/_version_info.pyi,sha256=x_M3L3WuB7r_ULXAWjx959udKQ4HLB8l-hsc1FDGNvk,209 -attr/converters.py,sha256=mn8pLVYzzl-WvmlNe52HM2ukSkuO4a12mrTaHpQjX9c,3039 -attr/converters.pyi,sha256=L7eN2rEXCNVOkh1hYP-GVbWtyO3e6eKOBvJR-hK_h1M,382 -attr/exceptions.py,sha256=6dC-9b6_nTG066z9sw0TP_Tx4vJaIC5RImMONTkDM6Q,1949 -attr/exceptions.pyi,sha256=Ydjpt9xbNLM8HUEhayegA3c0xIBc75kpRgtiv0qsLCs,540 -attr/filters.py,sha256=weDxwATsa69T_0bPVjiM1fGsciAMQmwhY5G8Jm5BxuI,1098 -attr/filters.pyi,sha256=jUFN1Nqx2x5ayyLLHzsW5hHObjd6RudZjnj-ENAJdWk,216 -attr/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -attr/setters.py,sha256=0ElzHwdVK3dsYcQi2CXkFvhx8fNxUI5OVhw8SWeaKmA,1434 -attr/setters.pyi,sha256=kTxNSnrItMgRpFDyIwvtFd6xYtqnOWwi4UVks4dskRY,574 -attr/validators.py,sha256=6DBx1jt4oZxx1ppvx6JWqm9-UAsYpXC4HTwxJilCeRg,11497 -attr/validators.pyi,sha256=qN6dsUdWh2UkLaX46JJ86lzYlhy4sh8z66fTXgJQO60,1870 -attrs-21.2.0.dist-info/AUTHORS.rst,sha256=wsqCNbGz_mklcJrt54APIZHZpoTIJLkXqEhhn4Nd8hc,752 -attrs-21.2.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -attrs-21.2.0.dist-info/LICENSE,sha256=v2WaKLSSQGAvVrvfSQy-LsUJsVuY-Z17GaUsdA4yeGM,1082 -attrs-21.2.0.dist-info/METADATA,sha256=oaarWZ5r9x96ZwIcBvpmzpyt6ADyZP2QYjYVZrJrrEQ,9097 -attrs-21.2.0.dist-info/RECORD,, -attrs-21.2.0.dist-info/WHEEL,sha256=Z-nyYpwrcSqxfdux5Mbn_DQ525iP7J2DG3JgGvOYyTQ,110 -attrs-21.2.0.dist-info/top_level.txt,sha256=tlRYMddkRlKPqJ96wP2_j9uEsmcNHgD2SbuWd4CzGVU,5 diff --git a/IKEA_scraper/.venv/Lib/site-packages/attrs-21.2.0.dist-info/WHEEL b/IKEA_scraper/.venv/Lib/site-packages/attrs-21.2.0.dist-info/WHEEL deleted file mode 100644 index 01b8fc7d..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/attrs-21.2.0.dist-info/WHEEL +++ /dev/null @@ -1,6 +0,0 @@ -Wheel-Version: 1.0 -Generator: bdist_wheel (0.36.2) -Root-Is-Purelib: true -Tag: py2-none-any -Tag: py3-none-any - diff --git a/IKEA_scraper/.venv/Lib/site-packages/attrs-21.2.0.dist-info/top_level.txt b/IKEA_scraper/.venv/Lib/site-packages/attrs-21.2.0.dist-info/top_level.txt deleted file mode 100644 index 66a062d8..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/attrs-21.2.0.dist-info/top_level.txt +++ /dev/null @@ -1 +0,0 @@ -attr diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/__init__.py b/IKEA_scraper/.venv/Lib/site-packages/babel/__init__.py deleted file mode 100644 index 3e20e4bd..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/babel/__init__.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -""" - babel - ~~~~~ - - Integrated collection of utilities that assist in internationalizing and - localizing applications. - - This package is basically composed of two major parts: - - * tools to build and work with ``gettext`` message catalogs - * a Python interface to the CLDR (Common Locale Data Repository), providing - access to various locale display names, localized number and date - formatting, etc. - - :copyright: (c) 2013-2021 by the Babel Team. - :license: BSD, see LICENSE for more details. -""" - -from babel.core import UnknownLocaleError, Locale, default_locale, \ - negotiate_locale, parse_locale, get_locale_identifier - - -__version__ = '2.9.1' diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/__pycache__/__init__.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/babel/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index e5ba0b50db310eedac5487bd83273369e3d955f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 920 zcmYjQ%We}f6rJW-0!393`@3vV8rraGgb?auQ4v+BEt}Cu6UV+uO#B$xPQrA-|L`k( zLRLtu_yty6PuhyBnJe3Kea^X$VS9U>gzQ)Sl>MwF$?v%N-{>s)NU!ga6G@tg9Z^#| zx|Y^-J+13T+R)9ksat7Fx6}4cBI@a`Xxt{Ztuby2-YeRV_~wCN<>arTepC< z409NdXBYy03*#|p^gdD$J5zS%D`^D4;By(~lwFmTbMp}B?Q+ZGMnWdhf ztF#NM`6JNOI?X~L=pJC;5A_;yTa-@D=3xkjybFWllXpjh#E!C*&_& zoP9i4d=H~~O9>G~(3J4;OgWWghY7Mw1RF5!2uHYY2zRAZy_Yp!m$g3S4e5bwikf}r z%PAg+y472vVdu8+?0gN-o9T2m!)LNtK1;`5=J=ev&gbOr{!BkIE<>MBB3J^rD_jKkvpxRz~`9IW*q4X_WOu^aMJH z{0)Ps28bBLn>?tWi%dCSwecJ>Lo4IRJU)$4A)G~Oqk^q?E?ESy$p)ZkNcTNGAg`fD z7CL0ch0v982Xa^)LJ7o0@H1D2SLoK%_o8%HR?3EXQsUF_Xa6UD4RXjXho76kL%QCU zR!P3S`OGwa7;0HcDd$q-rA01qHi5!9T}0wvpugIzIL-Gy2@BRXOS46Jl?<_x*UPpTxZbd<-^G_~BxZobO;mW&ePvPhA)RRrkOavLg&!VIPD{t)ae-`a|PX z!^+emrJ|t;_N1zkBJU=7zc9}87hm#bHxV+|i5|k2TB%#G%LG`MeA`A1mrRmt(*hy4 zr5f9Kdz@9#%_E)cN#n#Xm8tLM3CwB<-7lk9K{S>WmIj6A&eY2!9;C1Xh){Sgj04oD z8>rRbcHNfTx6`<0PMnpdp$l6&-m-agkC$dDF49!S8d9p%0wOdp1Sqa?(*i2mj8Bhu z{Cw=#Hjswf8<^O)o{Xo9amJ?BPm4(NAm7b;lVoj$O#@hiCQ7*%A8Tf6Gb;*(Ud3?FXNA~J*@Odxb_%I Sm)Skccl_Ww^%(I62@Bo4!MNyJJH>BtX*yJNfNwfq@vPh5;DUlE(kg^0)SuEZxfJeL! zXm%eVJU_&Wsn|(tHTFs4LyLo(>AG-CU%;(>E~(sxoysAQy;hL@j32k z|7hx_aew#D?(FRQ00CP)7NxhC-JO}8x%bZ8kGXTl*|VpZ!oUBRea!jD=ToWwOgHAg zN!&bzpO;FfQX;jG5^0gCr5Dopo2_N)*@bMHp5snBSyuT*dxZpUNIr|iT&apaX{QF4vPE4 z{o(=f9`RoBKJk9>0r5d$i60V {HEI3hkIN@7w>i4Tj9h@;||D2wA_TAUCkf3~zR z{!B_dBp!YvB_4M7-pVda;QkSD3iqeneYoE*GVb_tMtoE}`bK);9`P98&4`cT?tpko zJT9I<>RxeLJSjeo)IpJ%PfeX^|60+)za?kMt(7ZH>GJK5>VHMPpT!HS)~q-+*OKnK zbUnA>JASpX&J+G|F%~YD}o3gsH>d#n{l_~4w^ofU#ot!>-!dlw2 z{8iUFL*KQoxK6#yADXFED{jMcXRI^xXOCK*>sl8t%$}Q@KW8mBrB$bP2-kP2HGJZ2 z!t2~rIw-29(f6k^L1DdGS*y9hnCHuCW5xD2*IkctU9PpHQ+uIRbEopb{;Q3(MsuTa zk$ZJc%BBno>LwT$?y}RW`L?Pzm}s~wO~2~+ZuDeq-H~2&SD|*8|1!9l#m^hV#RoOr zN`E>nQh;}6uKo5E^qb*rF~F9qHP^Eobga?zE$1fs<}B6RvUO#(>RBzX<{0ahaBfE?SP|HCwXcT9s9|ves<**0OBYL+BEQD7&Z%{=`zNS`!TY z`1@tcdbZ{HR^3^1Ew6>f_)SZ;8rGrpO@9?=_FTWUUS8j{s`d4z^zBMb$U|riu;N

    t1EG*{of! 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 nEHj+L*$A{&Q!XN$di>w;9~Q%>X4 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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/__pycache__/languages.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/babel/__pycache__/languages.cpython-39.pyc deleted file mode 100644 index f3fd7ba780a2761c174778a9dd7dc398a53470c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3140 zcmdT`O^+Kj7@n_Wv!N|)E436jxDgUfwN1DZRx6-YE5xb?T7eW&vd-8^hMkP3wr4}C z?5QhJ4jlLgyT|?l{>z+@IC192q2hf#@nqUi+C3T}hrgCm!=oLDSNc9rNbnn+C10 zJ6JlAbLt)WKRIL9SkPGdC$&@OHpn^(mcb8ow!s>|;E4^k$(qN`GQhPbE?D^%{T|de z30!x%CVI+=7>}bcqA`hSGRf$KUsr817Sb$EqC=h#&83XAkc&>!9DM-C>~0bY#?>~7 z#)KvdLM0~$iI^wb=23E;$%Hc!B}7QZC8#5?KjaCEk_kygn#B}^ThU*Rjoy99Cy_{K zyidk4osdWo#q~C>C8cUb=F=#gt`rsf5NpNCe5-@;;h2V6{97F@#)&!5 zdb5sBhs>!=z{g&X+!LCE>9hzqqne^aRFNztS`hdEhAQKDm`TYKO%AzK5C9ApCh6AR z?XO9uI5Y9b^p)3WLB60P9(M=<#}*bV~ z)&yvfM2Sp>{92LWUP>jMtrOoP4{QyXgc~z@dXa)(cA-aGG+UBrFzMXQT1Dq{# z0k^aHvLywP5Tc^N?(LD05OGz5&ETsvFn-e{Yn`jt$zMxZ%P-6Xx3e_H9x02isQ1DM zi2>*ljeEWW=O3ES{f2F+{+4|jS|9pbR@>07<(JA34oee57XZRuh!}_-mtd$HFiikC z9<~PFk$dDVy%WHvQ}?NJ=*VE{G50Fq$k_YUdlW#&d;PbqqM_1MXR3d(=sGNcVag%t zi3Z&A0k_(I?sY!S8`g|Gz;b!!_Rm8Ri8*IRMD)!0dyn-7>0%&h!o+N#!YO2C5FKzj zRH39Ph#hnQIt~YW(P*F|&2OeOJOFf2gArD1*Q!vRbdfiA;z;RG%+lQt(Z@PWb+7JT zc>eeX!fENj`qWM=pt99&XMOYmc(EZlwhliNKZCj``!Y-ry$d#a-#D)G$YTz~%DpEy zVYTf`jCSr0^8gi^kHv(Xk#Fuyc*1{7R8tN3X#F z(;0VxawuU@h^0p*LiM_@D!^puhpv&OLOYei0HFtb0Z<1BXaiun^HT$vhcwPOpe&F8 z9s;t6^pwm5yjN6JM2`j5II|TMDH^~0khS~?{0Nh@+7u3B) z@-mYjsTKQSFo;SyJwV-nlO|RrzQ6QfJ?)rXpu6miqPs!y=Rg~&32}^&j8c(uWi(nT z09y*q2i}Dp2nyD`7sbD%yLkNy>77)<+p^+X+oXIh5w8Ud!w7I^LAGTtw^pJ5pED(x z4+P53uzbO?Hmq2I#XFIVYTe1dKUjDRBwrLZ}sLBDB8s1pJj6nYTo%#MnDqsicBV`nB<7V}-S$w)lsH?RK#O6avM diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/__pycache__/lists.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/babel/__pycache__/lists.cpython-39.pyc deleted file mode 100644 index cac130cbf399b355d1ed0e746813e3778023a1fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2696 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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/__pycache__/numbers.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/babel/__pycache__/numbers.cpython-39.pyc deleted file mode 100644 index dde685ad271c4e42c0e95788851c986fd83a8368..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32201 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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/__pycache__/units.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/babel/__pycache__/units.cpython-39.pyc deleted file mode 100644 index f9c9b1f53e5fa7bf4415c29a0507b3d4240abda3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8547 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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/__pycache__/util.cpython-39.pyc b/IKEA_scraper/.venv/Lib/site-packages/babel/__pycache__/util.cpython-39.pyc deleted file mode 100644 index 94a8e25fdcd67f5a1f628c6a9529537431fdf962..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7124 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 b) - (a < b) - - array_tobytes = array.array.tobytes - from collections import abc - -else: - text_type = unicode - string_types = (str, unicode) - integer_types = (int, long) - - text_to_native = lambda s, enc: s.encode(enc) - unichr = unichr - - iterkeys = lambda d: d.iterkeys() - itervalues = lambda d: d.itervalues() - iteritems = lambda d: d.iteritems() - - from cStringIO import StringIO as BytesIO - from StringIO import StringIO - import cPickle as pickle - - from itertools import imap - from itertools import izip - range_type = xrange - - cmp = cmp - - array_tobytes = array.array.tostring - import collections as abc - -number_types = integer_types + (float,) - - -def force_text(s, encoding='utf-8', errors='strict'): - if isinstance(s, text_type): - return s - if isinstance(s, bytes): - return s.decode(encoding, errors) - return text_type(s) - - -# -# Since Python 3.3, a fast decimal implementation is already included in the -# standard library. Otherwise use cdecimal when available -# -if sys.version_info[:2] >= (3, 3): - import decimal -else: - try: - import cdecimal as decimal - except ImportError: - import decimal diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/core.py b/IKEA_scraper/.venv/Lib/site-packages/babel/core.py deleted file mode 100644 index a323a729..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/babel/core.py +++ /dev/null @@ -1,1133 +0,0 @@ -# -*- coding: utf-8 -*- -""" - babel.core - ~~~~~~~~~~ - - Core locale representation and locale data access. - - :copyright: (c) 2013-2021 by the Babel Team. - :license: BSD, see LICENSE for more details. -""" - -import os - -from babel import localedata -from babel._compat import pickle, string_types -from babel.plural import PluralRule - -__all__ = ['UnknownLocaleError', 'Locale', 'default_locale', 'negotiate_locale', - 'parse_locale'] - - -_global_data = None -_default_plural_rule = PluralRule({}) - - -def _raise_no_data_error(): - raise RuntimeError('The babel data files are not available. ' - 'This usually happens because you are using ' - 'a source checkout from Babel and you did ' - 'not build the data files. Just make sure ' - 'to run "python setup.py import_cldr" before ' - 'installing the library.') - - -def get_global(key): - """Return the dictionary for the given key in the global data. - - The global data is stored in the ``babel/global.dat`` file and contains - information independent of individual locales. - - >>> get_global('zone_aliases')['UTC'] - u'Etc/UTC' - >>> get_global('zone_territories')['Europe/Berlin'] - u'DE' - - The keys available are: - - - ``all_currencies`` - - ``currency_fractions`` - - ``language_aliases`` - - ``likely_subtags`` - - ``parent_exceptions`` - - ``script_aliases`` - - ``territory_aliases`` - - ``territory_currencies`` - - ``territory_languages`` - - ``territory_zones`` - - ``variant_aliases`` - - ``windows_zone_mapping`` - - ``zone_aliases`` - - ``zone_territories`` - - .. note:: The internal structure of the data may change between versions. - - .. versionadded:: 0.9 - - :param key: the data key - """ - global _global_data - if _global_data is None: - dirname = os.path.join(os.path.dirname(__file__)) - filename = os.path.join(dirname, 'global.dat') - if not os.path.isfile(filename): - _raise_no_data_error() - with open(filename, 'rb') as fileobj: - _global_data = pickle.load(fileobj) - return _global_data.get(key, {}) - - -LOCALE_ALIASES = { - 'ar': 'ar_SY', 'bg': 'bg_BG', 'bs': 'bs_BA', 'ca': 'ca_ES', 'cs': 'cs_CZ', - 'da': 'da_DK', 'de': 'de_DE', 'el': 'el_GR', 'en': 'en_US', 'es': 'es_ES', - 'et': 'et_EE', 'fa': 'fa_IR', 'fi': 'fi_FI', 'fr': 'fr_FR', 'gl': 'gl_ES', - 'he': 'he_IL', 'hu': 'hu_HU', 'id': 'id_ID', 'is': 'is_IS', 'it': 'it_IT', - 'ja': 'ja_JP', 'km': 'km_KH', 'ko': 'ko_KR', 'lt': 'lt_LT', 'lv': 'lv_LV', - 'mk': 'mk_MK', 'nl': 'nl_NL', 'nn': 'nn_NO', 'no': 'nb_NO', 'pl': 'pl_PL', - 'pt': 'pt_PT', 'ro': 'ro_RO', 'ru': 'ru_RU', 'sk': 'sk_SK', 'sl': 'sl_SI', - 'sv': 'sv_SE', 'th': 'th_TH', 'tr': 'tr_TR', 'uk': 'uk_UA' -} - - -class UnknownLocaleError(Exception): - """Exception thrown when a locale is requested for which no locale data - is available. - """ - - def __init__(self, identifier): - """Create the exception. - - :param identifier: the identifier string of the unsupported locale - """ - Exception.__init__(self, 'unknown locale %r' % identifier) - - #: The identifier of the locale that could not be found. - self.identifier = identifier - - -class Locale(object): - """Representation of a specific locale. - - >>> locale = Locale('en', 'US') - >>> repr(locale) - "Locale('en', territory='US')" - >>> locale.display_name - u'English (United States)' - - A `Locale` object can also be instantiated from a raw locale string: - - >>> locale = Locale.parse('en-US', sep='-') - >>> repr(locale) - "Locale('en', territory='US')" - - `Locale` objects provide access to a collection of locale data, such as - territory and language names, number and date format patterns, and more: - - >>> locale.number_symbols['decimal'] - u'.' - - If a locale is requested for which no locale data is available, an - `UnknownLocaleError` is raised: - - >>> Locale.parse('en_XX') - Traceback (most recent call last): - ... - UnknownLocaleError: unknown locale 'en_XX' - - For more information see :rfc:`3066`. - """ - - def __init__(self, language, territory=None, script=None, variant=None): - """Initialize the locale object from the given identifier components. - - >>> locale = Locale('en', 'US') - >>> locale.language - 'en' - >>> locale.territory - 'US' - - :param language: the language code - :param territory: the territory (country or region) code - :param script: the script code - :param variant: the variant code - :raise `UnknownLocaleError`: if no locale data is available for the - requested locale - """ - #: the language code - self.language = language - #: the territory (country or region) code - self.territory = territory - #: the script code - self.script = script - #: the variant code - self.variant = variant - self.__data = None - - identifier = str(self) - if not localedata.exists(identifier): - raise UnknownLocaleError(identifier) - - @classmethod - def default(cls, category=None, aliases=LOCALE_ALIASES): - """Return the system default locale for the specified category. - - >>> for name in ['LANGUAGE', 'LC_ALL', 'LC_CTYPE', 'LC_MESSAGES']: - ... os.environ[name] = '' - >>> os.environ['LANG'] = 'fr_FR.UTF-8' - >>> Locale.default('LC_MESSAGES') - Locale('fr', territory='FR') - - The following fallbacks to the variable are always considered: - - - ``LANGUAGE`` - - ``LC_ALL`` - - ``LC_CTYPE`` - - ``LANG`` - - :param category: one of the ``LC_XXX`` environment variable names - :param aliases: a dictionary of aliases for locale identifiers - """ - # XXX: use likely subtag expansion here instead of the - # aliases dictionary. - locale_string = default_locale(category, aliases=aliases) - return cls.parse(locale_string) - - @classmethod - def negotiate(cls, preferred, available, sep='_', aliases=LOCALE_ALIASES): - """Find the best match between available and requested locale strings. - - >>> Locale.negotiate(['de_DE', 'en_US'], ['de_DE', 'de_AT']) - Locale('de', territory='DE') - >>> Locale.negotiate(['de_DE', 'en_US'], ['en', 'de']) - Locale('de') - >>> Locale.negotiate(['de_DE', 'de'], ['en_US']) - - You can specify the character used in the locale identifiers to separate - the differnet components. This separator is applied to both lists. Also, - case is ignored in the comparison: - - >>> Locale.negotiate(['de-DE', 'de'], ['en-us', 'de-de'], sep='-') - Locale('de', territory='DE') - - :param preferred: the list of locale identifers preferred by the user - :param available: the list of locale identifiers available - :param aliases: a dictionary of aliases for locale identifiers - """ - identifier = negotiate_locale(preferred, available, sep=sep, - aliases=aliases) - if identifier: - return Locale.parse(identifier, sep=sep) - - @classmethod - def parse(cls, identifier, sep='_', resolve_likely_subtags=True): - """Create a `Locale` instance for the given locale identifier. - - >>> l = Locale.parse('de-DE', sep='-') - >>> l.display_name - u'Deutsch (Deutschland)' - - If the `identifier` parameter is not a string, but actually a `Locale` - object, that object is returned: - - >>> Locale.parse(l) - Locale('de', territory='DE') - - This also can perform resolving of likely subtags which it does - by default. This is for instance useful to figure out the most - likely locale for a territory you can use ``'und'`` as the - language tag: - - >>> Locale.parse('und_AT') - Locale('de', territory='AT') - - :param identifier: the locale identifier string - :param sep: optional component separator - :param resolve_likely_subtags: if this is specified then a locale will - have its likely subtag resolved if the - locale otherwise does not exist. For - instance ``zh_TW`` by itself is not a - locale that exists but Babel can - automatically expand it to the full - form of ``zh_hant_TW``. Note that this - expansion is only taking place if no - locale exists otherwise. For instance - there is a locale ``en`` that can exist - by itself. - :raise `ValueError`: if the string does not appear to be a valid locale - identifier - :raise `UnknownLocaleError`: if no locale data is available for the - requested locale - """ - if identifier is None: - return None - elif isinstance(identifier, Locale): - return identifier - elif not isinstance(identifier, string_types): - raise TypeError('Unexpected value for identifier: %r' % (identifier,)) - - parts = parse_locale(identifier, sep=sep) - input_id = get_locale_identifier(parts) - - def _try_load(parts): - try: - return cls(*parts) - except UnknownLocaleError: - return None - - def _try_load_reducing(parts): - # Success on first hit, return it. - locale = _try_load(parts) - if locale is not None: - return locale - - # Now try without script and variant - locale = _try_load(parts[:2]) - if locale is not None: - return locale - - locale = _try_load(parts) - if locale is not None: - return locale - if not resolve_likely_subtags: - raise UnknownLocaleError(input_id) - - # From here onwards is some very bad likely subtag resolving. This - # whole logic is not entirely correct but good enough (tm) for the - # time being. This has been added so that zh_TW does not cause - # errors for people when they upgrade. Later we should properly - # implement ICU like fuzzy locale objects and provide a way to - # maximize and minimize locale tags. - - language, territory, script, variant = parts - language = get_global('language_aliases').get(language, language) - territory = get_global('territory_aliases').get(territory, (territory,))[0] - script = get_global('script_aliases').get(script, script) - variant = get_global('variant_aliases').get(variant, variant) - - if territory == 'ZZ': - territory = None - if script == 'Zzzz': - script = None - - parts = language, territory, script, variant - - # First match: try the whole identifier - new_id = get_locale_identifier(parts) - likely_subtag = get_global('likely_subtags').get(new_id) - if likely_subtag is not None: - locale = _try_load_reducing(parse_locale(likely_subtag)) - if locale is not None: - return locale - - # If we did not find anything so far, try again with a - # simplified identifier that is just the language - likely_subtag = get_global('likely_subtags').get(language) - if likely_subtag is not None: - language2, _, script2, variant2 = parse_locale(likely_subtag) - locale = _try_load_reducing((language2, territory, script2, variant2)) - if locale is not None: - return locale - - raise UnknownLocaleError(input_id) - - def __eq__(self, other): - for key in ('language', 'territory', 'script', 'variant'): - if not hasattr(other, key): - return False - return (self.language == other.language) and \ - (self.territory == other.territory) and \ - (self.script == other.script) and \ - (self.variant == other.variant) - - def __ne__(self, other): - return not self.__eq__(other) - - def __hash__(self): - return hash((self.language, self.territory, self.script, self.variant)) - - def __repr__(self): - parameters = [''] - for key in ('territory', 'script', 'variant'): - value = getattr(self, key) - if value is not None: - parameters.append('%s=%r' % (key, value)) - parameter_string = '%r' % self.language + ', '.join(parameters) - return 'Locale(%s)' % parameter_string - - def __str__(self): - return get_locale_identifier((self.language, self.territory, - self.script, self.variant)) - - @property - def _data(self): - if self.__data is None: - self.__data = localedata.LocaleDataDict(localedata.load(str(self))) - return self.__data - - def get_display_name(self, locale=None): - """Return the display name of the locale using the given locale. - - The display name will include the language, territory, script, and - variant, if those are specified. - - >>> Locale('zh', 'CN', script='Hans').get_display_name('en') - u'Chinese (Simplified, China)' - - :param locale: the locale to use - """ - if locale is None: - locale = self - locale = Locale.parse(locale) - retval = locale.languages.get(self.language) - if retval and (self.territory or self.script or self.variant): - details = [] - if self.script: - details.append(locale.scripts.get(self.script)) - if self.territory: - details.append(locale.territories.get(self.territory)) - if self.variant: - details.append(locale.variants.get(self.variant)) - details = filter(None, details) - if details: - retval += ' (%s)' % u', '.join(details) - return retval - - display_name = property(get_display_name, doc="""\ - The localized display name of the locale. - - >>> Locale('en').display_name - u'English' - >>> Locale('en', 'US').display_name - u'English (United States)' - >>> Locale('sv').display_name - u'svenska' - - :type: `unicode` - """) - - def get_language_name(self, locale=None): - """Return the language of this locale in the given locale. - - >>> Locale('zh', 'CN', script='Hans').get_language_name('de') - u'Chinesisch' - - .. versionadded:: 1.0 - - :param locale: the locale to use - """ - if locale is None: - locale = self - locale = Locale.parse(locale) - return locale.languages.get(self.language) - - language_name = property(get_language_name, doc="""\ - The localized language name of the locale. - - >>> Locale('en', 'US').language_name - u'English' - """) - - def get_territory_name(self, locale=None): - """Return the territory name in the given locale.""" - if locale is None: - locale = self - locale = Locale.parse(locale) - return locale.territories.get(self.territory) - - territory_name = property(get_territory_name, doc="""\ - The localized territory name of the locale if available. - - >>> Locale('de', 'DE').territory_name - u'Deutschland' - """) - - def get_script_name(self, locale=None): - """Return the script name in the given locale.""" - if locale is None: - locale = self - locale = Locale.parse(locale) - return locale.scripts.get(self.script) - - script_name = property(get_script_name, doc="""\ - The localized script name of the locale if available. - - >>> Locale('sr', 'ME', script='Latn').script_name - u'latinica' - """) - - @property - def english_name(self): - """The english display name of the locale. - - >>> Locale('de').english_name - u'German' - >>> Locale('de', 'DE').english_name - u'German (Germany)' - - :type: `unicode`""" - return self.get_display_name(Locale('en')) - - # { General Locale Display Names - - @property - def languages(self): - """Mapping of language codes to translated language names. - - >>> Locale('de', 'DE').languages['ja'] - u'Japanisch' - - See `ISO 639 `_ for - more information. - """ - return self._data['languages'] - - @property - def scripts(self): - """Mapping of script codes to translated script names. - - >>> Locale('en', 'US').scripts['Hira'] - u'Hiragana' - - See `ISO 15924 `_ - for more information. - """ - return self._data['scripts'] - - @property - def territories(self): - """Mapping of script codes to translated script names. - - >>> Locale('es', 'CO').territories['DE'] - u'Alemania' - - See `ISO 3166 `_ - for more information. - """ - return self._data['territories'] - - @property - def variants(self): - """Mapping of script codes to translated script names. - - >>> Locale('de', 'DE').variants['1901'] - u'Alte deutsche Rechtschreibung' - """ - return self._data['variants'] - - # { Number Formatting - - @property - def currencies(self): - """Mapping of currency codes to translated currency names. This - only returns the generic form of the currency name, not the count - specific one. If an actual number is requested use the - :func:`babel.numbers.get_currency_name` function. - - >>> Locale('en').currencies['COP'] - u'Colombian Peso' - >>> Locale('de', 'DE').currencies['COP'] - u'Kolumbianischer Peso' - """ - return self._data['currency_names'] - - @property - def currency_symbols(self): - """Mapping of currency codes to symbols. - - >>> Locale('en', 'US').currency_symbols['USD'] - u'$' - >>> Locale('es', 'CO').currency_symbols['USD'] - u'US$' - """ - return self._data['currency_symbols'] - - @property - def number_symbols(self): - """Symbols used in number formatting. - - .. note:: The format of the value returned may change between - Babel versions. - - >>> Locale('fr', 'FR').number_symbols['decimal'] - u',' - """ - return self._data['number_symbols'] - - @property - def decimal_formats(self): - """Locale patterns for decimal number formatting. - - .. note:: The format of the value returned may change between - Babel versions. - - >>> Locale('en', 'US').decimal_formats[None] - - """ - return self._data['decimal_formats'] - - @property - def currency_formats(self): - """Locale patterns for currency number formatting. - - .. note:: The format of the value returned may change between - Babel versions. - - >>> Locale('en', 'US').currency_formats['standard'] - - >>> Locale('en', 'US').currency_formats['accounting'] - - """ - return self._data['currency_formats'] - - @property - def percent_formats(self): - """Locale patterns for percent number formatting. - - .. note:: The format of the value returned may change between - Babel versions. - - >>> Locale('en', 'US').percent_formats[None] - - """ - return self._data['percent_formats'] - - @property - def scientific_formats(self): - """Locale patterns for scientific number formatting. - - .. note:: The format of the value returned may change between - Babel versions. - - >>> Locale('en', 'US').scientific_formats[None] - - """ - return self._data['scientific_formats'] - - # { Calendar Information and Date Formatting - - @property - def periods(self): - """Locale display names for day periods (AM/PM). - - >>> Locale('en', 'US').periods['am'] - u'AM' - """ - try: - return self._data['day_periods']['stand-alone']['wide'] - except KeyError: - return {} - - @property - def day_periods(self): - """Locale display names for various day periods (not necessarily only AM/PM). - - These are not meant to be used without the relevant `day_period_rules`. - """ - return self._data['day_periods'] - - @property - def day_period_rules(self): - """Day period rules for the locale. Used by `get_period_id`. - """ - return self._data.get('day_period_rules', {}) - - @property - def days(self): - """Locale display names for weekdays. - - >>> Locale('de', 'DE').days['format']['wide'][3] - u'Donnerstag' - """ - return self._data['days'] - - @property - def months(self): - """Locale display names for months. - - >>> Locale('de', 'DE').months['format']['wide'][10] - u'Oktober' - """ - return self._data['months'] - - @property - def quarters(self): - """Locale display names for quarters. - - >>> Locale('de', 'DE').quarters['format']['wide'][1] - u'1. Quartal' - """ - return self._data['quarters'] - - @property - def eras(self): - """Locale display names for eras. - - .. note:: The format of the value returned may change between - Babel versions. - - >>> Locale('en', 'US').eras['wide'][1] - u'Anno Domini' - >>> Locale('en', 'US').eras['abbreviated'][0] - u'BC' - """ - return self._data['eras'] - - @property - def time_zones(self): - """Locale display names for time zones. - - .. note:: The format of the value returned may change between - Babel versions. - - >>> Locale('en', 'US').time_zones['Europe/London']['long']['daylight'] - u'British Summer Time' - >>> Locale('en', 'US').time_zones['America/St_Johns']['city'] - u'St. John\u2019s' - """ - return self._data['time_zones'] - - @property - def meta_zones(self): - """Locale display names for meta time zones. - - Meta time zones are basically groups of different Olson time zones that - have the same GMT offset and daylight savings time. - - .. note:: The format of the value returned may change between - Babel versions. - - >>> Locale('en', 'US').meta_zones['Europe_Central']['long']['daylight'] - u'Central European Summer Time' - - .. versionadded:: 0.9 - """ - return self._data['meta_zones'] - - @property - def zone_formats(self): - """Patterns related to the formatting of time zones. - - .. note:: The format of the value returned may change between - Babel versions. - - >>> Locale('en', 'US').zone_formats['fallback'] - u'%(1)s (%(0)s)' - >>> Locale('pt', 'BR').zone_formats['region'] - u'Hor\\xe1rio %s' - - .. versionadded:: 0.9 - """ - return self._data['zone_formats'] - - @property - def first_week_day(self): - """The first day of a week, with 0 being Monday. - - >>> Locale('de', 'DE').first_week_day - 0 - >>> Locale('en', 'US').first_week_day - 6 - """ - return self._data['week_data']['first_day'] - - @property - def weekend_start(self): - """The day the weekend starts, with 0 being Monday. - - >>> Locale('de', 'DE').weekend_start - 5 - """ - return self._data['week_data']['weekend_start'] - - @property - def weekend_end(self): - """The day the weekend ends, with 0 being Monday. - - >>> Locale('de', 'DE').weekend_end - 6 - """ - return self._data['week_data']['weekend_end'] - - @property - def min_week_days(self): - """The minimum number of days in a week so that the week is counted as - the first week of a year or month. - - >>> Locale('de', 'DE').min_week_days - 4 - """ - return self._data['week_data']['min_days'] - - @property - def date_formats(self): - """Locale patterns for date formatting. - - .. note:: The format of the value returned may change between - Babel versions. - - >>> Locale('en', 'US').date_formats['short'] - - >>> Locale('fr', 'FR').date_formats['long'] - - """ - return self._data['date_formats'] - - @property - def time_formats(self): - """Locale patterns for time formatting. - - .. note:: The format of the value returned may change between - Babel versions. - - >>> Locale('en', 'US').time_formats['short'] - - >>> Locale('fr', 'FR').time_formats['long'] - - """ - return self._data['time_formats'] - - @property - def datetime_formats(self): - """Locale patterns for datetime formatting. - - .. note:: The format of the value returned may change between - Babel versions. - - >>> Locale('en').datetime_formats['full'] - u"{1} 'at' {0}" - >>> Locale('th').datetime_formats['medium'] - u'{1} {0}' - """ - return self._data['datetime_formats'] - - @property - def datetime_skeletons(self): - """Locale patterns for formatting parts of a datetime. - - >>> Locale('en').datetime_skeletons['MEd'] - - >>> Locale('fr').datetime_skeletons['MEd'] - - >>> Locale('fr').datetime_skeletons['H'] - - """ - return self._data['datetime_skeletons'] - - @property - def interval_formats(self): - """Locale patterns for interval formatting. - - .. note:: The format of the value returned may change between - Babel versions. - - How to format date intervals in Finnish when the day is the - smallest changing component: - - >>> Locale('fi_FI').interval_formats['MEd']['d'] - [u'E d. \u2013 ', u'E d.M.'] - - .. seealso:: - - The primary API to use this data is :py:func:`babel.dates.format_interval`. - - - :rtype: dict[str, dict[str, list[str]]] - """ - return self._data['interval_formats'] - - @property - def plural_form(self): - """Plural rules for the locale. - - >>> Locale('en').plural_form(1) - 'one' - >>> Locale('en').plural_form(0) - 'other' - >>> Locale('fr').plural_form(0) - 'one' - >>> Locale('ru').plural_form(100) - 'many' - """ - return self._data.get('plural_form', _default_plural_rule) - - @property - def list_patterns(self): - """Patterns for generating lists - - .. note:: The format of the value returned may change between - Babel versions. - - >>> Locale('en').list_patterns['standard']['start'] - u'{0}, {1}' - >>> Locale('en').list_patterns['standard']['end'] - u'{0}, and {1}' - >>> Locale('en_GB').list_patterns['standard']['end'] - u'{0} and {1}' - """ - return self._data['list_patterns'] - - @property - def ordinal_form(self): - """Plural rules for the locale. - - >>> Locale('en').ordinal_form(1) - 'one' - >>> Locale('en').ordinal_form(2) - 'two' - >>> Locale('en').ordinal_form(3) - 'few' - >>> Locale('fr').ordinal_form(2) - 'other' - >>> Locale('ru').ordinal_form(100) - 'other' - """ - return self._data.get('ordinal_form', _default_plural_rule) - - @property - def measurement_systems(self): - """Localized names for various measurement systems. - - >>> Locale('fr', 'FR').measurement_systems['US'] - u'am\\xe9ricain' - >>> Locale('en', 'US').measurement_systems['US'] - u'US' - - """ - return self._data['measurement_systems'] - - @property - def character_order(self): - """The text direction for the language. - - >>> Locale('de', 'DE').character_order - 'left-to-right' - >>> Locale('ar', 'SA').character_order - 'right-to-left' - """ - return self._data['character_order'] - - @property - def text_direction(self): - """The text direction for the language in CSS short-hand form. - - >>> Locale('de', 'DE').text_direction - 'ltr' - >>> Locale('ar', 'SA').text_direction - 'rtl' - """ - return ''.join(word[0] for word in self.character_order.split('-')) - - @property - def unit_display_names(self): - """Display names for units of measurement. - - .. seealso:: - - You may want to use :py:func:`babel.units.get_unit_name` instead. - - .. note:: The format of the value returned may change between - Babel versions. - - """ - return self._data['unit_display_names'] - - -def default_locale(category=None, aliases=LOCALE_ALIASES): - """Returns the system default locale for a given category, based on - environment variables. - - >>> for name in ['LANGUAGE', 'LC_ALL', 'LC_CTYPE']: - ... os.environ[name] = '' - >>> os.environ['LANG'] = 'fr_FR.UTF-8' - >>> default_locale('LC_MESSAGES') - 'fr_FR' - - The "C" or "POSIX" pseudo-locales are treated as aliases for the - "en_US_POSIX" locale: - - >>> os.environ['LC_MESSAGES'] = 'POSIX' - >>> default_locale('LC_MESSAGES') - 'en_US_POSIX' - - The following fallbacks to the variable are always considered: - - - ``LANGUAGE`` - - ``LC_ALL`` - - ``LC_CTYPE`` - - ``LANG`` - - :param category: one of the ``LC_XXX`` environment variable names - :param aliases: a dictionary of aliases for locale identifiers - """ - varnames = (category, 'LANGUAGE', 'LC_ALL', 'LC_CTYPE', 'LANG') - for name in filter(None, varnames): - locale = os.getenv(name) - if locale: - if name == 'LANGUAGE' and ':' in locale: - # the LANGUAGE variable may contain a colon-separated list of - # language codes; we just pick the language on the list - locale = locale.split(':')[0] - if locale.split('.')[0] in ('C', 'POSIX'): - locale = 'en_US_POSIX' - elif aliases and locale in aliases: - locale = aliases[locale] - try: - return get_locale_identifier(parse_locale(locale)) - except ValueError: - pass - - -def negotiate_locale(preferred, available, sep='_', aliases=LOCALE_ALIASES): - """Find the best match between available and requested locale strings. - - >>> negotiate_locale(['de_DE', 'en_US'], ['de_DE', 'de_AT']) - 'de_DE' - >>> negotiate_locale(['de_DE', 'en_US'], ['en', 'de']) - 'de' - - Case is ignored by the algorithm, the result uses the case of the preferred - locale identifier: - - >>> negotiate_locale(['de_DE', 'en_US'], ['de_de', 'de_at']) - 'de_DE' - - >>> negotiate_locale(['de_DE', 'en_US'], ['de_de', 'de_at']) - 'de_DE' - - By default, some web browsers unfortunately do not include the territory - in the locale identifier for many locales, and some don't even allow the - user to easily add the territory. So while you may prefer using qualified - locale identifiers in your web-application, they would not normally match - the language-only locale sent by such browsers. To workaround that, this - function uses a default mapping of commonly used langauge-only locale - identifiers to identifiers including the territory: - - >>> negotiate_locale(['ja', 'en_US'], ['ja_JP', 'en_US']) - 'ja_JP' - - Some browsers even use an incorrect or outdated language code, such as "no" - for Norwegian, where the correct locale identifier would actually be "nb_NO" - (Bokmål) or "nn_NO" (Nynorsk). The aliases are intended to take care of - such cases, too: - - >>> negotiate_locale(['no', 'sv'], ['nb_NO', 'sv_SE']) - 'nb_NO' - - You can override this default mapping by passing a different `aliases` - dictionary to this function, or you can bypass the behavior althogher by - setting the `aliases` parameter to `None`. - - :param preferred: the list of locale strings preferred by the user - :param available: the list of locale strings available - :param sep: character that separates the different parts of the locale - strings - :param aliases: a dictionary of aliases for locale identifiers - """ - available = [a.lower() for a in available if a] - for locale in preferred: - ll = locale.lower() - if ll in available: - return locale - if aliases: - alias = aliases.get(ll) - if alias: - alias = alias.replace('_', sep) - if alias.lower() in available: - return alias - parts = locale.split(sep) - if len(parts) > 1 and parts[0].lower() in available: - return parts[0] - return None - - -def parse_locale(identifier, sep='_'): - """Parse a locale identifier into a tuple of the form ``(language, - territory, script, variant)``. - - >>> parse_locale('zh_CN') - ('zh', 'CN', None, None) - >>> parse_locale('zh_Hans_CN') - ('zh', 'CN', 'Hans', None) - - The default component separator is "_", but a different separator can be - specified using the `sep` parameter: - - >>> parse_locale('zh-CN', sep='-') - ('zh', 'CN', None, None) - - If the identifier cannot be parsed into a locale, a `ValueError` exception - is raised: - - >>> parse_locale('not_a_LOCALE_String') - Traceback (most recent call last): - ... - ValueError: 'not_a_LOCALE_String' is not a valid locale identifier - - Encoding information and locale modifiers are removed from the identifier: - - >>> parse_locale('it_IT@euro') - ('it', 'IT', None, None) - >>> parse_locale('en_US.UTF-8') - ('en', 'US', None, None) - >>> parse_locale('de_DE.iso885915@euro') - ('de', 'DE', None, None) - - See :rfc:`4646` for more information. - - :param identifier: the locale identifier string - :param sep: character that separates the different components of the locale - identifier - :raise `ValueError`: if the string does not appear to be a valid locale - identifier - """ - if '.' in identifier: - # this is probably the charset/encoding, which we don't care about - identifier = identifier.split('.', 1)[0] - if '@' in identifier: - # this is a locale modifier such as @euro, which we don't care about - # either - identifier = identifier.split('@', 1)[0] - - parts = identifier.split(sep) - lang = parts.pop(0).lower() - if not lang.isalpha(): - raise ValueError('expected only letters, got %r' % lang) - - script = territory = variant = None - if parts: - if len(parts[0]) == 4 and parts[0].isalpha(): - script = parts.pop(0).title() - - if parts: - if len(parts[0]) == 2 and parts[0].isalpha(): - territory = parts.pop(0).upper() - elif len(parts[0]) == 3 and parts[0].isdigit(): - territory = parts.pop(0) - - if parts: - if len(parts[0]) == 4 and parts[0][0].isdigit() or \ - len(parts[0]) >= 5 and parts[0][0].isalpha(): - variant = parts.pop() - - if parts: - raise ValueError('%r is not a valid locale identifier' % identifier) - - return lang, territory, script, variant - - -def get_locale_identifier(tup, sep='_'): - """The reverse of :func:`parse_locale`. It creates a locale identifier out - of a ``(language, territory, script, variant)`` tuple. Items can be set to - ``None`` and trailing ``None``\\s can also be left out of the tuple. - - >>> get_locale_identifier(('de', 'DE', None, '1999')) - 'de_DE_1999' - - .. versionadded:: 1.0 - - :param tup: the tuple as returned by :func:`parse_locale`. - :param sep: the separator for the identifier. - """ - tup = tuple(tup[:4]) - lang, territory, script, variant = tup + (None,) * (4 - len(tup)) - return sep.join(filter(None, (lang, script, territory, variant))) diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/dates.py b/IKEA_scraper/.venv/Lib/site-packages/babel/dates.py deleted file mode 100644 index 75e8f350..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/babel/dates.py +++ /dev/null @@ -1,1796 +0,0 @@ -# -*- coding: utf-8 -*- -""" - babel.dates - ~~~~~~~~~~~ - - Locale dependent formatting and parsing of dates and times. - - The default locale for the functions in this module is determined by the - following environment variables, in that order: - - * ``LC_TIME``, - * ``LC_ALL``, and - * ``LANG`` - - :copyright: (c) 2013-2021 by the Babel Team. - :license: BSD, see LICENSE for more details. -""" - -from __future__ import division - -import re -import warnings -import pytz as _pytz - -from datetime import date, datetime, time, timedelta -from bisect import bisect_right - -from babel.core import default_locale, get_global, Locale -from babel.util import UTC, LOCALTZ -from babel._compat import string_types, integer_types, number_types, PY2 - -# "If a given short metazone form is known NOT to be understood in a given -# locale and the parent locale has this value such that it would normally -# be inherited, the inheritance of this value can be explicitly disabled by -# use of the 'no inheritance marker' as the value, which is 3 simultaneous [sic] -# empty set characters ( U+2205 )." -# - https://www.unicode.org/reports/tr35/tr35-dates.html#Metazone_Names - -NO_INHERITANCE_MARKER = u'\u2205\u2205\u2205' - - -LC_TIME = default_locale('LC_TIME') - -# Aliases for use in scopes where the modules are shadowed by local variables -date_ = date -datetime_ = datetime -time_ = time - - -def _get_dt_and_tzinfo(dt_or_tzinfo): - """ - Parse a `dt_or_tzinfo` value into a datetime and a tzinfo. - - See the docs for this function's callers for semantics. - - :rtype: tuple[datetime, tzinfo] - """ - if dt_or_tzinfo is None: - dt = datetime.now() - tzinfo = LOCALTZ - elif isinstance(dt_or_tzinfo, string_types): - dt = None - tzinfo = get_timezone(dt_or_tzinfo) - elif isinstance(dt_or_tzinfo, integer_types): - dt = None - tzinfo = UTC - elif isinstance(dt_or_tzinfo, (datetime, time)): - dt = _get_datetime(dt_or_tzinfo) - if dt.tzinfo is not None: - tzinfo = dt.tzinfo - else: - tzinfo = UTC - else: - dt = None - tzinfo = dt_or_tzinfo - return dt, tzinfo - - -def _get_tz_name(dt_or_tzinfo): - """ - Get the timezone name out of a time, datetime, or tzinfo object. - - :rtype: str - """ - dt, tzinfo = _get_dt_and_tzinfo(dt_or_tzinfo) - if hasattr(tzinfo, 'zone'): # pytz object - return tzinfo.zone - elif hasattr(tzinfo, 'key') and tzinfo.key is not None: # ZoneInfo object - return tzinfo.key - else: - return tzinfo.tzname(dt or datetime.utcnow()) - - -def _get_datetime(instant): - """ - Get a datetime out of an "instant" (date, time, datetime, number). - - .. warning:: The return values of this function may depend on the system clock. - - If the instant is None, the current moment is used. - If the instant is a time, it's augmented with today's date. - - Dates are converted to naive datetimes with midnight as the time component. - - >>> _get_datetime(date(2015, 1, 1)) - datetime.datetime(2015, 1, 1, 0, 0) - - UNIX timestamps are converted to datetimes. - - >>> _get_datetime(1400000000) - datetime.datetime(2014, 5, 13, 16, 53, 20) - - Other values are passed through as-is. - - >>> x = datetime(2015, 1, 1) - >>> _get_datetime(x) is x - True - - :param instant: date, time, datetime, integer, float or None - :type instant: date|time|datetime|int|float|None - :return: a datetime - :rtype: datetime - """ - if instant is None: - return datetime_.utcnow() - elif isinstance(instant, integer_types) or isinstance(instant, float): - return datetime_.utcfromtimestamp(instant) - elif isinstance(instant, time): - return datetime_.combine(date.today(), instant) - elif isinstance(instant, date) and not isinstance(instant, datetime): - return datetime_.combine(instant, time()) - # TODO (3.x): Add an assertion/type check for this fallthrough branch: - return instant - - -def _ensure_datetime_tzinfo(datetime, tzinfo=None): - """ - Ensure the datetime passed has an attached tzinfo. - - If the datetime is tz-naive to begin with, UTC is attached. - - If a tzinfo is passed in, the datetime is normalized to that timezone. - - >>> _ensure_datetime_tzinfo(datetime(2015, 1, 1)).tzinfo.zone - 'UTC' - - >>> tz = get_timezone("Europe/Stockholm") - >>> _ensure_datetime_tzinfo(datetime(2015, 1, 1, 13, 15, tzinfo=UTC), tzinfo=tz).hour - 14 - - :param datetime: Datetime to augment. - :param tzinfo: Optional tznfo. - :return: datetime with tzinfo - :rtype: datetime - """ - if datetime.tzinfo is None: - datetime = datetime.replace(tzinfo=UTC) - if tzinfo is not None: - datetime = datetime.astimezone(get_timezone(tzinfo)) - if hasattr(tzinfo, 'normalize'): # pytz - datetime = tzinfo.normalize(datetime) - return datetime - - -def _get_time(time, tzinfo=None): - """ - Get a timezoned time from a given instant. - - .. warning:: The return values of this function may depend on the system clock. - - :param time: time, datetime or None - :rtype: time - """ - if time is None: - time = datetime.utcnow() - elif isinstance(time, number_types): - time = datetime.utcfromtimestamp(time) - if time.tzinfo is None: - time = time.replace(tzinfo=UTC) - if isinstance(time, datetime): - if tzinfo is not None: - time = time.astimezone(tzinfo) - if hasattr(tzinfo, 'normalize'): # pytz - time = tzinfo.normalize(time) - time = time.timetz() - elif tzinfo is not None: - time = time.replace(tzinfo=tzinfo) - return time - - -def get_timezone(zone=None): - """Looks up a timezone by name and returns it. The timezone object - returned comes from ``pytz`` and corresponds to the `tzinfo` interface and - can be used with all of the functions of Babel that operate with dates. - - If a timezone is not known a :exc:`LookupError` is raised. If `zone` - is ``None`` a local zone object is returned. - - :param zone: the name of the timezone to look up. If a timezone object - itself is passed in, mit's returned unchanged. - """ - if zone is None: - return LOCALTZ - if not isinstance(zone, string_types): - return zone - try: - return _pytz.timezone(zone) - except _pytz.UnknownTimeZoneError: - raise LookupError('Unknown timezone %s' % zone) - - -def get_next_timezone_transition(zone=None, dt=None): - """Given a timezone it will return a :class:`TimezoneTransition` object - that holds the information about the next timezone transition that's going - to happen. For instance this can be used to detect when the next DST - change is going to happen and how it looks like. - - The transition is calculated relative to the given datetime object. The - next transition that follows the date is used. If a transition cannot - be found the return value will be `None`. - - Transition information can only be provided for timezones returned by - the :func:`get_timezone` function. - - :param zone: the timezone for which the transition should be looked up. - If not provided the local timezone is used. - :param dt: the date after which the next transition should be found. - If not given the current time is assumed. - """ - zone = get_timezone(zone) - dt = _get_datetime(dt).replace(tzinfo=None) - - if not hasattr(zone, '_utc_transition_times'): - raise TypeError('Given timezone does not have UTC transition ' - 'times. This can happen because the operating ' - 'system fallback local timezone is used or a ' - 'custom timezone object') - - try: - idx = max(0, bisect_right(zone._utc_transition_times, dt)) - old_trans = zone._transition_info[idx - 1] - new_trans = zone._transition_info[idx] - old_tz = zone._tzinfos[old_trans] - new_tz = zone._tzinfos[new_trans] - except (LookupError, ValueError): - return None - - return TimezoneTransition( - activates=zone._utc_transition_times[idx], - from_tzinfo=old_tz, - to_tzinfo=new_tz, - reference_date=dt - ) - - -class TimezoneTransition(object): - """A helper object that represents the return value from - :func:`get_next_timezone_transition`. - """ - - def __init__(self, activates, from_tzinfo, to_tzinfo, reference_date=None): - #: the time of the activation of the timezone transition in UTC. - self.activates = activates - #: the timezone from where the transition starts. - self.from_tzinfo = from_tzinfo - #: the timezone for after the transition. - self.to_tzinfo = to_tzinfo - #: the reference date that was provided. This is the `dt` parameter - #: to the :func:`get_next_timezone_transition`. - self.reference_date = reference_date - - @property - def from_tz(self): - """The name of the timezone before the transition.""" - return self.from_tzinfo._tzname - - @property - def to_tz(self): - """The name of the timezone after the transition.""" - return self.to_tzinfo._tzname - - @property - def from_offset(self): - """The UTC offset in seconds before the transition.""" - return int(self.from_tzinfo._utcoffset.total_seconds()) - - @property - def to_offset(self): - """The UTC offset in seconds after the transition.""" - return int(self.to_tzinfo._utcoffset.total_seconds()) - - def __repr__(self): - return ' %s (%s)>' % ( - self.from_tz, - self.to_tz, - self.activates, - ) - - -def get_period_names(width='wide', context='stand-alone', locale=LC_TIME): - """Return the names for day periods (AM/PM) used by the locale. - - >>> get_period_names(locale='en_US')['am'] - u'AM' - - :param width: the width to use, one of "abbreviated", "narrow", or "wide" - :param context: the context, either "format" or "stand-alone" - :param locale: the `Locale` object, or a locale string - """ - return Locale.parse(locale).day_periods[context][width] - - -def get_day_names(width='wide', context='format', locale=LC_TIME): - """Return the day names used by the locale for the specified format. - - >>> get_day_names('wide', locale='en_US')[1] - u'Tuesday' - >>> get_day_names('short', locale='en_US')[1] - u'Tu' - >>> get_day_names('abbreviated', locale='es')[1] - u'mar.' - >>> get_day_names('narrow', context='stand-alone', locale='de_DE')[1] - u'D' - - :param width: the width to use, one of "wide", "abbreviated", "short" or "narrow" - :param context: the context, either "format" or "stand-alone" - :param locale: the `Locale` object, or a locale string - """ - return Locale.parse(locale).days[context][width] - - -def get_month_names(width='wide', context='format', locale=LC_TIME): - """Return the month names used by the locale for the specified format. - - >>> get_month_names('wide', locale='en_US')[1] - u'January' - >>> get_month_names('abbreviated', locale='es')[1] - u'ene.' - >>> get_month_names('narrow', context='stand-alone', locale='de_DE')[1] - u'J' - - :param width: the width to use, one of "wide", "abbreviated", or "narrow" - :param context: the context, either "format" or "stand-alone" - :param locale: the `Locale` object, or a locale string - """ - return Locale.parse(locale).months[context][width] - - -def get_quarter_names(width='wide', context='format', locale=LC_TIME): - """Return the quarter names used by the locale for the specified format. - - >>> get_quarter_names('wide', locale='en_US')[1] - u'1st quarter' - >>> get_quarter_names('abbreviated', locale='de_DE')[1] - u'Q1' - >>> get_quarter_names('narrow', locale='de_DE')[1] - u'1' - - :param width: the width to use, one of "wide", "abbreviated", or "narrow" - :param context: the context, either "format" or "stand-alone" - :param locale: the `Locale` object, or a locale string - """ - return Locale.parse(locale).quarters[context][width] - - -def get_era_names(width='wide', locale=LC_TIME): - """Return the era names used by the locale for the specified format. - - >>> get_era_names('wide', locale='en_US')[1] - u'Anno Domini' - >>> get_era_names('abbreviated', locale='de_DE')[1] - u'n. Chr.' - - :param width: the width to use, either "wide", "abbreviated", or "narrow" - :param locale: the `Locale` object, or a locale string - """ - return Locale.parse(locale).eras[width] - - -def get_date_format(format='medium', locale=LC_TIME): - """Return the date formatting patterns used by the locale for the specified - format. - - >>> get_date_format(locale='en_US') - - >>> get_date_format('full', locale='de_DE') - - - :param format: the format to use, one of "full", "long", "medium", or - "short" - :param locale: the `Locale` object, or a locale string - """ - return Locale.parse(locale).date_formats[format] - - -def get_datetime_format(format='medium', locale=LC_TIME): - """Return the datetime formatting patterns used by the locale for the - specified format. - - >>> get_datetime_format(locale='en_US') - u'{1}, {0}' - - :param format: the format to use, one of "full", "long", "medium", or - "short" - :param locale: the `Locale` object, or a locale string - """ - patterns = Locale.parse(locale).datetime_formats - if format not in patterns: - format = None - return patterns[format] - - -def get_time_format(format='medium', locale=LC_TIME): - """Return the time formatting patterns used by the locale for the specified - format. - - >>> get_time_format(locale='en_US') - - >>> get_time_format('full', locale='de_DE') - - - :param format: the format to use, one of "full", "long", "medium", or - "short" - :param locale: the `Locale` object, or a locale string - """ - return Locale.parse(locale).time_formats[format] - - -def get_timezone_gmt(datetime=None, width='long', locale=LC_TIME, return_z=False): - """Return the timezone associated with the given `datetime` object formatted - as string indicating the offset from GMT. - - >>> dt = datetime(2007, 4, 1, 15, 30) - >>> get_timezone_gmt(dt, locale='en') - u'GMT+00:00' - >>> get_timezone_gmt(dt, locale='en', return_z=True) - 'Z' - >>> get_timezone_gmt(dt, locale='en', width='iso8601_short') - u'+00' - >>> tz = get_timezone('America/Los_Angeles') - >>> dt = tz.localize(datetime(2007, 4, 1, 15, 30)) - >>> get_timezone_gmt(dt, locale='en') - u'GMT-07:00' - >>> get_timezone_gmt(dt, 'short', locale='en') - u'-0700' - >>> get_timezone_gmt(dt, locale='en', width='iso8601_short') - u'-07' - - The long format depends on the locale, for example in France the acronym - UTC string is used instead of GMT: - - >>> get_timezone_gmt(dt, 'long', locale='fr_FR') - u'UTC-07:00' - - .. versionadded:: 0.9 - - :param datetime: the ``datetime`` object; if `None`, the current date and - time in UTC is used - :param width: either "long" or "short" or "iso8601" or "iso8601_short" - :param locale: the `Locale` object, or a locale string - :param return_z: True or False; Function returns indicator "Z" - when local time offset is 0 - """ - datetime = _ensure_datetime_tzinfo(_get_datetime(datetime)) - locale = Locale.parse(locale) - - offset = datetime.tzinfo.utcoffset(datetime) - seconds = offset.days * 24 * 60 * 60 + offset.seconds - hours, seconds = divmod(seconds, 3600) - if return_z and hours == 0 and seconds == 0: - return 'Z' - elif seconds == 0 and width == 'iso8601_short': - return u'%+03d' % hours - elif width == 'short' or width == 'iso8601_short': - pattern = u'%+03d%02d' - elif width == 'iso8601': - pattern = u'%+03d:%02d' - else: - pattern = locale.zone_formats['gmt'] % '%+03d:%02d' - return pattern % (hours, seconds // 60) - - -def get_timezone_location(dt_or_tzinfo=None, locale=LC_TIME, return_city=False): - u"""Return a representation of the given timezone using "location format". - - The result depends on both the local display name of the country and the - city associated with the time zone: - - >>> tz = get_timezone('America/St_Johns') - >>> print(get_timezone_location(tz, locale='de_DE')) - Kanada (St. John’s) Zeit - >>> print(get_timezone_location(tz, locale='en')) - Canada (St. John’s) Time - >>> print(get_timezone_location(tz, locale='en', return_city=True)) - St. John’s - >>> tz = get_timezone('America/Mexico_City') - >>> get_timezone_location(tz, locale='de_DE') - u'Mexiko (Mexiko-Stadt) Zeit' - - If the timezone is associated with a country that uses only a single - timezone, just the localized country name is returned: - - >>> tz = get_timezone('Europe/Berlin') - >>> get_timezone_name(tz, locale='de_DE') - u'Mitteleurop\\xe4ische Zeit' - - .. versionadded:: 0.9 - - :param dt_or_tzinfo: the ``datetime`` or ``tzinfo`` object that determines - the timezone; if `None`, the current date and time in - UTC is assumed - :param locale: the `Locale` object, or a locale string - :param return_city: True or False, if True then return exemplar city (location) - for the time zone - :return: the localized timezone name using location format - - """ - locale = Locale.parse(locale) - - zone = _get_tz_name(dt_or_tzinfo) - - # Get the canonical time-zone code - zone = get_global('zone_aliases').get(zone, zone) - - info = locale.time_zones.get(zone, {}) - - # Otherwise, if there is only one timezone for the country, return the - # localized country name - region_format = locale.zone_formats['region'] - territory = get_global('zone_territories').get(zone) - if territory not in locale.territories: - territory = 'ZZ' # invalid/unknown - territory_name = locale.territories[territory] - if not return_city and territory and len(get_global('territory_zones').get(territory, [])) == 1: - return region_format % territory_name - - # Otherwise, include the city in the output - fallback_format = locale.zone_formats['fallback'] - if 'city' in info: - city_name = info['city'] - else: - metazone = get_global('meta_zones').get(zone) - metazone_info = locale.meta_zones.get(metazone, {}) - if 'city' in metazone_info: - city_name = metazone_info['city'] - elif '/' in zone: - city_name = zone.split('/', 1)[1].replace('_', ' ') - else: - city_name = zone.replace('_', ' ') - - if return_city: - return city_name - return region_format % (fallback_format % { - '0': city_name, - '1': territory_name - }) - - -def get_timezone_name(dt_or_tzinfo=None, width='long', uncommon=False, - locale=LC_TIME, zone_variant=None, return_zone=False): - r"""Return the localized display name for the given timezone. The timezone - may be specified using a ``datetime`` or `tzinfo` object. - - >>> dt = time(15, 30, tzinfo=get_timezone('America/Los_Angeles')) - >>> get_timezone_name(dt, locale='en_US') - u'Pacific Standard Time' - >>> get_timezone_name(dt, locale='en_US', return_zone=True) - 'America/Los_Angeles' - >>> get_timezone_name(dt, width='short', locale='en_US') - u'PST' - - If this function gets passed only a `tzinfo` object and no concrete - `datetime`, the returned display name is indenpendent of daylight savings - time. This can be used for example for selecting timezones, or to set the - time of events that recur across DST changes: - - >>> tz = get_timezone('America/Los_Angeles') - >>> get_timezone_name(tz, locale='en_US') - u'Pacific Time' - >>> get_timezone_name(tz, 'short', locale='en_US') - u'PT' - - If no localized display name for the timezone is available, and the timezone - is associated with a country that uses only a single timezone, the name of - that country is returned, formatted according to the locale: - - >>> tz = get_timezone('Europe/Berlin') - >>> get_timezone_name(tz, locale='de_DE') - u'Mitteleurop\xe4ische Zeit' - >>> get_timezone_name(tz, locale='pt_BR') - u'Hor\xe1rio da Europa Central' - - On the other hand, if the country uses multiple timezones, the city is also - included in the representation: - - >>> tz = get_timezone('America/St_Johns') - >>> get_timezone_name(tz, locale='de_DE') - u'Neufundland-Zeit' - - Note that short format is currently not supported for all timezones and - all locales. This is partially because not every timezone has a short - code in every locale. In that case it currently falls back to the long - format. - - For more information see `LDML Appendix J: Time Zone Display Names - `_ - - .. versionadded:: 0.9 - - .. versionchanged:: 1.0 - Added `zone_variant` support. - - :param dt_or_tzinfo: the ``datetime`` or ``tzinfo`` object that determines - the timezone; if a ``tzinfo`` object is used, the - resulting display name will be generic, i.e. - independent of daylight savings time; if `None`, the - current date in UTC is assumed - :param width: either "long" or "short" - :param uncommon: deprecated and ignored - :param zone_variant: defines the zone variation to return. By default the - variation is defined from the datetime object - passed in. If no datetime object is passed in, the - ``'generic'`` variation is assumed. The following - values are valid: ``'generic'``, ``'daylight'`` and - ``'standard'``. - :param locale: the `Locale` object, or a locale string - :param return_zone: True or False. If true then function - returns long time zone ID - """ - dt, tzinfo = _get_dt_and_tzinfo(dt_or_tzinfo) - locale = Locale.parse(locale) - - zone = _get_tz_name(dt_or_tzinfo) - - if zone_variant is None: - if dt is None: - zone_variant = 'generic' - else: - dst = tzinfo.dst(dt) - if dst: - zone_variant = 'daylight' - else: - zone_variant = 'standard' - else: - if zone_variant not in ('generic', 'standard', 'daylight'): - raise ValueError('Invalid zone variation') - - # Get the canonical time-zone code - zone = get_global('zone_aliases').get(zone, zone) - if return_zone: - return zone - info = locale.time_zones.get(zone, {}) - # Try explicitly translated zone names first - if width in info: - if zone_variant in info[width]: - return info[width][zone_variant] - - metazone = get_global('meta_zones').get(zone) - if metazone: - metazone_info = locale.meta_zones.get(metazone, {}) - if width in metazone_info: - name = metazone_info[width].get(zone_variant) - if width == 'short' and name == NO_INHERITANCE_MARKER: - # If the short form is marked no-inheritance, - # try to fall back to the long name instead. - name = metazone_info.get('long', {}).get(zone_variant) - if name: - return name - - # If we have a concrete datetime, we assume that the result can't be - # independent of daylight savings time, so we return the GMT offset - if dt is not None: - return get_timezone_gmt(dt, width=width, locale=locale) - - return get_timezone_location(dt_or_tzinfo, locale=locale) - - -def format_date(date=None, format='medium', locale=LC_TIME): - """Return a date formatted according to the given pattern. - - >>> d = date(2007, 4, 1) - >>> format_date(d, locale='en_US') - u'Apr 1, 2007' - >>> format_date(d, format='full', locale='de_DE') - u'Sonntag, 1. April 2007' - - If you don't want to use the locale default formats, you can specify a - custom date pattern: - - >>> format_date(d, "EEE, MMM d, ''yy", locale='en') - u"Sun, Apr 1, '07" - - :param date: the ``date`` or ``datetime`` object; if `None`, the current - date is used - :param format: one of "full", "long", "medium", or "short", or a custom - date/time pattern - :param locale: a `Locale` object or a locale identifier - """ - if date is None: - date = date_.today() - elif isinstance(date, datetime): - date = date.date() - - locale = Locale.parse(locale) - if format in ('full', 'long', 'medium', 'short'): - format = get_date_format(format, locale=locale) - pattern = parse_pattern(format) - return pattern.apply(date, locale) - - -def format_datetime(datetime=None, format='medium', tzinfo=None, - locale=LC_TIME): - r"""Return a date formatted according to the given pattern. - - >>> dt = datetime(2007, 4, 1, 15, 30) - >>> format_datetime(dt, locale='en_US') - u'Apr 1, 2007, 3:30:00 PM' - - For any pattern requiring the display of the time-zone, the third-party - ``pytz`` package is needed to explicitly specify the time-zone: - - >>> format_datetime(dt, 'full', tzinfo=get_timezone('Europe/Paris'), - ... locale='fr_FR') - u'dimanche 1 avril 2007 \xe0 17:30:00 heure d\u2019\xe9t\xe9 d\u2019Europe centrale' - >>> format_datetime(dt, "yyyy.MM.dd G 'at' HH:mm:ss zzz", - ... tzinfo=get_timezone('US/Eastern'), locale='en') - u'2007.04.01 AD at 11:30:00 EDT' - - :param datetime: the `datetime` object; if `None`, the current date and - time is used - :param format: one of "full", "long", "medium", or "short", or a custom - date/time pattern - :param tzinfo: the timezone to apply to the time for display - :param locale: a `Locale` object or a locale identifier - """ - datetime = _ensure_datetime_tzinfo(_get_datetime(datetime), tzinfo) - - locale = Locale.parse(locale) - if format in ('full', 'long', 'medium', 'short'): - return get_datetime_format(format, locale=locale) \ - .replace("'", "") \ - .replace('{0}', format_time(datetime, format, tzinfo=None, - locale=locale)) \ - .replace('{1}', format_date(datetime, format, locale=locale)) - else: - return parse_pattern(format).apply(datetime, locale) - - -def format_time(time=None, format='medium', tzinfo=None, locale=LC_TIME): - r"""Return a time formatted according to the given pattern. - - >>> t = time(15, 30) - >>> format_time(t, locale='en_US') - u'3:30:00 PM' - >>> format_time(t, format='short', locale='de_DE') - u'15:30' - - If you don't want to use the locale default formats, you can specify a - custom time pattern: - - >>> format_time(t, "hh 'o''clock' a", locale='en') - u"03 o'clock PM" - - For any pattern requiring the display of the time-zone a - timezone has to be specified explicitly: - - >>> t = datetime(2007, 4, 1, 15, 30) - >>> tzinfo = get_timezone('Europe/Paris') - >>> t = tzinfo.localize(t) - >>> format_time(t, format='full', tzinfo=tzinfo, locale='fr_FR') - u'15:30:00 heure d\u2019\xe9t\xe9 d\u2019Europe centrale' - >>> format_time(t, "hh 'o''clock' a, zzzz", tzinfo=get_timezone('US/Eastern'), - ... locale='en') - u"09 o'clock AM, Eastern Daylight Time" - - As that example shows, when this function gets passed a - ``datetime.datetime`` value, the actual time in the formatted string is - adjusted to the timezone specified by the `tzinfo` parameter. If the - ``datetime`` is "naive" (i.e. it has no associated timezone information), - it is assumed to be in UTC. - - These timezone calculations are **not** performed if the value is of type - ``datetime.time``, as without date information there's no way to determine - what a given time would translate to in a different timezone without - information about whether daylight savings time is in effect or not. This - means that time values are left as-is, and the value of the `tzinfo` - parameter is only used to display the timezone name if needed: - - >>> t = time(15, 30) - >>> format_time(t, format='full', tzinfo=get_timezone('Europe/Paris'), - ... locale='fr_FR') - u'15:30:00 heure normale d\u2019Europe centrale' - >>> format_time(t, format='full', tzinfo=get_timezone('US/Eastern'), - ... locale='en_US') - u'3:30:00 PM Eastern Standard Time' - - :param time: the ``time`` or ``datetime`` object; if `None`, the current - time in UTC is used - :param format: one of "full", "long", "medium", or "short", or a custom - date/time pattern - :param tzinfo: the time-zone to apply to the time for display - :param locale: a `Locale` object or a locale identifier - """ - time = _get_time(time, tzinfo) - - locale = Locale.parse(locale) - if format in ('full', 'long', 'medium', 'short'): - format = get_time_format(format, locale=locale) - return parse_pattern(format).apply(time, locale) - - -def format_skeleton(skeleton, datetime=None, tzinfo=None, fuzzy=True, locale=LC_TIME): - r"""Return a time and/or date formatted according to the given pattern. - - The skeletons are defined in the CLDR data and provide more flexibility - than the simple short/long/medium formats, but are a bit harder to use. - The are defined using the date/time symbols without order or punctuation - and map to a suitable format for the given locale. - - >>> t = datetime(2007, 4, 1, 15, 30) - >>> format_skeleton('MMMEd', t, locale='fr') - u'dim. 1 avr.' - >>> format_skeleton('MMMEd', t, locale='en') - u'Sun, Apr 1' - >>> format_skeleton('yMMd', t, locale='fi') # yMMd is not in the Finnish locale; yMd gets used - u'1.4.2007' - >>> format_skeleton('yMMd', t, fuzzy=False, locale='fi') # yMMd is not in the Finnish locale, an error is thrown - Traceback (most recent call last): - ... - KeyError: yMMd - - After the skeleton is resolved to a pattern `format_datetime` is called so - all timezone processing etc is the same as for that. - - :param skeleton: A date time skeleton as defined in the cldr data. - :param datetime: the ``time`` or ``datetime`` object; if `None`, the current - time in UTC is used - :param tzinfo: the time-zone to apply to the time for display - :param fuzzy: If the skeleton is not found, allow choosing a skeleton that's - close enough to it. - :param locale: a `Locale` object or a locale identifier - """ - locale = Locale.parse(locale) - if fuzzy and skeleton not in locale.datetime_skeletons: - skeleton = match_skeleton(skeleton, locale.datetime_skeletons) - format = locale.datetime_skeletons[skeleton] - return format_datetime(datetime, format, tzinfo, locale) - - -TIMEDELTA_UNITS = ( - ('year', 3600 * 24 * 365), - ('month', 3600 * 24 * 30), - ('week', 3600 * 24 * 7), - ('day', 3600 * 24), - ('hour', 3600), - ('minute', 60), - ('second', 1) -) - - -def format_timedelta(delta, granularity='second', threshold=.85, - add_direction=False, format='long', - locale=LC_TIME): - """Return a time delta according to the rules of the given locale. - - >>> format_timedelta(timedelta(weeks=12), locale='en_US') - u'3 months' - >>> format_timedelta(timedelta(seconds=1), locale='es') - u'1 segundo' - - The granularity parameter can be provided to alter the lowest unit - presented, which defaults to a second. - - >>> format_timedelta(timedelta(hours=3), granularity='day', - ... locale='en_US') - u'1 day' - - The threshold parameter can be used to determine at which value the - presentation switches to the next higher unit. A higher threshold factor - means the presentation will switch later. For example: - - >>> format_timedelta(timedelta(hours=23), threshold=0.9, locale='en_US') - u'1 day' - >>> format_timedelta(timedelta(hours=23), threshold=1.1, locale='en_US') - u'23 hours' - - In addition directional information can be provided that informs - the user if the date is in the past or in the future: - - >>> format_timedelta(timedelta(hours=1), add_direction=True, locale='en') - u'in 1 hour' - >>> format_timedelta(timedelta(hours=-1), add_direction=True, locale='en') - u'1 hour ago' - - The format parameter controls how compact or wide the presentation is: - - >>> format_timedelta(timedelta(hours=3), format='short', locale='en') - u'3 hr' - >>> format_timedelta(timedelta(hours=3), format='narrow', locale='en') - u'3h' - - :param delta: a ``timedelta`` object representing the time difference to - format, or the delta in seconds as an `int` value - :param granularity: determines the smallest unit that should be displayed, - the value can be one of "year", "month", "week", "day", - "hour", "minute" or "second" - :param threshold: factor that determines at which point the presentation - switches to the next higher unit - :param add_direction: if this flag is set to `True` the return value will - include directional information. For instance a - positive timedelta will include the information about - it being in the future, a negative will be information - about the value being in the past. - :param format: the format, can be "narrow", "short" or "long". ( - "medium" is deprecated, currently converted to "long" to - maintain compatibility) - :param locale: a `Locale` object or a locale identifier - """ - if format not in ('narrow', 'short', 'medium', 'long'): - raise TypeError('Format must be one of "narrow", "short" or "long"') - if format == 'medium': - warnings.warn('"medium" value for format param of format_timedelta' - ' is deprecated. Use "long" instead', - category=DeprecationWarning) - format = 'long' - if isinstance(delta, timedelta): - seconds = int((delta.days * 86400) + delta.seconds) - else: - seconds = delta - locale = Locale.parse(locale) - - def _iter_patterns(a_unit): - if add_direction: - unit_rel_patterns = locale._data['date_fields'][a_unit] - if seconds >= 0: - yield unit_rel_patterns['future'] - else: - yield unit_rel_patterns['past'] - a_unit = 'duration-' + a_unit - yield locale._data['unit_patterns'].get(a_unit, {}).get(format) - - for unit, secs_per_unit in TIMEDELTA_UNITS: - value = abs(seconds) / secs_per_unit - if value >= threshold or unit == granularity: - if unit == granularity and value > 0: - value = max(1, value) - value = int(round(value)) - plural_form = locale.plural_form(value) - pattern = None - for patterns in _iter_patterns(unit): - if patterns is not None: - pattern = patterns[plural_form] - break - # This really should not happen - if pattern is None: - return u'' - return pattern.replace('{0}', str(value)) - - return u'' - - -def _format_fallback_interval(start, end, skeleton, tzinfo, locale): - if skeleton in locale.datetime_skeletons: # Use the given skeleton - format = lambda dt: format_skeleton(skeleton, dt, tzinfo, locale=locale) - elif all((isinstance(d, date) and not isinstance(d, datetime)) for d in (start, end)): # Both are just dates - format = lambda dt: format_date(dt, locale=locale) - elif all((isinstance(d, time) and not isinstance(d, date)) for d in (start, end)): # Both are times - format = lambda dt: format_time(dt, tzinfo=tzinfo, locale=locale) - else: - format = lambda dt: format_datetime(dt, tzinfo=tzinfo, locale=locale) - - formatted_start = format(start) - formatted_end = format(end) - - if formatted_start == formatted_end: - return format(start) - - return ( - locale.interval_formats.get(None, "{0}-{1}"). - replace("{0}", formatted_start). - replace("{1}", formatted_end) - ) - - -def format_interval(start, end, skeleton=None, tzinfo=None, fuzzy=True, locale=LC_TIME): - """ - Format an interval between two instants according to the locale's rules. - - >>> format_interval(date(2016, 1, 15), date(2016, 1, 17), "yMd", locale="fi") - u'15.\u201317.1.2016' - - >>> format_interval(time(12, 12), time(16, 16), "Hm", locale="en_GB") - '12:12\u201316:16' - - >>> format_interval(time(5, 12), time(16, 16), "hm", locale="en_US") - '5:12 AM \u2013 4:16 PM' - - >>> format_interval(time(16, 18), time(16, 24), "Hm", locale="it") - '16:18\u201316:24' - - If the start instant equals the end instant, the interval is formatted like the instant. - - >>> format_interval(time(16, 18), time(16, 18), "Hm", locale="it") - '16:18' - - Unknown skeletons fall back to "default" formatting. - - >>> format_interval(date(2015, 1, 1), date(2017, 1, 1), "wzq", locale="ja") - '2015/01/01\uff5e2017/01/01' - - >>> format_interval(time(16, 18), time(16, 24), "xxx", locale="ja") - '16:18:00\uff5e16:24:00' - - >>> format_interval(date(2016, 1, 15), date(2016, 1, 17), "xxx", locale="de") - '15.01.2016 \u2013 17.01.2016' - - :param start: First instant (datetime/date/time) - :param end: Second instant (datetime/date/time) - :param skeleton: The "skeleton format" to use for formatting. - :param tzinfo: tzinfo to use (if none is already attached) - :param fuzzy: If the skeleton is not found, allow choosing a skeleton that's - close enough to it. - :param locale: A locale object or identifier. - :return: Formatted interval - """ - locale = Locale.parse(locale) - - # NB: The quote comments below are from the algorithm description in - # https://www.unicode.org/reports/tr35/tr35-dates.html#intervalFormats - - # > Look for the intervalFormatItem element that matches the "skeleton", - # > starting in the current locale and then following the locale fallback - # > chain up to, but not including root. - - interval_formats = locale.interval_formats - - if skeleton not in interval_formats or not skeleton: - # > If no match was found from the previous step, check what the closest - # > match is in the fallback locale chain, as in availableFormats. That - # > is, this allows for adjusting the string value field's width, - # > including adjusting between "MMM" and "MMMM", and using different - # > variants of the same field, such as 'v' and 'z'. - if skeleton and fuzzy: - skeleton = match_skeleton(skeleton, interval_formats) - else: - skeleton = None - if not skeleton: # Still no match whatsoever? - # > Otherwise, format the start and end datetime using the fallback pattern. - return _format_fallback_interval(start, end, skeleton, tzinfo, locale) - - skel_formats = interval_formats[skeleton] - - if start == end: - return format_skeleton(skeleton, start, tzinfo, fuzzy=fuzzy, locale=locale) - - start = _ensure_datetime_tzinfo(_get_datetime(start), tzinfo=tzinfo) - end = _ensure_datetime_tzinfo(_get_datetime(end), tzinfo=tzinfo) - - start_fmt = DateTimeFormat(start, locale=locale) - end_fmt = DateTimeFormat(end, locale=locale) - - # > If a match is found from previous steps, compute the calendar field - # > with the greatest difference between start and end datetime. If there - # > is no difference among any of the fields in the pattern, format as a - # > single date using availableFormats, and return. - - for field in PATTERN_CHAR_ORDER: # These are in largest-to-smallest order - if field in skel_formats: - if start_fmt.extract(field) != end_fmt.extract(field): - # > If there is a match, use the pieces of the corresponding pattern to - # > format the start and end datetime, as above. - return "".join( - parse_pattern(pattern).apply(instant, locale) - for pattern, instant - in zip(skel_formats[field], (start, end)) - ) - - # > Otherwise, format the start and end datetime using the fallback pattern. - - return _format_fallback_interval(start, end, skeleton, tzinfo, locale) - - -def get_period_id(time, tzinfo=None, type=None, locale=LC_TIME): - """ - Get the day period ID for a given time. - - This ID can be used as a key for the period name dictionary. - - >>> get_period_names(locale="de")[get_period_id(time(7, 42), locale="de")] - u'Morgen' - - :param time: The time to inspect. - :param tzinfo: The timezone for the time. See ``format_time``. - :param type: The period type to use. Either "selection" or None. - The selection type is used for selecting among phrases such as - “Your email arrived yesterday evening” or “Your email arrived last night”. - :param locale: the `Locale` object, or a locale string - :return: period ID. Something is always returned -- even if it's just "am" or "pm". - """ - time = _get_time(time, tzinfo) - seconds_past_midnight = int(time.hour * 60 * 60 + time.minute * 60 + time.second) - locale = Locale.parse(locale) - - # The LDML rules state that the rules may not overlap, so iterating in arbitrary - # order should be alright, though `at` periods should be preferred. - rulesets = locale.day_period_rules.get(type, {}).items() - - for rule_id, rules in rulesets: - for rule in rules: - if "at" in rule and rule["at"] == seconds_past_midnight: - return rule_id - - for rule_id, rules in rulesets: - for rule in rules: - start_ok = end_ok = False - - if "from" in rule and seconds_past_midnight >= rule["from"]: - start_ok = True - if "to" in rule and seconds_past_midnight <= rule["to"]: - # This rule type does not exist in the present CLDR data; - # excuse the lack of test coverage. - end_ok = True - if "before" in rule and seconds_past_midnight < rule["before"]: - end_ok = True - if "after" in rule: - raise NotImplementedError("'after' is deprecated as of CLDR 29.") - - if start_ok and end_ok: - return rule_id - - if seconds_past_midnight < 43200: - return "am" - else: - return "pm" - - -def parse_date(string, locale=LC_TIME): - """Parse a date from a string. - - This function uses the date format for the locale as a hint to determine - the order in which the date fields appear in the string. - - >>> parse_date('4/1/04', locale='en_US') - datetime.date(2004, 4, 1) - >>> parse_date('01.04.2004', locale='de_DE') - datetime.date(2004, 4, 1) - - :param string: the string containing the date - :param locale: a `Locale` object or a locale identifier - """ - # TODO: try ISO format first? - format = get_date_format(locale=locale).pattern.lower() - year_idx = format.index('y') - month_idx = format.index('m') - if month_idx < 0: - month_idx = format.index('l') - day_idx = format.index('d') - - indexes = [(year_idx, 'Y'), (month_idx, 'M'), (day_idx, 'D')] - indexes.sort() - indexes = dict([(item[1], idx) for idx, item in enumerate(indexes)]) - - # FIXME: this currently only supports numbers, but should also support month - # names, both in the requested locale, and english - - numbers = re.findall(r'(\d+)', string) - year = numbers[indexes['Y']] - if len(year) == 2: - year = 2000 + int(year) - else: - year = int(year) - month = int(numbers[indexes['M']]) - day = int(numbers[indexes['D']]) - if month > 12: - month, day = day, month - return date(year, month, day) - - -def parse_time(string, locale=LC_TIME): - """Parse a time from a string. - - This function uses the time format for the locale as a hint to determine - the order in which the time fields appear in the string. - - >>> parse_time('15:30:00', locale='en_US') - datetime.time(15, 30) - - :param string: the string containing the time - :param locale: a `Locale` object or a locale identifier - :return: the parsed time - :rtype: `time` - """ - # TODO: try ISO format first? - format = get_time_format(locale=locale).pattern.lower() - hour_idx = format.index('h') - if hour_idx < 0: - hour_idx = format.index('k') - min_idx = format.index('m') - sec_idx = format.index('s') - - indexes = [(hour_idx, 'H'), (min_idx, 'M'), (sec_idx, 'S')] - indexes.sort() - indexes = dict([(item[1], idx) for idx, item in enumerate(indexes)]) - - # FIXME: support 12 hour clock, and 0-based hour specification - # and seconds should be optional, maybe minutes too - # oh, and time-zones, of course - - numbers = re.findall(r'(\d+)', string) - hour = int(numbers[indexes['H']]) - minute = int(numbers[indexes['M']]) - second = int(numbers[indexes['S']]) - return time(hour, minute, second) - - -class DateTimePattern(object): - - def __init__(self, pattern, format): - self.pattern = pattern - self.format = format - - def __repr__(self): - return '<%s %r>' % (type(self).__name__, self.pattern) - - def __unicode__(self): - return self.pattern - - def __str__(self): - pat = self.pattern - if PY2: - pat = pat.encode('utf-8') - return pat - - def __mod__(self, other): - if type(other) is not DateTimeFormat: - return NotImplemented - return self.format % other - - def apply(self, datetime, locale): - return self % DateTimeFormat(datetime, locale) - - -class DateTimeFormat(object): - - def __init__(self, value, locale): - assert isinstance(value, (date, datetime, time)) - if isinstance(value, (datetime, time)) and value.tzinfo is None: - value = value.replace(tzinfo=UTC) - self.value = value - self.locale = Locale.parse(locale) - - def __getitem__(self, name): - char = name[0] - num = len(name) - if char == 'G': - return self.format_era(char, num) - elif char in ('y', 'Y', 'u'): - return self.format_year(char, num) - elif char in ('Q', 'q'): - return self.format_quarter(char, num) - elif char in ('M', 'L'): - return self.format_month(char, num) - elif char in ('w', 'W'): - return self.format_week(char, num) - elif char == 'd': - return self.format(self.value.day, num) - elif char == 'D': - return self.format_day_of_year(num) - elif char == 'F': - return self.format_day_of_week_in_month() - elif char in ('E', 'e', 'c'): - return self.format_weekday(char, num) - elif char == 'a': - # TODO: Add support for the rest of the period formats (a*, b*, B*) - return self.format_period(char) - elif char == 'h': - if self.value.hour % 12 == 0: - return self.format(12, num) - else: - return self.format(self.value.hour % 12, num) - elif char == 'H': - return self.format(self.value.hour, num) - elif char == 'K': - return self.format(self.value.hour % 12, num) - elif char == 'k': - if self.value.hour == 0: - return self.format(24, num) - else: - return self.format(self.value.hour, num) - elif char == 'm': - return self.format(self.value.minute, num) - elif char == 's': - return self.format(self.value.second, num) - elif char == 'S': - return self.format_frac_seconds(num) - elif char == 'A': - return self.format_milliseconds_in_day(num) - elif char in ('z', 'Z', 'v', 'V', 'x', 'X', 'O'): - return self.format_timezone(char, num) - else: - raise KeyError('Unsupported date/time field %r' % char) - - def extract(self, char): - char = str(char)[0] - if char == 'y': - return self.value.year - elif char == 'M': - return self.value.month - elif char == 'd': - return self.value.day - elif char == 'H': - return self.value.hour - elif char == 'h': - return self.value.hour % 12 or 12 - elif char == 'm': - return self.value.minute - elif char == 'a': - return int(self.value.hour >= 12) # 0 for am, 1 for pm - else: - raise NotImplementedError("Not implemented: extracting %r from %r" % (char, self.value)) - - def format_era(self, char, num): - width = {3: 'abbreviated', 4: 'wide', 5: 'narrow'}[max(3, num)] - era = int(self.value.year >= 0) - return get_era_names(width, self.locale)[era] - - def format_year(self, char, num): - value = self.value.year - if char.isupper(): - value = self.value.isocalendar()[0] - year = self.format(value, num) - if num == 2: - year = year[-2:] - return year - - def format_quarter(self, char, num): - quarter = (self.value.month - 1) // 3 + 1 - if num <= 2: - return '%0*d' % (num, quarter) - width = {3: 'abbreviated', 4: 'wide', 5: 'narrow'}[num] - context = {'Q': 'format', 'q': 'stand-alone'}[char] - return get_quarter_names(width, context, self.locale)[quarter] - - def format_month(self, char, num): - if num <= 2: - return '%0*d' % (num, self.value.month) - width = {3: 'abbreviated', 4: 'wide', 5: 'narrow'}[num] - context = {'M': 'format', 'L': 'stand-alone'}[char] - return get_month_names(width, context, self.locale)[self.value.month] - - def format_week(self, char, num): - if char.islower(): # week of year - day_of_year = self.get_day_of_year() - week = self.get_week_number(day_of_year) - if week == 0: - date = self.value - timedelta(days=day_of_year) - week = self.get_week_number(self.get_day_of_year(date), - date.weekday()) - return self.format(week, num) - else: # week of month - week = self.get_week_number(self.value.day) - if week == 0: - date = self.value - timedelta(days=self.value.day) - week = self.get_week_number(date.day, date.weekday()) - return '%d' % week - - def format_weekday(self, char='E', num=4): - """ - Return weekday from parsed datetime according to format pattern. - - >>> format = DateTimeFormat(date(2016, 2, 28), Locale.parse('en_US')) - >>> format.format_weekday() - u'Sunday' - - 'E': Day of week - Use one through three letters for the abbreviated day name, four for the full (wide) name, - five for the narrow name, or six for the short name. - >>> format.format_weekday('E',2) - u'Sun' - - 'e': Local day of week. Same as E except adds a numeric value that will depend on the local starting day of the - week, using one or two letters. For this example, Monday is the first day of the week. - >>> format.format_weekday('e',2) - '01' - - 'c': Stand-Alone local day of week - Use one letter for the local numeric value (same as 'e'), three for the - abbreviated day name, four for the full (wide) name, five for the narrow name, or six for the short name. - >>> format.format_weekday('c',1) - '1' - - :param char: pattern format character ('e','E','c') - :param num: count of format character - - """ - if num < 3: - if char.islower(): - value = 7 - self.locale.first_week_day + self.value.weekday() - return self.format(value % 7 + 1, num) - num = 3 - weekday = self.value.weekday() - width = {3: 'abbreviated', 4: 'wide', 5: 'narrow', 6: 'short'}[num] - if char == 'c': - context = 'stand-alone' - else: - context = 'format' - return get_day_names(width, context, self.locale)[weekday] - - def format_day_of_year(self, num): - return self.format(self.get_day_of_year(), num) - - def format_day_of_week_in_month(self): - return '%d' % ((self.value.day - 1) // 7 + 1) - - def format_period(self, char): - period = {0: 'am', 1: 'pm'}[int(self.value.hour >= 12)] - for width in ('wide', 'narrow', 'abbreviated'): - period_names = get_period_names(context='format', width=width, locale=self.locale) - if period in period_names: - return period_names[period] - raise ValueError('Could not format period %s in %s' % (period, self.locale)) - - def format_frac_seconds(self, num): - """ Return fractional seconds. - - Rounds the time's microseconds to the precision given by the number \ - of digits passed in. - """ - value = self.value.microsecond / 1000000 - return self.format(round(value, num) * 10**num, num) - - def format_milliseconds_in_day(self, num): - msecs = self.value.microsecond // 1000 + self.value.second * 1000 + \ - self.value.minute * 60000 + self.value.hour * 3600000 - return self.format(msecs, num) - - def format_timezone(self, char, num): - width = {3: 'short', 4: 'long', 5: 'iso8601'}[max(3, num)] - if char == 'z': - return get_timezone_name(self.value, width, locale=self.locale) - elif char == 'Z': - if num == 5: - return get_timezone_gmt(self.value, width, locale=self.locale, return_z=True) - return get_timezone_gmt(self.value, width, locale=self.locale) - elif char == 'O': - if num == 4: - return get_timezone_gmt(self.value, width, locale=self.locale) - # TODO: To add support for O:1 - elif char == 'v': - return get_timezone_name(self.value.tzinfo, width, - locale=self.locale) - elif char == 'V': - if num == 1: - return get_timezone_name(self.value.tzinfo, width, - uncommon=True, locale=self.locale) - elif num == 2: - return get_timezone_name(self.value.tzinfo, locale=self.locale, return_zone=True) - elif num == 3: - return get_timezone_location(self.value.tzinfo, locale=self.locale, return_city=True) - return get_timezone_location(self.value.tzinfo, locale=self.locale) - # Included additional elif condition to add support for 'Xx' in timezone format - elif char == 'X': - if num == 1: - return get_timezone_gmt(self.value, width='iso8601_short', locale=self.locale, - return_z=True) - elif num in (2, 4): - return get_timezone_gmt(self.value, width='short', locale=self.locale, - return_z=True) - elif num in (3, 5): - return get_timezone_gmt(self.value, width='iso8601', locale=self.locale, - return_z=True) - elif char == 'x': - if num == 1: - return get_timezone_gmt(self.value, width='iso8601_short', locale=self.locale) - elif num in (2, 4): - return get_timezone_gmt(self.value, width='short', locale=self.locale) - elif num in (3, 5): - return get_timezone_gmt(self.value, width='iso8601', locale=self.locale) - - def format(self, value, length): - return '%0*d' % (length, value) - - def get_day_of_year(self, date=None): - if date is None: - date = self.value - return (date - date.replace(month=1, day=1)).days + 1 - - def get_week_number(self, day_of_period, day_of_week=None): - """Return the number of the week of a day within a period. This may be - the week number in a year or the week number in a month. - - Usually this will return a value equal to or greater than 1, but if the - first week of the period is so short that it actually counts as the last - week of the previous period, this function will return 0. - - >>> format = DateTimeFormat(date(2006, 1, 8), Locale.parse('de_DE')) - >>> format.get_week_number(6) - 1 - - >>> format = DateTimeFormat(date(2006, 1, 8), Locale.parse('en_US')) - >>> format.get_week_number(6) - 2 - - :param day_of_period: the number of the day in the period (usually - either the day of month or the day of year) - :param day_of_week: the week day; if ommitted, the week day of the - current date is assumed - """ - if day_of_week is None: - day_of_week = self.value.weekday() - first_day = (day_of_week - self.locale.first_week_day - - day_of_period + 1) % 7 - if first_day < 0: - first_day += 7 - week_number = (day_of_period + first_day - 1) // 7 - - if 7 - first_day >= self.locale.min_week_days: - week_number += 1 - - if self.locale.first_week_day == 0: - # Correct the weeknumber in case of iso-calendar usage (first_week_day=0). - # If the weeknumber exceeds the maximum number of weeks for the given year - # we must count from zero.For example the above calculation gives week 53 - # for 2018-12-31. By iso-calender definition 2018 has a max of 52 - # weeks, thus the weeknumber must be 53-52=1. - max_weeks = date(year=self.value.year, day=28, month=12).isocalendar()[1] - if week_number > max_weeks: - week_number -= max_weeks - - return week_number - - -PATTERN_CHARS = { - 'G': [1, 2, 3, 4, 5], # era - 'y': None, 'Y': None, 'u': None, # year - 'Q': [1, 2, 3, 4, 5], 'q': [1, 2, 3, 4, 5], # quarter - 'M': [1, 2, 3, 4, 5], 'L': [1, 2, 3, 4, 5], # month - 'w': [1, 2], 'W': [1], # week - 'd': [1, 2], 'D': [1, 2, 3], 'F': [1], 'g': None, # day - 'E': [1, 2, 3, 4, 5, 6], 'e': [1, 2, 3, 4, 5, 6], 'c': [1, 3, 4, 5, 6], # week day - 'a': [1], # period - 'h': [1, 2], 'H': [1, 2], 'K': [1, 2], 'k': [1, 2], # hour - 'm': [1, 2], # minute - 's': [1, 2], 'S': None, 'A': None, # second - 'z': [1, 2, 3, 4], 'Z': [1, 2, 3, 4, 5], 'O': [1, 4], 'v': [1, 4], # zone - 'V': [1, 2, 3, 4], 'x': [1, 2, 3, 4, 5], 'X': [1, 2, 3, 4, 5] # zone -} - -#: The pattern characters declared in the Date Field Symbol Table -#: (https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table) -#: in order of decreasing magnitude. -PATTERN_CHAR_ORDER = "GyYuUQqMLlwWdDFgEecabBChHKkjJmsSAzZOvVXx" - -_pattern_cache = {} - - -def parse_pattern(pattern): - """Parse date, time, and datetime format patterns. - - >>> parse_pattern("MMMMd").format - u'%(MMMM)s%(d)s' - >>> parse_pattern("MMM d, yyyy").format - u'%(MMM)s %(d)s, %(yyyy)s' - - Pattern can contain literal strings in single quotes: - - >>> parse_pattern("H:mm' Uhr 'z").format - u'%(H)s:%(mm)s Uhr %(z)s' - - An actual single quote can be used by using two adjacent single quote - characters: - - >>> parse_pattern("hh' o''clock'").format - u"%(hh)s o'clock" - - :param pattern: the formatting pattern to parse - """ - if type(pattern) is DateTimePattern: - return pattern - - if pattern in _pattern_cache: - return _pattern_cache[pattern] - - result = [] - - for tok_type, tok_value in tokenize_pattern(pattern): - if tok_type == "chars": - result.append(tok_value.replace('%', '%%')) - elif tok_type == "field": - fieldchar, fieldnum = tok_value - limit = PATTERN_CHARS[fieldchar] - if limit and fieldnum not in limit: - raise ValueError('Invalid length for field: %r' - % (fieldchar * fieldnum)) - result.append('%%(%s)s' % (fieldchar * fieldnum)) - else: - raise NotImplementedError("Unknown token type: %s" % tok_type) - - _pattern_cache[pattern] = pat = DateTimePattern(pattern, u''.join(result)) - return pat - - -def tokenize_pattern(pattern): - """ - Tokenize date format patterns. - - Returns a list of (token_type, token_value) tuples. - - ``token_type`` may be either "chars" or "field". - - For "chars" tokens, the value is the literal value. - - For "field" tokens, the value is a tuple of (field character, repetition count). - - :param pattern: Pattern string - :type pattern: str - :rtype: list[tuple] - """ - result = [] - quotebuf = None - charbuf = [] - fieldchar = [''] - fieldnum = [0] - - def append_chars(): - result.append(('chars', ''.join(charbuf).replace('\0', "'"))) - del charbuf[:] - - def append_field(): - result.append(('field', (fieldchar[0], fieldnum[0]))) - fieldchar[0] = '' - fieldnum[0] = 0 - - for idx, char in enumerate(pattern.replace("''", '\0')): - if quotebuf is None: - if char == "'": # quote started - if fieldchar[0]: - append_field() - elif charbuf: - append_chars() - quotebuf = [] - elif char in PATTERN_CHARS: - if charbuf: - append_chars() - if char == fieldchar[0]: - fieldnum[0] += 1 - else: - if fieldchar[0]: - append_field() - fieldchar[0] = char - fieldnum[0] = 1 - else: - if fieldchar[0]: - append_field() - charbuf.append(char) - - elif quotebuf is not None: - if char == "'": # end of quote - charbuf.extend(quotebuf) - quotebuf = None - else: # inside quote - quotebuf.append(char) - - if fieldchar[0]: - append_field() - elif charbuf: - append_chars() - - return result - - -def untokenize_pattern(tokens): - """ - Turn a date format pattern token stream back into a string. - - This is the reverse operation of ``tokenize_pattern``. - - :type tokens: Iterable[tuple] - :rtype: str - """ - output = [] - for tok_type, tok_value in tokens: - if tok_type == "field": - output.append(tok_value[0] * tok_value[1]) - elif tok_type == "chars": - if not any(ch in PATTERN_CHARS for ch in tok_value): # No need to quote - output.append(tok_value) - else: - output.append("'%s'" % tok_value.replace("'", "''")) - return "".join(output) - - -def split_interval_pattern(pattern): - """ - Split an interval-describing datetime pattern into multiple pieces. - - > The pattern is then designed to be broken up into two pieces by determining the first repeating field. - - https://www.unicode.org/reports/tr35/tr35-dates.html#intervalFormats - - >>> split_interval_pattern(u'E d.M. \u2013 E d.M.') - [u'E d.M. \u2013 ', 'E d.M.'] - >>> split_interval_pattern("Y 'text' Y 'more text'") - ["Y 'text '", "Y 'more text'"] - >>> split_interval_pattern(u"E, MMM d \u2013 E") - [u'E, MMM d \u2013 ', u'E'] - >>> split_interval_pattern("MMM d") - ['MMM d'] - >>> split_interval_pattern("y G") - ['y G'] - >>> split_interval_pattern(u"MMM d \u2013 d") - [u'MMM d \u2013 ', u'd'] - - :param pattern: Interval pattern string - :return: list of "subpatterns" - """ - - seen_fields = set() - parts = [[]] - - for tok_type, tok_value in tokenize_pattern(pattern): - if tok_type == "field": - if tok_value[0] in seen_fields: # Repeated field - parts.append([]) - seen_fields.clear() - seen_fields.add(tok_value[0]) - parts[-1].append((tok_type, tok_value)) - - return [untokenize_pattern(tokens) for tokens in parts] - - -def match_skeleton(skeleton, options, allow_different_fields=False): - """ - Find the closest match for the given datetime skeleton among the options given. - - This uses the rules outlined in the TR35 document. - - >>> match_skeleton('yMMd', ('yMd', 'yMMMd')) - 'yMd' - - >>> match_skeleton('yMMd', ('jyMMd',), allow_different_fields=True) - 'jyMMd' - - >>> match_skeleton('yMMd', ('qyMMd',), allow_different_fields=False) - - >>> match_skeleton('hmz', ('hmv',)) - 'hmv' - - :param skeleton: The skeleton to match - :type skeleton: str - :param options: An iterable of other skeletons to match against - :type options: Iterable[str] - :return: The closest skeleton match, or if no match was found, None. - :rtype: str|None - """ - - # TODO: maybe implement pattern expansion? - - # Based on the implementation in - # http://source.icu-project.org/repos/icu/icu4j/trunk/main/classes/core/src/com/ibm/icu/text/DateIntervalInfo.java - - # Filter out falsy values and sort for stability; when `interval_formats` is passed in, there may be a None key. - options = sorted(option for option in options if option) - - if 'z' in skeleton and not any('z' in option for option in options): - skeleton = skeleton.replace('z', 'v') - - get_input_field_width = dict(t[1] for t in tokenize_pattern(skeleton) if t[0] == "field").get - best_skeleton = None - best_distance = None - for option in options: - get_opt_field_width = dict(t[1] for t in tokenize_pattern(option) if t[0] == "field").get - distance = 0 - for field in PATTERN_CHARS: - input_width = get_input_field_width(field, 0) - opt_width = get_opt_field_width(field, 0) - if input_width == opt_width: - continue - if opt_width == 0 or input_width == 0: - if not allow_different_fields: # This one is not okay - option = None - break - distance += 0x1000 # Magic weight constant for "entirely different fields" - elif field == 'M' and ((input_width > 2 and opt_width <= 2) or (input_width <= 2 and opt_width > 2)): - distance += 0x100 # Magic weight for "text turns into a number" - else: - distance += abs(input_width - opt_width) - - if not option: # We lost the option along the way (probably due to "allow_different_fields") - continue - - if not best_skeleton or distance < best_distance: - best_skeleton = option - best_distance = distance - - if distance == 0: # Found a perfect match! - break - - return best_skeleton diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/global.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/global.dat deleted file mode 100644 index 0ce2e988399a4c0b76d884cc90120176f225bc5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 254421 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 Yzhmx%x0*ZS?dC4{J#$y@kt5^(2Z@IB2LJ#7 diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/languages.py b/IKEA_scraper/.venv/Lib/site-packages/babel/languages.py deleted file mode 100644 index 09743670..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/babel/languages.py +++ /dev/null @@ -1,71 +0,0 @@ -# -- encoding: UTF-8 -- -from babel.core import get_global - - -def get_official_languages(territory, regional=False, de_facto=False): - """ - Get the official language(s) for the given territory. - - The language codes, if any are known, are returned in order of descending popularity. - - If the `regional` flag is set, then languages which are regionally official are also returned. - - If the `de_facto` flag is set, then languages which are "de facto" official are also returned. - - .. warning:: Note that the data is as up to date as the current version of the CLDR used - by Babel. If you need scientifically accurate information, use another source! - - :param territory: Territory code - :type territory: str - :param regional: Whether to return regionally official languages too - :type regional: bool - :param de_facto: Whether to return de-facto official languages too - :type de_facto: bool - :return: Tuple of language codes - :rtype: tuple[str] - """ - - territory = str(territory).upper() - allowed_stati = {"official"} - if regional: - allowed_stati.add("official_regional") - if de_facto: - allowed_stati.add("de_facto_official") - - languages = get_global("territory_languages").get(territory, {}) - pairs = [ - (info['population_percent'], language) - for language, info in languages.items() - if info.get('official_status') in allowed_stati - ] - pairs.sort(reverse=True) - return tuple(lang for _, lang in pairs) - - -def get_territory_language_info(territory): - """ - Get a dictionary of language information for a territory. - - The dictionary is keyed by language code; the values are dicts with more information. - - The following keys are currently known for the values: - - * `population_percent`: The percentage of the territory's population speaking the - language. - * `official_status`: An optional string describing the officiality status of the language. - Known values are "official", "official_regional" and "de_facto_official". - - .. warning:: Note that the data is as up to date as the current version of the CLDR used - by Babel. If you need scientifically accurate information, use another source! - - .. note:: Note that the format of the dict returned may change between Babel versions. - - See https://www.unicode.org/cldr/charts/latest/supplemental/territory_language_information.html - - :param territory: Territory code - :type territory: str - :return: Language information dictionary - :rtype: dict[str, dict] - """ - territory = str(territory).upper() - return get_global("territory_languages").get(territory, {}).copy() diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/lists.py b/IKEA_scraper/.venv/Lib/site-packages/babel/lists.py deleted file mode 100644 index 8368b27a..00000000 --- a/IKEA_scraper/.venv/Lib/site-packages/babel/lists.py +++ /dev/null @@ -1,87 +0,0 @@ -# -*- coding: utf-8 -*- -""" - babel.lists - ~~~~~~~~~~~ - - Locale dependent formatting of lists. - - The default locale for the functions in this module is determined by the - following environment variables, in that order: - - * ``LC_ALL``, and - * ``LANG`` - - :copyright: (c) 2015-2021 by the Babel Team. - :license: BSD, see LICENSE for more details. -""" - -from babel.core import Locale, default_locale - -DEFAULT_LOCALE = default_locale() - - -def format_list(lst, style='standard', locale=DEFAULT_LOCALE): - """ - Format the items in `lst` as a list. - - >>> format_list(['apples', 'oranges', 'pears'], locale='en') - u'apples, oranges, and pears' - >>> format_list(['apples', 'oranges', 'pears'], locale='zh') - u'apples\u3001oranges\u548cpears' - >>> format_list(['omena', 'peruna', 'aplari'], style='or', locale='fi') - u'omena, peruna tai aplari' - - These styles are defined, but not all are necessarily available in all locales. - The following text is verbatim from the Unicode TR35-49 spec [1]. - - * standard: - A typical 'and' list for arbitrary placeholders. - eg. "January, February, and March" - * standard-short: - A short version of a 'and' list, suitable for use with short or abbreviated placeholder values. - eg. "Jan., Feb., and Mar." - * or: - A typical 'or' list for arbitrary placeholders. - eg. "January, February, or March" - * or-short: - A short version of an 'or' list. - eg. "Jan., Feb., or Mar." - * unit: - A list suitable for wide units. - eg. "3 feet, 7 inches" - * unit-short: - A list suitable for short units - eg. "3 ft, 7 in" - * unit-narrow: - A list suitable for narrow units, where space on the screen is very limited. - eg. "3′ 7″" - - [1]: https://www.unicode.org/reports/tr35/tr35-49/tr35-general.html#ListPatterns - - :param lst: a sequence of items to format in to a list - :param style: the style to format the list with. See above for description. - :param locale: the locale - """ - locale = Locale.parse(locale) - if not lst: - return '' - if len(lst) == 1: - return lst[0] - - if style not in locale.list_patterns: - raise ValueError('Locale %s does not support list formatting style %r (supported are %s)' % ( - locale, - style, - list(sorted(locale.list_patterns)), - )) - patterns = locale.list_patterns[style] - - if len(lst) == 2: - return patterns['2'].format(*lst) - - result = patterns['start'].format(lst[0], lst[1]) - for elem in lst[2:-1]: - result = patterns['middle'].format(result, elem) - result = patterns['end'].format(result, lst[-1]) - - return result diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/af.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/af.dat deleted file mode 100644 index 196d4015a31832eb04ba6ed06e8a921a23989f65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 171143 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 #P<;E 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�-&Auh`45Z9e0Psr9rM_f7ON~c;u3N+Bq0v-cK;NCes4h4G zJHtyV#v_iGRgBtKAR-Cw3P=(>2Z-~nt>INDa4!W~P2qL+ErmBA*{NM)y-C!E|5jC_ zw}Hl89K8^tXCEcJh1@-5U(|@2;PR9NPKs=U#R;%_E`&PBDA=xw&#y3Pf%C{8;-vO!I@f7a& zP-&%pK;Ps1NH_G#rHtn?RE%@rXBDIN7l<)J%IH5a{0dCV^c(u_`u9Bf4;7>9KUIvb z|AL4j@rq#lkLa71!r#!~nGCdAsejqGO8p1PR@Ng#|a`C$n4PI)eLBL{ByEzbelKx)`?*O0`73ZqJAL&$bhRhSprxyL?LOqK7Ot`B+rAe)dzQThLZ;bJj$j;{bm4S zkd)P*tj&RHwFaZ_0frPEY(c;S3@z%n1b}MU23)Gu4@Xf`!!W3D0s*a-Y-{$dWZOWp ztsfcvnEY^}9&iLjT{)>yDQpW^OEeOF_qrVkR_JNicyCX{J?>Cpup^M{66dFaJHt*u z@t6f#9sbVj+wgaRWdFwW#eAcQd8jc}Om+pPBi{{ucep#Pb>#A5zCDPzyFDum_5y;D za{|d!!T{#CD2$0O4lk z&;fR_t{xt&;=x$N8BNoJSIVf^9E=&k16b19#bLNj5Nq4%h=fkcfLcsKVf2AjpAx7ai@B@hJ`7v&S2h z!*pnHdH}7aa47qh!eNjs1!Emf)B_$-)#yl|n!!=%yVIj-uQO?@G2s}>?(W!v`Z&nB z(erj78U69l;Isf*9sP;y+vrb%WTQ9M$wWQeDOHV51*)Sz4SjcdI_-7zBgcd@D7(8e z3+l5V=SI(C02%$+(BLEhS{?nl?Az$igJh#O*7-y|+yzyQE(EHhzX*MIdNJ*F^vz?! zC6wLWr3Lk6kaa6^Ir{GC3MFC(7JjZ&G49@8rDD`x4G~4)?n#`0Qh;lKCgEDNT7c`= zw*p)b$!5ARZXn{Ly|KdJCLo&l4D{XE%}V7C_n2^tigCQRsu;DmLDaNwN8jDtLBsUL zj$^`|N{e3Z$|>)LgrvEKib>0Ux8!jTR7toOt!927`2iOwBt;+bi?D&CE*FQn!%IoTLw=-vJ7z8 zinnU;O|f(&!t~qlFLS)z#iZ8K&yFv#=hnGIV8Iqj>iUa8;E}iK(5q$K_eg5m;XPUuVAEk ze~rF}{DyShjCR!5PHL{@{bk=0_8{L?xB4D1^5;D(mOm4XOZ5k6lkg*2&GskuE!&?V zS!kvfm*+2pJ@l{Dt$qWn8U2pFyZwU%J!}xSSeAbhbf$+ls}>P^&x&Q{fE zcA#3BInZ~fbJAY-fLb|>xrn&Kxho9j0irdT7kzg&A8pe$iujtJfcsj2VlLQ%Ku{2# z9k+tib+)#bJ8V_`X_8|#j9v`B;uZTsxTM@L?`af=)1FB zDr`p+ac5&H4EUyLl!}*+VyWWJ3HHDAvx&RG0(UN;)k5vTz7=XuNLDB>lD;itFRFb6 zd;f3iu~2KF_Cepn)RCx#!Y2}I!#E=Dd3=RIJrFHa34M1qfwt*C9KOOt%I>P6pl*bm z{xQ-b>3fuADm6ikvlD2wLM`lDg<2umT2J4K%t_Qng@A z^QTP6opx4QbOF-3OhVt?O|CSaLde}st+bd12-V@CTKaEm!9d$)v8n?-nWb463|X zXBI5$OJ;c%RGP}!=)3!KNYW)R^TsX0xdhzlc}4yC0CXB&fWEuBuxNS_0e5wAQGW>l zREBG@?82N-*APl=4JAD7eJL#Pib%9toXgp_;#>jAo@t528RqOOsrC3*6^v1zjPcdb zYKg8v--BFBo|kA?xQ>APy}qcw0f3h1M)cj)O*Bo{U^8zV7G_X(Pd69Tw?IaLc)XG= zP;;qeQe#`V71|`+hE|JnJNs6gJ0RJa;goYHF%NiG6_dMxX(8@G-yPnoWFFRz2=}QN zr~UmZM(qO-F?K$K*4ZBL=yCS(Z#)E!mCb`NNy1FDn!rQsTLKS5vV#g9Udrv5j}Y|~ z9<6Hh7*I{(arE8k6SUV0Z@5Oq8!(?F<}RPAV)8UF{TIh{;=|m$%K>}!&p@4oXVGdZ z&#`Z*JP*k>CXpG5FHqs3U+m8AB`7qZm(h3EuaJ_?slMCcMg_|5@wI~bb;#+Tj^7<_ zE%h7UH4e9F*v?XT0~R>DfmU;Qi+#)GZAiB3&V<7s+`viS=_9<=C|FHP_jDY+4yr};IK>F9ql_@T@FQHAs zS7^0FU$bu|`UaA%w6#Q$`Ylx+_`B{czlSPb@6!kIu)XV>_x1y9w0u9J??d>Bj&-fY z>itZ>1OHOg{|X>~d6BH&fTn-rTpcpc8vPEFB>aI^i}5G>R*b(O*%y;^_?c&g{-)js z_Rs%e{x9@#oc17YrYsr1|G`je)1z;8M6*D$sf7!bdY#cXo3_p&8DDzPp~6 zl*}F`hB_Z1cRGKi#R7oz@3SEK?rxz<4UzzUzQ}T4?l5ubLdOR-7Z&Yu{@w^3CYH61t^oS zB3eyoCH5_$l_A+JZo05#gSHAa9(dJm4OfFk(^(yTcfJNWnhw8jcym~jkbCV{X;BNP zS~_y-w?C9gSPQMDGk|?dXCS1CbmV;RAZk4D+T9wi1C6G$F8c0#J#sW1oWDdm>l1RX z8&q0s2ngx$Dn|NOojToq!+_-V&WIjyRT4z>}~uTFqe>_AQ6ekZjpU z${0c(Yu8GP-2lb4vt1g%HX*WihfcHF1APy*Cmrb~l1c4Fzys}F)Q<&_-$atN4^Ulg z)}ikK#zD#j7*D_h)ED(70QouWA7h*VT@ogu)xtHfZ-r}wWOLX*zt}|BLpE2pY5}Z8 zYDM4OwvnKVUcR>2PQ*QSR2b|FBtM5`Zy_#@0A&)&Xf=&a_AQMrNH&LMYaV%%h{S7h+Nu;13Cc8BpirV6FG=|OXOfkmPm#- zow!Fmq#LtCfomd%q3@0lCqolyWg23pPMO!h6Gvmp89S|Cx)QKvauxdS_G%Ki8s{>NZn1=}A?jYQt!i`~P-Me(a=HyjzhHMg z6iK)Nt)_A#`rOY%%mP}g;tZi4Sf%IJ0#oc z(7ZO>LCC}1S!r<>pcrh99ulm7WZn%NX)g*em$rY$?jBg+z7VvU|9$LR{`W(&|54%l zbq`SI<9hIan9hVQw^`)p>7*L9;UVa>77wHE!5^VVE;BB0Cp=2n<33j1>T$r`g?s`! z)P-{?t;@b${A&4=!0~hlTCK*@>{~USfn@(d-YeZa88ls}&r<8-dXC~EJ>uw##^vxl z)SC7S=zEkGN#q}oX-8shT%Ipc;}Kr&*6JOF7P@1XDA-lg$uJz^eQnZ8HBoxNYwe*gfZ=E^D^HP)r! zL!fxkCR!cz$L!mnKY?T`xOCn5DKU@q8ATR@71dSd=Kyu!U!d5l|`CtFXA3y)^5ydfFt1r zdRW5v{$)$4+|iC(pL;`z^CxIE&Dq(vH0OY1Tc%Q}v!#R=c!fEMdgQq%>e@_=%3*H6 zy6EOX-@VRDLT?O+iw+;Snvb&ko4=r505US*<|bWaou#@s{sp1J>ow8p_!nm1#=i(8 z8-FLhvn}Ial&HsBjG~TTjmlwhz&idV(08v(lAtRK5^BRzgxuxQl@`kYLKcjZX2IKS zP|ZG2;N6;NHHW_JTMo-XvOn!4+-ko(0gtr;Mcuc9z7$pjq9b1kefPC8ZFL1OZd^-P zg@F57wWwbWKssuC9fAiLp&viz9#)3}uhK-DzQ%D)bUjc%NEQf$P)ooA^)Kqz0?<{K zWo38Jus{QVCt)DkG|nJ&JeV=E$Y_;fH<5?7AL(SWqqjdJx{c0s14Ee zP#ZzAS&N%3Hm2;6HYun#h1^w+`zUy`jNAk`mM>Ty+kxA~O95-a&0vy*&C#wZjs~pN z(QiN)Ea(ulP5UoSgDu$o5`SPxl*gU;--Mw+%VpyY3|k6snDe$W9%qLf=#jW}o;WCM zBgElO9FZf+ffb3{=85ZukwV!@EG9D6lEfCiUy9sf3C+=ZH7H2}KwNsdT7MSaYy@a{9GshZ}W5u!* z;y!uezyYC7h~u0%-iQo2t<({j^#$hIp(M-+&YYNIPHo5iVNA0jGG~qT84wzU*W|or z<8i3`dLL;mIoiO`DzrAIwHu8Cm9t#rb>w)1!oI=_&MO;_;ds4@w9XuD-OwepNlu%b zqw(AzX;X5v4Z>8RO>^3QIU1j+AZ`Chz!*v*<|9p0bWMYS?bH8 zpGSJx>4U=gLchT27aE=8*Q)^}UlhrlA)R=yU^!eY+)GH9E@Qsbxamgz!($F(UY7|o z?hebEyuPvA(NZ^cY+D`uTrPgDK)Y(wG;wsL^qG%Tu{;^iR&~bP_pgFV!c}OlhNi3O zcyVxzJK!FxT;D9*0j~FxU26`R8E)R1IU`&ruFe)$*SjlLq`h@AHs&SySp5w~?MY2- zxKVhQ3-2c9aUPCqZ=cx8os1bq%E31ab%s!HaVp1zyGQW8mRpVI*lj|3NJzIkiF@}F z58rG<#5;^xP~0i>mxX?p(|Ht3dRn1!xZ505sO}LLpNNZl-Niz1;Wyj+75Mwi6IZ^t z+&v@QFCP974-dEp{x7%&#gY#X8Y_#=6ylsqaQ;8!MA_Z7Ss$-#KWq;8FJ{z7guIN9 zA9XTMr}?-uS8N|M4;(lyu+9jNi;FeH#S`u#|F7dU()YG9TEiR0a_mhZ9WJD|oJ6bgRfp75isGw|AIuron_|%)Zz%pzynH2IesV8d*6wA% zT5Dx)1NzxKaeauz(_i$h;TI}cB{@HmQT!@F{+1xWc@Pd&Z@=YfIX&<9y9MCNfOpZV z79U0xSF1zs};Xu{;#>< zhH8f);Xh&Z6;_Ysbyr4?&ADS2S+hV9H??H#JS6l4(ABi2uzER*6OAl>c6`=6XI!We z&icaX?HrDeyPh%9Y&q6eL&EIB8Y-+goW)3FG18oQ&bTm_aCQ*R+|FSn?i|Pc9xC<^jwCQ)ZS0jbHqgilug5rl&iXY-$LtMo#S+D7?IGoA2Z7}pRM+ViJo1V17 zS62aaHN_7+uZ4a(9M-kIt`r8)UdE!xKq4}bh)fKF#6|q<@!EM8yrX}eoC_lB=3Ee2 zPh8B09o;0X?=HAOZppC@O^5SP>_ruk#?Fw#Uo_Z3-2UrQ% zA_A}(fUc%>#LMRBr!|o^VeTuhgUOWYRO*J9SJsIidfh_Y4imRSi*B>uNZr!hGBNoS z>M-H%B;2i>%dK?ogQQyBeHZK1w@gt67gd9J|xT}+8g%>{`iBBr-W<&;+FDLFUy!ZjcJ)Bn=bWh`Y z(7l8lzc;wIlXWc{zs@(-h&>r}c-Ti+@jHKY&Z67M7-tN}#tSKaV6WauTyiW9ADHjQ ze_F}7ToU{Y-UMOBuh~t^GqL05U#)8}CY|O~jp8DHJ+8@Ja1W;HSK@Fi*lgZ74u06J zMV!QMw6(euUTx&QN8wv+aM5Niy0K}j5AEVKeh;m~opOc1d*0=7`hCq$4h}-?y)@TJ zWv6nTlzwWg(})?cOK1xUZIaWt%(>l<-({L?OlHrobWIUjAE8an)3_0jv}rjSzlyb= z&{h}P{&^Y~d!!{f8oxqyfY8&WYk-ns_+L zJ@CJg`}9j@ASat2)*^oA1s`TOMLZoYo=$a7981oVjO8@*!I|gZiaA}JoGebxa3{J- ziYFV+G;&Xnafosj0oz0ZI2%A$Q~dPFIq0XGNER--IF}6BG&**kdTH7d^QNmQehTD# zr*jnk$&U-nMNi_b;X(jiP4Vj+7deZEK$+@YoTH&`mk_YQ1GrTD#4k`>miH46dF82- z%X5D4rHCtXegIr4e&V+qt}6PmZ!}zOemFJxjfHE37r&Npt@D_@e-+_6qxB@-8m<>s zk7c+%x*^ZByJosuep8Ge9Qv>o#8Fv#dprW?L4k*xzXggweXH{dJ>)(-X&mb5diN2 zz>$+I-1pH>SAm@1;^6}lWDRK0hvvhekHkxSKk3Krh3f)Y7m2G+%vDd~6T_#%n!OL# z1)mjJ`u5Myjm4_-^_^b`ZDFB(=`_xH?qczccwZSQi+(M{zC!%QiOfRYTKTQ94Ejze zgM{*Zo+58`{J|(39dF_JQ5eI7@sl%H3V)yB&qm|oQat=3+?|B`t8@8JOHZ@@X2cBm zyU_L)+8=pZ`nJD6bF>uvOK43(``c;!S7cwI_m6Rlnt#Q?BysScJ7B8*_PQP`=mg5+ zvjE3E9zyPkeme135AI>gyRmv1wp^DhwnT%_5*K%lt+bv4Decg^DzoAP2bukn}wUb8iyu;LrD z=FhWm);E1K)&j=r1y%=MNVTBQ;ya}la+;ins3x5lg}#I=ODk`uX)#&v6Yzs<@y9$&<=itsiT-l};X=V!`WEyv?~PgWP+*1}uE zdE8twUR=DqEWm@`HH|LofY$y5`w^5CJF6z|8>tniyNT2Od8h7BufDEjPGw5_SjQc3ZpL>*tZUR>g4Krggc9G=u)b6H55fx> zHcU}GXutzP1Fi?9ihuBP}hflbj**8sdQ z6rE+>1F#v{vNnk9VPSJ&$EWQFJ6o1dd=h_%ak%v!5w;LUe7t?AGgy3kjD1Vv&{6sz z`Y<8Jhsn2cBI}-gXnbqqvTk_hdmG`!2e*eiPo`MK1KJ~u9cL4suG?1l@u}vK&X-e2 zDL)=FZD-tGh|DKow-;)B26zXj^6H)5*N{2#+0ponEsxOdBo2D_gK_`K(?LS8}0yE&O_M2#z#X?M?Y2?s{h*x+sU~=7fKks81i4 zI7IxsDt-=iKOAa&cHuDNI(E2_J`~asPGZ(t>LZQDQm2m`93{MOg?F^`IH=qm@5kiG z=}qd#3i(eVALnFVajtgP{PE_4GdFXy`w8NwH!k-k;Y9bt^7y$jp@AE#@SgcjNo%=K)_7URgPUPQB?yx??IK3hi&J@P#!Z<6Z<=xL`11UER5bZfR zEqB?@747<>JT@SQNf?~I>Gu!|%2{)qkJFagckvr+? znGaT#aE@gL6&~Q`?(A-X0(Y-7XJ(dG<5r+}s}I^-ezyyJhrqqk{O*J#bjzyvu zXnN^9{RWyOe2X@h-**CkFL19kzaJn~%AHYx5Y<>oq$?q44N%$45=l2_VRr33t zxV!(O8?!%wBR?9pwzqXQguehJ;cv9LwEhwJUx9n2Y5fOD{v^8C;=LR_R?J17g(3%- zvnqw2z%#k^f|!I^(Ryw*q;hwP%TAo@tm{pUXEz%~?tqw~&Cl7PLV{e&NP_9?oC9zY z=0uxIb1s4B7Fg4q2U2e7wbs{$c?tRe=Bs8iKfp|e3qZuzh|zk63z4Tw4}LYjg^9cS zMY=It6gZOOUQA3botujR$6IsI=CWHt;3Wmt?3RL5k=@b+J^V7&Z2ADqWVb9tyc`&< zXSW=ARkB;2xVvAW8?zOGBfD9V-Q*H(I9~~J5>`f=%W4&YR~1;ZS`AWelP(TcC+cz6 zs5HW@Mr#7ij=EAz?$EBkaAl--2b#bF%P~$6_X8tWpdjHB3^fc)^pp0G~Mz|wh6f@VRyb+ zb*s$*r++rdE1iym0ViPy+FW8=2s~6^O>9d@#l(gY^VnNeG1(eeCb4ZGCSf>QPizEf zm5FUj*qx88ZnYiYOk&$l7%3~u?E&M-Fmkx|Va};4U8FmT!A>;bnU1VMTANW~u`?}L zgZjFuVHbf$qs^6TjKF*=zbCaDq};!^9=BHRPS8`@qtd1n_5_$I*j^Bmus2%wJ(fKE z_rkAE-hGI>`?|cD&GB)-Q8FIfAgQz-;{hh29&IkQlE4!L)|oI7QblSF1U+_RrA;X` z0nDV<3=xluq4m^S$*YoD8*z8vo;S19I)JBtU#6BW$$fz)A)w9WRu;HZV9l)yQblf) z2zv0zl{Td?1z;w(sSuMe4Xx+4A9+=B+n>0*Px5A#+X29Rv28zLHym<=0|6%CAX2#6 zL()-^F4coYJ)LT~iQd#{WeySjq11DynEwLK^TPx_oG|~FDV+K|LX<~R$z)WSdOS+B zM;EmEw>(C)$5P8H+$lHz&pb|Sj;9UpxhmMCVNMXE6KTXnSMF*HCkb>i+T2n;Mc`8f z)}?$JBpJN!`HaGSTKIpSPTZHo8CA_n;Y{F}WqlUJB%F=bm-RWM>V8l3uK&_=sq!G_ zRan{*KOd@ei6gcFv>yH@+Hlv= zmtbv}LC|C0T+QYdfOtTgCBlwbxD_G}*3sswdAq=O2&~n-6O#PNG~~!Se7+j9<}NBc z?A_JvO5q+TGF817A`aWpdRq6B%k2?&ms9^**$1feFb`Im+QgX&T{>})WIAyk0*J$R zw7FCt5%^JoHPy!;<*GZft~NYQ(BnT*&E`pfnG~Obhy!@Ep5im)>BNCwP48La?*6%M z%$^6HP8_C|PMjBj;wYY+%*1&~(3jDA_*ZC?oj6SGRe~P-wQ4r61577QXICk_0TGAp zXmizkOW?N!)@r^3DK~M3Hnx>Hao(lE!@gJDt`y#fB2(25ASU5Mw4T;S;s{DC~3IPk0K{Yc#1|J04y&%o1(!_?A=^9xWMxRaBaIKK({J6aF_2W_$w zhpGKZ&}08q&E{`_>BN~_st^A_Ov1ltbJhG$;2tYwL(T#zcfx559(p!FmdAx|d{{AzxS60b4$ zi*;kRIPi4xFtv2@ECDnLOOlhBJWC0>G+Gb83~jQLhpF`;SYxr5t!C2~pssZqy25f0 zldwG6Ts2n^ctwG=nkzw)JrLbo4aGhVZeqcDXJx8tEbuDbS(d`8P-QB+8pI^5j@DCK zgKX~1ag${+w7zRnTVtX6RWr5;R12-HeHyyb3Dh4T-eZe4m+}CC2MVky4}z4d@=#QH zZGts6f_19dtP3!c=6VqEj1XE+a|7~p0>Q5)xFPWxbH7nHW*Y<7wGUEDC(tH9ldvf{ znF+L+pqr!h@PlcSoj^=&2*DbQy+t*fp#akfG$AyGEg>dh7}{Jlw-R`3fwh|3K$47g z0*ww+IeUf^ud%2js+!@Wz`!##9SJcB+oAQOwkK70lB0Jm>kd@aSdbknEN#;41XVg| zkYGA#MghbNUeM;!+(qEg0&ALMAmu7MI@E?;3D#Kn-KyE_4ltA89uSkTCt6Q%FY5yrZ$0Kjm4f=&87ih zI%&#yBUB^ABs8JTRkK;(7J;>zt&nn?tWkWK1E)`m@Z zu*L?ERI@n%U?#}}A>uF|ttWXfc{+LESM!@ryvE!g(v8`nz|+aY)Y8dw7| z93kkDXg&N5$rgk*J8jF2QHJf7rV)CS?BXC<>W4rDQ90yerjwdTU`xMpT1W}ww zMS7kh<)y{PV5#dMm$rwgo$=?qA@TzFU9nFMPrm$RzboDDFu zn9hNigmck)oz5dq7Zd#IVmhCAjk&*|8?y_6r;CYMrBm=Cph>tGZ7#P<1in;Y&FwNs zx%0AJwc&DNH5U7dDkfI~%Vc&H#3Wpe)-$_?G(9idW%KV^!Zqgny6RTf14dq)K$2Iw zAa4MS>+ooEiQOdd41qPVn;{hwyMFW zt6SXz7>V)UlRh?lFAyBaqs`@XzrYU&tT{ahDYs3fi>}TvlX#7VeyExm)}s#t&*b(9 z#3Ve5)^mG|RNbaV?>ZwNr>e$+JW;glwAJF1P$5UTdL@rWr_=H&;5eQ~o6GbWfu9vv zGkp$H?mCY=PW?R58XLk3RgGQ*n#uAdh)H-Et!McPiF%!fo;Al;si?64uXShlIuyu| zlYm9)v;)F7pullG+FXin3H-Len&LZrSFQ0{<;EnH0Z+h$DKmp5hNA>q(20s0;E(>S`>`PZV{FuQAm2XDHL@8Z%9&>o34@ zaE~^Z?{5PCF0khN2c+D}26tEgNvy_(@K+U+zky|v{0AbA?a_LY|Bhh>(O3N;G#U*TxvA}_ZC=Fn+;Miwb_Z)SZZ@rF_{xsCbhXB;y50y zr#261m4lv_usffxy4C!Eks3GW(|E7f0+4YLp2ocTN-SNB3yEf7YPdNOON%lPJ6IV>hNi=&ODk~=`hha~{W%pIw>lft~Ej5nq(Neyq0 g+hs&pO8cWngr&8=%c!sn`>Zf-oD6*+bamDKKh~k7p#T5? diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/af_NA.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/af_NA.dat deleted file mode 100644 index 0ab9dba5cf9cab6dd01b5ae5d19f2c34862cde2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1407 zcmai!`FGPs5XVEp5fYAYHyp(TTYzH$zQDm&%8J9 zmH)i6;~?xl9_R;Ip5rs$8EN+4Ny0=+?VOmHNb^{yCb9{(sBQdTccZmsOsZLaE=^I` zGB2$0m?CT)Cg^Ov((7#6M%b>VIqsD%tj^V;%tn;xQe!t^kJ`nNZ}QAU-Mny`^Y;?w)C^lo>r50}9{ULU#pX<@H*E(9 z2i10tb9q+wJPr{KtF8P$(F2bogwI4MDqXMwk9opT@tZ<>93vc;hB-Rwo5JRa#|gsc zB8cU^7j%-)Xh~+bN>iMQJGx`i#Sr6XR`~vyg+3hiIfI4vTbw4GX~|GF+ecF-vdUK@ zY24?lF~Aq1e%Ln7suL`|*$N?T-)OcHxrb1B7_>cFRYzo`dA5#rFI4)HaIV#BN~bmW zeDAC}D6|hiE-*x5hs{xCj>9|igoVL3pc>@4m@FRDp1%l69p*ZigZ-{S?} zH5L*6QB$0_w!8wZw(!##bi6FyciX=0Cl7Skkx{61)$+ diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/agq.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/agq.dat deleted file mode 100644 index 3b55d884b70eee3958fd5b5f7de92ad6c990e911..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17339 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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/agq_CM.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/agq_CM.dat deleted file mode 100644 index 4c968efc2bf632a589cd217e23ce7788320384a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 609 zcmY+CNpBP}5QUon**6jr_ALtp0!jD{91(ZlET_9>WMRAe+3ui@R8oFA6%Vv#j{aV~ zT79>~sLs?{RaLI7jU#OvJW$K>HdE*yzp$h>xo7-q9;UVME%wfW`H&a268Ov%_ z;%-c|Cgg+_#;RHolImzX0c(tPwI#sWlyzsaqznlgjLnkl57BSkm~61c*e+;dql7kQ zz|PMqsZBB8wt@7djowJgUB(l&E;L(D`d&)dW9%2^DVu-nDdRwGOI+yvHAS5Uf8Dx- zL&h_;BfO#7dgI2#&lxY&o(QS76tbPzdemMrUKLYEu@-R@UNhdPT`|>tj1=l&RNgY) zsl$1t4|Z+`?-?ITf1@)PFS8smj@7}uuW;SDJ{pG;#_3|g|AT#Gd@8$MtaHZrJnN(N zUE7C7FX~?y=Vk1I8=E?320iQLE8|=F334L2fF;)?Tre)xzBK5`q&||r-$xo!CZBM{ I_}*Xq1r;j9jsO4v diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ak.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ak.dat deleted file mode 100644 index 1a8cdcd430075df6a41f0784b82201c9f4243f49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15859 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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ak_GH.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ak_GH.dat deleted file mode 100644 index c2b445542ce6b2b9b6d150f5e2d0ffb76007245f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 589 zcmY+B*-jiW5Jd+P_BE_wPeKxwB*0(5C-}`W-379+-FDGH z-iUvVv91<{X6s46NeQ1A8-;nw=0DqHY^ha=3!T5GsMFBjH!fkDv7^?6*Hl?=T%UNC z@mXz%kSa?d+Xq|q+8$%Sm|BXJh`n&YI8^Ims=62{RKs35VjQcTait4(Y~T~dm(pMF z493eWUm4%j_PDQb-MTIshf~J)$%5~L{b2koi=C`<#yB7K(fGFMLaitD3&v#`yWrZU t)|sIm_414HyPRF_As4XZ>V!XxE43*NdNQetcf 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

    |w&W3A-|2 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

    d|&*g!h}~c#ybp@^~)MKe#CnAH68^$ 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�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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar.dat deleted file mode 100644 index f3b53fa1eaf68f686356ca3cf9a195e5f6aec307..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 345779 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

    VMHWwi~c%OTpy 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 SL47>7W@8mtyd%6%CjJ2?YGGLb diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_BH.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_BH.dat deleted file mode 100644 index d5208f01246e160b9f1694605d0e7933313d5a4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 651 zcmY+B*=`gu5JiWOA^So?!cN#i!WOna;0bAdz;Bk*T@zW@?!LC0s3Vocr&Hr0t(mv( zbL+ZpRsCIIjLy}@Xf$$7WgKZ+Cgg-Q#=2S)lB#H10UL}>wIjgUlyz&eJQ)(U7~AEsYogz}HrZf@u{%#R zwNYwo(_?QkF6LPkg<7XO0D(j6K9)7}jst!a*m8FpF)K-J` zjPbmfT8fp3gYbfJqV~m9bum(?`ayZgc%_aPl`hzYb-iZ1DftFxFkWVP%Q#g>i@w5j z>$+$h-Z9RW8{Q6f&UjxoyWHmkQDlDGO3H?XZuKf%H$KiGk$az{{Zvk(B}XE diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_DJ.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_DJ.dat deleted file mode 100644 index e26820019ae06428e5ab370051c6e460a6ff8a55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 629 zcmY+C*-{)a3`Hl93HuTVWM3c&kd17=K=D9+z;76&@7 z&()P=$$u6YqZ73<8jW02ku%!XxTD5$r>M^^u%OoDoK1{2H_@7eMaJE!fx=ZsSAxcj zdumzYt|?jyIbn&htd@kND%w`S3S(7m2yixK-BOm6Az_WNUXtAy^Gny12^);ff+jXf zXiYt~evFe^7xV8X7(HpCCrP=@xUW`)X6ucKD7dz%b=2!=gQtwo<$K89WG&XXI^hfB atJ;;~-cahI@wY=teaglsd}Dm?PX7YngUEsa diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_DZ.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_DZ.dat deleted file mode 100644 index 6f28eb798bb9c8597b0a9f94f041cdcdc0739079..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1713 zcmZux*>)T?5VegRJ9ah_5_Smt0EyZ6orJa7R}q#*(=9u~z0B2OGl7B_Y)+1UBM%%n ze&KJX|AuOfJu~f@H|dtD>Rw%`uFepqTH^53)Kpd`GE=cmF)ikJFHL;$5@y5_ubnbR zyV7W7aRXttpCF4>FIO3wBODS7d~RJDEemHcPgoH1jM&8J4g-e?i{dB)nYJ$ONXI1$ zizUL5P;5h~wK$bd;wa%*pV5jod^VL`9FOKga(zk_X>6S|4kx17z-}Mq2yTq#yg0&r zu9Ss}S4xvh?tYSRN-Q$!bgtq$WN{PWbii`u9tG}wvY6o{kGXbhM)n@NMhVEv{HILr)K2UAp zENiPRrYqPYjq{u8_fqnHNbVYs-50HxG!1=NnGbz?_b>S!>*9VlpA<} z@L)}6rf#&0hqyt#thUkO;(O@BTy}5y2p0>>>v%L;++UuHmco)LocCgu3vB3AVVUsQ z1g(#cYkgu|>yu5bPaV|y^dzm%G_^kKeK3IEK#`u88Jmgc2+xn(@&e(-2~=Mir~2|Z z)mNHSUp+|mwMkT8Z&H1uVauC@3nR8%9NO~M(3ZD{w!Aa6<=vqz?+tBvf5euE@WBMF zAC7DNXk6>ZO|73C)cWZpt)Dfue(u?q`jzm1wfKVYWta%?{8N>&_=@m#h$|y41mTs%IGq+xJ39iJawJ}!@v6-;roDwzq|jVe;~x-L}=$!Bl06bij$)eyQVVbN**_D zLK3oc!KBt@Hkc48L5X9WRrtKEOl-S(yUZ+B2&=6y$x@Z*TxPf|ruo=8=rAQ$P3b%M zDPYT3^Wu2jxqoy}JR{_Rl1;QKoLT~-WXLR-9f|2P@6o!YPL-&Pl>|4uHwz5A0;$mLFcb1!YDvQ|3Z#$qM9SMo$f)}Z{LcC4# zHk|R$(afFm{pZhrmalz6??^27dcC5|RH3EGaX}3DTY35Z1Nvf>-%)#SV(EG`R-Ouhvd)EH#zIDIa-&hJ_iM3D48|7laGGRq5 zG6|VC6@yj6npkI0m=I;9BImk*b;3qU{H*mynX9OcV*Do)=e?1>eo(O50VQougpN@7+=^`BiOToW5y z=W2VRy$p>#DT{#Xgd1X$d9E{KRWbeXO~Ng)%|ghGcF~MXHq~wu?j%#Cea7NcxJ$Sv zw%C-_-fNdNQ{{kgDE4QS+L@Vk-6uRq{Y{-tS)Sz~;gQ&z^(8K=qV}r55#jNC;Q3%r z2v5^y=X0JBo=^HHZB^F1@p=82@FI@{7uxq?=h{G<((-;o117UVTLg~GMMnxnI}PWj1Ou-;{KXw zO~?uJj0H6>BvsM20u~udYE^)*^+j3c!>?kilku8YRuC*#*-!T*CDGfv84C+nOt&PIJSzHPct>q-5baZ$!DxVEWv sW~fKKTr#f8+2tN`0ZXnBvsM20u~udYE^)`=d~5>g zVH3R(|2ktsEeXxmlYWvCUNbfe^OVgq+hT01HHizIzon?t$lo?DVTZA+)`izpS#MmQ z_zmN&+7uyGmO{2eTlLyI#`|JwDOMu(!Ux7jwIQaei;+S#>XlE7&uVv4>4KdY_zUA} z>92PN<7JjT#=hE_^cAjK*G1!Sz&M;P_pt{xjNwo+4r1p`$4JJ32a|B$SZ~bOrlFH-AeTEU%(d4DkO{S*z2;YUQw>(A5Z# z@n$AB8R{nVh(7k)mR8F+b?7DZiC#urXmyQ&enLSEF%W5&1~r*7W$Z9O81!U6mD&m_ zGL;x29B3%o(3X8GvX0@E9v_^0skjojRN53HD_vgQF3J`hTQU(NGeB3v$3XZ@&J+_+Mm6O;dEW2&o6<@>2BIy1QD z$*vP_FXcnRBOj$>p7OSgT6^@E@I)Nos5moaWdm0?~)b zIhzW#X$yEpc<$4|zm2vn^_>s;3 E0i70fjsO4v diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_IQ.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_IQ.dat deleted file mode 100644 index f44af3a88f4e33a7362b7d7fc8a3c10d08c7431d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2336 zcmai0XLlP_5Oo}PJB5TKbV3&;q4%0l!_q=s>hdH#JBzpIzPD@Rz(Bx`FsAojj{PAy z=Hwh4at`156{~;4?31jORzA|V(Vdz1X6~JRqhtMqzJfj4*VpHTCE-cOEn|~C$iIbh z4jo3nJ>MkrSVk;X7##2#iumy}y!V3aUs zZ(+c5b>vh;#771iBiENs>e4uyu*+b+j6?(5P1s`(ahx9p z(GiVv28=C<~p#P{LR1`_HsLEjhwxd{FA2P67DnPW`J~%^Jhi z|Nb<^t{C@K*0^aUbGNrruqNzXX`#7R>)BVwhOj^=70%)s!nG+i{U#pQF$<}goWVZs z-|8?HJw+>YgNndR4eGJR@g(W zN>{ZI^N^?SA+Hh*MbPHCM9fP>DvgLx_e&)-W(c$9li+BlB9$AKHQpx7nTMBGRJK-* z65cVWSu5+y=3N5W+s$>6Z1cQFc;DX9>e18ElTpZ<@EG9(ljR0n)Qs?&%j-kJyuFpP zg4i!g<>)!T7GAPY8J)aUjGwY)1i37J~hks7^!qnIF2g2tC`z7Hk^KP}{PQ{Cr@bER^oAwLW z8~c{ZIBHgMV16^|9H*YY#rmxidRey;Rb)L#j| b**lp)UkV*7>8E_?IUPw~<9EUz@&5k-nG~1l diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_JO.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_JO.dat deleted file mode 100644 index 4fc364cfaa4af4a8392668a72fe89916fa4999b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2335 zcmai0XLH|g@7GnOz$0L><`J9 z$qWve;jd`_4Oeg1t6i;U_uJDg@7{CHm9CEU6Z%T_XkTBSA60}e9nZxUdyt=nat<9v zzdg?9SSsbkk@BR*R>D9%L4;F@m}1i)VaOigxEY~55yl$Bgb{m~ExMw-DjP-#WA-*S z_@0iPs)+f@P-C1hVJ@4Ma@ui4EU=BRz24EJr#RLXbJ$@Gn&d1>hOVPypRaH5q8^SY>mA@I+;u3Y{DL63uG)Bw!MUX_7KMfQ5YZ5 zIEQd<$r$Q4;XK0mB~w(C%Sz68B9<;LAY53ow%GePvo@ces4do(YK!~%u#o<39+z>E z)o&c$)E2n01zc&3*?Tho8h5kK=0>lp z#(R}DZjcnc8%Rplgvl-lbWtt8Rjr^?t+1hFX=Hga`1oV+?J&P diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_KM.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_KM.dat deleted file mode 100644 index 9d40c4950898bd075b1eacd9c3b6adcf11272940..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1161 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 WMM~PtsHo_NU9zc)EK-LooBR)o-gp!M diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_MA.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_MA.dat deleted file mode 100644 index e4d646665743b7047af7c3200d4458196f52d8b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2007 zcmaJ?X>%Jz5Os`C**VAs1OnzTtROM>WzK{E1`!AlU^$nOc5E%)LvLos#)c*dv7KP< z`}mp3%|=_&SwJ1!DiCq1F-#b7hZ)f|6*L$a zC6wIl41|GBy@p7cGS(O)j9aorDd#<3qypOsJKS;3Tux%?%_b@mT)&gB%PldQ29fl# zkj9mS-4=^vDmJh^guU(%=S4}J);0DK_B$5HnQ#^1YR8Ha)vA&Ufk>r~YX}FN%7A5S zUT9uy{?%GD_qpsj7KHh*ue_VzM%n zU#{U+?#H4lxQ&msxtHNoN;!HKWj@)W7jZkEXfH3}4&x3m*J9vH93mXvLikis_?=q` zzpE(x?q1>d^a{VXSNMI#SU+?sV*juR*<0LCc%av%2MG^3#m*kysOB$~bUbW*5BNWfA#!13!HZGOWc%ATub&#{YhEze~ zYq*3r?Xd7rcgFZF!rKxoGxOD}6k zQ?+gIGdPFYdUnzrq3+bHc3L~^2;opVn@IYBi7;>JLPC_$W!rL-4l$GM z{SPuEOq11E?C#*I*hE#SJiQcElThO$!pFHCzN`h22tn>PPCJB8Y>#s) zF%6uu*c471cV~8Tp4uiqL-^FTq-%kU(_l8JwPR-qE4GLquNnv2fmOnq?X_l6Z>8<{ypIbE8D_;pc^5NQQpgsgr7DhD;uIfhCEq66Mk{`aD$N) V+9(-i_d_q~R7M)V5`HsN{{nn_v|#`M diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_MR.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_MR.dat deleted file mode 100644 index a79d11782931a3e7d2ab015bb043c63469b105c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2173 zcmZuyXLB4y5S3(Q$pIUioYMie$T{b*m|)Tpm$}=KylBI{om~kT8Z0CohX^(~hbouL zE{ZCb3xD!2+50#2^+~tV?S7km-96L&-rJeO1BAYcJ=WLP=SMZ=YsYiZZx8XeikWS5MkIJ<-9o+dn!x}MhK(!2qUHzdvylJ2;=rv z27J#XPF*FuWoR%#n3T=twVricl_+c_Y_lgh^H3COXF7@l#r4|>JM3{r6EDzCJ7jPU zVW(h$PShHzg-Q4S_DVMsjFbpew9VDa(#!XR|ZeKe*Bw>uk**d>(I)tE_S9DLd9$Vz4RT)z(C( z(MGG;T3pM##+vLDpUVDSgRV`5i%`XJG>_{DmG;yF%vWm_*YmWpT*M7Lqbyf&BTv^} zX2-FYrxLV@eLRmW8<^rbWVwu+xPQq#i<`M~S)Rcy+_5Aq;a2Wb(37~0yOZT9+@9Kl ze8RlvYTQA%vqXuz%9OafSBZOyO5EG4#C=62?k_6wK(7)H7L|CYOo@lflz615#G`2{ zE;NY>-F?buN8>TV<3(>iL3px+k*CTSdAgU8XNrtG+slYmWaPObBl~+9dA`WV3uTPF zSjNapMMe&6^5)BgS2lR_)!dt}<=%Wf_okhD^Nrk_Z|2^7EBEHxxi{a*z4>nLO(*x} zdmFr|2-OlLYGq2ey-Mh!64Sj(%oLS4SX9F6RpR}k60>DW_+?52MJ2+N&Ds7VUA15k z5$bX)AyqM7+Xf)S64$XZFoZ;`%-K#|$6n+bq=Y%Sk@!x}Z}EA;2ZG8izJ9ka5DwWp z8 zrxkgXTwU`5Aqddf$&-sb)bEl6es7Gn&I-BFa5Pp@h1$I4C_gU>u rFTW9fUo${kYft-ZfIkR-+Pk>HKr55RI%xA@7EGc8gTDxWr&Ip}io`F9 diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_OM.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_OM.dat deleted file mode 100644 index 2e9eb80068f4f5479a73da1f9a41bccb2327f225..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 651 zcmY+BS#K0E5QLYICHFx>!cDkB!WFKcu|mB1&2naXBMaLzWqXJwQcL`Fdc9<{`!@4c zm%FGpQq-yUmyJt!#CWXsgx6GAZ`|0v`8nkDO z=f%`gtVA4y7mO3NFQ%%CkwVoE%1g#8b-bu_!7i-pHRDamH#mdwGRs@WsXAKp6|P&? zMdR>}akkv>cCd5C`?A^PJ|7q#=Q$eRHl1vIS^vcNT*fZAwyAZd*YhkFj4$OZa!t8_ fC08eWWqebI63~-LT_iu-N9t21pYWaWqr3PAADGbj diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_PS.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_PS.dat deleted file mode 100644 index 322f0f170a4ba8226ec35f12b449be81cd135671..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2273 zcmah~S9cpl6m}eUJB5TK^n@--Lhm(nSV|z2r7k1w*jc`PxeD{ z%*i=8fdm8Bx|LWkMuUWW#)cGdr$Tg`bzd_UtgaeRfI1c&&3vdkbev1965@9 zdz{a)RLYAZ}?$I zJsmq$5%ZOy#yDZZTsAA^wBw3cU>jk(J;9a7qfk1NkqQL&?;z~7$2b~$fpoHz#s!33 zCKkw8G-A667urKy7erxvOk)pWZ^;DeH(?*)qLKk6%4H>IJP}J57ZWZiSzGLV+*zAX zPuCV}OSQ!Vd{{{THb0kfsnu^lrsvZ$>FM-8TxM;p2UgO5IIxb(tpPI+cQ2>^W^K5_ z8m!l>awx0WZw(oA>Dlxght^Hi0c*HkwN^V-TT0L2N^8U(;91g@^bD@DM$NS;-%(rO z!4`0}HD>S0@@qWJI)@vxuA1yM*0@1Z%x)mL)|xQgMWpra>k`9PD3pq3aXq1wG1G6D z!3|78c1+LXMuu;WE4Yb)n}S8$%z#aF6$crrIiAHK2563JxP_sa;|gwNV2#?_7*M0& zcAma*yn_eLjs0IhqFN7Zrq+W+wH|6!>)}qd z9_gyqqdn9*+*Pf|lEk=K$0BqO3ZMTOc%1M=r^lZpJk^V}r;DsTQ)KPgPS&0)vSw|@ z+Ve%$UT9_Q#ZJ~<>dM-Y9<06Gm9#gk#|O?s8)Wv2*>riqbNIN3~m zPFOPUR}!UUSea{Pz91~yd-Gj+ABuqY>(_*D%${hEJ5@hX!pFCS z@7f>S0QNoM2ea(k-}#a7Q+$N3BMTFChU5;>a&9NS$-w_)(|z*&yzlj e`a9tddp83Mq|k|yLB@xk)3FRR{v`aB9Qq%ABZD6R diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_QA.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_QA.dat deleted file mode 100644 index 609074c2b1d40e7954ef7cd738220ec49210c042..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 651 zcmY+BNpBP}5QT@3A^So?!cN#i!WOn)z_p{wZ9jPRKIyD~Bnz?m< zub%5w)!!Ay=v-}#MkCi$z1-S84|V_+vTxqV}9$JGGT|YJ5MyV zQEF@Iu{RkP^Q_8*TBl4gV}G(*(%n)~aDOuH)VB1wX@b$yCVG4 zz&I+*n@s=NG2@}ymAcUROA~eK{bl149x)!PJ>j*ftS2`-{DkpT9f*)BYeKeDTMgPX z#`9uoO{_#5gcpnxwJ)Zsi_wItAC#AjSL%3C>4IHY*K5X`l5cPZ@-oX?#;H15^cAjK z*F|!8$2ePVcstlR<9*rea-R>3kMkUjZ<|gwzN~*@d@f@bT-($->h(O!1>;LOi(FGK gV2!I2zB0b4LkZ{&r7jvj+ehkCHa_7y<41S#4+mn21WMPWwaj*f|iS%vnl zg~^549TPjo7w+UaSX_Vujt-VcElc3kjlh1j9EJ8^X@MPhaIj2jXTUnfA(JsUCUlkD=CB+ByY_(D_`=+d(X7Ul!py?d!Yok~ zZo}oALi=XHvQb_GgXL1IN?s^yd|^6Js5I(7wJ<$cUND1>3RXz1$ZAdQn1FmH6z1cY z+A%R$u`Qx2og3Pg9tuKM3WJq&C|P6vh((Vl8LzOxs{}X`lK`ZNI~VHB#NRtjQpZ8-R)>OLz`vhyH`j)pV%oFaXMhwpu^Vt!Z!P=5ZCRf{UP_RyFGtFd*)Q~O4NI(P7 zUBp6RI%$oYa$U6@&@Wgo)vc0k#~5TtcG`pW)oSnl!3I@IoF=uLixMNMx~lDVYwvQl-C~rd0S6U%gpRYaWfM6@@5NboO;~PT5bQHqutYB+#DA!oqf6rhWTe}V_ z(LcnkyRCp)T5J0s7HsEY3gJ_jUYM@|8)eMIsSN8linmwWLk=Kd4n;9KQRIwRwXF`nJHOhKKu$%O3 z^ne5*<6CXTcbAIiN7N43Bk1Rx?gW#(K@Q~f62c!6AXxYMdr^iAB!^3GX;A@ z`fRYLE1xdSms=_diM>)w!0VG6YWGR!^1}y#o z6kDJsqotlvhp}H!rZpX>9UTV8 zNccB3=UN-`!Lea*TxwC+p%VGv_%NsyH-k15pE3F1gfK{pK4a4PU~m}JNrix}ZONEy zbA3Lj4}*+k8Pz2i5(YyBlpZ|TWQJ$ct(p3uAq=uTB-z?c()xutL6ZQ}Lr7?IbFNR2lZ3+E9cRXt&BchmK}%{S_=F~(SC|>awSa>_ zipUJlL{%_R6=XasOzJp0$VXj6c4$LupP)6h8ZzMxj{A2`$EYZXWfBpzIbh#lxYV>` zY%roNpO>~lJG-_yDGWwRsL;x-qyQ3@$7#P#wD{3@(;?rnsC-!r;;#sf|&QbX^^2 zGwIfBbFK#WK*rR-otiv@J5!U-)HUOFx-1MXmjG{U&J7K&2!ktohD%m?5rf+-%QK5g2gf&ejCSbu;C9F6tRiS>Mep!fn_UHa zCm3SagfLEPI1kGF(4z8pxQ_ae&o;jsrKCXNj6$6?>1R>t2~X zasK1-j40C^0{jK{S;Fp@(N=D#PBw+p&O=SFd$fNM#s!lut z61jX75*spg7;rPeqhat^50dw|N8S_CZAlHz#1v8PrQk`+*HcOAr!7U#h`PgClAhpM z%gA%m1s7+IK$;#r?pyCdege~Rzj7`Q-b<>+`)zG9!235q6#O5A!G~w^0$N5R)FOr>h2LH&)##kXZE z`5l6pW3NvL$8AgoG3*83hrthIHnpDjDTRK@;kS^6znP!;7_ z%GU3etv_s+P+Sj2i{B;u=~(;Ab_vBMrR@FfvG-3^C;q1+kJqm@Wg9cWzoF@}P?s*C z&@6;c$D&ynqSq?y2W_RzB2;n@2D1UPXeH!gip0oo7N@}7E3V39)ruiV!w0>GSwhhm z>CKW9xM9XVgo8cCJuIZ0MY~yw5Ki(ruA8MP+2KHnC?U=)LlAfDWE?lkQgnAwv75_5 z3Ff%pC-IlAGa0iy5<{~B&g@UkioB3IaAIXvf+)SObbO<@uLi$XW~%bF3I#5?utJE` ztE!qLt(KU>>Ixw*noPHJtVM~Na(-1vh*_H&$H6)jIb!%gvo2EG z8eR#_dbsdBTt5-L0aMk(t`v$q+)&l@a3jq@2@sCDDTE$wOd-L;?o78HZbB*1!%eAi z9`>ME;^AgUMSsf-{O)CB+SHrPp$p9xIJ1$r#HU9=4MZE6j7kjeGdVreSZ+5x2~j?J zRmb;MJPGPUf$M#nx6IF6{vw*bYD31hqF{qx>r~v;n5_x2^ld{)Z!lX_ksI3*;&|My zy2bW@B=j~znwwkA4$y^WN1RFOPWbdl-5H`x{v--VBc#VUhuh6AR4bvoQs6=uv*J#; z-4sV6cc(xPBV2KB9g)~i@g%Xo;^P|&xx=QY9s>xm6z<_0M1>S}Ik+kJB*am;7e&r- zlil1K>IC|-xw;0k4|Ji~7iZG9A3i<$_J=5at5lsE;n>6X2|R!RCGfy%=z|nZ8V{zx z*uwT1^G%G#L)3yq9!fz&E4Jzsi-!?ni5y6YLqoahA5MUyaZok<5deTlcI{XWbIKr# zWQ=-^ST&m?p$<(7XX(X{;)T>kdhw$nrq);SlAEFX=;MqSF;IIR=xXcsriKIf5u<^rQtc8L1{D_GAiO<0#|oOJ{5)C7q&X zZfsSCTkDo}00FBC z-8>I!gr)4JVs}zvGTKKp=R*~m3vlMBb0I!G_AY|x=4p28&|J)PrR@?5+`=z7z@-Wx zSC?rn77&fimn(=QU7;WuA#TAygqd~6x#miyTV}2*MhOPnW#($8J36i@1G^UK@$lQ2 z$qj97sIl8m<~ry?b3M)^;s$(rL`;I{R{cd=K;}m3l#Iz0fHx_Sq)bs@=_Zu9S%D;G zDg~~QCH{+w=2Fv4quvtKULMWc%}l4>5p@eierZ{nxtReS$l^RKCd;kN&8<*|<~E$k z)=YeQY~2pg=32beHM6Kww(h6^oUK5zb*BQ0b7T9PISM3OcTrHbI)lO1TrY!zp2?t!kDEt!kRK8Cp$%Fx`0GugTypB`HeKy=HTX!bDgr`RpMxGv1Slp{xsCk?k%g_^)_;^TXobdA`wT_>s%4YgB zG+>91&&07L%dlsV9GYiwmT~YoUP#$8O?w`q?S0$=#=O9ErR7Bm?0r1IO9~(%FKaFq z5cNK8!Af2-DRHE6z50A2r{ zg174sFaOLBOt+5z=%d`4&-}!6=lIVQ*&1G5e?giw@2|M<{Q4~c`#aOruRkbwe*LLR z`t_Gudw%_`0Q&V0g#^F;$8_u0zdp+Is|%i9^ZZ(fVkf^AMp|)W%7S$fB!^~EoTV`r z(kt0h8KR|q{^Lm@>TuBi}uxE6&357%b8 z^>7`{sK~>0nd&@TFA=mpQqjQj6i75LYDpVR5X}Zqgr+Ob(!?9`!Zqql14!pv zO>?ffDT_yKYxpdL*$J4??2I#~NxR_FqjFb>b_)s113WLv9k4jq(9F9Lpk(e&fxAOV z$bO0>o&70r!5$-JcHr`jCJO`9f`sltLDzG!mF#}Gy6j1aC3G)Jy8D$>p}h%kRPIv^ zzb^ooPH|oqlbK7mwF;5^-pA|*eQ5T_S#H|{c;Rl_10i<)Qlu~qgyMlua}brv;=vTS zYK#`4=r?23A&Me{hf?VDy^kX0hCNKtWN#n^WzX9{uoms+a6&A5gDBapZ`r7j+f@zZ zc0Gb1$Ka6^JALn?c*CcjirzrArJcUZU)GC_1oIs&6 zFKI$7FM}ynSoEZX4Xolh}k=4Kp7gh@$3+>>}Tggf5z6m6GUmY7z+Br@A@;qf|r!OTYxro5iC zU^XMwhP<9kVZnGkMeWGzsT3BJ*N|Y#>uHo0oY&I{cf6iKu{y7#07GPRU!alCNY><= z8`Gwyu?L6)Vf zl1w_YbTvVarE4gbXX#p~5px_Rn$r0^ALKOIx*9wUYp#O|Ta7r&RwF(=7AHZJX`u8` zb2<5yJsiZ@jZ`Uvlgs07QXJWvLV?x9+d%AqU49Z@H!GIRO{L(*pi+x=GmQ|-TYHfK z3XqXmD=e`!oe;;`EfhJ+Ep=}ORG8Ip6(WprZ+56jHGb z;tf(hYY+d%nOW2-XLnSD&Q>UCyHlaMKdU(kYjYGz*6yOfiLFeqJ5>Nf3w9leu%z8x z2``+@Bf@bupQ7D_>r{Zb2io|t?zAz@Bh0->z-}YX9!vK#54)}(gSQ#RnFpAr+&q{7 zct`Xoi{tAO8AFe!Uq!Ki4bT!pp|6inJaq_DQ$NeKp^?jvF>bstx@5c)nL#?kjF zMXzl-)yjMZJt*Y8BGJ~;+?K01pCdIiU*If#(3iZBYRFdgR}k&p1$(=8uA6``ae!okl>cO3jeQG0{9zP}<( zhV|cY;raG^0`?E4sc(NK0RB<{efwJho^SssfWG~YLV|DqGTr*t1qC`(rzDMw`G@a<-Ksx4hB zP_nxY2~}T_0LR-()$l6=AOW%pE{v^ItE z9IZpOl{i|D0LRh#)$kht;0Ic?(2zju3RP$}#90DuBVM>b>jp8QCb|@8Hyaax zLrCmi4ZVq?N#dpyN=ekbqd@DS79?>q3Y|$*e7o74YD?l4luAi-@GS{&B-T{J_XI!! ztrsplj(S%!>_Y$!;izvl^j3-{M_W^<#?dxvL5{YiP@bdhsJ0w!PpJ||I}qSF+OZmb zCjby=8^hTalga1X@M@ThR5f@}uP%DpD1Kv1zO309cy0kM+(UNo_7vUgDi zcC4(F!9Fx`t+X%2?pg)Op_27}fJa-8lN7G$3T=D!e56)Yf`%MLL=Tc?4IL`+8Ob1}{m zQJ3(-MbxDb-LoC@_%sQ6)XSKPLx{LM5psn>$itNi!B6ZkhiD#pl|o3v)fDVnPGII5 zrdj{5)l6g-pjEk!sm}H56G1m1RoZzHEb#qg2)Y%iXjk^u!<+FV-4n030fA>Xab|CQ zJ3c)UWr}Nk+o77Pm>_^O9YDL!O zQs9?Vr8VPbE4IsH%XV`&p_a^fl)5DvM%_njNWsh}*l~OhMJ^9Y3$+EBdjUc(&8@j2 z%A3ousr6l@}0?gTJ3yn_^IemqK{FGGEi^5*WzN%K_ z_B9F`vc)y)9I~$yYB_#`Qa99A?*F19OGCCmu;aReqP90Rrb7X^J?P$4K6S zGBj`FOt#;_r^oiY5WS|v<}TmejXQ?-sKg;Gzh4RYfg;K7hZLfSWq#2d!jIUG6irq? zrl1ka8JkWY)S}&dLWpJaQ%cGR;doH3Bw{}!$g%i2MHjKfZhiq}5_|G+^OsPD<|~}Z z-q-l_*!u>etvlw+Do+sq0cB|Z#F?!Ag-?&w zzaiQcX7r4!UzLBT#vzRUkAggICl4C?xPKK#CcD5{aWTrTI3^<&7b1lDlEsA;FSqPu znb|}ynOaH~Ap{4$U%-3qi&i&Sj1b4+;uLiuUFzl%P$%&x`#?)V8JeYVmWkccypX!c zQehd0cAHAKAbe_;B|s@$t{QrIMU%)CC@@z12VGs>{GN10#goXD6fZ>D=X#w*yIGkK z91)SLP|`iNq{^>KfTMA>YWURwkO|@%xbRq7lZN)|igav%brel< z)-99edI};V>z4s-z;qlD4PDEiHe|Zqzr|rTMtW$v<1B%* z2`^mWYzom%W#zk!S*8cml#b0P$RqCjqGOiXT$S{G3$>0crEA(!0rb3vf-{HNN=V)&-+l+X?I-LzDSd%-U=6h3U?(T`6|*Yd55!HN7cm3x0tuei+5<4sB@q;Vf<1 zpBJu82SBtD%pRQ`yo~Z}!H$V$4+4~kJ*%PjQZ$*_n*zrgmv7v&MtMsJ?4uT>YG1XG z892w6sTho-Sx0QsZuTPxN5tFylsH*algNR1%#VzO$O8y;L>@>{Z(UbG^gNM`IS2rW zmVV-egyHeLaA8;r(apf{TbzYyt|d;OQVC60LJn3W$*iNm z`XZ>2Uuo#oE1E=RDCjH)6HVIS*NAN`u=g>95F8PWLn+yrloU}KbPWVK3bPdLM6;8d zCqgL!Hw+gZH;t8yny6H6a+Q$HiX=BJ6e@8OD4N_D3YEFZ6M`e+rj=4PZrTWP+zh8! zj++rs7Kc`AdT?VV--6%VG$%nBnvpn5Xr0Up7h0!4w3Ww=j^C)pbPChgF_=C~#FV_< zoJxq27*gQGD;ay5VoBra6l4aj`O0L`>V>Eye>P!FDDtJhmp#)PL^Cvena^MV-<#kpf4xBAR-dvlT>s&Y|Ev zh7)nG9Q8EkDwxEaN1>=_C8no2pE?{7BNvn)m64w2Lh2k97gc~>3>|`sPjAMvpw>(} z3aLw=3eBZBOGsVD3l~zCLo9B>sC@jc%KSK_t{_CYx{^Ytkn*rsDVCI7O(7wqEItaU zYt)9!T}vS$q^wQ5xsDJV5rNm27?e1010jybN!2ZG1Vln=GA=x}ZlbAfb9>QJm}90; zr7Yb{fqU1*n5l{(JJTrGRZ;Oxhy2g#O!7-q^5dZRd0}kH@@E*#?a+m07S8-Jt~>DQ(K8#O+h?DNVTWDPolI3`=1|~| zap9MeBK2LWCMk0@hgcm&$lVGd7xO6S95jY;F*cv+I3gnMp`^dDWy`vksg8sD5<&MP z73)zJVSlSFWNY6gcPg0FNnv z1U#;}IDpJ8pHL7fc#?vBDSEUNgb6MRdx{zy5eZLIvfYralFT8Wq0Uk9EJbD2m2I9w zI>_Lx)c=JTS!2mpscwJ%c|b$+0?uUTMSObfyaZ9YCz;&InyMEjCgaS@R46^KltaC$ zD01|gqTDhi%IkGSk)$^$*g;rI()0FKlsEuq=#L9&zQ%On}rob*V`i?+)$3+xC?iQt>T^T`WP!14_F&)K3 zBrUGl@IH>qS%PUe;$P!jG6Av_(%MdpURhWg*PdI;B*2$tn!2?d1@67X#VxN&y0wB@ zdv2|$0J^mjg#@=&X1aB270t$TYgMMvZ_R$;9YXBCSHF0LMu7yv}|Ft2eHb)N9GwK`9d;=Hsb9lmo$hgHgPO;ILVAi3H z^0V%L$Y4FqfE=#>A2QfLGa$!ZDQsEn0z#*2WhXYIm2H8I{zE0Y(FRA{LL2{wEV{!6 z_oDX;Ci0!wCP)s=rZ}_3df?M*vCSab8!@`o&E`zg7TJP=>=sH_X|_})*{)IR$Wm^^ zo(dqFy(rj-wVjyh&2-CGAI(O>CMu^d({RLmY?T1n8foyCzlJNXJ;?ht+aNJC+u|(! z&UUboL4FjXDik%CN5RlSp{>GIB+gT84ZPVb@+I=w3eotrrr`k&pX zv2O34gp-+BKWcEq&iAKiXR=zY0Z7$;Xb)U_Zth6~`XF5ZU!2;DDeB_hCF*@tO&9kq zQSYZ}y0?Fc`T(X_w+<}PAH)qn z9K>6EW)M@`gYMm@APC#mC(m2!E!T9u?t%GRm<4w%#nXWEp%7BI_h>j0c zkjq8Fw?RR4KTAQw7n@7kch5B^Qez1iMybrwqLDfrF%3-=l~Gr=$srwNaEfjp3Fm5} zC5>138%;CRp=rUHtOWS zcu8gKrHUnkmsQ4IPPL`)ipt>UdF*hlITuh;$T@RK~gdw!e%}lo>O!ZMw zRx%JzV>*u5`*w=#x@DpgRcAWV;#i4Y9@5yBt*^m5m~|O*3$&q`fiqpd6`!8#w?VW! zov0iCvyDHJjh};>TDTd@^L8_n5M|;(Pl0nWmIIKtUEgzm`5ns zF@ADfz@tpHOgu)(2AGs0q4PM?al|w{K~X~|≥`wdJEHUhA5h_p{wZ9jPRKIyD~Bnz?m< zub%5w)!!Ay=v-}#MkCi$z1-S84|V_+vTxqV}9$JGGT|YJ5MyV zQEF@Iu{RkP^Q_8*TBl4gV}G(*(%n)~aDOuH)VB1wX@b$yCVG4 zz&I+*n@s=NG2@}ymAcUROA~eK{bl149x)!PJ>j*ftS2`-{DkpT9f*)BYeKeDTMgPX z#`9uoO{_#5gcpnxwJ)Zsi_wItAC#AjSL%3C>4IHY*K5X`l5cPZ@-oX?#;H15^cAjK z*F|!8$2ePVcstlR<9*rea-R>3kMkUjZ<|gwzN~*@d@f@bT-($->h(O!1>;LOi(FGK gV2!I2zB0b4LkZ{&r7jvj+ehkCHa_7y<41S#4-9^3@+5lU@&k^WgKZ+V@@r~-9$aS!Ms|NbEX(=Zla}x1;&es!G!zH+zVP{yj05) z_h6zmAtx*`merDwR7KkgSYfQH4FS%ktXq>MWk^_Kte0euM1OQ`vcU#pQ>{zn-zJd0 zYoa&e-(qa5RiW8>(qk!Mhp}6jr)>VQJ;p1wDRH6mw-j|6`P;@N>@yD3mhhS?>y7IZ zzh)e&T@g}cDP((Rt6n=|yeX!ZVkKfPyk)#o+hVG^7%5bvUU|>>pbn;$F4(DoKQfL> zf4wspFSDF5KB@g_U*WoST{I4#8K<)a{}1+sai$i;IJ_C+T+NM7xJYH!v!%Z>zD-(d zeA{%P*0cI|#*eazf@_;vXGVI`-cQD5`3dqw@+g*Eop8mtR(n#=lSy49KVDH9rA$8I J7vpz#`3z6>!e;;g diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_SS.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_SS.dat deleted file mode 100644 index d4d7bdfccc48dd53f2c91412c624c2319cd85538..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 631 zcmY+C$!-)e5Qc|ILiUA(gni$_7S<==!Zp%d>Sj6JPGn)b`}YDGq>^|S-h?Nk;(^x8 z&Hn!SYjOG4m@zu0_0eeLx<)&rY>O+jB6l6tWP&km$~l`DZSJBq2}_LSnL&q(qAvuk zFs{;?#C_M%>W~vw8EdpEBsJ0Y0@fKDv@O8dlvS^@qznn0jIEmNhcVw&tFy*7V~4gR z@@E%}I`5*_;@@TL(T31$y-}A^!ZpTzW!_}{j~y_s(~iW2;?GP}Y3k29mvG29qFv#w zX{^_7NPL5FllDbOjWr?LbK4BsEynF?>P>7!9E3ZJyR;{!ro?DMGaZzBjQeynuasct z27bVJSo<5CL3^3y5#uo(&ig7?y(>{WJYhUtEck!0XN>2^v?R{2UrzCYmh0)yZ_MCi za*CHU7AWXdsVi9Q=r!ZbtmDr2T?wsP)Za2r>H}5W+SEHeRkN<&G2Yh?BAb(4S>xJ- c4~&m=AQipQsYK&1UoK5kHa_7K<8wLr3lKKQZ~y=R diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_SY.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_SY.dat deleted file mode 100644 index 018cccbf7c4e8e57dce920e61af477c7b172be30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2335 zcmai0XLH|g@7GnOz$0L><`J9 z$qWve;jd`_4Oeg1t6i;U_uJDg@7{CHm9CEU6Z%T_XkTBSA60}e9nZxUdyt=nat<9v zzdg?9SSsbkk@BR*R>D9%L4;F@m}1i)VaOigxEY~55yl$Bgb{m~ExMw-DjP-#WA-*S z_@0iPs)+f@P-C1hVJ@4Ma@ui4EU=BRz24EJr#RLXbJ$@Gn&d1>hOVPypRaH5q8^SY>mA@I+;u3Y{DL63uG)Bw!MUX_7KMfQ5YZ5 zIEQd<$r$Q4;XK0mB~w(C%Sz68B9<;LAY53ow%GePvo@ces4do(YK!~%u#o<39+z>E z)o&c$)E2n01zc&3*?Tho8h5kK=0>lp z#(R}DZjcnc8%Rplgvl-RFO5S$lBALtUXg??b*#(d#=dZ^R2AC(8=11U0FNS zgSD5svi5S@jK4y7wPnWbe8vywGyYmWlbWtt8Rjr^?t+1hFX=Hga`1nV^p>~) diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_TD.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_TD.dat deleted file mode 100644 index 3ee8f73dc0efc914245c05c1171f10bce8e020ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 589 zcmY+B*-jiW5JiVA?E4bP4hj4E5%~lj{AQW%0$H)$eQkH5K`Mz)r|^*0%$t2~-CAF! z8G|#mI2a6EQyE9v)|gUr@;6c6|HiahmUpHYZEm8agc-){$Y8=#XPyMjF+QjTiTi7! zH6bU=GZxgmkW@w63Rq+;sZ{~armS0&C1prhW~`KC|A_wR+GK-O#+q7@$mb@Ier%#Q z;$LTMs3oDlxUX>Cx-J@rpNwCV1^*9r%s45Fovd@pI2-lR__pantta(!#zh&s;M%6v snV}x_a>=+VXP0}(1uVHb;hJ%ywxvN&CUueg+dk4TW%3EPjJxjU6>?#|sQ>@~ diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_TN.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_TN.dat deleted file mode 100644 index 1b4d7b5780f797e9a808ed0d3cf841d2482db1e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1651 zcmZuxS$7mg7)@eALc)$9;sz=@DntPV+?7SpM%+-#wXNx{gfhL%t?Eh~^b_I%4<~;k z4<0>v;onUE8^5keW~MXqR&~Ga-nvzFcY-k15Ie`l#*#dei3)X$aWTbvX~LT~Fd^o6 zT_|I8ksGZn9wAJ23uLzFR_taV(Y6R% zvf!4P#T;RmZ?>Y;QW(oZVmD!r*u|N*^Gt;cxk)A0??$bS79xX9LgkfNELZ#|dt}iN3&XHN}&TzFVjIUd@*G2_FpD@?qbWi+x)z z^=-M_x8+LTmXG?jTph6G8sXy+T0a@q8VqZ_Uf25RcC9x?Y5lCO^>fF*RJSCSZHq4m zU-~xZ1EoF2bTYO6p{;Km!?!Vpd2;Y0uzum1D{R81g zvCoeyR4wuo;b(DRFk+WfqKce9jF9k)uhJQlT9!%ghmeG(*uzzsOPk7sww*Tf#3CZZ z4gVL#D$=P;pu{+*oy3Cw=N3)wT3GbhJZ?F$x0>8d?KRhgUp*xoX_XavK}WsV5+U(L zd)#&aafQ4PWZ#i_He9iD`B_0T!`@J<^`y{)+*r( daEEYL9Atv2lGYiOR_9^cwos|XD&a3T|36;%LsI|% diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_YE.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ar_YE.dat deleted file mode 100644 index e135658ba9c645069b73e524a15064cbe5bb9e47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 651 zcmY+B*>2o03`M7DCi~WG-S;g`lXUxrKFtrPPXc3W0-=)ZE6FWffIvUJ98F`)yxHgS zikIZy6~^dHZH`7G*Hq+;wl(gkvHVliKfYr{ZOeByG1}ZjYZC4Y6fPm$5fbG__G` zYwEE-Su5sQl?k;@nPSGlWVNKbrJ~^8WZbD8>GP)vMo*jQNxC00j?|XWY`xJlDdCuL zQkXZH{eTz|#w9#pJXHI_Yg1WIZg}_+WZ)ybl-aNW8t zlEXX3`{jnWgPk!xl+7;pIcI#F=V*M}bh7bf{ep2>#xA(Fsdd!rd6p~2r*am#rd+@p eS0{XCd{IXd&>Ko!G=8>^)TeBG!dJ$(?&=>VT+sXg diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/as.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/as.dat deleted file mode 100644 index e12c4cd3eaa76ac878f7f0f89f59dd8710076d1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234427 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�XVS7Xz<2k}{bdxWNmHvY;TpHttW88@oK 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 B4}Smv diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/as_IN.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/as_IN.dat deleted file mode 100644 index 647a92ac5be689532c0d7a09e7aa26a68352f236..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 631 zcmY+CS8o(C6or>SHocIL(0dCllz)LD@$5ItnYkNTu|0EKK!bE8emZx(Fxq{yzjM!R z_MbJzIUc5AXczvyUYqr|pm zz`@0|n&(jzTAi|q8HX3sqIMR1}| UWKxOb=le)Q%H$KiGQO4bzqIJfC;$Ke diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/asa.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/asa.dat deleted file mode 100644 index 8406a4cb81d4c522d0c5753cbb06435c9b7a5958..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16187 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 QfseEeIa+0oq0EK<2S}eJ?EnA( diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/asa_TZ.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/asa_TZ.dat deleted file mode 100644 index 190a6dd3e3b03393f8bdb68b25b37586ed79aaea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 590 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 Q)jragGWmorjIZVFF9M~>bpQYW diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/az.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/az.dat deleted file mode 100644 index b5c17aa8af01eadee7a439ac34cf6bf4a6a9e33c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194898 zcmaHU1$-Rk_I7Z0_r;48THGN?J<>Eu6-t;So9uLDGG}+wY#_h|xzz+ySvLpzUMi!b7n&C|NGGm=gf1ScV74Rouii=@T-PQS)r<`D&uuHnPi*W=`S&5 zN$5_$zvPsaAoOI4;$+&oJjwb?b+kL}$;?i{vlW{ZYA$AyEBZ@s_YZ%W>He})mIBAi zCH>{5EDuSN8K>ZSIe&R|)y?@UOj!cYbN-6kmHm~btVkOt*PU$3xcP#=@^pWdDa+tl zuahYz{Z;FhnB}il_E%4>UiQ~;%Kn$fb^05rFI<0P_+pdPs&y;Q@;5E}o0a`U+21?`Z)`CH zPnVkIZ&~)YN^Mp4w}!g(EPtD_zin#UvOgqQ_P3kuZ(sIzpu4G!Qgms@)T#}ifHbu1 z?^O18F8jmi)Nnf0Im_Rr?C+Y|we0T(^|4w0?qz?E)E;GjPmp#*IQJ_1d#Cm;`};sY z4f?)if4|gzWq*I@KR`dA>>rpqu&0d>*4i=*?wc$A7A#H%Kn71-#le$#AVjWmHd{}hWL*` zVt`ud|B3K#)hvHf*`J)6T=u6R9j4Cqrm!&Q%`guxp zZ@lN4+5WX<|GKh&ec8XE?BAGdpRziVv(qWH^(4jhI@<(AH1FRu;NLu?alpT2h!)MP z+nIB_Qw9Il>Hcj4{_R1rFZg%VRplMc5IGM8_s;45T?78zsXH1Tyc*A0sI#8r++6o? z|DNgoy#xNdAybyc)Al6lh@^jC!(pw;?h-HS-`{Z1Ud2JIUHk{8`wtHI4-HA(2Paea z!yXo_2%N4$Quxy0{=?J#`2+p}+N}OHY#zM2;!3hN8N7SpbpMe7|4~?s8@AFCRj^t8 zYuL~y8m!^|W7GXb1ODT*IC=st)G%(di~q!Q|H%RWDZb~Ry;AqrRTZ70)`$6ICfT7i z*V6<3GnE(%!~N`Z|G5GGd9n^`#hVuo;|tUM7YF>8Xz_oB@#X3MD+B(2X!C!B@zv@6 zYXko4u=u~i_{Mbq%>n-{TKu13e0#e8&Vc_e-(z7cYTb_L7PsJui`?V?3xsv05sHJGwuwDF*^l^2UxM|1#xbk>c|C1@JA=(#S>}H*eo2bqr*8%^u zg75Bsrg-h5Ik{qcgnwSa_x8WgY&AZebaF1<_hkSKAMSrOWfeF)VbL5RFL>?O6?9ks zn<;AmZ2+2HG^amu_}hxbZvJ;uR#lI|#5V`NufV(eKUCm~zXSJwtiXHvKWRCNxgQw( zTrt?o|3�t^oeE0`KkrHf1@yJ&cb32G4gH?*Fd-4x%fJt^9(U{XZ%ed;5QCBUtB% z+wT7rJl%DeRH5b62w8Y>B|v#Zmn^}@Y<7q3x|=K++L*7@W~s<#cUhXs+8_irLkByz zOk}#ZEK7xPXwLPD*W<`?X0-dRvOE>G#?`&~0y+y$KfSd=WU`yANQGs*0Ud%|QVmdQ zEB@YnPg$ADS~PIeg8l<763xkO^c{+_idpV4TviR8YVtB}#i`XogWs)GnwF9L_l`cwwxyufIK z$Y?j&Ffyv-zrbjt$Y^)jm`c111U8$5HoFYlMK-0v8o$L!IpTCWxkQH+HQ6jQ+im#X zlAyu@Q|}ZO+?br;S}JaVcmn$wQ|W%1Na0}xlXHQFc{LYa~N$f;evlUs0e zzTo6!JF^%q+f!y9sm>K#zvv`-7tKl3IMQD1bYurJ94k9g4!qaxW{?+$8dxtoQD!q% zooUzlMs_x|L55Lgzjvf$5sB!O!V|;IV7%-?Srb0zdl^S|HEe?HMwz)B9&{vKKrJY{ z8{RB?P-bttTDp@6L(Y*s4Q`RWC^I1|RYs!4$$A?1dz)3O>_b`o&(g+{wy&WRWk1U5 zg`g}F-{0`basXv598zp|{L^fG+vw-<>WnSFpJUBXck_^XGk@z$D73% zX`-zDTQnyn$x=?xj|fUi%~)xs%v^>y6my-fv=}%}S}8N0YuI0ri3ZinB+88E7UY4U z2zmj14U~$>X44=Xo@gnoNlLaDON^;z)F{&^Gb`5M{mGIXY}j}?gtB@awPY`I!E{3> z$f1;37ibfcXmmT1!bC@Ex0zY997dV>wMI~NLk~gbSQlPvktYR&Wb`;RM<$H?ls0+1-7mYJodMRu2R9t5K_dC6AMrNAX z80n+T0`WTXaMYH;Xzs!YqpED3AkYQ7=bQ zW<<`Pjku7b3~G?0DKi1;9Q62#Ir)cyjdBcSjw->+$+3ovm*XfiQ`LEyVz!-`YL>xG zQl_k7&$vApzZ9YtXttR(%kh*M_Bs#6Hqp%De}dr?|`Hr{LTti38d6d}=7~!HGO-w)*qsbgI87JpcX11<%+lvKP zE-$IB&@Stdd>_qUvTsTog`%P2Eh z9yv9GPDsDwid-JzBdg_Kl$p9MNz@10IG{(UZS)mpRx4LhW>k$#_o7`8xyrziay4ao zcVr%!gYochLr2Rsl$l{0+&o@>twCetI?A!mREyJx3QevzlV-Vrvbv3d5o&x#ZZxz- zZlcV1M1kuGQt4)cTjdrbce!2y2_dT)EefI+;hA(LTz{q%+BQ>wce^HOT#x zStG|f;qrhPjF$%~GYq2~NlH{>JY+V_@-Ss)#8H^oLuEKW#70-k0?JIB2`GCxS!hs= zJVJRLK!bXXbr?=$Ff@`!&2)r3Mwz)|f+V#HUu57&d7LuCFnazx>6kxH8}%p5V3a&b znbmgSzr=)I7YzY>xKEkYXnC44Lopgt639r;7&bG+ZvG|0=8HGED`KfYpMqx{D}bf=g>Up25vUZczm zIswHdnJHqV_PW6n47IW4Uf7=XNXGVGs@r zYdz^ecGLnLK127Wv)7$}Rg_KMH78o-J<1iY7Lu4aaO8c1C&~wuHI9o;Rz5UjvV25Y zOL5@yp*3#aDayxYGF3jI%*31El$b=HhS-=o`Hb?mz{a3$O|a=sOhGOw=H0}Cn{xeb zJLans%}xp9&V;sIpBuSBzM#Aj$!Io$+RI6IqMT-8U9>Na&?sL~W_^OUb+SE?uMKUM zZzwYkrg(w`VR`=6;8yvLGE2)C$3>0)y+IS@2g+Jfoet}|{ummJt(BiBv!t?@6Dz4d zo6QLMC3FMy*&8u4dqPS)Fq5R;*+MEy@~(H_4im`PQjUPteq@ z6{2+`Wo^pL=5-ijz(?yCHd@xD%$jHdDz*i47u?)m8Q-jDMq^}s%Jdt0aP3$Ck_`+T zD;rYgyX#y`Lm_v{Mus-X#*{UGd6*84iufjG(e^Lmq|f^2QzRN00yW2DY0p^FuH zd0R7@CPOG|-R$%`ec>ELXi#4*+f!z}RPSK8x`QD#vLj{YfqEBX6&Y$!t?WdZu4+Wo zqpm^Vb~b~tGK@02mGy34A&F5$frHKAW>F`*P-ae9c(J%c>zy2O(yoR#%WjmJTJ>%_ zreERy?uNF=9+a6=>XUg775|=wwaQ+U1AiBK9ogHUiLwu6`n!JqymUU9Z7+&1`B8q3`4o z%~EIh7^$bs-UGN8>}8^C)L>S1(ny&NZJ41O5Jpt7OqcOyS1(PJnVT9=r^p0D8l;&r zBd-B17`p5&hBZnnWd;I)#2i#n>&}U0FkU86W>&{*9WOCu!A;FUTQ=E@nuHat_Uj`* zqC*fX7gNo6f=r{#>=i^A=4cN#v{??JtR8ZD!`fP=n?Z{lYIHA`Pl{8JHbYzGFv`q< zhy`?)9D^oGJ7rC5x}0{U!@x<>NjV5+rqk_>k|JqFlckHYMkKlzy{>c{HbqjD)%9dL z&vB1yAm$e+YZe8uq%+oOgE7NES!2ZOXE!Y^*${2SBtwWcI$2l8xSpYyW}r-uPesL@ zsKdg0C2#mCAXD4IL|e zlo_~22HU}8s+0__m;MN@%nZrl29K8`C^O#hew}z2FtACEq^$l<_Ba_i%AjUB+8}h; zit-PGCdx6CSrQuEVp5JZWSSgDnSs^Fn#T159r?@(ZN@i9Ib@GV%`US;q^Vktr_AJU zLO%%Q=mf(?%84PX3DXyHk|CqyWXfD2sf-b#r3OaxDP}oZ{z;i7y~*h*Iz!cuVVC+; zvl}C)QD$Xhw{d7w_*M~ zf6<)I&P8+biKY?;XPg|zI4+sNK6DTt$Vx^{lrbMnVaJ*benInaX{f-}W8u{X@LX&39 zB~Yg8&B;K_# z?lW|Z+)tSWB%VR1V#XW8k_XIgtUO4Waov*fxWCrRkBRxg{>Qr-l&@@|hSFPP~hd6BZFijxWE&|Wfhio8r&`#~<&AlRrQ4qq{Y zsq!Dn8VdLn5%{WM)8sYEbb2IaMN0gbetr*UtY|6(5j+0L)Gh4Je9q5Z_x9d~GF|}Z157jQ} zvCj>xmoF$Yb;H&6Ru=;&`O-`pavSEMSe86Reqw(ff|x5=XPRZn~g`S*X|&Cem28N@(X3=iq;}` z=*h2!O_tvbb4nZl{nxN*@;haHzmw~Cv~d3s!V|0IPs)t-iD_|4s2Kh-aI{omYlFUX zB36Y_SuQ~xc-6!PS(0)Ba&^tZi-$Uic4xs{Ocy57n09itThxKcL*yn|%2J4|* z$j$(Qy>6)Jx{FSCGB3mMY(R$N?+`6wjw8E}&x+USLNVHv8VjG(F1t}?kev2Dr(brb zieHt}k(52CC<|-vvS$RPWG^a8OJiwT_BISc4OGCcxwawrvMlPtQM^RG%uTZHz=VIhiO_Bbg|oCuvM?Nlm} z(Ceh7gSrMGFP)S%S@L<*O-bWn8LKN&iqah^1xZoS%#%l*#mW7~TeYBg3Lmghx4aUw z&WFySD_x+>!qM(5oa>{(>y#oN;fF^V>7~M0fl};{nGu$gJ}L|yFjqJ)2m?!5@rf&+ECN9Xi28op(4gH5IyvsaW{*-w`HqjbSLg z?Q*SQ9Vxjk#GC?ah3g}%M{c0PKwwysM$+F%U44_3n<&#asG;yLCpQ~2*)F$)%zU!F z2(R91V0X9NMulEQHx^y_+o`InDY=7k;3|4JnBKnAh^cnDD?;7&`B!0oK!kS7Jye*H zfh?GdI4a4#5uTQLR5UbK71P)@bzcN#<$fxRb_COv2O=mZ4^m;@4BpLQClR`wsrgr7 zQplBuB0EnWrV{wwOBXOenjfJ(vVcn9JGUpqB3vyPUykc(U+vPu07>{Yx=f!r$Y`i2A1S4%6uor40(AwM9_x6Lz%DS8Yc1wV(wi&!Vizq@*Wi?4ipbl z{O?Dg$OjQ97#_)o5!fpqQPBzuYv7K2OqEf9Y3WZw$l;bL`7~5JlWo~tiU(yagygegdQDHnnanR|OuOl=k-%w$Q z8O!LZersU2$af*w>G`Z~zBdpR+7DD1Vw`M4JpO3djHLV&V*QRFntwLTbLE#1Q%B`j z!;mF@qrz4WNs5w>5i<6|w#$Fb2KDjp#xHXI<&Ox<%AZs?NX7iElSp9%#<`Kd_*4_4 zSE`UNG`yJe!di?hK^=HiXUUT#sRTjdmg%J;tSCzxRw@EphN`;RFUwNa7{*p8AA7Zy zGh%~!+v{E$7~d{udSAisj^H2TVDs; zZW6N{T_c-P<%FwE0}M9bEM`8jMG{nX3ZODEQt@)&kIjiPHzade*@B8?rZ8w*@~Os` zCtFcwb%GtTSS`$9#d>Rl^Rf+P#)8XTc(N^3jrn{V4>}B?&Lxq>4mu>15L5x%g^nci zZ6jM`d#dz*or9$eE>OgccZeA`OpzU_YI72-8^%qC64P)LWT%M69@WkU6=fJ@{LpdE zr)4-bjh~sG>_SDu(~C_*p6p7UE@A+_8)f_`=Vfw4aJj{dOr)x*RFX-QIUKAEVL`EmXSEp*)NVepNmuy2LRE z!<2R^%-FtzlOq`AQ)eK$JEfB{S2h-2>|qL3mv|GHMK1&uNYdO%_Dff&_)xk-1=AIh zqQVN(cQY7h;&==n=qoZZgEBJ<7a(;DPTIKHlw_!|a@6D;-26+{+{sCfvc3eZCi*+# znKNEWdZ@&jilB4iM!~w=#7`+{3 z4k4=?O$EOyA8ViT4{FNmm18K=hv>1T^KvXz&51KzIgX0D$z7wUS7wDoOk|ZqV#+CE zI$?H5Oks!l@ex)+)ptUKrRBs3OQV%ODZ*yT$q~kNu)EENH8p;_|xIn}yMCAV*>aH^*gMyqzg{hZv3kA4)wt?B4oI?daoUhLL zaxOLXjVI?(W~RU-k(1v;DBb5uNtDn&IyO0Xgy;MXGD(v}P6q)4Y zVk-Dm!{#IB`4QMP`lhfg$`pwPP^;LjnwHQw^MGS%#=f#hC5+zHasb}P#*MR^d4_D1B}=y z<5%VSD0#OV;>sPA>2w~s8YBG#_Wa*zcv|kF%*epdxyQwh)w}sX!-K+q4;4nRo57JJ zx!15m8T5E>6)jhXsWT44%I%F4;A@ie1X zo~Mi-yp5sf3n7B4;zi2zba!x&Kwjbl1}TkZ^JOZ0HJVMdkC`4M+$)g*M&VQ#s!Zw2UO@hH=_5*hlXLS{Sg(0CW`?)m&FZCI`Rn>77n}s zNBM9i3zGO#v%s|wpHaaNGbbp~pHpK1)7|m~WepSeGRl`!HI7l|e?eA1G_uxanf4C_frDLw=&nUP2mW zwZ!S%pAAjRFO>OSpZkO5SE}mW^bGlp3Vw(N1oOYt^nDrmopKOC83zYi+&l`;AAG3X zOiuo!qHo1!z+49!zrT#1l`6b3h@?J@u4D_?@WtK6}lVvGuGz8nNm!q!kVme`YDnTq}-JuwUWlNaISs^k>%ZgOgaSt;Uh~t$a zG%qVtQIBDxG2tsygINQ4MZ*c(!k?I~;T6U#t) zYCv`fVFY$Z%JhtGjKCgu>dY`W3n@E=U_Ob8xKnnHz-}2v1wU9~&^gTmjhT~!A|{t$9H}}h%p#8-5~5HLMHtjZXtx|ng(;dvi;k{#TLijtSVTov7>k`wgr=oELUEiM zl~G58=A@GfixqpjnASx@myGbdbWy<%FV3SBcN^B(B`GTEDKE{>1RRlpZRq0Jq)FE4!wSRDY%*EE^xn+K#*;oO`i^A5!MSxQ@qv0E zCH)2l2QcJt16?_SGJbF!o|gft%*0u@Lyn}P5$R&3E-gnzU`~#vLXYDBH1a=tN;uEX zhx*#I978z>x1QvXV-3v6ag;TE5h*47vNFqHtT9s#l91;$WHxp6R<1*iH_*vpd>|)8 zAeNS?1P}*&cDj*LmuZQy-wY5 zCo(58%***y=xMB^rR4&HW@h9Y_bxg=z^W0M6E z_EKY(dgU@I_+c>Gk4dS^4eQ5JGZj{RS#aC>QK^Z@Ui03};q^d7U&Xl{TsDnwgKCawNU3plPHVh+gv^@735moy< zDjEwe>YDo^s3`Xv&nIgW=0;Q%(xGisvhD4{Hk)9wwjUhaENzt!v^xwd_GX$ zqK;cYg}%ip={zP17E)K2bMgpfuIJ`(HyRd+(-!@YniCkBKSqTG7rh-ULE%n2S!AwY z$V-|23)AiiBYWNQBo+LCViHN7im;qKO@$RzWkQ*LkZ1T%J&2`f%1n7ooa%LJVah*e z&S35D`Oujle_%NfmGBE@f!kDGq@pp810eDeHGM;`yi8dW6GLXq@xEeMN&aIPI{cUs zdX>7yYbh(QQDMu%aaAvl8_VkvoRc@GXrzG4y)th`s3&hx!4G7PA>TF(&b(t-KUbgM zrAp6w9r7M!I_hB?4GY=(2F{QVC^IBphuhATXT!4c5oP?)l<|b?#|DXfVvrt0`qZGj zd`4Ma%qMxY@N?=6zlTo27sktDx21e(80ylmB8)ZE*Hjq<%$$8gnL!9U#@~j-9;aKr zqr!>=OJQh_*?h_OkwHd&pu(&OdI~!;Fg@^NglFX^Dom9gC#!DA&k@`szfcL>??JL* z$E+v6Mg~Rsjf#3t8$WFPHnbxvzf)m;#ifimloZS${$UnLPyP%o!X*-}Z2e^xshm_H zLiG(@9(H!1Sy+M(GG?PYJ8&aE40-#%j#6QtZUaUC3-5R!P?~-G5e-gS(EApuy3kZarJUAV=bD{ zZ+=nMri>rT*4v}t6ouL)4OSXw@QAx|T5tfx9F$`YajwwBUsVi%y45Q3ag5A>SgCIkpuQ8kt)u%Jl zvWqE5v0XzdDwW+RGdJat3(;vR$nK$O9wVMTs4z_cBlt<#GeWT!n+gM!=T$g+M^IMw zp~A$*o;NhvtUC9Na9{SL5;)AkaZ&b<(7YT#h3S>Yh$bxuMp!`(qJkg2gn4GEHV^~* z8Y*-a`2z#}lGH|MkBp!aIEyK78A+8uA$hQkfWm7$8$&ORw{s$i7|zV{a77$prNM z-9om-m?u-s0gTqBQK9!MRas@ccCgV?atLK+Oq|+oA6i*onr@CDLJp9LBCWaj2=!TxqAQ8OY70&~!+L@vtD%Nd-T|dnflfCaEhkEnSA;s33Az zw_#WTj$;_Rx`t(C2IV04@N7t$swO2ec!mnoDNIUDr)*?0LvmDDA}|4xOepR}cusn# zu!2JyjAc4C@FRn~NNA8p@1_tKRhg3kgG7#`9OO$Zr5r^~ z-Nc;X(Nq{)xb_7djs&Z7PyP{^h#W&jBb&>3ax7JSXI_poh{p$ImeKMhDN_k*B<#GN zZLESEPZ>XCMeVJgU|3O3G)xDdauRj*EOug@9D(T~lKPYg#2}f9zOR@s%Bd05C#O-- zh$~{&ofFun^N9wcSI(e}A2uQB=<7_wX3ANVHL;4AM?$ycY(CJ)nAui4Le8Pe(Qt5c zU_P)4b~>C(Ouas{UCs-6n8U?k!8wMNuqY7U!>(0$}HEqIhRv(a;w>j||r_7KB z7h^tPkS7m@kan`?Aa-H%k-it3 zuqkT{b0@PrYEW(%>e^B9?ldGqg7&&r`v#st}x3eSy0AXQsRu8M^Y4DKmX} znTooJ80zJ+uF){QrHmhf*vC7$UZt+#z)aF>R5ZnkxSEXNc-`Rsth_;md%PQL6M8ka zI^`26q*&k#ivOD-qu7ZBUn=-jK`CN4)7#V;fMU12V_0dyTx<|~mpXk?M9co3ftXN1 z#(Lj~Y59OM!-uL-58HldOe`mUWN2kI@nb_VP4Wp9*87;03Jw!u5>GzmQ}vd}XOvk> z6a_QvpBvIIUr^?I=ii|RUFAzYppSd8hv%!f@^wf%5<@} za+vgc13meHG83a0TaGbxnwB5=MBj%F{7+QWS?;5fpAEx3roR}5W9u00Qf2UPWa~GB za25(f-HXAES2=C248sX`zE&tQhJBuh}GM`vQrYsm;h zw?LLMti4B;rh*^eh@$JtGJK$3#p*8QAcPqVb(W*5juwlud}!BOlodjt4}I|!so;lY z(~Pb+t`u7KrDSEwOxr%rW~@Su4)&p5Sv7?6n6i@9La2mk_|@ae8j;c?Yf_;PvE2Y` zF>6IwudGc4KVUh(9i5hS3~g_hb*U&*4}z^nmBGf=n)O2nM|UxZ+`u4DHl)l1LZb3k z*o~+&1SL#yZ5)DF$>wI=O+q5J+HV?S^RJr0sm9GhVn6mtB>51;s0%n%>;d_Ka*n zg`GlN^qa>rqKA_cTbcpFwG|b5svo_7#NE~gcBf>U5Dcma*_Jv3+Mkjkl$jd3gJe5u z_yK7f!}G1%^8vRrVic%1v{de4SL+=HTNh+UKHyjat)Kqub-8f@OS}a1jYZjsGT+#b z6+qdU8e^{?1z}hOVE{7RpuRrYg$g}_sv?0}qd!~3)ruvr5A}oWYLUZr_}T8X0}bX;l7m7RqiH>8TphwSoPnwdH9Zko8)`L9AuS`QG27xg zJ&apM8koeU>`~O{VdQpB3XL|D$8g6`W5dmSlrIGtX{?!enC=-zjWu37w5*41H+6=K zlahLB`T}SObwdnwrIDKY4OLJ^#v6zOc+zBG(MP735P_*qX^y}YMs6)3Sc?;J(i&>m z6qA*Sp;pT*I*HmA^e{%Ac8LPYA9rfwZWeq?q~!44LTpBu95GSPF?lqJ(Bz}?BGzV#l}uKB%~sH>nXD72D@lt4-GZ+OE8oTwOXF|I*b}4kmtY9XgG%U zz_vZq(!BV&Bh+e3l95hoj9i>rLxY)&fmr>e#y#r6FdW+~-3YKlu2Lfa8sI!RGu zbkBw&7I}DM1~vR(fiXMIc&0;mWOu1kGSqba71fa>I+NH7|BWXeKia&R`b2j~e3zmwjM~6hGB4>wRyWgiiO z!LH~51B){-4yJ}5=SR^#W3O`rW8UlN2*y?Yec10D!l;Ma<(N=QQ9Cx&fZ=3vNCk$2 z*BO}=gIy_8V+{*fX2&2LNv6iE2nf}woDf6vaw0XZ5Du>U<)oNZK~AQ|IE(6hImIk+ zL{sjHO}^)YACip$Z6E@tAc{bTt`kfIE%oYL5T&2*&CahVwp$D?=RfwH}rhuy;Db zvm#eh)0#%N3jW(bcAl@HhM(;Qyw+gMu*r4Qg8EIbU%lQ?mf{%eu)R^$y4lXY< zqdQ|pIk}4(eP7v}cDJF)o({Q(8h%xoWRLEDz1Lv$%48lj4S{a;y3fE8jw#(wOq%-1CW|VT zU!RIl^oO6O#^gu$O`b8RkaXo)Y8(}2ap!Kbgko7jo%)>F;N|i>HTSoNrS!PP+u`H(~*|{P-CERSQ-sF+RRrCmvl;AGqUs{ z5U)odV)l&)U#F|K?SYUtiz|8=M}&p>ARh8lkO z!Y60UyX9Mhxjg?JHD+rZV$zdL`18G4AP310)R?ST(Zid648azpvHV1hc@>lBoWMY# z`#CZ|+w%)G1`h*K&LRIAp%_*C7SVar4RkjSq9^j0mqQVAaS783p>eCz z-7YIq!w*weKBoH7Y^@aG*cr4kHAX3}g-AeOC59GdRciDtZrQ{=GMKZ1QBhWljItS7 zof^|Ln08(x0(%RxW~db$XlsR9E2g1kZEE`NU{ZRW2u0Rfml_iRo1DAhZ&}aaF2L&> z>~>-4#g`2X?#^_}h6Yz=Xg4xAg@YU$Q&T^qD}_DVG0>Gwsj-0as*KGHa@z}%FrMC| zvUvzj#PpkNL5<L^whYlpj_b-+)aWWtoo#Ip4kybt)O4`S?=E1-js(SR5f~jI zYit{uPU*qEi6PWj>xTUpJ^r$t+2paceS2!$Ns#9f#!z%9I*~ULX?`w>U-Xq7Li4FE zJhmgX$~?-@5Sf-m?|CO`?4@(Kg-m95Vg}{`VqjKwp{9k} z&0fgKZv4N`Gm=hZ>n~p=p3||MKzx=$uWs3HB>m3hXV=Tv`9B<`4FE+sMhacSyJT{h3Vjdf}m_;3*gdVG>!e&7oK>xJZ zseWs~^BL+Z)&TT%gf#*Su95R(C<>5xGi5xU4M>x*{)dwj0Or-RpyjdDSCD39wfz5B zt;%9P4AUrlD9(gg)3) zU3?PrRQF;QDLx53TFj!KPeM-}z8HK2 zp8O9_4d8JxC>=AC$#h#Mm#~h+!vQ%8f5Q(k=Kz%Qax@;*EumE;t|LJWg{SflJ`9>( zI)QxM7L@j52rQ%7CwIF8)5ptDPv9f`(4);@#{jzEC-MpFg{_AS-wxl*+j_{b z?eg2nNq8KjN5Rb|+vt_NoQ#J9ati(qi7pH2aCXLZ#s#NsY@T12mw&3!srajTzQZk) zf#MW9lTg}hGUwtVqP4AX-_1SrRhM!eAGKWuw;7J`uF8uyHTf#&V^V|BRQ*E3& z_0!3T-XPY_2P2=?w9*&m(m8KtPApi$g!D`$cf=fi@D&<^loWM`|xmNkNvN)8DSlvaO0>I3K(ysj*E%5~GAzZ_z6!sJ}^iwer$}5R)QpU~3pyxvD7Nzhl)wnA^uHAn0K~q@=%j zu)&$hJ^v3YYre7Q!3M8LXo1rH=D`s-keru=%6eoFYecd{=uu_;?PZhjSx3wcKc=)r zgJ>1#ai#t3WwlNon|Ys5)|19!Y}6%7nDBl|N!%+Ni}?{n%y<+=OcZ=z6TP>mmHmvd z`HH|K(TUSYY9`OBLw`&AhK>d-dwcSny70WYz$z4qk%7~GcTDl%+D}LOu&34J_CtM;MApfF~qmFI`KUcc}1!JF)DLkh`p+;4gcr+ zQN6Z};}Yj<>cH#f00h>(i75o%P!}{7k!6|d?SsZUPt2!^4o+^osSdnl4$ub^aUUJ} zCK7Ye+i4!mm)FcE=Z-t)cx51j$1FCtgHuk;U$4nYH;;D_phX1PiL zYSA)dssZ!KA1U!;BQo*o0u-xFpD0uB+*&N?E&BPIPnG|f@#*gX`CPeL#ZZKN$`*Srp#DXKMCg#F{t>jvVJ!f<8%@RcDSZa85%--2MJ$`L}P~uIt*F=RL)<< z;j|19slq$+I+(3C%E)2|TA?L?49JrB8??uK&D3HV$WqGD%EmY&@JSskhAyq7WsJo7 z5D<0%$+F7QO2Syxye^R6TV76i%Nq|Kt*U^y%ubn{+KK#FgXK!x`!)uZl&q-am5j_G zLx3j~Us?Hs{acHfF&FbXN?p~c^lu%v5aJBJvN-(^y%nElZTE_T_I7n8u3^NWPRU^N zcTUz+=HT~@VLro5kJ8pQ8sAre)=}2r_^HRT4L%2%lXaE1p79tz2ClEn!S8D+b@D6N z8z^r>m~h=*Y4{WLmuld3*+K1hG<&`T0LB1A)tY6l z@{$%z!p=zII{clKv$Js+8iFN)!<43JR;m7K!q2`BSKcmzcn0pOyr?Ui!Zeobri|T< z!O)Drb)CE^c@HJT{D<$O=dpu6FMBF$FJlF1jL&}pmA#dwxg+QSj>o0=`1)|M8~J}9 zW$tTCz7HRy=;RjK{glXRFpLk6*FWs9lmm>S84(B?zypn;{Zo8D9iPv{wE@bgHimjH z{PcW{ay0q^@7193;L!_5YLz#_co0w{hv-NpYGW4=c}&O~+Q{!0j8f)kV=|Uw@EE0P zHB?Em7MxH*sZQ~e^(7gr^l?V#L{H1$uiDqC6Y6c=>xMq^&cQeB9jRA#gRz-n0Tz8` zqEYFr-h!CIY5`W9#w)YQn2cH^GK>ENCD0>b?+QJNCVZcuSvf6(IQ0(NoxHRvM^nBM zOn!G5T`6})S|%!QlJOu^g>YIXD>a^}M`G&&j=&~`Bj*8`YDA_czDXK@)07u~CA)q& z@RjTE2DVf1U+M!BrGcw~&@dR+}d^=3p@xD)u z=d?}YQn@(FZ8t82DxmnJ2hk2?#-p|YO)$=ib}B7tG$uy{>ROCbTXcC3QMYnZgE)1? z5+PSP@i^5{zhHy<3}vN_6;v>+k^yFv7w@;!;z%Pp)QC1-fS}x*aamyT;nN;;r~?B} z`SI$uhS^+tl;|5#YeGdt8S%KR76-#%o&d=!t6(e$sHBPV3pd5Zm@N*wNJXp+^(u4b zASV0X0otd`LB7Nx1AM8#k1ZdR&l&0OfFI0rN-mifTk6^Oo{PIj=8d} z5zRPa_j0BF%c!j6h$kxe70QlR1wqWT)e0t2Poj?ZPF$_@czy&A6B4+@ zL7CSWlVPo^VAm=u?qz)EF5}Hi=a~DiQ|9%?WTmb+?u0IN$qh=5S9&8mIW2*A-l)u* zj0vGi!A_z#D{)X8J=5(fw6VL-?;G8s>|2e^EZNcv3w)JL4Q^Y^0aTmq;&yf?(bnU* zi#l+JIl#oM!@g?_{1bKfdRrG(gmI;zx)RSF{LT<+y1SHqx6zpwSs?(rM>+8@Pj+#D zu_xIr_bO|iu{3W4pfC3=#zQrNnO!XB-LJd{2JxDc{Wt-RgSrnYFP=cnsH#htaA0

    4S(Q<+E7aE^&5f~&!W0xjwT98N7 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

    @REpT0xtzET3|*sg)n;W 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 Z%uAHo(^dFi-ys(5(KE>%0e+>@`2Q;q8DIba diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bg_BG.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bg_BG.dat deleted file mode 100644 index 0ccd49215bb9e65cc143ddfd99e226ffa6123eb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 626 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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bm_ML.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bm_ML.dat deleted file mode 100644 index 892c2649bfe47b319b7be03e3bc877a344892193..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 589 zcmY+B*-jiW5JiVA?0X;~J3C3(J|ubfo8{>)kQLkA*LH&jsU$v~!b4g!Z}z!$Yki(& z3@+62U@&k^WgKZ+V@55=f9Un!KbTdk^3D{a%}unFFvpl58%((G%)Oum#yhnnaStY1 z6LP{LV@WLvNmaD1fMv#tS{LAK%DOdKQig<8##%}CNc2zFCL63XHq@F#J~e^#T@$?# z|0ZKgtq9H5lYW&Fwi!ExdCKOE?K0l04T%e#A5zq5(rI78Nt$OW%@u`?vij|1H@R{*NZHcMsVx&-wdgUwQo7$gLx?m>;{?7PO`s=#It{B&9R~qzWQWwd;?jwy-CZBM_xb3cA0Bgm*rT_o{ diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bn.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bn.dat deleted file mode 100644 index 991a1496edfe44058e513c6d00b09704a07be8d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 263365 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 z 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 I@uRzb01<}7AOHXW diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bn_IN.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bn_IN.dat deleted file mode 100644 index 921f26a3b32a050d1629cbe7138140d699c74fa8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 866 zcmY*YNoy2A6dosLvM(kk?s42FE^%M($wh)50z%!In(mrdq_+Vh!q0(Sul}aT{d>#r<25^WC)43UYkDo%7 zP0+IuN=cI_DKrcr9B!~Gp{r{!%ogau=I?F((H8G){=pX8^~T!9>N3=v=-Cq(VQ-x1 zo6Y~&{JYbU;jhhi>o(uF#p|*_>E0>nQuNCmzqmUY-V#pIy#ob)I_|5@>FSo;u|I1rUc9&%(5v0LaB|HazopTH5@^hbIo50vE>EaaF|Cp z+FgE2D$)kL4GZfvXD(GD4m@qRGO)N_%h)8E diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bo.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bo.dat deleted file mode 100644 index 78cd33c7da8035cde18d9736825555f3297b53c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22525 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 ^ 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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bo_CN.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bo_CN.dat deleted file mode 100644 index ca4ade119ec1de81e4b3da6caaf0a821d0399343..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 608 zcmY+CNpBP}5QT^AdqOt$osfhqz;ED)#Mw8?(_Ir;vEBV_H&G*%l%Jl82U;^X`+N0j zv+oxeqcgQW8jW028AsaIc%qi&K5q2S-&jzaa?TW^%}unFu*g`N8cew9%#EOB#)?{# zxIZRZ6LP{TV@<6JNmaD1fOW=(+7{q!%DOdKQig<0##TvoM|7)elMS{RI|WT_l+fDr z*!{JV)Rvh4Hi7h{iQY)cJ;qbDAv9Z0`cX>QXB-sfDVu-nka47TBrbG*Oi`!aj~kb8 z%y_1Dh1XPBZ`_dhIpc-e7a>)aLbelI4cbe_t72*?Rw53x^^Z*T_VWtNYOPwHsaSGaCn7mdSb#>sra|AT#DoR(eB*EwUHPy1+m z+jODU^ZHlDMH#!`+NRc-UQc_uWL%Y>AWtMOV9C`9*NkuKKpOO9QWwcT?j!XnlTY~0 I_|aWI04$coEC2ui diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bo_IN.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bo_IN.dat deleted file mode 100644 index 2a55cd6add35c420c98d0acc0aaba49b317c7e90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 704 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 S?H=|K`*ZWOpL?F?{dxA!a?U*rAAfn$ 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 W4LUM02XeE0#6Bi+5#Jc!^Tl7;I?JH| diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bs.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bs.dat deleted file mode 100644 index 99cbd027a68729ef1c77393fadf122681d9080c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 239326 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�!QYa=-%5N* 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�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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bs_Cyrl.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bs_Cyrl.dat deleted file mode 100644 index 569bc0b878d7203648a69b992249a1908064c7f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 213685 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¨D>rOcsFu!;PGiT|k4KLRbU9 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 z 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 TTa*{ax_?Ih!%N=q>-GEx_FsG5 diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bs_Cyrl_BA.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bs_Cyrl_BA.dat deleted file mode 100644 index 66476e8fb7b4ec7d12d2186bb56364f2028e273b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 608 zcmY+C*=`gu5Jj6n$i9$}uy0u)5J)u=oT4p>} zs}gr(k~1+ARv4>lMF`c&bpqBH>uO7Yca(K!vZRcJ4aR0k_Q%@ax-r>ci?LnM)FlaR z%z&L=6{$@z-?q`}X`6zPl)H>4YF%h{!RmX7u*cXhEZA)Rv8Rj!wJmY64-=a-4PnxH z!Xe|C+7aH^+6Cjs#LpQo)Sd`bI~%i`x_Z=JGF}x^XHzZWD7$< zI4wqh4oAYX5;qLcs&m``ZAKI0-54;2FwkgKIabgm3Z5G$7-V9w(MQECFBKS)&t+JO zFw_}J7-kWcu3|W0gwyJ@>8t$E#z-ybVi^`())|s-&9EF{dBO^W6&+SwiNWR!D-%ZX zsdt7|2&)oSW4+a@Sc9-8VKkvuPY@;;qx7ATj#6BUDRzdn3F{EnC5%;y>oGVW!}^2{ zJ`KvS0bxVJMy$AT6`K$?%`lFz8DVq67EVh|Px~xmOIF>AY3y@r!Zw8Qgl(1Tb_}x5 z?Fl>ZiGA)!*om++tL{?8u7n9r-I>zJa}qn-jnGM$NZ4IzOk$9o?LnB#Cw8_cVK2ho ztg%lO`x1-{`w{jh96&gbU=j`@6m&DgK;U4fKijPtRui(6XpyCO5G8``*aX315&B;g3>2*Q!9FujTygrhPXO*n>-5vbl`M>VEeb8;-Hm&Pp^46gK#F{EW+7}drr;6xrABHEW&xrJ->IGjYAd4SIX51atDa*fM&vLJ;y+-Du(_iJP4{o%3fit~SmOqreTiI&h1L zTP1F5H~KPK6ui~~b2(45%TefKUg!96sik+&DkmaRk{!6+#2pfMwmWk>M=fyXF@tlI zvgj5y<-1JWEpZQLOqevfDaSdZ7I2QbN1N`zy(aFHn6EU(k8|efwA4!V`x6UKl=Pc$ zzr+Iz%dMM!(8NO$4=dvQ*)05j1|Ko;sKjGSF!;EMCnTO+g2AUuJT39ee+{PkA>>v> zZW2Z=&*fQ(=W5R;zf!5y#nAH-FX)DJTajx8NsJdIUNZV|`Ee<7D-66W@rp5!0rjdC zDpsPp8{<`p*RP(;$S22 zrNmcy2})@ciJ;WehnW!a>o~s|1R-|E?dL48&^Eu=bD#4CH~T5;qmeW lT;bU<7D)VU3}b`7u;MflzUoKZ6DPut@sEsh{GXVP{TCy?#eV<* diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bs_Latn_BA.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bs_Latn_BA.dat deleted file mode 100644 index 66476e8fb7b4ec7d12d2186bb56364f2028e273b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 608 zcmY+C*=`gu5Jj6n$i9$}uy0u)5J)u=oT4p>} zs}gr(k~1+ARv4>lMF`c&bpqBH>uO7Yca(K!vZRcJ4aR0k_Q%@ax-r>ci?LnM)FlaR z%z&L=6{$@z-?q`}X`6zPl)H>4YF%h{!RmX7u*cXhEZA)Rv8Rj!wJmY64-=a-4PnxH z!Xe|C+7aH^+6Cjs#LpQo)Sd`bI~%i`x_Z=JGF}x^XHzZWD7-nH%$=aP- zT3RZ8-l@1_ULn|O?bhJ)PO$abT|i7$LUAf%I|thy zcX_bghG6@(+d#*!xxo%fIkiHtE2< zj8iMRV->I72zK2N?6!70xJ@~g&<%F)+3KobkBz~er9C$WdpR3}y{`^lxiQ$Mv{Nba zW-8bh-t1R`-u|WCds?mv4%iqRSUPZHa1f*qzB)K$V{quk;INHBW@B);lUw@=`0Y!< ztHp^sqQo>Dxgj`eiAH_goeqvR|7*c9@c&r)zXbkodsP7T_|owkgA?HYiB|_pHwGtd z43=5?Po`>#O3SHq3bl}iQ#S^ul}_6joDO!ItAaB&24|Me+!&nYZVXmj9h|)}c-6+> z9QC9z?FX+mPhLY$&V|y}R|V&746>!{#-J4;w_P2yZwxv%1}oj%+C7k_f-^fd>5AtU z#sno(4?5?At|k5RLH80ZhpJbodBsvAShXSOnGbrkG@M4z*V9sWA_-q=Uah!1=-&_w z%m;%@)@~1fb1tfY8=T*F(a73u!HlB`{gpH1nV{g>*s?DAhYV^UAAh0)DsUj!*ZwG zD1sMm2sX?Iucgf3v6N9!NHM~i%H_e>hTx+4z@f}#=c^1wLnqW~Uw12RUaMtpKFBw7 zC{BN2L*UK_!xs;=Vro8^j_UczCod0Xv`G6F?ym*2TKP^s z`IKO8?GDJsh0DgpLvL_#)BV)olC^unJzHJ4n?R=ERxekYdDqQ^-YmegDV&N-3A=}Q*c#N z;Iv?)3N)jgVQSTftD6F+2iL6KClyHDoovt#bWQN)4Na*tgKO9Bo|4KpgLz{UKP$Ly zQB>zg7gf*Z6s#n}+NDFRMe9^ANgU-%sZnZ;4KsVTN1c(ZnZZH{=k;O5Bn z)RTj^tldo`R`;AFb#HCLrv-0oCZBLBR&Q?#oF3fLj5r1AVPUD|(5+386~S#)#{!|;PjJ&4``neB{}$D(|LLDA*}_?oUokQ+{8}{KD_po2(^hX zF2{SDLZ=5GNoQv&^pC2T|u5QXP><6)@&U)QAbt>ACH9EgNL-`Wordr#0fqTId=pPN9m|~;xy`+ zh0Dar)ia|tuTc*^8Of{+9?>Gnju+8r>kX$Cd@4dZgHK02LapHyLnq^9S{=!S1t<7S zB+wl^8nuL4G4v3<;Iol?Z}3>;Udb(NVn?tLx%UN+NA7|?hVGw>+y{csYbj-GMIXL= zA#y!G_+k{XT4Q08G(3d+r3e`czO0>mR*Go8%&V_Nz;N(YP4BQ%^&RcJmO5-Jd1m<6 zBAJok>l%rL%UH<~iEl*iqrnqVaCBbSQ~~nM2w4++OKWCU!kiO)J91nbd`FuKip537 zUWGPM2)-L(>x1uUznq7}}KhV-_UAV7~96+9SxsrE_{uGn(!$_z# z_>o4D+3ghkdhp}Oy*>DeMzIyssftr@>!skQ5z-O-EYeuGyHaGY{`1IvW$+7)Wosy9 z1dv(j)cxR>5!M+zskzu1R*J}Ar1w`5&=vezD^sge5(o3Sry}R>;OWRYl(1Itg5N~W ztAgKZ;kCN8h0V3#cadvv@Ql`-VR+DBy=jyd?y0!d+2Hq)Kwt2OD8{Z-LnI}5HgfL| zo{PLgAg&kuF>)OU{uD|3m4(eyi0bo^`}x72H5lznGySeBEC+N>!CxYQq2RAg@0_|< z3H}zj4hJv9DMbCK2Y-*8M}mJu!ljVS;Kj&wb?{Q;>W5QqBlu_Jx+eHnGe(X2G^^LY zBlmT|f12s4II{3?J@{|rzFt}|D~>#JD;{dbR^&M)Z_CQoq&X_L!K(sFV;ck8WLwgl zvPX5T&CmOF+0F#oWqZ<`BewZyL7AnQ9kY?P6!-ae62y|BiyJa`h8nuN7 z8g8b5&Z~RM_r#UmO{z!sAiXoZh*Rj7WlzItzXP20b#faCZqwh{!_sbGeNxM)!@v<) zNm}F9@D}cyMBF+J9hEN9oK9f|fO(ouZ{T~kiL94Zq*+LFm^Wu!OckXkhF5k=FKJf# zm0k_=LyQBC^clWN`bo3Wukl~21c2^<{M(L zyG^bo-5e3odNEDmlo4US(S+LNI?}8U-B^Z1%R9N=@D90wG(+gtX__N%GO$-}B+aOG z*Tr!wa+6_w@@CS_8IUf5`kb2FYy$oAmRNb=dhL?lYS@6hjr6hbcqHB?$+V(d<;o-< zFQ~9%v9Kwl%6WOaDW5O5kY)wx#;QtgHDpL`OCdFRhatoAPSUJ%-SxPOe3!u^@@~?a z3y1@j8S)9cjAj(ox3 zA^9R{mSV4$i)Kt;GIUtJOq%7?>(>27$(OGfI3iyqO`m(cMi|w*uNgclUpF|MajUsd zit-JESIZNmHDI?nmHMWk>*QOc<6J?aza3+JS@}+k^+}0tA~9T?#CP_zcImn`7P-vLu$o^``9D>&fo!ghBRj{ zh>8=YN3q|V)S&!fRocf(AItM6kV<`3pNON57_oo~T%avwrk?l;VL$)W)i1#mS zE+V&fFbul_q?sS6TH}7DEIS#9Jpj@gw%1%q?P6%Ryn-~-)z1QSutg}l8r&DlLKSj0e0;N#mHb*4kpcr4q~QFZ28Dx2Cb9~X*T3!$2*z+A8vx3as+A4l?R0wtw7f?qV+#|=3W`PYlCED|p_>jdN5W1zH?o??T=J?|YY2M-q`AUJKNxM-JDDLj}n~IW()49pt@A1bT7;^fweM0I?4&`^Y=Lz&yksBlUOGe(yWrhSZ|`bRt;M(HPTF| zJ3P%pFHig!9m&chY0f-GxXFopEMSBSYuGpoOsY+UG>bK=u_HL?s3SdXSRrAsshecG zG)Qw~7@2Vj5*o5nrbr(`1jVT*>Ge$W47471*YIrGR61qGJoAgb%o@@qbEH}HBaRoZ z|1LIsm0Uuac{<`0CcI`hJ#PZoJ0Q)vG2)joNQH8#fxU7WY4*D#9u`fRf#xx|Ty8Rb zas_D?3Nxb$n+jctyxt`GmB&Hta>NGIT&Tl4c7Y!A^i9R~s}W*O1n@g`&;k z4F-eSt zac`W{_`&BDNLF-HzP ze3f^Y#5#E=Y3AvugqTEm@-73{%ezUlHjU2Z+-7BYPmHh5$|lkraN0a2%2ZNHgr!=%g0z!X&_vI}PuY z_mk!tJ<2znWEA09yt%^MleN87u0tLo&5*lYv`_hj zK_l`oX{H(DlHb4q!Y5;JeO4YJ{jxJW*aV=nU%IeKPx0haCf+BXj{RES+}Zt%fotSZ z(rixay(-S>bC{!j*5LK>7-?24iH$nyd5m&J4C=A~EV8r092!*?#V(J-ZC*Zyze_lN zwqPjuJpR{IB5s&neSxe(Ir$=KW{#69mz+8I5_y^!V!bP0Cd1ru8WV0wzLH=i`Kn=g z*pSHA3`4ZOPKH^Bg?Fup^T2N;=&U@EpfG1xxJSN82mD$bSH4A>ori;&1E!yO`L?0s z@*UF5DhGL7b{tGjze^{L@OVkSXWGC^n3>D>4K4=q12USPV#%$_4-Lc4!H>vrP{KiZ zC_g5LUyDT!n11H%ofn3?13=b_Z`)3D$VJB1faBzl_iVbdLheV?xJCcdQ zLRak}PCL;>V=^T>la9)33dOgJX-+%x3No6=X{S)~WLMLhmE8=(W~?}}yJ2&(2Wbw@ zPGW|`H0~M8U=6SrX%+y?bY{w)$li3o4-OT1Wr9}1#*8QXBxp_cCBqa!RE^nWzXTT9 zKY@`X27EvQ*X2Mm%-kHa`k(}wk%P%FGthX$svKfiZbA+v!w45kSU6%lK8y~`#T<6V zNo$NaQe$~2hnucDAxDtWAYJU!ADKW^If{%1iA`EZj!v*SIVMp<{XN#8@q#QdHD^3* z$Z-i4$nj)YY%pQMHmICHUL#tR6G>~fFFafUCQD7TSd){;aO6S8GTT%3qO!~c(OOO> zqv^h27w(rt6jEG%}iEtP?77dVgZ^*0Yq>-u0Ii#bC#teqZfPpo64e6-dFyDrSlbma) zFXzRo4KIgX@=cO8P^6W#=CT00U)spy*Mg&9X(yuvF3yB>Bv46Kl8N-3Qs_x%0?tU6 z>G{ZjZgQH8x~w9t$?##mhPd>YUcD~8WVEH0eIMJheFkD{us;TI2;gDAb|3+ZGDt>C z12bSx&QGwa43W`Pgjg&L8#G&!5mUpMTa(cQo08RJ7}cs<2$|<==)iPfvyxe)U>^HE zSft6iSQW#mtS7_RfI$XakYFMgCK!&iWJ7|@%4^9m{ds2=dsH%JV7??5#fn%2V0?5E zY*KQjSaQm!sd@4mRTu}6W;z-(ZUaU;;+m$LlX25@b2xsHqJhPtl*nj0N*gj7bhrEHqBB_DrBNSyS*+9AcipJG$f{bQ~Pn)3Eo0iCxrX`5aRi-5+*+_;PAZYcNsd12P6R!#r zfvXd-x?Dr%aEOi5u7tCtJgnX;70PpUm)fU$14T8ub-9)_ql=1_mp7V^^_*NsMspd% zVwm&fdeaN#2GZ=FU39Bq#?2!PbOkzTev`>f$&IlmjTx--y&1X5z*%`SX_gfFyT?Ax zDW2RM!l@g4D`Hm}hBydgMM}|>GZclk~r(s2r_mk0V@?o)&le-K= zZ+LgCh`Ugj9^YfwgexD2u{kttM?Pp6Ofx?eV+DFDn+-$7_%InxNjYE2)EDmK?D}4l zKsWypGEtO5&QCs?fK|DV469BpvDD2}y~YH}>3(8b7E|(od4fYYO!+=$p3M64AQ@%| z?qwi=k0)3t50PP=o(KVbf}DCeCl8a>dI7_>BJ$&trZ-oVN619=ZH|+bPsJd5Rrxd- zda4K5pCLz2k%UK0Y#NJaW5zvs%yh;v*;p{BSdqucFeYvlqZU&Bxdfe+&y!&{gH<=? z>&=DF7fb{({~{Si)-5{|=wQD@USm{|FOz0mi-Jb|6;rFs$XCf|xR?#G_J7UvYV!3M zY%aLu8+2eUyS1_Gs60WIC1(q==!yvA|IL(WTUNeBmc3Rin#YkDuKQp~of7P9mG6+% z7S&wj8=^%%a2I2<8kZQ z>&CJY$NL7?`4i_T{%^G%3?C9rNXP2F^6(88VtNV7MzaE5D}`1I6ymA4oG%$Tcijo{iaY zXDqu?o+HaZ(d&BhM{@WW5 znTGLb&GmN^^eXZXGOXg`JRQY6`bE>6ke3q831-?q4fEw+rigg~2b_P?0l$`UoO}K! z&HR^)#!{pON!F5xM_$>AE}A46LtEIIEUS1dkg>+FO5>{G@qKyV5daNmz}rpD%xV%B@q&N1sR^LU|XxcaR1^9ZL(`3 zT9@6(M4_r^e5XowHz}Ox?LmfB7alG=!io2ubkXdbmAyzuxfS`5SV!+2i=lIVC27`F zFTU*|`_PHGRK&L9zA4%L5}+vilVSBJqL1hD_<#hh$$@0JpF5*9D}!?aIVcgBm4nIP z2XzcXhZuyl#i3+a?8Te|8@j{DGEv2XWJt65BgngP=_2D|ACYQDhjiqF2E(zd_}r>83$ceI4Bt|}*!VI{{-G8%%% z4z3eB@5>XRnw&yL^AequC#NQu$Z2GB+UVnMA(n2woSxtfIfIPm#KL{tFg(*h$;nw{ z)MIgTzN|>Fyqrx&vl!!MbI^U23Dl?M95T8i8BGsy#ga3*SJPQDDU{ccjxq`RD>#FZ zbIpe^FXxeA@YBvLtVFU2HYcqyRt)RN+%~f6>y)&U#t$o|+KhCN(~1rQq?Kee(zJhu zMFM7hophrrj!C;nGdD_@tD@8Hj+IMTvaKS+=zu}5-IHKt=_SKSNV6$mRf>5>Um`Ls z{bbmdN|>{7+H-t=EWD0VM$<9Jf0Rii9k(qWKuaggNpz~$v|SSmWt_A|QqN}D6%^^DF$pK7LQiyF^kDLZDD-)zyD46o& zOjyc>%}FK3U|)+7P^vM8li?a^W;ky0;eH*AGtdY4bYz$?>y=3|_>rkekU%*RG7Qwq z;UCt;;4RvLT^x|M$nKpr<%#g;f#VevU&l=*%9BG!utcP9c zd)3~tCq(i$OjX>3ea8yLzprdtcksLQD9vs%TIa`e2h8Ts`lk9@p=3=6E{Pp~xKWFSuQZ;U}) zGvt=qO$Ju;@@6tjMAhM@k}EeGIw|rNGAxq`-1fxmmy^i1ngDv|w=EJt9$;npcDgZd zC#K{U(os66qD_HYV-$VUZ82JOeO$nS`a9^tT)=sqyps$=hp1C_Dw8PmcO?Qjd3UUz zcXGI6h{ei#5;!lL$S_yR4mPA~a(eJ91H4_^n-@xi}E2d__Z`VWdj`R&V1<;G#Zzx_8d4LRlEoF?* z@-cEOz;aO@B(0f&o(sp}WVL*XlkyOmC`ssF5aK5c#W?n`Y2s3=C!b6(UmhXDmQ^lc zFGx3wK9%5se431I+xfHNa8r?HMxUXp#>+%CKnj{!fIrRUB2E)4_ zkkhVT>_>Y`acTrwex68q@(VKfwUn_l zD!)viiabe%5yPd0^XlxfAu43cq`2@srn~ZuI!blHOz`xKzJ)M%jlEx417Ag6gA=B~#X)RZ5_ujm;JGF%Mkh>&-1Yo)>!;lC51 zqWp&pGl_;Kp8Pk#O40&%UA$noWCGoG`kZhpVo^v{*_uq`3A^EK$THcLoNP;)GtNqU zKLwVlxLr?YRmWOvdooNTHo9>-g(&V|J``m~()eNVMH7OZ4Dw`W(roAzHb&+TyxxV5 z>a{l^uOOot1j~G^k9Re&+>qT2L=S>_?Cu8Q#AXjN8Yx)la+Hug>7vQ1$zG&cW}L3E z=Iw2uFRwHZ*N~W;edwT3!hYAjWbkX@{MeWM5-gPc$2FxaU{g781a727S zqB183l0m6qJ~8LXK?b4e9!!RdPaNxEqLzNIM-CyTiD}58q&1WDijf>T*08rn~CR`Eo)6&B}>n@Pmi5X!uLXYEq}n&?+6T#S zZ#mv8vK_AYl;r$Gyd*7cPG$!gN< zpfIt~OK9w%)|h}N%z!8p@C=0~>&UV`R#ENNlhNGs@|g0=1qoP_3(2U@Fj41uOAgtw zfsPtQ^ zQ)D==S6i)xM{puMg<8qW+tZ0$U1rGOhtAz~%Q9=&bVcUKXs+QQsc8Lrae|9nLZ+E| z9ASDgPY2DKS$Q3478VYYd3EYi)0}nXGBWtJRB;Q#mCF-sO0FQo8A8&EUBQXv>rH5` zCRdV)>hK(*#xosHuA(D@$8fZfG~-r7737KV)v-Eird&gYgHW?q#nU6$m8|duHF-lK zI4ReXVHVV|&aUuQqP#J|1G$b2`vll2J90fajX+LrAkAc8FCoP4V$LsD7w)Xcn@px4 zH&(D9 z=&f|qSh?~x(rkb=-mYWAe>+_?5O-Q`A*0^8TA;U@YEf=83=J3E);mlQ!`VB@Xg+u_ zF??47h4OCG!__?G-+RbwbSkomG>b8HG%UB%5xMHotH<*u#c;0jmg;jEu6vm@;SpW@BF-Bb1>eJFOX%LaB=*Lq* zfFE1+mkgYcFOz11eLQG{cJLL$unZ@SA6}c~`vqS!NaX7YyfxrSloT!K-2NT{XS}U zen5uZ0Z?2@=cp_{Oav1RDiznt#V6qkAru5*5Y)zII78glp2IHH++Yo2Of>5?4&BO=TjDX>pBiqr1SsUOC zZhJB;_cBk*aC?yP5!un|C9_mV!mOI7wD&9NQkyzEza%`Go`ngo{iq?tMT3Zv|8 z5Ek~NnRxY^UhiYV{#akT>`N9uOsFaa%!c+O&%6dL;7Hx-+)dYodC}|A>Bgpvc$Jyx zk*1A#`B4dj^?Iy_KJ*yU^tO(?g9Qv;aXB`Ytz#Lygbb5X=Y9?BwvJ0s9Eg))?qYir z2Q4QgSXE9WqlQg_E-uW#j2BZ~4jD@mu|Q5D69vFspHP-1XkAVw!vN~A`!CD#1Z&7C zi6+msarSK}7PzOyDEe>g_{_@b2|6ifkcs@|9h5W4vIvj^XOU)EA$JP0!nE==IhzbK z8T$y4G1{vV*q3u+*lZSFO&9gIAg>{nta|E?@pkKtRjOS z^eSZ>p7taltl7!1xa(-fI3%}6nWc}2#t{p8(s91~GGIP%IZuX(OqTJ{)bD)rpd>@2 z+2J6Ya+r_sYH;5AttGcy>{*ThV{6bh536Hio8CzrwQ zxSr;$qq9cell7#voOGj*<#d60fiv0*$>4_yQlO#u2J)(lB|K?XbQl8T^^v@c8Hg49 zA`oWlj)7Ilk;ab&i&x4dPoAAb9WAOrhPkGto~jydA~hl7WTFa&x`ACiTs}?knv}?J z#;?8<(9d_H^sz^u2w^=>M)O`P80M4>Dbr0;Sd$8AE!-0CZdFaUR+btWZRXg#sFiVQ zZi>E4lEx2p2Rj&^1mrb=SStvbNVBK~Qm2Ck8AyXPTV#9#PeMaQrbugqP+2^gCad1! z&e{wa{916n!r9$y0>bj0Oj8k)`iseGh;_NdplJtF<#|)9W9d#N>N+spztprEavABU zb>K;;^ew>4O)8WtNNXwKyfNzIUr#5EGfY>nB!gc|JuHVP`>PVLE*r^coM9C6uw0#B zGja_X{GiAhB5xqC37V2?No%CB+LkvOGA-AU)|?NqkBM@*o(>ws^jKTF+(4FFCG`l` zNr^tHD{msC(Vou9jbvCzdCvSj)Zm*8p2bNx8O<9H`%6wfSqj~ph~Y?_jK(GsleZc= zSCO}oiMr;UaQA-bscj27~>U zcO{rF?V-9cU>idDH``r3iqX;?|# zPg)~}CG%Ydcyc#srX3HD<0%2YN@t>Q`2ZPB0~l96m|#=#p)|9Zj7Fp^A12M*=K2Zq z4Y}7O%N6+u8TJH?=*|l_Xv8SMN9PiBRvso3d0oMF@h1&~_1+_7@WXvuwA{RWio8atCZ8s) z)yItdT{~bxh#~j_&?^mQGq2=%OAYqoL{s&w^o-o;;rDmNSz$^TAVdbkcxD zK2KUJ5%O8SV45-|UnGMcE3l74@h_2AwYq%SFb=m^X_MFJU>o48WHh>UuUap$!F|ni z8}fD2)q67X4byEj3ceYBc$#38BV*i%e8GFlWQ@@wW|~s>pZ9Xm!*FD-im3 z>7p^8mhYJ;>^Q!kFu34EqAP{4pPy4W1u0wC!`S+`2%TH^AFO@iK*zR z3K|~1Xu6fUyhMhR+2-bD`V`=w<`GQMNwZ!|;daa9!Xst*w|Rr5)_=(0hxn<5>wgV| z9e4|JI*MOdoA6~TvWy>guC_J^&HaAahAcB`8jl}rONM?X<$3VpwicUO|SbgkA-m3a)k2MI-CWZlpCrc#jZE z)7?!q3}p{8tdh+g`{_{jjPV)tzI(;Wd8blEz1*8TJ)SAaD@n6+!b5b9>|<)xaoLv) z3lJv&7**5~WIq!?pSXXlTgMi!91ugZI2k)I%^Z|4lX5T_rUb@VE*kM62{ zVO;;jUcP=BNLCQjP(wMJG^^MguPeWb9J7B8&GVcD!miS*4Vsye*N~xQ1y-G(E~Rw>X_lI!zrEWIC3wSaF)HBzMGOH9Xm?&zYkjxRrvVjm8{bM(<2% zo*`Z2SZx0*Ky2p1`!l4QLabcN&p7#v{_eIBSw)v4;bJx>(Y1sOdY}T1^Kt#Bp20aC z6{IIoUvXNtEsIC!=)&2fErCs-4YFum>?=13Hs__cJ8ba!R( zgkvRkz=To1?^2}$vv*Z?v|~tWF+1V#=*}n0Kvu0A9U1KI@07{dWnwm*WDg@jtkTod zHh{PI$+9w~S}PX0d^xL52)~xz>}XGSPgWYS1CDgce1RvV17p*RGFc;2WZCkquzS5p zY!uDuY?ZwS2E=I!F^;{X{n_O!mY*dvbYVuo-pWDu0H;|x;n&hP&_6IT&@Xdz(81cT z`TBBnUM{8^>qLM1x=}>$67no73%*vE<=lRr0HfL8(cV2QuOrJkU~)WS!u1_2L|nPl zgjaR1&dOzE`EpQNxU=R>Im`Md@K-L6Y()*!UA!pfFB_=)_%;;Y z1E3V6KA7#xBI;L?Ules5yTNWc7pwRB*1N0twGIu`pXbYm_K4h(m% zmFvi|)L?Lh!$sVGkn2ribOe?22C~|t;f@Sm4e~I4>J;Qn1n_G?*VjGV(JnXAfk)Np zH1WxIjxIM5WVk~E>$9um&19K%&H8k+!J~bhL-H1~jJfs$JZG4Zx5gsF*=!fS4?va! z9lp)x%iGB@hlkq+MtZaT?Q#oUIAUT-q;FBBCLRS8W=B20a39}fzm{1V5hKnFEsmrzvy? z-I$1x>`)fn()-A>!l%jtL$FgXdngga?@kIZRika}K;BQ5H7h0G99K|ycg4PswhdAG zZt~27l(aNUI+Li~V`{y_tV$n<`LKd+TjYb}@oQO~?QUn+^r2V)t2hkEvY9+Hado!0 zqra^?D<7r{>non1#B6|F(Y-05-fTO<`3POOk*78^={oz-SauBrJG*;3f0#l&`4Kt%hNh@AAkW4AfV8o;7e1n$MA=&olU_nn!#5 zKN>zOFzO)3E*CyWiASq@J|zOf4ss_f7U4pnf>A^d25~ohizjvd5_{3^VtVmca_q7T z;B<|Q%Niz8M?7C3haV&`=3ocw?*@mHcp`xu`{#y(_j{WQz;+=1ES|)CF_!Hp&KBe) zaykuhtGe5ii5?}9f2PDr@-K4iB};e>8#}PP;~qUW`0te5r2K~*yC*zA<6|h@jKxMQ z`CpUd)7&k{XHA0(4(If;6&=_KcF?qTYjP|KH~Pp~UbczxP8TmmZA*^vjxPgdN@1Qi zhqgqWIV*jEtk*&z(#JpF)wH$+0!y!x>zl?_wy2dA>`3-W$rWW^a!ddWU5a>WW4{#Y$^PWHdjV7qNI}^0BFD4= z3h_>t9F&6VaxgiafTZ?R4oQjNT1PCB-gP+4L~wIlGUPON(LM6R4aKxajv$90?`vbX z2uqYB4X=dLauhjEBh&Q_Vwhria*h}j-v>wbsftNHPJ#y%VH_q?Zx|uF^7x5zATTqRWRO^Q^?_mOTx|T zw5J*lyCyj;!JF5LPdA(gJ7*Za@Q9$Zt;v}&-or8atQarjL5vc%v1CPpqo~eK@F+Ls zRfeOb$T{RVkm7k@!3Q>x)2~hh@Q~bV$gw9c>n+H06VRWK^AZp%EXf+keX3S+thy*f zy#?83Fs=IA$>|6e-Gl5f6ju{vWsH`ii;A6wGKyV>Vyhf{cZ~M3dafeJC}Z;zY)=BB z{q&M!TdQD0xi5hlj4l;u?h)0TZBIhK%Gw#(H9mWw&LCgzGRW-f1t zxqdu>D%X-@{A%dOVYvTBLusCM9XSnk;gJj-u8-jXSop~e$9r7$-qj!EH}ow zm>sF9;7tY#ZYjT+90SI?o*0AV<^)CEdjv1Vq!jg&d>o z!%~ZO8MnspAP(E)HgfpUNs@*gxAd_zt?L{6=oaiNPQ4lj%K=2-fC2RZOzatv?InJ(f)@ZK05nm}XyNQ??z zdItYdLwPgeK5{GtJfT$dm+D`+-$ZawB@dVf3lDR%?_)7KjG8D9l4G-lZC%p>_Tz~F zW@Zn?>NsTO-1QSF6x$T!xW|k;R&j%D+L(Vb5ybfR2sz!KLN#&fB}^3MQzlWYP0Odr zaW%7e1{FO;E}t=3OzPxOax6jIbmWat`D_BCj2TOh@A>ig_G>0Ei>GV8Zk~W^co{4Z5tDBuG8j>wAg9^Tv^x7{3dV;J$g$Ie*^Sz+ zVYd^jmm)p@Cf`m;PRMs&F3Aftc;}Jx)9lC){(HlV6?`ngaHoi?vN+X!*6y5ae6?Lofi$lo0{?xIo3tJxr%SR6x|F?0lXZF_n)!k8gw!8FLE3; zu(CnL|Bz!uVaehmu>Z#B+DTjqYC$BmhNQ0qZAC}!JFKmTGqN=~ zeM>3C_i*mTu3QxtHPrxhDb92FA&zZgg>@d%wk|k&e`wBafW50&et>}EYig`&@H&^h+gvr)%gLY?fY!$dHgm13zk^-yp3UWv%H{{eT zLv}TM26hL#k<+HBb_Yo}D!ZH9?Ch-UL5_joFc2nKdm1=5Hz#|M*=?~*8vO*;bFSAqQ$V4&D)#?IFM;8pJ8ljl#&T)cc< z4xkH5w2EFCC4Ar(5(m+RwTmPs(Zk>rY60RnD+6X; z4#(dmniEl^j-VDZ*dlc#T~d)cY72>@=@Lik7&7>2qx^Kv}?rsH-3_{DKMkuIsYE!{%mB)Y_LTeby!GF+mlElTrpIET@;cC!qZ z(&P(QS^&(;srZ|Y*lFMwN9=UEq#}0477}ODC63rxWbjLs;agq3q9@GO1;J_+~{oJD(mPNjSut!UBOt?c-IryPRk+&*iT$Q=j}tCj^VX%cZ@wf zKHDG{0+^Q#_`5`tQmi)QwcxZr=|vti}SjIdv*pw4jtKm z#<9wTiMy@%dbYYv(v8}2$0Y$>IF^pM)k!@G zf?+OJU@(1)EC}%E1w`s~%{&dER<8NeHL0tQ4g8HF#R-Ca{4N=ELTYQ5)S=I9FU#`D zYs?ji#MH73wwE8 z(~&o-%5{rWn$Y#C!eT?}@v#$Z&N$14aGZj-JLCq{dz0xgBVz1ERpiPsrO1s39Q@s+ zdT%y8CaMYDtZJHnNq8fIrMSFBwccu4EZPWp+y7D;p7k+3f4eH(vPdaHZdIk1MX=AA zh9!~QrdsbXEk>{jy;Id*7QuEbQt^IwTuhup;D6Rbp#RWqf_2UEP2Ma&OKB$Vc@v~Nd&rQ-y7L~{I$2$4;brFvXen>spY@V=g z4lQiewn&e7R3OxZgZrg9MmS z@B#Hfv$5G_!*H;fgi&k&Ixr&on0oM_dB7ON*vD1>f5)KL8AC4Mtm7f|;1lKnW6-SA`SdtURt7pIf96A)i-`|DD$(I1R@3rF=oP zzi8UbD#aFVugRCxgLEZn<6C0bVDmH+0{k@nMmLps?Yq5N8>>pK9BK_JfX_pG-VKwD*72kzonX~?j9daixp>bl{7@U#ccIfU~CAN^6kXSQq*# zc~X^sWy+kMMR-Q>U#tG&__kp`66Ot0sp`|F%J?>+->4SPo0CxcV8GzR-q)4is^afV z5kyOZKBKyeL+oN*!$l}n{DUbn#3uBtYAw#8UfjipA#+WhQ@uZ$p7sMV_$Sp|9NzG3 zp@vc5dDZ)~=`p+}^cU4y93H;*TgP6VD}PnJznLDxGw=n~)K-xU!F^6Xz|;r1`ghg+ zhv|aA*chWPs`BED?L}K0>+%@?X_p z)--2LeT*Wud~v-B6T^Ag3V)-SC%xq-&v6R^I0how8d!ZTe2C^xtqx54w^6NaO^ZPR zz%I&mD$VxS3~Cs=R}(J26}-Lb>|i>~OapgRH7&emXV{A4E|}cbWhd3!d6AxhyQm)i zG$*$(;KJ86RbyAvVC>qtnI*facq(?Sv@3RTm2G#`*~4_S6N^CDe4&@yQ&qL1M3ce+ zd?OeU42x(Cd#U!`rp?xu#$Tz*^fS&CpYP-DqiXw_8Y4Qa$bP1vlh#()$KhkTvcD=E zUbW9&dx(JYK2*oxtVuXW&4oT_%Psj)B<^bl3l;V)9;D>VMnetzKjP}MxlG(oha z;EbwjuhcBIVLXPz!ydf%R-Ki@Rs9H4XCTqXx>ac59+f&$ebJaVuw9F}^RiZ)oAIm6 zN2v!#n+Mtg6+@96qk7EiD3kDd3=UwARh1>C!p4qbCUl%C(CQ!_$S}ni#G|6etIi3F zbb1|(L347V>S(z)lh}igYZeIAX-xJGSyAj>JFSi<8eAyPFBt3rpY2{ zf(!S^DXN$bl+!^xB~-&h)~BlKX{O2y(8*vEKV6lzZ)wI@OKfa49@_Bb4Ank!k+$NQ z2tP};)03fA-x*ttO-@HvsP5UOtM$ltG7m`4Nrezo{fyf z0NkO!u~Fm7dR4l> zl$e!G=t9-esa>;P_v7dn!<1}LrPrDgLyEC6)k;UNpGMN5T%<~lDKVrblv5oRzjiDm zB^dm{mLabig+&^~(8s!}p>d1)&`uf$^RmsjDiuwMJ(z(dRZEQveK^*~IiTuHm=236 zLdvR;P7P|HhmS#5RHbSv%_>N!wuMf6w0!qfXL6BF6ADx(-2tt^>6458gO{mQuWouE zT2gRBb<=U|uHnKzzIv*9Q>Mo_HlbtJk!MIRXg1yL>VyFrVqxxPSr0pb(T~lkck8?Q~h+Eggf>tYI3=% zUSX=*fi+nvzKV8OUMOUs=&8tk4aZckKRXg4NbriU5fk3ZT)oV0RU1U|Z!D1o3yMcDhClIkhtO^1EvloT0x{ z)!$|6tWl9bCK7nJ>ZeNyYjmfA+ue9d3nld)^8OvCU{~Ra z7SDTC^$t^I)SI{#&ihn5U77p6Ne}P4$epVBe$&(rwu#-fh1LjrK0Nhzw`$$9NGrxZ zu!UB4fNR4z&HA8feQ1$ZjBQq}bovHyG!7fO22GSdteW?lCexS3Kcd>{^uY`;&vx@s z)x6I%b*O4$_iv%q1!LfGXGR`St&c6zim?Y(E8U@W^84Xh4j)&&hfI$hnxa|?pV(3p zpI?tOA6CszF4iQfnvbYvy6UxJI-OrS?BsB6A)iv^Pn$BUo(g1|0-sU+bVI{zewAOs zvG${?`&rXv3yvo8#9;|om&a6_p2E5t%g1GHejdxW1=W1qG&z<<$mdicHD>l;@Y5^6 zpI4nPm=5c>fnQWL&Dm(E?G1DM7&^=&mG7AfYiNvpUzM06@&4KnENM}%VXX24)%&68v92ZPk5rSv#hM+s z1BYJh$Ex-dQ=>>XPG@M#Kj_rC$MI9uP1m-;5VPu6rFyACZ1?r6%)eHpr%Z{3*o2-|6_$?9=SC&02Kcaz zD*V&9`N{&>iyO97|AB| zH`UP&G+t`A;T0FG4F#jb3##~cQ)Ipa#>x=Jg#S?0bnl62fs=>P=ZmWL(qc7Wcxcy` zf2tabIqnup*j{T?QAPfxdjB>(*3C9U|D%emHd<)?9(ofjRQ{_kFQUn47LU^FWZ?NG9Bijfjg^ODj@80;BJBJqDrqYC9NWWunv@6RVUR=w&UGyKZGgRZmPAr zX)!1R_fR!<3e6a{;R|(GEHRFIs^VUzh%80LGI(!QO}ET;d_V~{v-nP}YVKp28e|Oa zt9t3F3mdIJrrP}Ojw- z7z}U?whixJMxWhSuG;Cuxgpx!DXMy^sp{yj$Z4vOY6^XL$QW01PgjjIOoK6OLT9Q< zYAntc3LZ|Oat=0(&QiS}K#;20vSI<2O|$`NC2s+JCB1m9+p zc2(&x70tg=2xO%yunNXQ_aNSL#m-`_lI%kf!(v=$i8JA&#OGxlNVVsI zc@;jw3(NfVbm4JpWaorgE|&IQn8At{Pn2qZcmYJ}k^Q3eA)NnU>-s`KFs#DgB-qX- z_FAf`*;2H@gzt0023W>a9)9to3m?C>T8em$E8V zOi6oEL#wK&9aS?`Sdqf)wWeCWX)&k>nN*E*K6Ls8+(gbvpgLkYY?J+LD|J;#PgRHc zLCAV;w$3{U4b=-xkLg|{Ftvq#yHi7_36pGRswUH_KeI@Gk-)6#r+VX7d?*CAQ*)|# zu_?0Pn$RVxk{Su|WG`+A%*wp#yv}skykqQARZ7n$F`(fD*$>e#T&9Ybo1zYe34Dd> zrsCL#VHA6quUEAzO^tDELRXnev(U3R_rYRuqpDoJNF|GV0BCR5s0!_>v(`IeE>jxA zC3ifQh0A8Dd#&lRN_Dym_YuV6qmmiMM~vR6zGyGetTad`-@3w){dMZW_2z+AH$!hw zO%`z6YeEwj(NyV1Q)10g;3kz%i)XVy&}%pL^6b6$-g}Qed+)vX-n;MreP`Oen}zq! zPlqYrcjnBQdS~a(Rf^V}R}PmU;+-_*oR;8>E@;x}fy2iQoJVY)QO%=}l5>fYFZE;&Nj~v1 zrRk7F6OH2!y;xveuAD18huy)YU8xkU2~sdW;t7(y=qe>$?Mbw1NWDgBTIZzIA}7?j z$hFG4&a;@6CL-NlFtG+E9DlrvH6N= zd>FWulFWQ{8@)P3@jf!0qF_YKOPG6_^nBV_;ma>+xgAJMQr-~b@P$7dOT`aYcOWH_ zJ1MCJM$ljRL+V}R>B}ls!?F3c%#7Tu8Tj!|?pEqOp2}m;jK5b&-g*`3Hhgpf6?LED z@Ar5ew=^*=4|tA$M%4BDgUWfxb7;K^Ji>5WNh!WLl;ahmCM+NyR>mU<2GW@HA7#L? zKk8)glRC~zDd90spjr(X9^1rmDP`zz>ISQcnXcKmT>w93JfXxVJ&|oFq&}roIIeF^ z%%Q_Pt(<2(hrIpinYsza$ctdVBzC-o8!r$<4HCfM1cx=kan@Z4@W}Z9h z_>6;Bncq^<+X<3Odq+v3F0=WT*|c0QBdSB4f|dv;4lu6;&59&hCX zC4J~gENVTIQ=0sd65~&cRoouOFL+(@u~I+rRMu!n{ZyH33~uJA#udLf!p@gLKU3=G zp2}Qf$zLc}$3puI(SRo|9J~Eed0%-Ri)fR+Rt}ql>l3_}KPTTP<=X_M!X$mCl=yQy z_HV1RojB$Hy|RArEO_kxtx5k;seXj0@4_6z8+_#_CI0M*I#l}9UzFyX)1*uetD0Yx z@|&lyIZev++|wq%D;$n#ebxBBCpP^5Q2d`BPb1i*zm%YA+4%-*UN+gkmGe)6gC#GM z{;M3XQ`x?qn6DQ@>%uW7xMrYZ9!z=UYUzW>*!iaMShmU%3h(RT?5LWsq=J!y?LT+} z0n(RJ_|hJ(($OrCv`i6U-_G33j4Z2!<&p%Gw7e4h_&I_5eI5AaYz3vP=qa2W@r1@i z>;x&vSKoxL1$=cDL;uRkTE(+W!(5PU8#12Bt12%Prwy&SOIB0T>Yk*nLYk&tX0`X+0$rHRT#CZE%=LSsQp3rJA22 zO!|gOh2w_aDfl+<0@+Au8+#gCrAbM7f{uw5_<$Kd7PW~IHuVIZuxwgCrRex$hB^F@ zgl~&MyUmo<-?LavK5=uUY28{H4yohjqX9}9=t(q0tw|cB6dK&l!Betr9a$Wz*+My6 zdJZ$1f=jwIaj>#D%vn~AehM7FA2!PnB@XpO)|5$R>Q>66O)YaGR+BPJIm10iCoU$8 zP`I`SQ=$f3`op`3wpPYAoi;X4kpw!q* z3FD^mFgH?ZJ9-*xtG4GRP1{L1u@z@U3!b+5>C~N-wTov_OP{!_(qhlF^|>bOVsaYY zO?kU}o{ow>wM>ceshQ_3@mqkDE3d-yR7;yysVpw$?SNl~UsLeW8zkc(UX?OOc_uvi z;(`Z^R(gD9tDc8DVA?WRQjSsbSWl+9A$6QGS%+?Bt4+7!{UWJWT8*cfW~oWF%86CO zq}jPSxRa_*DdQ6qn^f;9c2A)^jr(77GC?U56BL^?Nhxs5Xp7&;n|T*YgEA(22CcXU z(t2*eZjVw}K<&(9a&wzxs^YobVg`SOUny8vi@c&CI{`p7KhHG3W{Ws}jaTa+5>n05GVZFXZz4j&!K zDznuyS%z5hY^5f0#q$Y(?QMv#2T$y3dV9f1OPgSPQn%3O4{K9csPE*?Ho~Df#=Yg4aMlTY6eQCrGL1!xI zEKlN4V3W>Pj;hE3u9`oTF7_NVlW5WhA@5QpUFJ#blRois zrNswEj79DE9>*2Ry3(^~LMHWGnU<@R6jQH`ANK8%tCe$&=TJSHbgfdTo|_zTuyj_g z4Ikf9()FHXGBRm5C<~6;Kd;eEiyM`4lc#V%GbuMKA>RD4mxAA*({hV)ZuJ~(5;pBN zWwCME#adZAPjBF>hH|^o?(j4=z>s>U5@V~p@%Y@K+@+kmJx8Bw3Q)q)4 zCcLEhct>c^k8jD#%6P>yn29Fgg6CJ2#Bsry0BZm&5AXq3c};n*d!8A(G!+x&8_JBE zd^C=L;x~GEQ+aQB9`kc)Z!3#Gz_|RlZ#<*c{0JlODD_=Wg-72qNjboKz4+yL@g|+^ zFux4Gulx@Z`~=`b<%g=nwR`xf;3K7d>}jUzH0cv1z_DW=wreo@$*0Qr%rjWVYMb`C zQesPD+~R{zq{$b``O(fmr!FUtAV zbJ#L9;Wq_)qmRK)3n^DFD3o$Nwj-e&*hr-kFwN) zj)n6A*kQm~A*C&bItf#iOIsYVdA**(JtE_!Kj_y7@i-~uIn=L)NoncpDcW!hB51 ziVEi-U>CL%Gq~^sxvZp=l|6-q)3lzOWfdh+IctG(%F1|9WiEAry9ZzJViKnltWR6#sJSp3b zlk&L#xlPtn?)sifqs5XpP%0cpthZt(hN|YLb+) zHt{U&%szEfC9)cvniv~8b91Gi(l+xn+7s_S;_fRX_E%OcyE0x+hdY8hWOL;W@I2E< zT#3jCt|ZMO>+d%W`JR4$2wnIc!?-^c|H-Q|Kxe?gb8*)@(S0(J`3ACL_*ixWM4A8T$u03 z;gV8tE0tU2x!P$o9rFs(M=8~pY^=;KFw4+4v<@;kx87PoHQvSPkLx zxt&TWcna%G6OlGoS+NltpEzp7rNp={c%IVcdm7tf6D{B((O`U^9j4V*r zehHRI#e@3(%F-6%7C87_562gIz$;Sb0iMaWXMPQ_fCH5s)3v4*X9@61L0S${?!lhR zdI+h9C{b66dY{o&I5XGWg(vKpICUn6D)%tYWxff(;YyE9*?2Jm-yg%>#khQ0$wzoH z2b@^)kxGqK$|$^y*U5Xbj#A>$o=EHZ#AB2e%MoXbaZ~|QPEL+h;&GnH9Fd%|$;T^I z`>kmPm1%SmIYC(`dKSlYlk#sR=qP3gwfKN44x{2N(UX*PvM151wS|3~vPjLzDN5AJ zv|B$o`N+8xXS(H7rJm-g)H0TQx^lHQnM}v=Yp7=^=}b>z+t!4$6dp4pUmwPlgs*lf zf-0zWN+rdsWi(EJG|gxz2#yOW@oG<`ximSY$=4`1X6HJ*v4e~6 z({im6uk%DUSD$#j(%6LTNL8H?ymWwGEjK9dM$gl++o#^7#8@-H_XIL>vvO|n95w?@ zxK-hPPQs3BGhP;y+Z2Dh$I}`v?GB~Du~skOoMQ)mw!Tw2cX9Q`Y;Q#qO-hJ=eBk<@|wCW8()_O}P6%EgvfH zBhS+nfld3^lUxPVW}D{W*v2PH`qYzXOPlnWa@a5(XKH$OMm|@@7oNe^uL)mzygO=M z)`Y{1Un&0U1YQ%q>4mT3K=G~Ozf0gX;d{l$8I$@gP_P|lB@!@BW_KPiv4_Ih>T zCquj^m64y7_=_iMNB60}DpN;JI~nQ|1bXyu%KP2(Xls}DhqB=K{3d0&ru|bne|ZjD zgGu>Y8Cs<_pK-W_1^YAqDCNJN!rHM(ivey9Ke|%YX0ZIiLoAxY;z*374_vdc#3mF= zUP8I?3ABc{rSZmjY-aUU@{*p+R*m$OOJ7Ra(8-stJeS1}sY@$w8P8++Ovs;R>t#jBYxPCbydoGUJ9-3($-g2 zym#PYM!qqZ$;bxE+tBmaJ3{J4%8Xz4XBG1p;~4LdD<# z0Ut2P$xs!uRYHtS3u1<;m=eX|si(XQR~aL`3=aKPT?5!!`SDd~O%AtLnjbl~QTDc; z%`qpIyq$96iwI|lDY);pOSV_~4xSFrVww`vAE_eZU8Wkn1iy`SZN;C}vyHr@M0Qj` zJ9$AYZb%-Sava%N#l`zeB`(0o;l$@IDq>eJg8jv%?WQc&k{@9(1nhy2{>bi1EAupV z7i^ZLQ<_??#JKVFEWlh`t(cPvrB-^X4%j>lV3Mnp3&$)hbq5poX*9_w<&948G!?rM z_)UI{@^q*+>nEOE##Jg~l{U`PIA3CMg|o{@tX2{nw@RFX2V=;S8fDdb7R{n*_*t+{ zN%7KQ55V;FP8qMndQYT6W)r|6CMZ2#7Zv>33P1NvRPH3t)v?Q_HS}WP`VM?*5Fb%f z)|3RxrA<{) zVRr;_cv8c}paXilGCMqznq$=#06C>=^ELDuycdF%)Ep)5>xs01O_E{??xn#HDS4%I zCMY(kK#IBXy&c~Lu{XZYRl+>D1OKJfJqs5s;K2+JOfp~7y5QP(T^7*0FD$8_KyFodFGdYiQ?~k}hA__6@&Ky9m%Jc8e*l*VM9Hf>=IqHEx zCWV?CGCJfS6?$+GdWaXg0aS=9>4c8Qt(!R1*(Qe?soEbkzZsMG793uCl*3f);X!P- z7rVI=8-LFy(}vHr;C&xs4x5u4VKRX0Y%vui%0CiuksL*##ui7zJ5aydf~x^|>%JU= zn169aR(h+1)w11B`oj{y6!2i|ey>6=Rf9giQK2Ny5bCJT}pA85yeR>5q&QQSf5SVlRrRNBjs6gA@h1_f3Ueu>sd0q^@MHp2!xFFmQdcYR z6yTgn?P+|Df>qoZgsWZ~J4jqF+tMBSOrlk}P)Eh) z^P!&Wt&1>46iLzKbMdDR@XvGbqU#8s-cb% zE7kuXUrMqT%bO$=>wj=B0~h6rEq-uBhL`GK6X zV7{}h9kExNynzz5gd-d)R(pJf_t{!ji*;G>M3H0|$dHzOvJTPW8Q z?N)eg(URj-hyD(C8gsD1wBJ(0*$`ExQP*8>Im@-Mv#Op(HKcXUe zfOMnHgYa5yxKvkBSOw!H|Az=tRrst^tct<(5Tkm8A=i(P2J$c^~#60xeeUv0%TXUlicmkCu(T`wu_BM$ir zkkE{eYwmsmc@=Syyha&Dwb$WYSfjvk`V07^EN>A1KO2RIze)K2Y7`#*7SOIyxUT{D zY5i>^M)D2?8hzh|*Xo-nzh3E&k1J-=ezp4^S*o?4Qi_er{F0>iNmAYW$7>2iHw5+O zd;ktgz|q8iS-_RRweAmriR2?nHwF0^UR#hvPO*aMx*;P`QY zbS>Og|Fdwt*`I;ktD@Xe<#QxP@&z+6<@*v|TRz{WbqEjk^G^_8k*3A+bK}B`u9M<$dkf_Bd`3O;@QQ-YZ zo))CkBg8^!KY@m#a7rn|&B*u?7VlR48L^T4LXoBnzrt(FkeEO$M=xajjd0c6597rZ zU~*9O??kJ<38TdNNDTZ3z|c|`5a#^rpNNU%FA6al{td6ykWc?+c*Ju8erWUOVu@A- zeU@dntom)}#lebJza(}sELp4(`GYYIaAoj);l&Y)pG4qV6_c!6};3ph@ z7z00vw#z!e!BFf_72zJqbyeJYLEQTA+H%H?1&X;_asxs&JFk1Pm>#(yky=W>G>(m6 znUn`^1Rx4Y`{TtAyp@F)S~o^qBq@q8#oUBm%{QTz!*7aY+YH>xBmGpwW5#A$MEEMzS4c7`3*C*Q&++bZ4K~OS(G{teW}J zFlnV2b|kT?obRE@1{pNj5m4yIXO3{q=}w5m$6G1IsJ9Efnt5Ei*li-a0)SSjEkLhW z-c3d99z>LR5x$nWAjjl@w@7(yqteQa9PJ@`uK~uJ3KdluL{-6SjTIlEa7jYXO?dAo zEu)B4b$$7ZY~`V&2~|`1UY<0SM~(p!mg3WDMGl9R#v&ZaIP#5=s^PV2g(jLTB4{-v zsBZpgD5+cAB*51auL}CDBG|1x+l&J&Zf`PXL@?^WaEkIU-gtx~siz#H=mdDJqVdjH zLGVPvR6So!N%a&pi6~Vnlr%9gP*ejz(1UHld}MJlA|jbWu2Ezvy_#8gyw6}L=NB2d zJ%|>?iLmGkh%5eJx2_+~^!(n49LPO|i>Dv3oLbgse;+oZGtVQa=5DRU1=GFyeU z!5wI&wX0t@zhfrAPww2p&FCYq%D`I;KrYGzr8qfq7H)!4lsTXjv`v~1FYk+RBm&pg z6z>eHsA`ZrWvd-rOebSBHys12CgC?RDoaGk{Qkr2LTbu!K9i7b_l&{SU&*TotdinXcO(Wi=~Xbf*cBbvbnkEyu(!V z;c%UeyVb8Y4#PQyVAys%I#k@qM*wQn@Q7mlOSZRWk;;}I9h2?QI%o(ONL;l|GnxWQsB&iLfz z-y|(^xarL~iJV0>u-=rDL9r8&UPF8e!jYUxK}O@#;4Lu`Dfo24RL6x(M2b3tDAg(q z)u?RLr1{xSL1zL4JvhhUU_MUz%@~ajdSSJ977`*kn=*_-=g_N}CYnz=h1WUANR7e? z>_)tjEaw7=RteY1^uLy#hsa3Irzj)!0(z6?W~;$nI@tH^#61eBtO~~6^!hUvuM@ox z9LVRoEZiM_kxITeNWR2Nj<3sN*NI%3pLM{(NuJA(O@k>t!zY>v9L?zh! zP_IH%Bv+GW3V02?wjSfpEbfj}xt7qRS(AOuBd;S;>oZIj@%r?@>j6Za!d+~1whiaN zJMl$!zAvAb8xR@Ejg(~6yNO=SK0L<6*JW0K+zcFw%6^EC%*!n*=T^9Gc)86B^4k~u z?WUF&W#BzVZe`;(tmL}!&v!yWuF3lJ#P7kSC9KWmIyErA850k0o@rLMCo|42z zK(s^G=tA2p`47U8JW6q<43E*PI>nZ*ZK=^YfFDO1+7XwA_AcEgl>TI(KjrE1ogRyR z+VJ7x6B)RUFgv5H4foUYN2zBJ8OgI`8$F(b*V;1PxD9WJ<6+Eyo*Y$pGiURp5qnc! zAVsa$&ruTA>&Hb zy3ohzqOVli*FoAhUYf5s{jI{D>re?jS3rb(TS~55UVf)?zYlVM@N#2gw5|Zr+;ssM z6a8Z;(Qe%ONk#u0ME~MN7Z1X@60(0avblyE%bRsJSK7p0HGGg$+7(6L!0zPOe9NEfYE9xc&%1YH9X~7{L)0Km3&sk zN*Te+5U4tZQ4*Q}Y<~~50+$8OcFu8W-f6cSA|hFybfeJ<@LG*xLw8#W@SdAxMFLeJ zpHEyNEEWuICE`>cU%jz<^RSfxgF5V(c;lzhyhXhVA|qLq5{yc#!E03tJu{OEZ&t5P ztZFsH88M+1?jgn@=sD@RZM>*~%b37jgIv{gsO2V)bKu)s3n#A$GW6##R*idEX1DMt zrC;W(h15vaW(KAp>(Hxumh8JQOOPV#0*pbhNVe;|>#6MZgX|5w?9!b#DSSgCoP%^V zUWQJ~Mk;UPATI^4HG1g1*y~sHCd6q$eDx*`ZeW`drnW8Bd!4X;K-q3$KYy|rVj}5J zwlUo1^lE;wHi@}ZzoRk$i7*row8pP$7^p%91tD9&YfBX0`Y{}g!+5iQOQMq%lq^>q zJeXiDo!_yJxA9aQI|NwQ(7U9$OOMolamia3~pnk>Dpry0{{#L0lxYlwb;0M{kLO z;eiad`eF+n=_r^LVy^eBS0NLEkcnPMyg~Bk0Ay@9lZ+fTNWAD{FGp)oL6d`^DPB;l zo9It1mW0QFsYVi9O2WI;cuUGPdmi@03lWrJiZ_kkq*1wyjP3Xs39=`ED5ufS-F~{4 ziklw9?G10qDl|8u&LA?GTXK-mi&b%T>OKT6vI>pBG;pXwt}|-QSEgqoCXz<-O$nRm z)jZ<^s6}Uxh*H7Dn{av|r@jt24_e7A#75Fgx{=fZuPvPK?c5~jz;H0ctP{})&261o z(lplrkgZ$ziISFPwUVX9_B)sHmRp)M8zk6(rL$#lXI$Hm5=lFSni6!tYfIplddVZI zz5qG0v;ba}q5_0-t)4W8B-Ov{&Me8fc3MHxoD1@Kz+5{=AU@U5WSjZVkEWjgOQ3> z&*{b7gn5Ya4-NdoJU_kyGT_5w>uvMD(09V=2&>GRl_1GlhSwal!gn}!8?u&EvtWxAZgxW!to@iox{%*;fbMl1}6Xy zgL9Qdji+TWS>R>86A>NBzbVWZ{Ums;zVTsRv!9kBCoLxvuFCqgY6)c>`V^v7Q{Sc& zEg~WMRDhu-w+^7@ES%(TQaw*Yd?cq+l+p7Hc&(oC$+`hAD5pE{f}@;CtSafpxulW- zdKRIoVHi;2whYL#frNT|Xx7_Q&p|knbICVqoky?c8sDQ)?D``9__);I-<+x*X?2 z%eb3ZRjG8Bi$U)pRMiTtCa8t=h!=VR;|Rm1~l%UewIMh z$y*@as8}zGdyY6&$TzD1%kU3ShK{eAZZL`U)>Wf-Mig15J=Qlm&w z#>>Pm!d5ZpD}*lGRx#wOKtek%F6{jt{t@FfBt`N%MHvm>pf_ol#JKD(2ze7Yv^SN> z8=f;WYTfn2Z>h|;gUol}wWUr$2Y0AW-|Ze!uk0b2&LLjFyQHcP3;CUCq0INlRGXCk zooS)O_d$e-w57Z2kUv0NBp*_wvCT*Hs$TH;V)*NmKSnG}!p9r?x!q3?6UnEf83~`! zs}f>uGG)=98$KV}!Z)_QP!V4S5np)`v9T!?2wxj1oPFIzzu%~gZ-b2Qyo~sQ)7}01 zeM~}*XGrild6n>EknmG!2^Rjdkw9zuYcqdQ5x)izzrkx;1$^F|p71-NYAZi-Cb}pt zcd^%X{z0VHy5DPvchUg-6F}55Ysg+i`xjy&`I`bv4gCXe?_mQXuyV(x(FCearH2iN zTMTuxh+)IQ76%OaaL7jnxJ9}TB5=Vp*+!kd@LF}^W4=KzNt|lq2d82SQRq^Hsd-Ax zj2S8e)Y3pf7oN$Rl<8`0!F?Xso>&I4kt|CIMxo{C)jY#bYi0`~##$aA^aQr#aF68* zDr&_bY9%iURt@#97hmFP%ax4~Hsnb>f{GWYS5XnG1`(@y5%GqMTYqp@;mxwTkwC-g zp%DKe*)>$onnBK5UXHgUMm=}P!5;=$+X&QljV%paB9oDIRMxsd)_Pu6LMMZl^^FLv z@~#{{^S6QWHw^rZJU>z63f|bT*?{d${wbwz66l+HdOUk~xqrX70KL#{GZoN32-qCn z5MFUZ;9S$(AyHX zsNQH`+Yz>i-e^$U0|mSA`Afg`z5~LMj3n1sWJh{6w|Fb5(9gf`gfy6f4`#fCl5bJ! zKK{-sWS1ahS9ooCVmp+uYn-(k@tRW#0!wX&1y<9C9R}a^N-J&4F+9>L|f~VrJxJcQ7T|`5HJQ_TgtE*AN?J89Kl+`Qrl5U!PUUp_C0yQ%#3Z{HHgK&HRYHx*1>C4Obn~cHPFVBpj!H^ zkP=!3d_D21sIR$rRp^iLG4T@shpy~FQ_>yyEOtRAA}W$elw%ZafY&M-uMOY{pG=@C zxRB}5;-(O%ij^K5ENm)ZP>9pW6kI>D02iR9g@>E4DNYGSrD^nPrtwo6B=lUaj6DHB z8{y(Seq;DvDrkBTv^TsZ+DV)uBiT#0W%Sa-EoRBMQwuD zY6zd7GQ%ebGQ_HWr5{XF0XmCN)y^-k5{)Aun}LLG?4wi6W$Z18i6l!2MzL0UHQz+5 zFzDGxg#9^|>0Om=%5D$r4$qG7B`G#%xXjyLv@}QA`v$gnc39qIQU=WforO+ZcPe=! zh>hFbMBk~B3PI9bc&&Nk^TSwsJN-N&wUB<9ne2WJIG;c@t?vd2(>h!ia4;+f@Z=W| z79b&#{V2xRcYk=TW?`Vl;7}F+ZbC%7>X(AVUITS8`~bpL%Tfb%G5SED3pgmrn!r-5 zvn4MFAqpqT;SSVj+~$i<#L6KWeW*sW&!uP16kMf-E4P~DFikt0Y1NDCNP}e-t`-_9 z-H5C1qYq$+nuYJd43#4ow}gws0=(yPIg)XGO&oN@r4K{pD8?=6#NlJs&2luOmU2<8 zg^n&chEYq0sJ5YUETfh&Q54oZRE}fRvJREcbPko{8MU0xGS`T>6BxI=gJBdtcGxk{Tzmt)6n<|IhUd3 zHB>i6&SPi=4OLE(^ARd&&z*;>^5g;pBe@VR)#ozUR3D!IFCwpxj@7pQ5P2~piz@IE z#`QHoQ-Rqwxs;K~8oZ2A$r`+zQA@i#S_^GieB$K_MlKWN;REoUawQ{|)gd3+pcXUj zXoPYVqn9($$Qw0TVD#0DUf!WmnFf6gqgQazs8ADqEu!%b0Gl>fRZT4Vrc%(_l9agxcnBLIiBa1*d87H#1@hjWDhK7Dn_{hPL!u8D3Ju+RSfb zcqt8Q8^4|5rEM4u{0@ef(Zf*;T1Hj?fG7W z6YcpvL|}^&Zmc~&K$dUM4>A%0bPb z2|v$>Sk=71aI9)xWO!+nXE<(up)j9X4e71vx}Wz_Nt^KJDt z#;stxq;06LBd&m!%J$ZT0~7KFB5=|cZeqZGOQYY`=;8tU9Zh?eX($X2%{QSPy@zo1 zVkU@I_CAA)n;^!<4;buYf{jDvLk3L)XlflQA2Hb1q+-xd`{A0Ce$WhFl0v4rcU{iA=CPr8s#g7mN3Xx`I;fq_?qU*Hw>A^hqo2J zMJWD4+II*?@;%&m$$uaxl>A2qL&<+)FqHgf21ChzVK9{ZR|Z4Le?u_VG=E1hl0V=w zdmU=C_=Y8}iIzV}T+B=~cz?0bfp4HO%1)^K@Ly+M{$`Y&P_ylsMt&;oAI2@AZLlfZ zn!~pe{>vCU8slTP_@NZA#jucuW+qd-%s&&C11^rZ5~E%pL}SAWZtqdAucj@@v{>6& z3gMUqmu4_na2W=J1(#(oSa3N8g9VpoFj#N}1QTs%MMOlh65LqZS(zl?c2;4?x1CiP z@@;1|hJ4#uogv?L)?moDoi!1Px1F^R#(_$>@sh7YPG~#pG8js}9)qFe>oXWiz5#=w z}{ebIQv=L`E_QZelRnLZi3T=;Fa>u%-=Rnys_p4Kfr#TW2F0WGjYDoo(G9 z!x%DkwoQW!M<~%gMj#@Rt>IGM;?QomY(q+)){XGc2|0}0TDE0eUkz*{+aVCM_4Wux zvIAVo;PcCHN#TRo?RYf6#4(c8J{muwBNo3SgHe7~fapx9N=GcSd}P?zan~ zBiR*h@9wvortQwOV68F)gSE;T^46+g$Xlxtp@g-n5E02JxRBSHuv4qCP-~HGMk`~C zVf41mSR|CP%{a!FuuV1NOW39c@ot{e&q~)KB9c0|19kG#wd;6|tY;)T03TEN<(E8v zx33WFkI4ii!B7|wv8v6_k)A7Ki4&1%)_n1G-6WOSU}bW0N>|8aBS)vI3YnrrJ~i1# zfT_yiacSydIeR2H)5tNoVcwoG2d}l|FhlLB%)Q8rKW|Of=)E<%xW~-Uw0$&liMx8K;k%*=D{> z*VYR&LfV}ee2NbFbTCL=GMLI#mz)!V54q1lf1KmOYKGymFT-5c&;)`&qRHnG5lJW9 zf!0{od=3BsU!hHKNhHEyMW~l66ls-Zt#st$H zz+jQ-4rCmaX>XE)dZmw$gPjOtwnG?9nC(!;umsj@hqS)(1#aKdOO_!!sbPV_OZ&HbA(!Eh%rSY)`9 z85e7Fr}V;%kW-x)W4zNCOc?KUC&U`>3>UV>JCk8&yt5D}F|ePFXxzUGxA(w)uBM%* zX~vwkRi2Niq=7GBj5Y9u^v4W*kxPStFLr6xz?U$bFz}^5#u@lBAL9&sIb(u>uVApq zz*jOZX5g!OVMfT+PK+_|H4G*Ue615=4SbyoTLWLuuru%t2qZf7jfjZkCb&iI^JdbF zL2akLg)!EAx6&Uo-)$}p=DXdcS@Ye&aKe0d`WR=vyL^l@-`$J}=DUZ%BJxCI1_d7Ahd=D^~FyDhth&A6sE^N)$!>}{o!wAGW_ag}67F4)J#(R{cgz+9@j5Xfl z^v8_%giC|*o^)x}cuz5$Fy7NX#u@J!ALESoEMtQ4o@21cc+WE~X1o`AVMfS{PK+_$ zOAIEA_p%dWjrWQRTjRaTuruCk2ykV>WnmLGKxddO(!9Kmgh<|iYgQ<;3Tn=+pi50`MCG1X#%2`GwE=!5pthN6whoCP1_ZuFi z2BZh12H*tDfYg4&@ZKqtn5(w`6&4O$kx8*Oyb{A4Kp=Clidva5p&_oqAR99?Wmc;q zqVO+RGiaU1aRz+j6#G1@Au*EG;SSWHwY){vK)@MlO-){l$)-thAZo$YjB695c4Aij z2ezQ?l*>AZh0zHrZ)ulx39=?%5B^BjhifIVOf4`uXd4ix!uS-W!fdld;)Y1H4G}W) zvJt^n=*IA4UjnWb%7#dxZ1Lr?385;Nzj4LoLcBKja@iCZi05;8lk_9O%H9lqyow3e z$Zpj{l}2OhpdgzEc9jf>u?H%9kY}q+8XFsB3xZ;XLmaxomWZ{5tfJ)x6J-?{0)He! z;o3s7_N!9Xc3Tmt@_3L1L$7vXR7bGjFhC%jT2nYa4MmQXJ_3GhS-`c@`NU_W8zXK* zux7xYb$e$JOt~$P$cHm@Rg-K-p3P)?__3z}*Ji>NQk80wkp!u5X6uAw(vTgI0$~b- zL3Se0O4}KJybTGrw?WdfE0HRaM**D3m_hmvOhf)|fI0bN+GTgLto$oEgAeUXcingvI!3rJ)ek=YOU9FBGpL6@ zk_m8a2CS(rT<R+-ATZ$v$vxZrlNK%O|^fLWXHlG{b&K*UC<;n0n_s z6O4EvYo(DgY_?7CN0NbSv*p4GmZ}L^&LUj1Gz%xD_RgjmsCe;eo1}$An@<-0NLu0A ze0a1Wu|PxNW|N>f@kmo_1r=WhT64Ami~KmOsX1$5&vx={h8^%nl7nkAWY=@{bjwlX zIfoq0b2H6zQA<#p^}e7WYmWXcBIMgV^YCM%2CmJM&ATOqyNC(WOic4e=Y%YdD07iw zWsQ+}gjreh;m7-eaE+{1O;j0XCPBZG1%}O@hT(3%7=3@GN1m>YTu1-396+2(GQ&|A zDy&im0sy5b7Ngujgmdwu<0^-zgBfG>JOuto4uxyW9G^|oau}hSml-ocUddtUaNv+7 z4aQNan=~%wbWB8^bL9v|*-VdwA76-qYcr);-4vcq&6T4G)@;p~xR7j7-nlU2F+d}8 zUC%MAW68Ez9S46T$HR@4kE1##y18-!p|SFzR#33y;+R>S2%IfnOZ!~;H)%G9li6EJh)aWAvJOyAu7dO7s8KE zA;GmmSpRtDk&6jZF{Z;{Ts03oatTswLD}UmCD2N{41T;U2iHo|#Y>9vt{_b1aaeV8 zWRQ9#(w$VyF;@|8rCtqxB-g-=>4+gvt|drin$@fhi*g-eA&G4XvsIH^Pm~pP1N^v( z4sJ|A9R%ej!c-Us;MmXy``wH*h-7IX5{15nU@P-h_#?Ruu9c|^J^R=#w-c#i{X(y3 zx{x~n3DTkQo#a^QcfpUV=iplDY&&MymV1a(*=7Om=RSEiEDr$_Q+ulPkYwdQ41Xk#z_s%E_%#5h8QO6|bU=D@gcYRYf;>r>N;b6_ z8xQ0uq(LCNOP4%Npq2Lw{J6{wu94TOi7LhPB|hjsXV_Gyt5%+m(O*#di=M7yDRvL! zC4y9p=}RaTw+$fdWu!nAcDgQ9{3`@nWnP6JpOk?cE1d2|$m@iuJkytaFS1hKKsuzd z2XwLG-z46OeGC3b-iB+%y4K2l4ta-2mF!pHwzZnhZ!>roFrNW>>wBcx4Bm%7k`Lh8 z47mG-p6T|VJ|tGNV3Tl*Lbp_tkB|(}v^N)@au`N02pAoIn z*`gA?*e?g=bAXTsy9V=sg}xxoX7VNck$eR=Rsgqd!7kI+#A+5i{#kMXXe##`0Aod| zm2b(kxqJsdj+MZ*xv*)#Ox{jE5UkmlN@iMY(I-D5Jyr-<>L)U|52s69mW)OFnXxw0 zU*M1ASGYD)R)H&;x8ZMOXwEzY-@AbEwV?bCFx1etHetd9`GaJe-JkH|izIMucC1x^ zV8p)((>zT7M6C9Cc8Y(H=In;}3G!cpt<1$Rj7G9JTq~2cNEC$jL97vK#zRJXsY@Uc zQnlaClfHynkxRlK$x?8wNY2DzteR)q)*iAnIjVDVw3_FtWe+I73_xzXDa+4?<7EcF z7r3nEv>bD))02wW=t&JpVarFBr|^C#Xe28*?{ry_P&Fm%~>N^0D8C%YQ z%Fdjj4X5T2xUg6AC8DfMo@q) z^w#w25p(u;ErHs68^oLY(p|Jxp=^tISM=?ai#pJ;qPXZLS2zOUm}16QGR)7C`VieD;}8=`HQBc6YUmGxKrMo%^`@Z7 zVBKk{L!7Iv@e21(_X;rj)(0l$2E&}7OjAn}m8s2C=Tt4^q!OeCC7E(gRuZdLSEZDy zyeTDkQ^_kNc3}R6D7?l)A-1^F==Uu(D6%Kw6Vavsdm-8teY#RPe7i|4R{Fh5^JggE z7+@deyJi})PM4<6RH`vUqf+DZskcN^X?BL}LaXSQKTGKxz|+zU|8!~57`8X;Ul@~S z5v3zBcQjfN$S8Zd%vLN1@D|u!+Tyr&;tINX5lIIE>YXk*&ly9`9G7CJ7VKv1izs}G zfw)$qQ(iglQQxW6iP-q=Mgd``*<5At@r=*Y%xGQ_dOp#*7{{R)_@~Q)UYz}kIQx@R z&?ykxBN0N896**W+ky0JGviY>b3F(#+JzV)2P2eeHMt$q3wvk+dl<210_48I;Rr_3 zO_DXr5%lZS!6G`N9En)n8?%vfOk1p<F@oAr#vqeR z5Xj_p)e*_17O{csXQJNQG~(SM^~9R`;*@;@g4miM$!2yF{o1h1q-pZI8L?VtCQ@!e*kyTZNycqOjN8eu z8Do0913_GS1J@enE_hA7`I+u+L}?)rBljQxBeAM5jWo%<2uE@sSyuD==?^p30|;uZ zo1K;i5p)_qq{yNvrzeSjn0Paxn@5^Q5P`!dq}mK0rC%4DI`E@DQ}P(%wDq~UKpsbo z%lHXp^d9P;?8SPDtb#6;@s0=rcGdihO7N@ZXI+YIKUge3hp0%NC(fGo1?40by)Pn4 zP0Q!+mk@BP@|SyKUx{O1CDv3U*SW7Dh#Oo;vPOA>{^E7+n}{@Z!F8Oxg`hLZ+okaD zB=PSm-b{J#mBPQD#D74%S&i$$^h1R4y;d@5K{RHv8`c&6X5#x0IY$2@A zd$GPymeKgjg|NQr#rm2or#CvuHwfcw2>G@uzoTC}BKiaekna(pmSwN$k{=LsRr#Z0 zi`IfaCGkHKZ(6z8`1l18cvvUZn(8xm_GP#cvU|O913#D(abW@@MN{17pn|d>a8n{p?gD3@O^_X=> zp&ehcnUU{mpP6gR%N9t&btG_2^JvO6;w7s#8BAeZyAPHj^m3c4S#pIrGSsCEm96OI zY|+M-42HRcon$z@tTdeO=NA_yWt%%>giG%)Tf6kk{5g2R6kiTUmfIk*bpRe6^iyB? z0=W4`$xD4-UFPc5unrj#*ipf$x%$ zKKaP=WJedk9fz`$3)H3SWM>2ldi|HRhTrVk1u1wZ1#X=^&1lS-U#?Eg>Q6K71_(|w z?ymSUxON+kKS}f(+^^rTq5b;xlX4{Jpo8Q4v$FH0f?*&QlS=w%{vlEYZ?}wc(0pMQ zp`#IQB}$!c8N+niLMsUtld*`YUZQ%5ZW-s&uz5EFSv5*E(-yDp+buOrqgJyd-DnbP znFwmP)Hx!m$)t@(Or7SVQEhn5u3n?qKJtyYLRBUxy)ZNXFaEOMm}{StZtR>Y#!dCW;lqXvlYb%DYHhrS0;UmQ4uJ5!PmlcgsEuS}OsbW>5{&so5*-PCyjHS~p`_fya zuC`TSLQpr)U`cgp2czyV=_JbPTYx{3xp1w%>=deP7T0FYBeGcA`HW0xOK2Bk>2%8i zdW*DOyc#WGKPCii_h+!Awp7AuJ4_6Sz3Ez($U$OJ9O@E&+79@VQ2Wc|UI5OGqm&%B754R8cM?fKInuPH$0Bv|(Mrgiw?# z87x^8uHfTE875Z|Ys+#q{5Z@3*OtW$IWy6PF^*hIWU>0!F;dmn@!UeMXDpp=xq;py zowXg^$b_KtO$?UQnTx%I&cozpg00fGz#qx2aIMm2Tu)II4m`IJTdel&j8wIC;BnYH z7)_^J?xeR!Z*4YrF(K%EH-jbh=2K5n?_qKe(N^($;m6htT&uVnew;S<6I`tM1B~pg z`Gbt6(=89tTco+Rk{%`m%^zm4l;-9MOs@%*M*zZh4qUUmVS(gPGHodyQ^4Z{m{p5u zGrDTY%M(Nv7vV`phBjlNPcfEGw>(X6Q3tqo@&6N27@7%ZuGsb$L+L|etTgg=tOaINBQ z2y#{&LU6I>LmAmy^Q{<7r(1^6Tco+Rli^GVnvYSFvj3mIUWw<{#tX*~_rnp2qF_ITK=mYo?{R0wT0 zyD%XXVpj%B6(Y8B*^L-$^xff)qztarjJrz1pjtUW#i~^>vRJiBMi!~2Eu)GFLA6l~ zmQ*daP8m&*)ol#?k&K0Fb)#*uOl+5NL=`Jn&B$WqY8Y9hoK}7<6M}Me43<k_PPfdVw@BB%+R-Twpy+-KmQ=LY;$eS6t)>zD zIMM?*(NwAGfrJ&SdJrSysvgV;I^A*zy+x{O{U6GNpz2`^mQ=O(;^1&%t*+hhM{)$* zxK$szpj?h5s#w*d7#XYoaygnYbh_mjdW&?`-hV6;g09CgSW?##OM>GGw#uFWeA!vIVgC(^swGcR+XshlS@Z(SsT&u1h z3CiUx;)?Y>n~@29&tVLmZaJ6UB7Ldr(_hZWB7L}vS22M5<`=4Se9 z2`X0YIz|?&c0D7DRMV=zfeAsi8yPIAT5P7ji6E=n&G1KZ3tX$4pXqNUs#v+(7+I{` z?Tjo^PV4y&CIsc~WU!=i@tOWEqO5jz!ym~#aO2u>Ub>g4V(so@WUMvT%KeO?(=89s zTcoAd?t@GST0X>JNi7pIeGg$)&4=N~+gEU{nqj8@4`Ic6KFY|1o{uqxPPaTxZ;_r_ z)lV=X==mgrCG||s^iL6I6@421NS=Xf74`kQR-PrUSkvbinb7ok#?a}O7w9e0RO|gk zCIn4iVz8v9MKk@&1X@*Jfj^R0;aXMWGyQ7>7VG*tBNMv5!5BK-@+Q4Sy6Q~-788Q5 zZ!=g@*W#J}9U`r=@4_F+dvN3Jl+)+?L=|iL0V7pYJJWy22s+*J5xqr1*G&H@p;pt+;E&{UxQV7pRlgvtSk*5X8CUfyM$qY&ujwsPRqOv7CInT#Ww4~G zy=VIGh_$+Y4}T;-z>Qm#bLWpl6|4FaBV+YnE&V*pKDnj9K56jx6UcQqDHL**DB8mwO`dRSs78iG+%|0)I5GBWmQHNX^dkh z-Le`Jg2t;eNR4qM1*vN=SdZXQ{v?I@7@s{%$P56qt<~NGr1nP=`ZUd zwwL1TF;W%Zn%dLpmh~A)#m)Jd4H&FuP>;-P$Y9WZBL;ifyAKb*@bFwCKKGUBXzcP@ zZwx$6l)*IzlJ%l}T=6NJP>^jpn<}UuL1v-F0mmF1;&a$Tm&j&B7dN2(jMN6iC5GZQ zXA~W5a?u-#HITtjtU(NFv9uR#!CKy)aIYNgh&LDGdy83DYDfQd;xi;M>vpsHdrL;L*Q_oHK448qXaeCweY4^CPqosoZ8qGByeCVZ23NzD^ z^RQ{PGKYap0prCKovHMKjLb}Dn{XGlZQ~sk;o&fD&znLcr_6Y)pj(daO-I^ED&eNVUoNLGzzqqUl+Vs(Z#*?5*T`uMqGVLWmopgf1BYYCnE^9J&SHQolG-Vi<7>QFIopFKmdiN|Yz9!H6c#}DTneAefew<+ z^XxOb-gaip-vJ%{+(506^BAD*NkvQdBso98s^kI&IQse=;=*-ezzB~5UKm(4auEY8 zASQygAo=2esgp|>z#7RbkWgJN4cLit83P@EzvGqci;MsvMKOs$t27@+0n6fktKHRn3>n9|d7qlfKLE;ljYCS{E97!+q_Gh8&> zrHh}Db}+-VdUN2_$t?_U@l(W+TLWsM+{OTx2}P*XKuii|x*v`vbGzqEtCTw!(C%vH zD5{=m%VKW1)4?h*FWkid6|iP)MA4e?{3CaJROKkS$DvH8#>i+_GxvJbm@2uC0rtO4 z0gZd=*oks~NFF5*Fc3z~e4*#sygV2XQ{^EBxKn4cp@bfvUQ;CxI|-S5W1%xOKZ_NW zJQ5J2pF8pXHadA26(+Z#sHrTbWvdBJ?;T@W8?`2c&lT! zknVs8osl#1u>yh(@Hhp@coXKyK-oi{Vt~brQRHcl7+){XFu>75b8X}YrDt-qdNzP2 z%X18{FNc!g8kd};w3k{E+u`$`HL*foV1RQT0Uem6F+mKG?7oEzzB>4#N1{Ky!~lD# z8P4-qb6~yBo+vK|T(!Ky0H=w@oaC@T;QW+Mb-Hd5r-M?6z=W zmC#t2i9)^}!1eM51K$1y@TLb$sgk!Cpq8e_QJod(IjJcbJbu6JaeLIuI}ETHx3y&p zl15FDwk#|~THbe%%F0^#fB|+je7UNT&4*vxEo;kQh1Hc# zjTdgkpvFJ+oT^&+$ca@B-l-v2KK77tqvR6?SPnlcR<>qm<_euz`PAd8tK~BWI2KzC zo6;Sbd|E#D7&Mh$mB9y*I&%v9Ho&IHcMNO^SaDNCAK)W+XC^gp@|21}UI3fr_g+F(wfx{Rvczb0`{YajjorU7>Lzkrn%?ZIaue&&mJ|gPJUs4HtI;vo|R6aT==?CL4Ng^NoDdI z1MIhGh5BHNPp+U+a&5YnlCXSM27+|Y2 zEm&RVy{rR`F0Ys67~q4Pm5X}D12Ug0@Lj^ro(s@W)3Us0pk=JUfY}q7({rwQDgzD>bFtu&hfpr_Ip5wg=UXl64qh zF^nmj3$Qkdx^BQslJyv%R{5?rh_R6MJ!C?aY`_4GotZrkm$K7#qlrtWs%%HbK((P~ zOstfRoKS3dG`6Qx&62@W#>O7fFhNobu&9_aIu~F)i0_!=i=`OUuqN2VBd1o$rVMbT z^g}Z`msOx1lLWqi&Y`Pc;MB`z3~&*rlS5FrJd02J6{Nq%?olb5Gmu=sj4pI>%oyNc zW2!4w9B&@z}bF zvMU2@)}|yq*W$r2ExUQhgi6_+0qsJ%Q-O-ww?NC4dCL{X3H4wAk|fq zq@Dp9%k5arMstRo2_7_hl1y}R^11fZ?5s5F%6pQBjF~76P7W40ZK+0#TDhiH$eHXx zwWDMT1Ke)%ix^HC6}k2tztlO^L+hss*WhY{d02&Zplm~6R}OM}c+|u(GK~QaAuV{K zO63a<#Yf?7?c+GMA@&TM@v;{KRKh$pQhp%H^Z=bIdow`e6oF=V(9}xVhXJiEZEmv* z^K4H|dlUwvnGA4N38PGyFe}n{1;0ZYJz-jdG%>*H?c{e-Q?t_x(z9D6;~+I<)iR3# z4l}c}bFiD9%d-hLdjzJ_76z!B?Wt{9?0a)i&3aVzL}_J!9-j^P`vG$-#s29)!n*P6qgxW7!jyYNfYiv53~0$S1qV3F14ft0(F`ynG{LlVrLZn& zPUCiiV*+TD9Lqph-Z;#09)nr?cqa&Z4cLxuPh+))CjvPkfa>H#23U7V5J!jqqwK2# z<2IVNQ*fD?>vGc8Ntr2}G}vIdz1WW9i>Y%~sJ${XGo;LzGB+tRGp5YU^gYk4W=AJG zeShB{J`X;#J6f$)((Y>O^cgjtWt|dT2KSRw$*_`^FMTL~S~M9lNKPlil?_pLKhK;1BuWLk~GCTH#jgY_q~UJlqNMY#D<8iJTLyMhug4$#5Ur zR*Z=naU0nT3l4`_lP$xu{f#j!J2^k+^XbExWg@bcxG#fKQE+fNhee7%44Gt+Z)!~cHCAmD> zjvXXdkkLd>F4RuY!WAa7kGnEj?K)JhBEt&kkg&Oaie4(Oc9Y?94H>?Lvr%Ik&P?D1 zTO@I-Ey8P}t#Prq);-6_b>``Ju8n*kfv$E&3vOEb4D1$QSkddF=WZk91~Rsp0XA}m)&8@Sp?1f`o6l>akRsoTcKgry|@o3$USa6OztJaGS+rxEcZp*!TsfaGQ3u$ zZ^T;C7pP3t1JQ8UAbF4si8J>A zH=m2<{RheOWcZYBB5$_Q4Gk}}C57stctDrllgSIwe!y^fkxV@6#$ye68!kOBMH37w zUM9m!R7h@HVIto)>G0!~Xg7GMyh?^gY8nO%Q>)wf;E{*(H8QcIz*1li}gTjVf*f@RGib4K*pS<-cQ=yYw6( z?~>tlNe?e_vi@!Fjkx14zWa7DioAWxJ3*SZ)yomjd z412TA#>68r=4(cO@O|{?JwkpU6AH@vScK-)V`Tl*+6ncXPa!`>>pp$tCo*hUX<`yQ z3}u3UcBB6C3mMiXy}03CAhgk6-D^f8~+}S@kr_qGOT*q^^_7mCH^y- z^zS2ok>T<8s*l8V0_U8_-_a1~**|0$IE{!Zk3<;?c;~KfBmRxX14l_0oWR;Z+wq(d zPY3yY9WOZMqL|MBN8$nT++pRKzLS3=tp{F$4#c z+N>UJh76HvGCbAM$Kge3dm?yzhyfJeCWomhc(J*LdyJAb4Yk5U)`~WGt-m%IKf&8E zNYk!%ooIw1_PS))BexZ1AAC0QftODhiK9neFPaVSD_spMK8?iJYB80qTQnMhCxB$M z)p6*`tb#2ONcy0zG9rTIDE=n;KfB zNA$qchKYsMt>lDNA~t=X+^8LjciXe%munOAqkGsNl=UKU|++TKlebnlU}6Pb1X(;MHmuWy`E4UlfqGy3i}PV5DX!ZQ8>%NY*0=Na1Vf5l+-j(d zAj1cOIVZ`{TTJX*ykNu4xjY^gmF>tem$#u_3hbPc5|ctvO5{hzSUb$*~4|CWlu6(yn=3L zuc+wNQ}!mqT7_0q%{>i7Cyj`yzF>q+#Q8G0e zV3z7MGWv$I6>m84=$#+)ox+^?qt#811OUh=r z8%Ep*lJN_2V?Ad?;~YIG8uc9^2a}1nQPJj*XoCr|hmz5IZhfe(a~d0y2Fw`2ldr?v za)=yGhGp|fq0#UNHykQQlF=vd3YmRS9375whY@l#8SVMi!Hkfw@YQ)8z4&9qW6XE= zo`dCBGQ6;(xzy?Vg~E8@gQ@Hs&g0x;gd9(X*S@@moDj|M@bN@4yf9$mHlK-23-5>Z zs+#t(c!qV7yNs2S$?%|5y2vTf2y-G%CBqYeX`F^9JN5d@6X7(s+g(m4!-H38b4Ikm z80AbdI#3SdlWC33;|k;WG>gUDDxF@AOTk(0HCWCjlewyAy>J1+`0yMzA0g-dw>i+y zgGCaaE7_79K5HrM)7FF;K235y^!WB9e!CV2U|>_03rWXqP%Z+eDZvFbx3*zARqVyX z8j6d_vb6?F+>+v`>oN$ONtZyG6nEADmxA^Hm(h(mw`ch1&~R@&H$m4Y!NB zd_w!a)bvW|lHy>+zY4VDUrjGwHgXFicoZ^=DXyWJ$GVm*k6!RXUAPnjuW<5!@7o{HMZnCU(E{fa(MN%B4 zxc7o~-23RFk8UyxNbaZ5VILsNGmeW)a5Qw4Nl6}rI4O=%(1$=f=uA3r)akd-d`i+2 zj}kksIhjRc5B4xwPBEr$BQ76ol5=!^1lCEBHwD=G5VV)!G2$>6x%DOTI29i639@Vf z!Hy>m-jVRw$dgbd#oZPBDbNo7G@W=jbKqC0oHq}j(8vRSN|voL1derN(5>9-GnggC2^#cs&>r*)0`LT{2r6Gv>|wql z%QGq$M!tq3DHav@8_*8?EnRqW+3mEiM*5B_2mhWdFJP%94i#5vap6))etU0O|RxPp42FUvgy^7JIOTdG&L_ z8Xrm1BFqiii!cvy_&6s#<;uWt411TVo)4Y52dOEDX1#I7v&j2xu?Wq6F-w_4&W92V0CTUZlmzZjd6B zaKjoWi_f`uvILxx;uI~=lAygnOA&4(!1=wzf2PV8m@Q3DFV`|;Hwi!}3GW}~Tp)H7 zw!8yR#Fm9`QkmqG zbL(uy+p1K0h}Hhfc6BI|;(;2X8nlO4gKjvP(i`N?mddS36A!c&S$42`GhEWub(k4i zvA(Xw|XG4d}tM zF@u`DyW5a@4^TrEf4Knefhu%|J}GiFUs-y9_Fx;)n;l_?6@D92<6$--%L5O?g08hd z!op%e%n5}uDITf#n}K%x&FQAEnd&=T8n^}Z9%W0iJct@4E+xc4iLthVNm4voV{HxE zV{Joc9*)eqLD`l<53n6sUK2Gy1l=Cuqar%+fi==l0sbzntlH!SqJ^-|%52TY` z`1E-b&)#$q+j-eU|W z3z+nQod&6}-vtIq@l=g80<=dONmtEMjFc|C97T=C7){oP5}_htiRKunlH%!#J{Gj2 z^L(mYuelo~j=DQpK4%N7E(;iW?g3F!JX6v31np>h(YQKeJjdmod(+aR>_e902#bR8 zr;!|cW><#p3)`f4wuUc&_VD9~5{H4oAJ1!RDfU=(WPKPI!$>_8N%33-9uL}q8|cEW zEw{FG0_Bd}NS4T1GiIy^MN&Lpktc$7 z_(}BQEs2#h7Lhf~tcsmXLytCvEN@B7FB2~3ITfZ!@e&O_4YUW}pCD`&m5XZ+px8r| z$@1XQDicNygd!<&^({U+1KNQPri;$HN|RP`?Bo!tJ;0%4`E)L3E_blxFjyqTD>TyK zpgqzN^yRs2d5HOwBdPKzN0H^#%Pg~1IU35Oc#Q@)2DAq_mTs&{e8X3*{ZqQM_c*FO z$nj*o_w(*7H9rCRqxs{x(4o&H%N9W!BnXR+d77RDaZh+$mdey$mh+` z@O)^J;w=h(0cZ!mkUsWIB+PM`)57J8XzJ0XlU;`?;xiF-Wo@|VIVq)&8*N;Sr@t4& zJSpC)MYsgC7vWL@Y2&Y4H!YV@;Q=ov%fr_(mRtc{QoLQ!uLSMrSJ8{Z&kmKtQ)yp2 zeKpNI)-`0S%_~>03dd_uy3HogWX6rfAI{KH$jyY?^g7i zK|A^_bYj-hlO`_QoXh(8XV#5uqVg~lNpYsaJ_6cdAEgV+5Hi4}=#Nq4ppTQ)_jF$`p!zi+1EjwOLJPV_w__)S< z4z$O6p6)E2K9ve9+h3r}BfLnKPsPI{DP135l9wP&icc!!%b*?d725ONRc2v(b%(X^ zuhPncyhfH6Upkezf?gl6C3uG{OAy?c$IkuUg<(>BT5J9uXpj6pA=t(;HJ1-4^f0r@vRkjH zsC)=_PAyl^*eXvO0>P zEgu18HY~uiOQ@6L%NpcI&>rL`I%>D3Z+ElX7yL|>hxmmopV6hyanux#{O}|jPe*@+ zHYvWU5q<;h5q_s1Z%NacmYr;T@CQvi(w}5`sZkG{v2?*d-z)*kC`RCdIcEa(>Vbxd82XOyV58xLL!3R5|iOWO*r9OYPdC>B7(@#dj5d z5zvmmD81N?r?V&HCJ&2I;pmH#WjWLi2Ou>>?w5cnDZa1ZOM-UrrRc=UriVN14Y4$( zj=T(6mcWiMtn`>J3q?|#t+>m9cHHIZ!bYKs_Hib5zM;elH1j|!l4V~ltdmPjZ$G004 zN%0E>ULUjrZ$OvW-TJN>8&dAbHDtZJP3?Fpb%!P?ex=YoKs)qC^dWS3mK68e*qCyM z-h`}<2g8%3U`Oapp-GD0DD-Ba9eQ)~>99k`7SuTSmSmZ2HN-S4+X4XaTS1o;zf<_F zK|B05^x6Pk`3nX5k~!||u`QiE@^)mqM~pB~2^Wnyqu@|&55J`NgO+Ls&|az?iO58y zZNPU6*@+qt-IFXUZKtDI0=^e?N%1Fz?+x1F`_L=Xjl^9>`cmQO{m5p!k<<|2{h>;V zzbNt6$Zk}5)ZNK)1ky>hWe+Hm;y)T-PtYDD< zm))FYZweiHAF@2Yv_U#`2bYrU3vp8Hf&qS63ZNZy93AF`gYM^2OU}{ijMY0GsRx@B z=T?;QpdF=whHNm}n`gFunP3QEDpMm_w%O33r-ph%R)i`k&a2=PK|6R8omi)IV4dz5 z(@e3KwS_E;VB=_-vG;0)A}P+Nz-^!%ct5(Z&HCyWKG?}^Gb6O}I3=>YVA|E2*UXMy z?J!G<3ux2?v`3vp0CvaW)=hu;I(9PU9%l+!_A=@9N&ji4rb3ex7gFeHpdEUD`rywh z)am{<2hhmll*w{1ZuK!I)X8?m(J{nN0HSo6y+$TyY&$GXeg565(<0_ zXa_!)E*QW5*SyR$H zv(L$tdXQ7dvb9tOky9a0ipwbMX`mhUbb7FN@mB4-0i8jmqn}BZHy?KJaV*^UENGMB zavI}o&>rI)`st9Oavz~{DR=nu$m)126?)3Za(2z)UVNpU3wz67)bUrHCIyJE|t%P4i+%gM50G(vfG!y>?50eMnf zMPaW5?XXwT1AqUy&C%5~@+jAkWgjxGvF$%LN4gefNpUp|dL3vFdOZPHmx`T|ZlKho z+(=e?L~f^q)0z7z@ec1MD3W5e;@%9}ac`ju+YZk74%;iupwi)QCChu`)Rx(bdokhZ z9n?v2O$~B8Xb*A+9a;N$AJ$~6fbpy(?#y&2%{<&)WI0ywd$La5?uK1bTwCMb1KQ)> zO9U2}_oM7}`iJeP(%qfzquS%$Pu6aBwUeqee*pTVxUR-|5VXg6h@RT&<6FseXQ-Lf zc!*hKc{Q|4mX=BPka`%Zq}Wx_9|7&?kJ5>UD7_lO$2XLEj7ksiI9YwRkj{&$Fn$8s zq`1DucoMY7c#3`;xOTD?)zj2@h-b)Z52CwPp_RpLtI*P(g*GW}s3D#M?IE709|tqx zrX*})^#X;C{UTYt@P|7RHNqo6h?8P>1$`N`gT6usf@b%0#J_PLnKB5~76&A^7cINt+8pr>HERQ%1 zk(OwQ)O-qEQrtq}KLhRXpVN!*>7~YZ^!kDthyRkSHYo0YN&Iy0FTj5VT~gdi;lBp$ z@ZZoY-r*E%gD6mzk+u7-{`~+hZDX!hWMRo5Ag?CpoAAzsd=U*CHWH;NpS~_^cQH4^f!HZ zJqX7+-M8!?NIcbYKe747I3*MXGs=>~8Qy_4OW$9>ZDfhtazMQPv>79)$i#9MT8KpWD<_`F^&4x^;lPs1$%+QThLch)?8 z6ky&3S&ABuvozW4qX4r6{4&rb#Q_SxENF*cj$S(25gKs)ft=8|4S;vR6TP~p(4lI00vSEyjfW3U=jSQw(VPRAXo6>0) z*%fju_)yqxpdEI7^RQ{m=@xYxQ0~ARlI4+(bC_wz64yY3bsY-b9kfIDpbtx2v9aAo zlsfRnWLaVuVeUS+ziZ^XzfB;=vJQpa6tu%`W*)iC@HVI1fwv&b64MM9y0B>;OS~mC zSlpq|TY+}yt?9$7c^G_SxWHRm+d^*}YCXWVWZAu?WAL2yc2HyahDO;Qv`5*2j%={` z-S>8+!UOC?maPwVoW7H8)5j|GgbHgI6ucK`2k%WM<}bKGaN=qu}&lI0@@>vpgWsq#U6koDfJkm$TFR3ga%sR zPJtyE4LMdhDC`)}4m*|}Ita_`8_4_Q4C-!Vbr9CrhSe0@T#(t>9b&9vP|!UDEPjh9lSs%8~hY_XW%;&j-$@;Ysqq; zkzPY9Z0n%JQU;As585M)r<=B%a7z%kHf*56;U|#I_P4>1xoLz7%NP{A2-?9X(n)iZ z+Yzye3I}f{OK|L;lCx}q3ac0tycM*Ax6z4>q;exgN*!6qhU*k|`q14LS>zJLSeT%w z?Vuesp@X)n%DopSQSP{t$+Bi)i$+JD0tMD0DDqU$jy#Pne4G_}u*|dD+@6a2)6hd5 zK$h>8)6Oj8hz1(Bdenb+iVo9tVy*k}0pGz?dc;G>X1Y%|)*y#M zjdcVX9nd8 z^c0A(1VBMg1?`}x(SgMby)@3CMme1_$2@~98+AJPpiN26gcMW!74j_54tX~1!)Y15 zFNVk0>2{dsQ02(yl4S!(7u}YsQ&TQWI}b|C_SXRCgZ2Oy(2Wf}v|5M1kP3&th%5_| zw$cpvbf_>RUcoO0?ckTtNspUvn|Uc^j(ZtdJ#O`l>CT$iEfGRYhgZZaKs(}^($aJC3>HR&e)H>S699%W8Y7^kREI zJ)+qm>m zDjfSUvTQrH!6{mgPV+0t<4|FeyMjLf+QFZs6T$QQojyf{gFj7{;I!k*4PNuZ&Zy5o zg^BJ8{w!z*e~wN(T=^YOdAKs$q&`nOkM#oCYIoyV!0lCWfy_C+2usX_*U&G4_RudA zgNe?EmRG3pV6T$pNG3JR1e4dG!vuGQe;u^Lzd^5Xjh6yXQr)EWO-dd5EwXGz;Vv^+ zVOaGx4#Auby;e5z$ zmHP+GF;iX(@h506#9strA$(rQocGQBo5o&viKz0)0oV?LW{)Ihe(`zZZ;H`z1 zVlHrcvy4Z#9rxg!n_3S$4_R$e!8q-5Y{%Ytp~m!jjZy{Lqs&J~jwr(0lFH3^=cm$x zEI^h)(sv|otV7BLp~f_O4YCku53(>Fc_*pU4$%%e+xd498hNlq$+ABTQx(k#ttjpn ztWg((9cI>R)Wt!2)Fp_(;&vWyNvb{GQe^pPFSYIvXlWQ=lD!662DArSmaaU{(tB&} z?WJ1}FGq!kSe`7e3wA>t40%SZ02SuZEBK0_9egD^@f^zSSiCajj=c(5p2IXlZxVJk zCiJS%U=qDTuLjzoSErA@SfADDKF8J6dx$m2>XgvboKdj%X4n^5U*fL`6U?dCSZjgy zSZmXn2cz?ClGmZyL#<0zpR;xr3KLh?g8}B(YoM;6Jy18gvP(`^-Dme$UY|OTvH@9r z9F^`DVz%0_HiQa; z?bw^riP+)V5I1$+jB>}`oGcG_dQnL20KEk?N%3KY-V(G!Z$+PQ^PnrRE4G5(no7st zhAa%DgKP)dgKSSnUKezmVcSJ|2TC1%N3vQ;eefQvQ1+c5$Ao@` z?Frgpd(nfZSbpc}-c&epAF|B3+TlE~Evie>7b;BcSMYwI9lSrCczcrFuzCQ64m^-7 z?;B_XSnO)elWS*)F>78y2Z46b!F1qlQD%?pA(T1hP_oPwOdN6;q?j|Wki$VcM6aY$jia_>p0huDiOn@$)~s1N=%j40Ck`}Kt0`9q{`jBWjy7M-awX3m}VH* zaLT`)OcS8MjCe(E1ntO0x?q5iL*~Ffvv2rBT6vr%viQr#$$2%y1aspxY71zO+DZWS zEn!HI*?PQ<8jrLeS$4JQcp$aZN(pqBC$I1&&<@{DFJ`&3Ez1)sJ;Efi?1s#iCv@1~ zoM+!;s4-bygG>SKL8j7CAM5b_9~xrV?R*-=4!=KH?}wt<0gz*!yyBKYJMMw>U~bY& zz3-5I5H${cFj?ltI?&XT#XbZ&OqW;qLqR+IVdfPEN)_9tA5NVIID#xMUg`L#36EBE z7j{kmklHS!H*@&^i`rB2QenbE9&u}9rXk{unP@O#dMX4 zoJgUAo0`056h%&k7_;FO^c2tzdMX{b3N1XpwDe>U1@%Fy&oiUIW@=UQ7RQ zR65@o|2i6Yyz9vV2S-JxlceD?Tj}2b3(SAlST}<9SU1s^8A)5J?W=z?Pes?;y)7l0A}04RKuVgbFj@75pyH z4t_VCI9TWT-cYE{$GC@jk8v+qUi#IX&!9R6yAL*)_pZV22kpTgpf}rAI>HSf0eFy7 z5AhILR@cV2u+qDLnNVO7yW-9Q?YIxq#d}3IuK4AEN2qi3N6GqVRYw!i_Aw|ii(Ml; z4%#C;K{uu;%?~3W1@V&uPg3tuo+8VZXW7ZyKMey+ZO1UEEYE=UNYB!heNW~03ZA3b z13XWbNm47WK)`1WFnK^;fC97K75GKa4*Zh2q{)vTIe3{0hkk`DlWF-6hI$BIg$~o* z75z2Pj{Z8mcuDR2;|On1?J?dYtLfyY6ViiF@842*3wq3c*Eny3_Bij*ljoUDe82<* zepumM%00k)WO<&&i4Vc9B=19mDeemW0ceMwO&^{==|z~wEd9*Fhg3QGM`XRdh4QDS zA47+E?u!2jXvhDQUc|SJ+Z_KhsvQ4wvc!)&x4G#T&|yNm;(rO+@xP)M+OD_J{O2FO zriF+3hAe=NdTwk1s#)LZ};1hObBbKsPVKk7TSjcm2~{YOdUcUWR>yvF_mw8#FF7(6S( zFu=cS@fQ^y>u<8*-a*F~(Xb@{K!q9d3jQx>2k(NXR_S@!#1Cy{zlSjwb&fwbSq|d# z%NaPoGPd}zF|?Q+%}y8>v3 zU6CH_=g~1`z7Vn!#g4l&S=KCAvCRCCNJ&!0Y1s_BS-y+d>J+@~fKSlyG%#PQfYl8NmYY~98sR$}-Q|w{ZA`0Y+l_XcLxG9zio6AA zN8XYy+R<}@WoKVp*@_k(V{5W(65%ZvJoNP;dgjbmTDE}^X1!~?Z9#jy?dYzr;$uA7 zo-&WH16dybiU_hJ#F+H1m^*=X%${_pydUWJm6u*L@*us*=I#eNI`x4S=EQ5vzMws3 zKl-y<)U7PzGKcg#G5x9aU<1fEpD z2N*)OVu(UJwyB}eU}n5R4+HJc!|B7(YiD1k*@a5SA3>HQveXurf%q94bk!rF#{75< zG77W@8BIqHUgz{tn=v%-Kx4@Q$L-rojgveWZf^L-1+(Qf*lwUb*zR=3Urg2p{m*p+j@k@=X;Ua-VGdJVldXb-&)F){}rKyc2}zSMZI0$HB_aWEN! z$vEgRk6z(xK|6dMy?BS=5 zlqBoEAM7z(U&|q&y&NSX#kaox!Jtk*HPlXHFGWI@bqEiHQ)ir=oqwok63j8TUkfoA zv=?Fuf!Jy38*MKHhsFNYqN%j<=+nsJuVeH|xBX#*IsO{<0MH(`Oayj9m0{&T%019Q zWO)wct0@OVgZcdmeF$iWK9oLueugng`n{yXD00-p$?~xsEO2J>lS(By0z%B|SHL4d zJK#|?=XPn>x$%E|VCiU@dZ1&-@(7z}DSn%Yhl+ch`p21$g)!#-YXOb}?FBfVFmo(G z#h02+ps5$&M6&-;fC}G}V2o7)T7Z*5djU=%4EuGfN2~^BMx9Efhdhle`*pLesI#07 zHP#GhkTXDgkTdDXkw)%2P;wR(9^h=U93|5Z;PzQ5Tr|#s3abVb{9Mouejc4Tg3N*I z?Vo>S>U^4cs0+x3o3&i1oZp2o#JU0vd=Y35Je?4%RsKs=7gOP(E+Na7PCLE5vrk%G z3Jn$(DE4Kb9s6?nupMW=Z*>KQj(a6pj(lLFcUsM@yoO%|G1d_%=+&Sd^cp(w%nT22 z<0rAMrQC6^Bg=ZF&u*jL^-$m&5Q=;QXh*)$5W;t~ZZbCPVsNvuL3;~We9=K+W`K5> zTWL5qBI9c%6;JL0h)N!2g$N~4rS%^jMOC?@gZ1Y z0fa`J3ECshqCfsDB8Knj4j`eph3fE$u!m{qVILt|9o@7&R`?-$aC{V&SP7w_9|P^7 zA14O>{xdW_H1-7TJoJ-f|95COJ_Spxme9~ogZ9wR5Cihe*e3tEvS(@HQJ*903q@Gr zro7AZu)#tKjrRg*kM|IGk({ znNOv?P74q923gk2+E3mC?e$IAV1(>600mU!26&*zz1~GCy6?>zv3Hhv#Ik4AClE+D`D%!XsaPUf);BnG{ncCJ;W#U ziyc+9_EY+Gw@;~X{Ljd;1I~76YWO)cSaG4)Ux0S(FX_XfhJO?8D~cTT>y8%RK!jx$ z3imB&hx^WqL%MtS8!q2dyq`cj-p{nod~)s=@(%WEPW>Br zERIm1-$6UjAGFl4Tr(CvPxmKf4)#|kCVxYQRSydI4`>Jcm)2~SwR8TQT^C$6@Kt@+5Z)pbqJvkK$+p~ZR$ zjkf@3kGCNGcohxLh2j_U7NXqY7beR_m%bcM?Ql{q0u9zpDDm$4dh(RlryLr|++;=SJjhC9Ig|{~I6@>dF3HMJ6Wk<1yvKnnX*6L(+fEdDLe6sbbh8dP`Xv{T0d(1Tnz$ZrNp62-Zz_n=P zLDwdWQ$c;WMQvS;esfT74&q{>Zn6&Su&_g;t_#|uu15qmpnO#6N{xr=MwV%(VPz;; zA3Ch=Q1}f%JN$<9;_w5Xznb%>3u|cQp}Lc0Dzi@EerM|~{DX%*V1|Vs8g(Pk9(7{^ z@Z`w?;7(%`%014eWZA^CW*ppZ1_jo3DDvi@9eE47@Pfw1SNS=_Eva(wt;nVi<4VEQ z{^5bq*3e>^hep^2v`5&MempxX(YK@6(YGhdqN`N~cn2u3#zTR31ns~((FK1trpbP5 zvEmDjJ!$BndXeSLqdl)k9qn0E=G%_FVTv^%8oUo^58js`nTJK$;JAmxv-f_q@TmRC z>KT}Bl2Q>hxD0>|R)uJ|fuKFy&h(yhIDW~P79MUe+5Za1j~K%yN%Ul?wU0}drZ(d? z6^}HbE6XtacGa(D=?5iyj$T`aL!^8BtE3mcC%y|M+?-n_y?geN5tMKX;UF2hn~bD{ z+u5mP_MunGC`!1ZKqW(V9V(+KSqYU_$@_OcAY&-uqdJw0##gh)Qo;eQN_NGEc-aCH zZC|{O?SrK@?e&5tzZ>Lb*&V-Kwbd4CYwMfp1q%jSTWT6=&^=>W;vQ2Wg^Kr3ttuNG&x*I;bWP5_(eCejRZleOM*<^p_@bUeM+WWeYeo zgSBB?kt9rjua_FkaIGm}8%?RNDb?c|P$#XhFH0MKyB0&P_9LxFgt-!M+K02a0Kr#S z`Bh$gn!L3IpRKG081|EDmlEx~Q0-*#r#VnJoeSI1FM&}~3~8JM+9OXU1V^75xkqW{ zEi#274>Gl*#WaZ0vjDFzo9b(%eo|{w!geD2Lsymq@M~2qla5tA5S;eQ3>f@s8)was zgDCf?2a{#zmNny=)kC1LsvHX1kq_Vc^FoJ@h^os!p| z3PDBT>*}$CSiPJEd09@!uND3b(y{Pog3}H3S+EAdYPYi}@knQrwbnobJPw1%ihV9< zM?24afj09dIp5fj?+c6#+6%!Z#cDz?*5!TQ304KKK^7g}j5!$f<7y-yt_?2Xq^B zWw{-{mYX|B$K2crF6Jh5J67SlsPd?HleOHarRU}z=qxw)f_D7-=#|M0iY50`=D-hh zV)7tlmYat_JK#)O$K1@2S>zq;;hg#r@W>7C1JErOtb3l=*wm_hwmb@hvOI=gOVHz_ zV}hOlr!Ne7aIx1?)2v%UKW$y}lQi%GJVh24U2O~*`;ztLC3%`Ayjr5GmuJXutx^V1k~pV*9E`~^z9JTG=IcnOlChE4r?sNc&FTgqPn?J-^@ zMA}WM>1z~th}ZM_Hz2TXib4Wy?W5=H%Kj?zk~Jw ze-I!&Ftq%WyyO3sQ~wPf8Re6MY({JOjp2~ie_&CTfAMQ+?NXf$I2X8hHq&p`^_9t( zn+9HjdC1z?oUzZOcwU%wDZ`tltNR)C~38|t?r z#Mbgw0_`zYCPdmu)pQjKJjAMb{b~>(u^c05VhgqC&{l`AEYH_|Yb&(u0Jm#ryr;B7h>Yzs*zH5%XA+AiBcSC;MZYc<+|bga>i;NlHR8}@Ip zfxu2wc+{R`+4+a|kJqxPA-*&KmDQy;Xb0~@C#%c&cGRUWC63y!gF$~t>@W`i?O+3G zo3?Sq+L;2!8kE-$hM<$QG`7@EkRi~OWhj0vEyGC1vN9(e@W z*f*$g#lap4eK?)@9LGA44ydDGW_cV9+DkJAT+Cx*3-UOY5--879SnAZq_PW9zuh55 zPB?_s^S&;@3Ut{6(z5J{U(3c`q+>Sr1{crk;Ia=zUVwec5|y=63+#^ynbl_;XveDs zm&2>0$nomQ=J3WthO%?4gr^a_BuNeCz2SL612kosfL|+rBk5TFBDjc#5h;BpQsx1h z$S&L^R3Mm?q!~i1K?`U{Y^Aw%UbXGgM&8l(%c%uCijH3|Ixk6$xH)as2Q78=wT;*T z4MXS>tjf}kU#m<)I#y;9IDMqdR0Cw@9RWtiLMaS7^T{;x5=|k?$Ll$-@TA4vrozsu zJPowR-Jb~7xi>fTsB4k~DDoKPjur<(go>}yC13I8Ry=RP=&dGH`XJbqJ|MKtKtO#DqlK5{aI!0Qsi-d;LUn`35iqf;9tql`9YtsBx0;9aXp*BT zar9$47#s@;D!O!+Ohr*WJ;->RbR5)WIUc`OzY|Eu`ke?a4tue{wLOe%(IoIp=_D#W z_{n7L%0k;vDTJc&DbQN2P6h2TPNQGifmXM*HOuJ~IPMvF{h1J;PD^yDtdpL3XF*q% zv+-*cI)`+u(7E8^!y}H;)$2S;J>vPD8eIUX)!;(V4tkNfvlXl((~S)`EEgLaw3mRj zE6Jsx9pP)IWw{!^mW69b$1Ge6F7_&VuhQ5g z*HP$6xV|%+8z8hC+z8qsZ=$&!#n}hnBsWvwaJS_3Gax_(mg}!Ez52A zwHn+`I@aJ0aGCLe;0Jd)RtjiOyv8+4^+T%S%Z>vlb9%jhX zlsNn|9Soj@1V?zSE_15w#v5%^<28N`=4E*vzgFWHNXHt#2rgbKyv6{*m@hst!Z!J| z^K!jRmKo=Hlc{zGzgJ*rb$=DKM}CbEix@-?dZPZXQ|fWv=+x*fptaO}3fg0QM!$u+*!8Xl?B#RH9Qun+OumE+HC!8xI3?qW zlB;1&V>3E0OrDUhU|*K6@oQE6hIFjzx8U?@&qk1|YIQ{Uj#gf<@5!#(#mbJ3HB)Ez z`T=HE`5!@h)Sn2jcm!bO>DFC-rosdLGAFxVp+FjVrK@Xf;0EXDCE5$)reZ+$8+2v) z9luuPKS;+a{|PQO+UWHcr5^cjvWs>JRWu_kA%xhf^e<>f?Xm_O=1U!h_ma8DJKo$m z^*rEn6+qEL1?GjWELHfm3d~13R$zW`u>#R+0ZKjKf@G}%W`vFMA+`!E4BAl_p@UUm zR4-YSyyGpFQ!fr472rX%BcM?*wp#+KvMh;TEB{iYWBHc`7ca8rvBq^6h zQV+NWSxdhem1IqbtpaO-cGR`$U=`@!OV%Opcw(XuU!x%XU7;#VH~d=p*C!pz zzX7wCJ@Jr5-cJ@ISh??pP6zc;v;esk(Wp@-{B*3zHaU>|x&t@QmtJLUk|+ZbfXIFw=_ zB@VcA2ZKS7`p~cha#2dw`1x4rPPao|JmL zy~tW4G9&C;1+kTXAJC4vFCAj}$4P;__B|ngKEcrp;Vk+_488<%%Q{?duA!`FUwJ6D$2*d24(}+)Y_NPZXvaH-*4E@o-Q`&F4t88leLQ$OWh@nVmQ<*#mlL2W z%Zd24Oq@hIX5wUUvEQnjbrqZnatehW?o_hYZv`8)z0)AIY@80-G0&jAWrOzJL%CMPm~9tD9c0mwQS8K9kVqHTs&{^ zO=IrQAP-aMRe6N0oj1V-^?el5P#e2dV(T-A$Dp;uJr3FYJdls~Zd9EYK^AvfQ7dl$J2vKKYUVujT4<(lJ+GfQzNX1lNLmNr_kEE3(#bV1R6W4N<6vHBYudb^Zn_OV_ucJFBh|7L7}{v9kbrT3`TsM1M$ ze?V21Kk;k1`ipeT)!*P^D%3~*p~#cJ=Q$n zV(Wsj%u9hss>0ni>`!92i16nKDz^ZG>~$R{qH(YGj6Wmycr zmbk@9$HXlGE+$Ur>B*85d9$74cZmKR<^T}tOS{*Y-P|6y-KC?s>TNB)r<|$tAjhM=Byg}vaEq$ z%h{TwW6stBr_Ztohlg-{Lm2A5HZ`8Qb;$C~M&7U_>q2E&S`W0NccqgJ5t~cWjl5&7 zpHpuD-g2@bXa}mvS#~GyKs|Emjlg%z3O=uzW@TgO%d!c6Ei0Rnj#=3ZT)cm5Zd6Ci zOP9?l_pn=#wF{)1;iGm?SVp!2?Z{ix#k%un@5OTg3LJ9VynZ_fP?e>#2N+*VvYKoU zby;@6uhnEn(y=Bxfr~ei!H*T`NwG)mMb_?@qg6?ILvHox1KM%>(!-7{=BW20?|}Vt z>H*->vl{Cw@DjYSwx+-b#q}}}s57TGFu^b>L#Vr9(Xh9%npR8-_q%k_Jeu$P++2RwHe#$j@FaMe+_cF{f?79W_y2QXzSv}KuwUn}_jq+`Jk02e!DefkqT3sR=W zD{vrL>y$Hw7(E>Xl~v?m(2jlxo$OFe1hO1TiK8CY!QgO6P#yLVX?3hBM?h1SBk^lh zIf`_w%F*EBscE%1hC+{bELj`lrNAXQ4pOVY@t_^^1ln64%JQE`f#aQ&*PjeQ<qoBDbSYXRQy^MP9q(wa5}iokH#6)c-%9|c78O@g32m$HfTpbhfWno<6KG{^}G%S z=R<<(@C{U^aTQw=JR!OOy0Tn|U#rYTq+?~KgNr@AwwT~|G36fg60&w>bF-3M3WZhV zGSH5EIbH0mp18AILEaIs%&D&ek4k7q6wZ)PkgFjt%Qg753S3J%R^U2t@th4V*Hh$? zZXj!eJhdpvjgVQfZvyRjH=8q0+@0kXW5a1Z!`Ps`6)XzP(N-q&ld+nxMsI^|gC1*6 z@N0#?gLEwXo#0{@uW6-kxTm>`IzRxIt>fnD9w@Ck_k#8a_tDMHjfrC? z$o&*J>;rlIgAkxfjFeU>bh522+G9Qhby;TO*J?D2bga?C;9{E(p0j4usOuwCdE`gQ z+U3n+l!EDF&{=&R2krPz(92p?{TO+Yyn{ZKQ$GzJwc%U%v^L}Ld9%jSgqrpVm|=x? zwOs!x&%mrK&*C?oMDiR+5BfZ~IIAJu_@I5(RhXewTc{@Btm*nKn-^&3g?W)IXIAi# z1vl&{seZaKqj~C{%P+wg(@uDfr6tu8)?oeF%TVFL1AZ;%uab^Ae+^uG2c9opp&4)A z@!c#uj-Z*B?hUfIahy}>%#qJ2U}}fsEzlnNZGu?yYR53(9SS_iyLtV45a58YSJcI{ zHEpd)OI^CK_I)TZ83Mmn(b=S9MLz@=CphS?v<1v5N>|p(N7Q=gkI62Z)=!NwHNdSu zf!gZyDQJ)K86B-oP2L+94Q27dSOnAU=+N!<*>2baV z7yG5uo&by{0LkD^zTcd#{b>NUZmtOqUzglkvw9Hj6@P2evH077i_KNtLKU{9+=FgM)|#uEm1KJ;tQtFjcH|xDV$F33>ai0A4%suW z?*#!W!r5Q3B3cQZrpec;=~}qnFf2np`+u*0dy;%lR=aGi|hv`u0kb&hp&w#F083vQG49Bn4 zeHYTP?jykY0u()#T90&ziHxM)OEZcr57bshuSBaNl29pB-@2MWhV8R*^e z`rRQw?U?0weCt}<^GA0Nm|+D9eyxUkk&ZRo8(f_K-+VN{^Ym+t#9C*LHULZidcwgF7 z-_p=NAv2M<1RYkY;Mb~@kd9TF1TOX;yeg)P&1Etb9&`#>MzGtW)UG5`p$QM!?XHP0 zK(bKNU}06=AGAk5fT-4^Vj6Loyazonr#=XL2$lM9>h-}8+QaKZKs)-OIrqcJJNn@{ z^%3BaMh-92G=>$vM?zkfqws4fJeqV&;W6OiC0W<@%CQuAq~pliC0Q*>ay(=mUw;Jm z6QHw%oe0`vokS!8^Ds2a$;O7e=2MIf+Ec++zW!*I(;%~KoetWe&!}`h)7Sugmazf) zY_OG0j?0rmzRrOTb29L2`8tnu%-8wg;*||<*7ILLxhL&HvUX*2GtAI{!m=|Rv?E_k z7i&&+&2kBON4zwrz6?An!F#0ifM>2{mqS^WEAVTzxRP|N#Z};9@v>dk)l_)UYslJ( zld&twwa|1taWW=y9W1P-*Ms)xHxSioioWkg@*ec2ocd<)l_w5-Zh_F6!VJ)kerwMC zHu8>sdro}^_{u!$gZj`K?u4=|cj4FacsJ>o$9urV2N~f-m^Fxdsq(P*k+o}ig=I}$S!-MwyOKNyjV0uH(2o5AeeCiw^R{Mrkpjnj zDX)JSg35E9Z>mB?UV*MGuj1D#@*3$_k=Mb+a~*D0k2fgym~WD`bKT8K@)i_UjkiHN z@;h{~ZdQ^{p|DDP2HKH7r;AkrtNp$p?}%UK)L((O#`!g92l~bw(LDp_TVq4#{hhHv z`#o6Xf;T>Pq2p!^KR{fTAMtBx_=$8(!_VOSI>#k4@(V>?-e1Ya>l`fbOzStutn$Bu zcDz4mZIy3slt0Nk*k3vI-{7tC|B%jBKz9cC7g9XQz(N_Tz+9wb1?C19E5POc1(}B; zk2x<{s{k!ffhx$X0`q}(y!mNu6_{El3y^oP1#{|!z*_|tCY`N-ZUnFhq}VP4zgB_8 zNXH5+4lbU$*a$$Dpui(8Nj8p&>+wi)DM&)cA8&IpIHT**&{(yW0qs$iC5lyRe7h`1 z-h(WkQ?CHN^4bEQ6(O{`u0%RpR~>7w3~58 z>yxweEW+N*>Z#qOFGY^nucJkOh|rC$;N57U)Gn>KG~zu#`od!XY|1hazm}q%Nyiio z0vB)d(^m=s1s55>$Y2_HF@}(}b*uKO!yWVu$57Z<>V|>#Xv67k?Esrb?n2(dN95Ea z!CSsYfp(zLImlQ2bh!_8=Xzv?sXi z$ginT-7;&sBFJ9UdFZ{#+Fdt?p?Db)Y&AFgKyA6%7qrJH(9v=;bcl>2@3^%&bshN1 zgU_1Ol<)?Kdt*=H29NcyDa&~LTD2NT$7)RgS5ejiK0Imw1!<((OHd?hPlVE%xjFj1 zi7>FbHG%d(&2+UPUkR7m7784?HLq`j0JY293b(a3VlR*VATNvH*J@NE9c$DM&M!cC z<{=3s9%&L;JJIx^h)jmaiaiCiqfMo;9g?qvePmNI zMGl9sEJxti5_Tl%n6RV3#Un$9qbcxk$B?xvI`kzu77|O>aiAURc-mUJnx@DJb*#t+9QooD7SyoPyspW2b`jc&CAjPc+$S2S0qFBxLS%>OKA$ zWZ7Brf}S;x89Wmf>8si1La9`P(K+X<@fF`$P+=x)xl#;OcuYb-RvY z4|+XWd!HArN^%3_Vbo(2ZtQ7ah<+pVmcW}pd)%9eXw7qCgWN*i1J1~)Zv|gDyn@ed z5Lza02kq#0t_A~|eKv zPfvh$=qD?kpE5Q;KW%J)eg-VE#AXmqNY201vOfz=S)RkMrRsUoF;y>si}%8~SlI?h z@*)+Uv6skNcbc)oWDIC5JFkFt>{sby4XL?7UL)_2ujkZnfUm3s9>ZuQ-h>95gW}gJ z@iysLiFd%oGlfrAg4??kd%X9^+L;oqusJB?R)G&dJML_H*yVWUZ4L4v1&;VpUjH!! zr~v3d_jpv`I4+PR_zGoD~PPfUxRkEZ_HPF zP5IW?^!b9ZLHj*eYkfa}c91YcQ6_$&n>D#=@N zJ(^m{8r&~Um8GF7%QE=2nl4K^)^s^=@eI?lR;%Cglvl-KtWar&>ISnFA-8(11loaD zriYz~t<&0N6$+{%;;MQ5Y7khGJU#IRuv<4BWtZYn3QCF2rUO2fOfP|B3j}J&S4Fh$Idu>4 zmVu2xJJ7~C%T35vMW9V{>dnBT{w%1rhq^)&yS2?BF3T49wFGQQIwoK%a4`X?&(@Sx z#Yo$bwFCr{l57j1C15+yj<`L|EdhNBvIF_5h_+)+y%YFsJH{$xyl`a|q$gBm>4je_ zdvDUQ?0vxb{T@7YRvm6;N8urKLHbf%6$AGp%h5S|L*j>Nb6n9q!Nqe; zJr1FyDwg(8vNp`30iF~alX9v7x|68Ot7FtQ-y2>U|7ohdGvp z^9Go)a-6vZl;bOuCxA;&{7`E?S!&dZoCsA}PQtHM{bbUy>ZgG7Ge3;+)$vp+s$vFC zBbyuJheVtXjV0m?(2jj3eXI#IkCn5?S4GIPbLw-zqZSMjYJu7MrFtdhT z&M$S+OqtisFtc3U0@@?aAb?%HnwtkS$gPxA#R#``Ft{BOR1^bquV`kzyG~?FzmlZy zp6-BsS?ZnZcf1dl zR{i@yd+Y~@VPn#^QlmUbK~;?LP+mV10#u$8BjQnJEyMAh1ueGD#IIHL5z?`$kAjP% zjPxBDo4*~W$EdH0(H|#k525XiTh{&w7+A%g1nrTYqN^R(#ugmcrzxq5*w1t@coq^= zjZaQu)y84hm**hI?wI(sO1(fjR_aA?F^6<`iGr#a>1DE36zEIx3M5wSS3x`0YqYiF zL9Ev)sESx`kgdRa6B3k~W1U!PJ?-fI7L;Xq8^2cccSy&gzY8v2EyFq2NWb?euZmIM zC(C;&wlp^@$p=taMP`F`0cLsMpI^P-6iHel02Akd8_D7F--?sNZ;OoG9N>Tor?U zPu2z+W`%p+A0W4s{0Q1{f1-ySTX@LN6jVjTU-J52AwWHt_*jp&0^Zp)$!}0$3rhT2 z9sVF4>+mPIc;k}#{6$$+4EHx#yKxC7*nSd1EB(Kq9kI*0Ft=kcydZOtceJ^4>UqGU z?7Vu#vh#~Kt!ZKAg&tc_;@2uLAL&?u`N72|mvvl#3Xi)WS-ae4?646fG**>`K|A&$ z^sxgm0d-lF0>@k|uU{MjYne-ccBmz3Iv*;DGlNJ=k$0q}bLwTl=UXNRz-dyJg}N-u z;WxecSstVZTLE0miH>bkzZI$Qs4J1RoMi0qQCMiwMMm+c=rsP&s#bv-8&l%f4$5kz z<3U*+Tx|0hziP@o{u*RscfmCX3Xjbxp|C@;7HPfKm)h#<>wFTiUO#o6<=Qa8;|cs) zan>ari?bfM_>PD5Os7ieMNn5zcBO?EtQ%RI0-kXQbEVZ|eVAAgHvsL?Hl(xlXcL=z zOpqE%9KCx7gC3AryV(e|gKgZwb`we*Y|{<~n?ZuM!+Z3Qu`sT}6E*u7TovHK4gUH(Sb6#ultR&hFhSE|q1hhvON;hjj&5dY4!zgjw;T;Tify9zC z0K_u6|< z;9>S8YxkSbV<)z~AhHDP4cfu>q49j-fL2dzk$uTKRw1Vz2R=QZ?e)z_Z~+@C*4H#} zAuV2y)IyDKr{dR&UQap}eLOftN7sz6I5rp?ZeAuB8?=pJt;ph2g9N)hv3(8b13PUo5R4xlTLHf&z%pa(!(D?);h0{o{aI4&{~F$0_`!5rk`i1 zpBzJh;~tyW9|wVD=y=c$bplQ23vGSoP5tCV@{V*;PJJ?XU8ey2c- zy({o*xjBt=%+2ZG;%IMB@HvAr4|rxLCTBrri8vdy1D<2fXx7z(vfvla(>2h$LjZ!Z+LS^;33ACf%OegDjhoV+kVL_3@ z&gf`yD@5s8h`k$<=K7l2WE|$aa0nVIbsH?OwFQ2yQg@J!mAVsLyn)Y*psH(U-3=tU zi+V4^-DGVRPR6{H+Lz=WSXd431?{2kqpw{q@mbCpaz7;w{y+zV2O+W3@gdL-Hj}pL znXOo}C~&NY^ZG|1NKeR$RE0D>3N1dWieF39(qO}-XLpDCS&e-c@q|)q&78`dC8a> z@>?*p?7R)y%k&O|SlhyPC1=RHlz1uL>tOIcBq3_**F*h2fEWql>06N?3=8XJHk4)g z5Wkk1k4VSVd<-t0`5Z_V(xMmS6RNyCpOUp^kPbQZl+$@+pFwLC{T#GM_=0{`QG5q- zhI~nh1Ao=Q;A=?iB>D!lgMCZev~?)fcN93*_j&yf5OkItT|e<7l-SV%zm}YzNyp^; z0xl*;*H6Uc{7RL_{f(?8C#<6grkb4Jp|#}v0oo({Nk2;tKCC!H{-VTz|L$P$4v@glA{}cqH@J9}UP1y7*TtRSy4Yd~?htgb#ogWQ!|glgl-%w&?+yRdukX2a zZq@0o?yl~xu8NQE$Yw3SGdxjB7i?STuH-~1SPOBkt0Q7TyS2;E9Y{4PdS~4OPE2os zG#;FVxSgad3@i1<;)`4_r`|0>rxm>@&G>0Ky~VZGyBPdY)#BK;QkEbys={i8bKR0e zEc8}BA?Y!^tQsO7kwL@f_1z4!|>+^$z3Y-RSM8DIRR zTt&Ac@F-&?Y+Kxw$>@R_vA;B;#r39b0avMTuL?VVVDw(gYv={sFL4;w1j^$G{V3m5>r z>;@u@0tRtA2^b73b!@a~lp8|GN*YQt{x+o?MK=tXzdFZn*Ssfq`nvE%N$X+T%37b1 z7?=m9#cdEx-_6}Hn%=t+OkYG`U=hHLfyHa(CfK&no94-zMbn4gJeofA7BKUTmj5^V z{WToEvfC1A++SO9JMFKnVWmbJXgJ>65Vn1`EzQ_yQ?8=h4tU%*+hg0}?m$L7+*sLh zN7@!}rwaE7*!f1QE`ryvGn{2N5^2=13%8SoU16o#MIJ=#M%>EWon~ybmaXXafFr6H zg>8$xCn-@yLyH?t+aivsaPI{>uY&j5a3uDIv+TwqjVk`h?WAHKSn0YA9!H`27Pv1x zR_ZvKvBRIuSakcr6_wOu+oF#rDJp4gaSgOBW@ClB2{x3lYZ*?zsraQL403nP@Rr>K zq*2O5ZYL>|V5M#;iS;(Zy+EH8yg$wO3kPo-{!+|(H#jqDmV(;7WQZ|;!|aPLvK7PA4AAu9@{?0ae$zM7v9j+aKq&) zc>jWOK8b_@c7Yux(|X z&PZKDYeQyt1_3MS%u4@R0DLilr3LiP1`4h0&E&M&dU)p`N7>Cr8bzPW?IijnoW0R=DL=M7#)@;tshO+g6WD7(Bih0n0CscPUY; z!DUr5T@KWj9Qd}p-W70R|77m^SQOmhg$wYqyAo;KD_3zl?Uk!xrKaF1*ATL*TuU=H z1?4EZ{{V~XuEVy)yPmn@sW`38-9X!d-B{ti2{x+Duc4W%rJDn|?B*hkwZ56#sn)l^ zO10Ky(%nkP3c8JEthK*7y4!)pTHk?fi+3k;$6DhTw7Y0qu)8bV_rON289vk+7ese2 z(6YM^X{_}9+)kB#09LBBu7vJELRQW^nz7RU0_YwB7AyTQwk_Tx%pI>8KHj5*EZ$=@ zE8;y440X@kpPE}rlN$T^(dhq$x9pxk8Z|u0?WEx;Sm`A4W3(~u2QQc~O6F<$tng=O z#*Z}|>W*K2eO7#|{~w%D)w9^P5}qS1s%mcOjWOlV6SBZBw9oM(Ac*4BR^fnTMA;?c zC1fkRmyt$wuW&o5dlgoig)FZwo&WANX0qD6PBRXKs*ssTMfV1>MZs@k+X{V)0piU< zg8dcYZQ@qWJ2kSs3mnoj??JFwCO(W!oq`*|dvM}C2+}C{18yh5AHqs~*oG25sNr8n zyaOR@MSn~))-dM6LHq=G)buH~E$(Mz#DhpifA={di}^+S9A5&0681C0L2PTP_d33U ztL(l;8g+cb?WE&dSk^%eI}Dr)}+Pt@`Qwk`IL584oN1pNHTik*KEL^8be`f$CRGxP?%$=eUcH{UH`nahW*V^RJ z73hL2W!DvHUqu=;aB9Cnu1;t-q+t|AcW!Qp9-ZDLXmTf1!u0@LEGFV$*HgrWjJR+j za>x5OjASm7XAW_Tin*9E7f(#?A>YTJcOAJ)$}xNUEQc_Bx)U~IH;bvCg4nU2M=<6fndQ=X7|-yi<_!0 z3!T+8HBi^CpbmBGh}zGn{d3frQyKzwfTwaCGj`G-H&DbuMjV`ob;!e3bTN0)5WuKy z;0<;|VPkbsX7+Vmmz$}seAnV-u9qVYaqEk?fe|;%5&hQ_mbg)lxUSn+#7&I2X(HC4 zrg%l=Yq}X=tLX-AbJ$o%l$m`^hjTME0{pw+d0ToOPgU-j!EP%Nw>IK7IU>$YPuw<7 z9OkwYaeE`~kRxIhWKY~NPh8*aB;p7o?wp9cq%#`FsVQwsu zc-`b%ssjgMo=bqmFoW$r*e)nnxLgikj(wG5lFrs~Rdeje93`FR8jC*I)dRtDAI$Al zG+P$-0)K#zN}c$L-A$koHH0i~B0;;L zPofzgFjANT&{8${sP#&cWT{pA=+f-qp}!8z_=V5P!=3U!Eu;?8nS?Anm5-Snway`;SLk) z7_kmFRvn#~gQ6aji@GBchiw9|J5sFE#X8DZ+`Afr;f_v}1%N$xr#nWB%f&d>80_L< zc83zCFl~JA(Ao8_!5x>Vyomwfa%BG!{T9)W&(r;)Ux|J~C7lx^ohbSvqMu}RzWB*~ zsZLGzKgI!a;_{6i4uK;HzJ11H{Q{%&kn44myD)JKyGW#gB3*1GmKna?S(%q4KC6sRbaULLqHiqvWkzQg zSKrFg9=klp#W%4z?h0{7i2HBj@*y;Rm$JgI%mu*br#bE_1sJOUS6cu!%El7T{i3@j zkuu=5qD>I(KStx_9ZgM_*Xt6GCkOtFyW1Lm3{#uY;=(`(J81C@a z2?Oxv{w75_M3LrLBsP=~sdY+=59D80&rLzN*IP&6L&wdEalB&OVljBoFlShpY#7ma zIk`2_bz8&)fwzf$w%E5DyN>Me>E7LuSULDk!n!ODL4`|&s}$rep#Bc4M+yc(;qLAf zgS$4O_W&&wZWi%gBl32@ERFaOOY(h*Tr8PXJi`aTy&47NOjCP zfEf_&F~Zzyy4xi9aloa*J1XSA*bX(#obKEqdWGnoUENDDk+@@hB>!&V8HM{<;r?ggc&|lYu--2${%oT2%-ChPdrquQSmdPa zp3k$;^$e^Ra;!auyBEb;RIHbbRfm{jaZT`-^Q7_a6_I+0^s13qLH^q7EBIQDwe4{C zx>$Y1dc#y=Sbt$YN3NClZ_N z2(D=UfoMC4_My>udt&pN;!FD|5xM90AMQRDjmyhm6~%N?>nsVIZZ#LaVavE|QPpdy8(-6ot(YOR&Tk z1#XoJy~SPJxa@P_vX>T9#VWHYM0?+oG29q7Hgpx1Qq)0;y0k_07s=wnKJi!{p6^x=ZF|vr8I8BfxB%sfiNjs6guMBM{==A-L}ck&3vn%R{j!E@8<*!uqOFr?-0}SDuAf+^s>J@rYG2}jL`@|Q z6!!vg2N{<~TeS^K*bPq11z6V|+z|2ndU->Q$JQSx!xDx2We2ye7=Dqu^^C!%3YDb4 z;r)*->nAEDav`}5ME2{!ZD?d3@ru>lHcDL96pOZPEb3EIxCx!=CZQ8DUz|F$)+%Y6 zB6qRi7ew0(+o4~=&ly#ynI+6NXEC}KvkT($hPBul>U+nG^==E~L&rx|8*T;gYeoEV z8h;`Cr*gMt3d)_rrNXun-7oyLHN8^C6DO|TwGGf>!7tLaEw+OKo|5b+goTl|BUjaB zWUi*QJ&;ntFN(E8p2xd>;O&^>arLU5#Ou+ASF;huORXsocg_*HSky=nml1InBeFRK z&aR2W;|j`dqVy4EccZX9HMRC`n=};@mCd`jnX@16k>g^$rBULpE$*JiRrg%0(iGk3 z#L1##L|jkAy^N@fBX&$&K56enuJnvmfGri^pB8|BDdbk>$t(u6PYTB7p3Bwh_Eo%* ziZ{;U=_g~aM19{d7SipPVl9YRTo zazrdTQ6!M+4WLbt{3;P8i)1&nID3Sfo{NR09A@NV0XRUh{Nf5TEf#C#KiUL2vr;4; z2d;r|pqPF&gM*A2Zs2jk|8nB-C}7cngGKY}2OMHF?!N2-0Egyyc>F$0JU`+7;l}eF zC_c5hBN8P89!XF;F9RN>SbpyNqw}%++Z%UGE>-}K&BY4faf;P*HD1L2WwF%SIZo;L z6e&R`q&NvWQBhVF8%EL=BK&}JY%n^fHz^7uK#brACSY~ZEBb_#kfwlgms;w`gcqVDq;NhPp3 zVN}lf1k%X?-~z?mOEE9Bn7q1#r~Ap82V2AHFUp0(6xJ7u-6ZxU#^wbwuygZAUz+$l zD>zN`WePA&0WP-y>;U??o3BU|!~QK&S)?oJ*R7f7U~anPtKcdY{QSsQV>|3F7R`B( zuOTz-8_Z^WEr3$NPf7eAIu({yhB3umhq*JC?`=Zh81b(tLzc>}|#EY>p2 z?K?^P^hUaLMB2G-f(viIRKgr9Aw99{WuTjzV(Y?<$!t=@0NkQDe(u>@Ee?064{=)x zVc6{{3VWCn+#L$yXJx(9g7_<6ntc^NccoY?9h0ZtEux8Q6=;soBAW>MuHuoTH?#TkTN(DcU=RBkG1Pxt3_fR6UnwTQ-OzDJ1`!XcWdNAfF(jBOZ|_6=^j^ddecPzPLy0 zUGdW?3@^+cb>vAyz23;NFbCb6Vzr3%ma)>w;%RT^Xqd6>9ns37y=%12sG?`Qml$kiquu)= z_?gQ-Fhb@$@VpNbPv^mC_mPNxuCR}d$m>PBdA>f$kueR|ry~2Qv_3O(cnMo$2CUCh z6dpNEboGVe_}Qtxv^c%sj}JwBn;W{5y~Br*diPZd#Wu@HqrO%oKl#%)7D;_$Erfy> z! zG!C1CezA$up!}7HEREB~%(oV6xs;gmW82FoQBUlVxBy(mLN8@o5Zl?^z=xtR%}OUm z&~9M-5s2RzNU5-zh+T}xXOC>hUr#Wa@uF)A!DFD=PU;BhQk9@?3Oh_;yIWX&Pw@Y; zvH|IRl&0h`o@p_4U&}Ca5|KCo;>{d>4y|JzDHVjm?wQ&qJ|T;_&cb zx{1ZbXb@uwW6+EFA(o8U3*5r@cja5k^6`?U57}v|g{31!FBv(b!ZJkC<($Z}3U;W1 zEoZ^Fi+r%m#01M%#M{QLAh!Sgzn8JQfE|AGUomlbN!rn^B!>Urer03uObI8oewgo_ zXzcl>|Ke8>+yB|Vs9jmzS*4~gNY%c5H+MPTvznYW)p_`i1hTL`sh z-y-d=#Q{0Geuo_>y8o|rP@e9ecrt&b4$jf_^XU-L{ZFJrjn1n;?k~_`IjVm4TvyZ{ zYx2soo>6ljwyo;x=K|=z$_*4?83owT0(3{&ywCbikZz+yrm7diNbc>;)c^!hmKpN!f)uo zDWTC=ye#F1=ewpH+y6JvEVdu?Kf&1kjdkvSgv?%=m;!Z2DVg#3lN8O5s4rMF=1L>U zu{skxzWGyyANt-RrXR!JYD`{V5|d-lC+E2uYCc6=KWcocal3*Whkj2>G`0$k@OC8m zziJxm+nUBTPiksuEV?3KEE3Hqx^Z%H#gee;NXK*o8&JO@?)+_Th8zdb(LFe@xP+TB z!_Aau7Cmh9S|jd2VFw}Yt8tLcB~BUT%7PCT%*t^H;~}s#6jEc%rj_Ph*So$qM)>u{ zI~jK(^`DflYE zQR3CGGGu;mqa(RD+GREBHCVQRefos-C(WNc{qxR{D!H`OsR~1dtaq555FhM0z+Co2oJ0tW%m}U17QWN?yBXrLT{e+km@+r-BLO%lvp~St=&~iTqUUpv~%_;p- z@K=JP(yw9FRQe5_R*7$E)>ir*+!>|c!^E6HNKNSvjLPNaw?vR?;l^LO(*xp2~m{qD~ zS`}zU?8xR3x(N3HjH!Z1;a!>gA-KY!UtJm2U%y1yQnf*5iX4wr!YWr^p1F&s3`?G^( z3?*h|45Qg2n+0dZx&X2B_|yS;Vb81w5Nk~%&57JV@P>k;$cv02L~CA!cRlO0!3W%H06kp&Z$~7ap11?f}bf z59a4Z5%Rqw9O+SV?@2fNxaJP~Xtexe=x4{B=Lqt+y#((~n4Q`HhnQpK{3o640!C+u zxR1R1R(Rt{J5JvH=;ba9-28c4uRPih^D?|%wMw&a`69i8b z9FO-TSXFOWSlqa^Y4U_7S6~i1Ap6tgD~-xKTqG1-3$kR6d@Ibdn~c4M1`@AVq+9Bq^7n^ezu*Xh=Yk)5rT4#^Ye(y#!Lzcs%(P8c!f*MVweA%SphXku^py)SV2o>`p(^{B=};%QSv3Qsvl2GcyTG6R)@xxn z2hNPfxiIkp0;y@dh5QPQw-U1=ZmW{zc3`2+ww0RP9Wcx8PNX?;cL}~*a1?hBtQu{$ zRj3v%aW@h+9z)*U0t=@X%%kGg6;{i8l{OP3p7cXOAa}c#fDA@qCpm zF8~W|mJ&moeGzEcy@WKU@nylU2#y+Gg;i7IYjj!#UhgRH8*pYcz6ldA9gv#Fx5=;2 z_zp2E;@v7)-UAle?2M*H_dd+B`v7T9+=qfc5*)>S468;Dp%s5uqi6jIb6D}8{w?7% z4lC^ITKT?#BeYux4(;|^fMxd`(wyw?1^=JmDEkLk z)sJaIfA=GuR*9cF%KI~%8L_{>#LEYyCiXY-v&R%g{7%e@_@hdeKY@jIONpV~{sk11 z6R%UDaee@J(I7Z#To6`Gjh*PU3Uux$Zx=W-8oR>8s|KW|u^agn8oLv-B6?KG(i2!{ zw`~(kZXuXuw=mM&0bE4zqJpEi#b9Ypq4phB{7+MKi_>p~FY!0omxMnfaVeO1!GP2x zF2fLfN@$L~0~NF^VJm34>baH&9NH^{hW5Gwz_ROwG$(gO!7B-la#w~`{a6A)HDtuze3|sVphbkDp}SA7TRkwRk;xQ$@dc(9t@G`W!%+KrjT%HQPg8Ji+YM(AcR@u~r-3EhHGa*tTCxZ(6z zaa-2RxD`C1?Lu^DyITXqO9!Mm>Dvn4PH>dIJ*?`-b$Wld1D#fj9Xraq6Py{jBVgj4 z15%SalKkv(MG?CYvm$n_l4Unwq3u#)XuG=u#XAS2IgO(P?(OdX@!uQ#(l`I(6}!#D`H%gEc*cqZMTR8;Ok*xQX!-{aSehS1xImBuxj)X zupIe#{CD5X99H}Un$_PTctX)lM3#)sNifT_{qGDPOC+!qrB7M%&46Kv+NE)YHDYapFOH5 zViqwg;=n3d4gwZhE+vMRTLy{+sFCJ09wPWq!BOL3uxe^NoKCC25gp|{63&dqqhOZZ z(MV0>G2~ZhJeHUhaa@%w{{jY$;k_TmqE4C;yL`vPRdy$k6kh#$w>wdeljsO91OqSZ zp_Ao5g?@fH(%N#T3OfyHZm*p#_zb~uubm02>dR4$b3Kb*({wh?Y9Ggt8Q1-D;Lhy0 z*)TDU4^rE4=P^PL>wBn_^9foh7trjP%Y)z-0uAkh8pAno5m1bWK$=r}iQr2GN2Qm+ z(uar2j@CqXIbBwPD{ANbH(VKsSHdj2tB{(+tI6h2vS#1Cn&_?}V&SiCm*GD^ppE-Q z+QOl|4lqVPAkB%pLGX=&qqv)3MRDiUXGRZAbaUvk(&yIBc{5xYaks$4+Dk}H+-+p% z#NAHB!r##@!<|4Njsxd3i&m4n3kXIxAkFEzNASIZqptg4Rc&z!LqhJ9@sHM~GTEkJ8NaphNh_07EI+LgH(P$AM#X1Jaz{ zCj>t!IO=^0R@I9b0=lQ^v|2pVQQrT-nUVS|%(8n9sY!jF{LDp+MZ7@Fig>X~mY0A* zCFKW|p}D>c2gWxb&B=UK@N0sj%-3Pnl=%joR);q`%KH|a8JTaxEW3A*n#^~}uaNm3 zF)QNzDp@`N7Md+)XPbha?T0`xtO03G-^YSK5ghe>3ae_f_5U7xMz(}Xi^;P%J-pG#6L!TCaxIC}uTtKM38pbl6(82x z#uaB4u>vG!hf$uTk^0@mpUE*5@G=1OB{HmD;g%)90nwv&bj!u<-A1|PWVP67)?E5xk0g^vJ;*B5hn`PV{WW{!Oc}difu9Q#D#Y0*%Z|zgA zx{LeoGNGA>jizZ_rc+T2BJ67CUJW(E~*in?L6O1Ll9 z`Q9%TtqM6|jj%4(m?Rx-&tQYFDRvk*o3iXx=E#t+McA%kzm54RTa^`d2)mP-=51g! zB%B^(kSR_0AsckGC8EOz-` zDE`_+nFfE|xr9fA$6}9pYqa&sjloX{PsITXNm~=LomxF=&j`<}sW(xxI0`QaFU3Ba zbcxXfJ&ejL!fSCnuasctw(^GXw)QtVgYrDfJHmT$H1Dfi_O3+b@PY7gvEcu~J`pB$ z`-^o>2%l$tbiVIOXyu~*h48hGU2$tu@6;e?y?i5_)_;Q^jbFeT*Cw11&cz`&=#5Gx S8h^WwG^A{N!gs=ta{3RLZ^+#M diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ca_ES.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ca_ES.dat deleted file mode 100644 index 64798c0e520f529f24bb13d3d3f8bf54c76b9914..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 626 zcmY+CNmCUu6onfEnFm2ooM#^nfc^(oEZt<63h6v5Ws>fbL94C0RsM7@dD!*duJfIo zbBFZbWkNF%8%@)=PAg}mZLuU)`K*<^{DEb$#oyV)Xmb~>Nw`N?nHf~LDe8vND&f9Z z=X<|Yv?}C;HNv`BW0G{VJ%bIxrr2TNY|64%nIl8O7Gb-F{Wj*OY*kj+A?!|Snzw<` zkg#_(t2nih&5W>r)fBPKaeumC&o`?e$lC~yfJGFY$o)Vr_Q*WYXaTJ~tUWk1* z=@O#}dKi_LgjeEtUMa!OZRIuLP3>=V2IYB{w}f}%Xx>-3>|Ke<;XUEQV!{7|eI!ik z_804%56T!=$%&>NLX SH2!uUX-L`lgl~lJnzCn#8VoUz(0k}L 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 S<8SwohLnv@_(u3%&i(<=Kgjg} diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ccp.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ccp.dat deleted file mode 100644 index 162a48683a406cf71119df4c3db29618830e2501..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 275655 zcmb@vcYIt|@&B##9tgbzP#^&ZQtT8+=x(tcTejmW8-iKMYiTWMS9exxM-B#p<2c0_ zf*}xx5D_PlY;1+V(tGc{_uhN&@XUMenRAa;wv+Gk`u%Zr&)hrnnSRbKyQ>!;zBy}~ z(s^84TU&pvyVPG^Q(2oG)_H`|-Q9!P;hp!_(c04Rn!&PEYHQa>qrY6wj@XD zE6;h^DVJvt*ql8Op7#GJPumZIrt*ezZr_70&mO!vdx&ye`s{}v)}}n||4|;StyX$^ zho)r@y*zu^=Ir5MJo}>FH=lHQ zcGl+XY%o$c8=WU;C^YC&8LCM|GkwnH?A$3<4pXO2%cgd=>-pc`c=av1jp=riZcW`@ z9q8NGXVZefdD(fL56cC%=!w_r_GaB~he@|>+4+I-{Op3xi*v@UdSb6`j?8{sH-wt) z`UfP`?9;74x-cMJm_503T8{J@WkAh!VZTfFhd_8rK)5)&$h|}ry6+4KBf19#)RFAs zTwvO??5VDju#D>VvcQC$QRQU!pB50#&z|0SVQw@MAh`QC>zJ60xa*Tqo)J(k$ex+n zK@hj;MtTUvo`WMiDU#8Qe1Na^u^iS&eL;fB5QdG(zoi~%0l;6XxY46==`bK zrJZNzLX-z-K_%roAuSw;g_g|^(idb4TpDglBdzCs9>9sx9YOlSY+>g!bKM7$w$gN? ztX2*Tw_9M7oH_xM+I!Ty_SeaxibCf4f%R0RZ zyx&nx_9sbat4wIx1?Od}J0DayJ<-1B1g7(|=ce`%nMw129*bQw5#{oLa$)v7FB!KF z2e1#X<9swxdQC2U;neK;ou}r89z2z$z&tJMa)Z5$(%K#)cn3%64k#C7YdfEjtGw6Q z|KMolfOcWFF13juPICX?C_RR9!L*CBUPmFhUSkxfCprdl(wvl4IuBQWrq9gQcdjau z?jSZ_DG+;-VDm+wG1qACM2a-Ez?paI@n+VSE1H${rweV$L;u~L4di^Yvufv4bAyNp z%5HW=bN~mK$tJjlznrvE%xXE(CD~x-S%quX;mSky(T>b^-Dqm$%%UvIW#?q#v(hzw zF7P1-#yxJ;I0H<=0?-IHbIZ=Go}wPzy#aL&Id+m!Mj$S!iTJG(OHzbtz}=LJPXo!@gw<+;vn zIwnx<)KLuG9+s$+5h`Z!nn| z)3fcJ3v(0TAspWH@R>UkD*P@z>ZqPAOe4r{*{?CxB6 zW%kCj%JA2(+N|1@9?@-Ac2CZ~DtlAvzZV8^#JKIcHM2M8ysNWjS{%+xLWoy0dyDbS zoSwb4^TZ;FIJYx45R4@9 z=@LACwjRJNl)ylf6P`P>cjW+=Wbf|Gax#ehFw`>Wz3?EtyHrQgV zg6yNd*itO9M6!?N=R2~G`xFkm`$PsQRxfJvG5bU=voQN)in&Mm^7Eg{&o9b8?G1(R z#0tN`q-x@flzk@WUz~lm^RmKKY(NHEDFlx>;Q_~Vc@+^@nB8zrGTy0MGy7bwU`h6Q zHwY(*If;c2P)msJw`E_*`Il#3^eG2^48aj{aBKFZoM%P$R=UboP~8 zW@Yx()Q%Jver!U|c=olNzcc%KTG80+w!%v=395|=h*xtl#eE|OT9tj%r!1HWTH0a; zkbNuXU7dZ~ou^`Oj6KGVWZyBKS+le6`m~mI1;&tovFv*}-<<6G-UZlX7`g}3u8zEz zJz5x&EBZkWaB23#R1xPWA2PulFqZu&=bNAX*t0?AQD9}FdyH~?vN@XlB$w&Pe(FI% zhN^%U9p;4Yw`D)ec^73r_dCIZ@&-A(dPt*7%@U^T|c;5Ew7j8@)%Un=KHy2g+{UaC3L|n;d0k_FE4h_h5txq!HcV$7Q@Q zYqH1#7jcyAsos6kn_*U{^+UnFq7^A_fI+B-0aVtXXG9cMUNi# zB4^=6&@Q>NzvMzovcI}9IN)JQ*9ibdvcKj0OS8YbF<=oPl;Nz^P4#&dWB)6cS)Tp7b6)Pi!JbnvWfELl3{$2UHBRc58}lCnzGPnZU%zK}Bka8L zkx`rg)Q^$1X7;~a_EKp(tgX$bZ5OAk#^f;0@WA7e`EoeprMdNRVZ=6obUUaLYAasI z#lfW6NREh#I^;;k;RytJWllm7UXVVoAyN{j1vx4rERv%c&n!%J|B=RQOVE8a?U)F> zM2=+~o}m!~H^~EwIZZjvCFV?*;}Z$|cTf# z6TW~qMPCT!WjtqrJc4m}8k1VH2R%XZpye!&j7S}FD&r*FHU}v}yo!-WMec?2XvVy9 zRSxtLUi6L0VfgEoVlF&VJ2a$TR zaTO6sS7Q|66?L^}uK;VkkCxGL+ zrRlw|3grA~@j|(PacCo=K`K*FXrH;7a$%HQB2P{vF$)vn#4JoDWaNoT8rh$e&z?HLGe)U z=9tWkQXMjjak#Ffpa`>Z5dsbnQPyTF96Hgf%>0wt5o@7b!Z`G=-4Xa+z~oI$M@74q+zAUMAK@ zvNUpb$g%_vPJ)J2+hlp1@Gf3C+1yIoJHzvYK(Q zmAKLXaOM5}oX9yxp3C@xyd>a+!#yLp&{!8sL&wA?*LitFnk&y^oP7EK`)vu)J;gSz z8-C?BtcjBIzAxGh3CDiQ2j`?A^?$&=2IX>4{KF zq?d8{c*a35DzJGXL?uG3l=Y0mMG%~RMSu@xmGnjKRnpHm+;zYW*QEJ}c-)tXdLRO? zmMY^UXFC+*THP#sx-Y7#=28o$%OK-W$@C<1Bd+E_&m!jx5yqj4;KXpMhjfjGeN*aD zVx|l+4zWFGJpe_-V93+ch!FE+1LKSG_JI=)OhdV~i0+YO_NJmZjtlVREwnMB&6g_} zhY-0Gg%f=QmUltpvN>`u zlNT}$R>6%maCsf!2ggR_MNw+GyqIyASdfC7dZO9Th0b((NGF|9xhf*9ke4t{to2Uv z{u_}kk$aU~%{VC-EF&7ZgL$0{-YC{2DHs$qEa*5o| zIH@`!i8S24QkZG7J4!8;I~XSq-H`GmqBEU*K(k|VXGB;gcQFoErd}vW-6*4xYq^Xu z4pS~%sdW@1TT}K#i50T9MZ$VOx#%YR$RCBgAxf;2eT>7j=ax_jWRLxr?2p`?GR`=O z7t^anRrgrqQ687Oqtq&SV~dnqMe+NhkVpBRD79MN#5l<+^+WAoC9(49*7VDpU2@@c zX)+EzkryPucZm^sOXQv@Z)F@lEDg7P=n7Epd(6em$-V!!2s2yW&N!?Hz_32XQkQo` z&P(K-jKi!6C#HGHax;db<`fO$(>ED3gXCQiYL2{{aj1|~Ddu_|kH~wX#5{R#i-czk zZu-uaTX|oUSRn6bd{N%l=l~mQ++@Pzq2fHbAynQ4P5D4XTO=Q394ZLzQQaJgdc%3E z3;9r#S}Y%CoCFsesAa1p`AFnkA|Gwx1QVaou~$A8IhV`F87EajB%C|9;1iL1wS1Cs zxX{4vl$$g|W6c30A)j)jMIG{K#=#f#;V~6zv6Ig@=i=$|S;k>G@jI~FZ!p)H{Gd?eeLz2zP zhI*Y48xBxZjyWb@i8yoRtBgY_V3voFJ(zS*9+a;|srmBtL<%lC1&QstQF1PGig(VVaZGw?ac>M-HN z2tuDb`kknFp?sHdxQ}#voW)7@7=k|2rF%m_)qPn$zZVrPk?%7O6CjE#m%2xRgWCcQ zI0x_)3&!OK5oW3Uka73`b89-&$&VQ)StC%XMOcb7L2SxT zqU1{XDdVIu;2;-!s6agT=0yj%F%t3%m%41a{4&8N48+E)l3zuxMe=LL zAslGl8t|wYtnun59QME&Cd!f`BR*D7@*9U-GFyJjI9#-Q9*}~QJ?2J99TP5#wEQlj zERx?d4)Y!;==Av~*ZGIYy;S~~aATP{s{3Ls{Zr&#E`Mem!VV`AIp$v?*Gl^gRm3x;kuIx44fr=b_we#My)5&UJ()0>*UOcGe@4tI4n{G4zm#(mnTK8xpEfc zFtPF+5+@Iyn6sngrE(7A@UD_WJO@}q><{`WEIns)DN*I>!Y2=}R{Jh5y6)}cDD$EP3*}PAp$f2o zyx}d?g*Cj+xSp}hk5Wrz0psbp-RT@pY`g+&O}SU6q$9$vl7)#e1kOEUk7Mj9n|-n< zO0AZ~j4#NIaVhjNV^C})$qk#_c9%KQis`b1ahMM%Ixka77q>vMM3Mp`#6deLOC!uo zS;qM4+#tAOl>}~!4EQlrIzA{Pb!XRcq{b{lJK<=p!kv1o6|yPIqh+&Y1>-QU_!5sp zSV+iXfOWiERz}G=!d0_BqxKH=HQK{t!NoYBtyFanY&6O(zqblq6*bS3)r?>I|Dx91 zs{bb@J|~*EP@c;;2`m1N=tfwXaHvGWOsh2I@+i4np2s*`ixM@sJPCw#udH$Im6yo# z8HaV8sg6kzT`};nR#@f1F$~@Bl2XK3DqW1jI!@hT*SKyY((PQG^JOjLU>lV`svF#J zV(Yk+oqN@6S;x3NPZMUOF-RA`ru0OqWzx$yOwDi+HSj%Z?Dt8SGnh50lJr;}w=Hm5+}8EV)h!BJ#aOe6SssY3 zQM4zMYao)CVdwR_S&hlI$Xcn&wJoe^M)t~eoYk$Z)F;<7P6~xY4ptZ%q31l7_*CNd1(~yFUt;y&`1Oe?=XL>Zq~)}vVwg`UJem%j&~{xDJOSmFyq>F z;5eS9{cy0w)CU;I;@=d*mjF zC3!uhPld4E#N1{q;UF|eU?2%U&iU#F15J@b#aQ8kye4E@1hi+{p zkzI_Fq5&AKwE7;og|qxHRY}(9PcO-9q0h;kz-W6}hx3S72;I<$IJY8ak&teA9YoTw zup;Y4xJ}1RxvdbX$_PZT5>^i&Z8#>cFIWfV_JoxZ03CJ`J1)Bm){Sz<0a#fPa|7<= ztZr?ky4=M$=>lKx#$=Q;=2^WYV-Vpc8r`t%l|2Q^knDv>DhLm}LYe$A*BfP2-T=35 zZKVyek8u(> z2`;kr9=Of)@_KnMM5qN9-68KQSO(<%5Fzl+Voju|x5@_!)=l!k1EB4a4{=ntwyqxe zFyoLLz%UR0$qgM!=)6?&ID7;NGq$+LZF*8c#fV7D7vR#Zt!qHO$T&$}Oq@#GE?pr4IHOxzS6#l#IB62}dIHnV%We4{+-6IoB;SWf zri9iRFkkzBP>A%%43oF3%)lS{U;@@t4>5w}1nGI6y^ zliw8VgYw&ioyPQsb+DrCF8LiCy0z)G`R`k}DHx>K=brun4)e6!C4Ynn<~tkpM&$7r zk#YG`6zS=aKSP9)M}%l!Cx79nZf)w|Um1r;!-1tmdHs#EroXpK{@%ixcE@)4N5R@7 z|7>BUFbEwnxJLd}u=dHnAwq3q0N#*teRo)}4ak2Xf+yIR&tLy5SgO*dhWbkkcb1qq zVtj^$EG_L9OnIyiLp=AjCWk|WSsW~S39AsJr*UMfZXC~N@goZHK{*m4NtK6+$QF+^ zk19k&j)n-8hQ@umS&!=;&3ojSf_+$yO*Bx97Fpe645GPD$3>C8E;$||dCrIJUeA+$ zR0EX+&ST{_4w%-I6M)j#w{_R#M8;v-K?+!x!ZLj4cy7^2(W2U*oD9*fFo6Y8pKpn> zi#FwcQK88F8Hb7i7}rraCZ|Mj>6HgSgijt!U{h8q2yky3D-B|ix{T16Jg~s5%Yz`E zmm7?4MB4YvPdIQ#yZ%WP!n8#+%rBNrS)*d{Z78 zO{;gw!yuAaViw-`VjEqRhez;+Jc4m}0E22z9AmQ+7y^vpTuT%wd1QpyAg3};W)WA6 zw7wpUoWt^H#=%Sv3Z~%|I*6btm&dr2K3iyK9GYWi;HI9iCg(m44&C(UiTmWS5Fuo+ z6E32Eqdcx)6FD6spirpQWw8Y4P#66ik z#XT_O*0 zL-t4uA|4DXyD8^KF@2tL0Ys8`yv)DDabaXzUzR5)Y!h6Tr$n||MJ|F!s?LodLuQ0r z9ND!4p9*nVZZq>K>_mpPCi6sx*F5Q5Yp;2T3CtEc-A``Wr$s$_vG#O`uoM!Tdvx0^ z&nQ?1Fyg{DLIB5<-iD7s_y^P89sByR^Gaw$7J5NZ_ zxSKbwOmq-LV2{i!WEwIHBFq{XfeLDq*<-iN=BydBNiIn^K_^;%ZFQZ@iJ+T$WG+M! z9ja!B%yX7qz(0!z2*M)i(KM+9G2k%bBC zHF_HVVc(`(Qx-+mo?%%Gad95A3HN2nYT=?ceW{{Ih$BU^M>kZD%4HF+uOv$#62Dw6 z5yPk4gr#tqU;VO-aY%A&d*$5Aqk{e`WJSV`Z&Ww-QPoynvND2Kg(;)e9DinpX_z%8 ztKecbELYb|UoNX5JMx$iXx$jU&fdZhelnKpe|o3&xZ`vfnx+3ha4HZZN@kd zYVLIj2;DTc1JVT%tOSe59&}DPcqF@lvGS?OTE^ijnR=i`ne8ZMHe9I<*dpEhyd=F($q{`6m&c)8w-&kxdI|VcRS2! z8Ro3nu}(I%aN2sLfMnt>xiWHA$Q;K;)A*Xj%3G*qAOijfpT4nGFProP*6h> zd{#0)4vcaGV!Ej<1F{_=O!N0TdaGcTx zycKIyc1E0r$SWbv${lDGBRSqFz!avu3Ms3kVY!KMScR|zx4oE2(S7vp)ehNHlGiW} zO^6X(jkqs)#or8vZf!mK%6%6^xIiQZxV}YhDOh^swGhc=5p3>Wj(BUqUX|BDgdTzw zpYk5Mtza9Lkpr+1q;YwDWYgC(w?iavLPlgaM~Gj~TDgO9_(8Y{?Vvz38@j!$D2h?8 z!QD-?QC7QkBSi=_<<6+Ryh-kYNPO9&EaaytqmfN#vN4EI2%v)oDhm|rf)%RneKpP@ z_8?`B^vhnxVGT;{bKBC2))#P5`9QDig9xv1582lEPM=Yh=|IwU#3I$bpQ;R(jSQRkAj>($~ zc9AATd)};gKfxBIDHEbSE^jHshUBd+TBs-{sG?xr7TKjs-rmCQGYNG@C5+2E3ifV! zCq&CkG{LZTmGOGu#2(%9I(=8fsc)2bCpeS}x!Ix{R$7aK!wE2`N>6c9-h-%BVME@_ zIIOK+Ay%tFGQT)@U)0>#B=3hvIt0xq+9Mx`z#HU)2{5V&3$WdH;T-Eh4yt6_f&6>^fDx2A2h;CSPY9K3fJSIiq&%$DLgat$XDgQB35UjKeJ$ z$?@2s1lMRotIj}=%D0fvt*uv|S$!KKEXP}w1+Cr(Xg}cdDe&;S$nJLv%&L4B;sL6l zv!Wk;Yga}Z5`kUvJ{)^*5ahk6-bWCkKoj; zt+z2KKZZzZ9Vc&*pK#Pn8J3?i4vP`Bn@$>lQylK`sQfHSZjzrfPO8#P@x8u+bnZ$? ze#tl#rT2)}FiWND^+I(Av3Nv&g|u#M6}?ROHAJ{1cPQptgOlGBtX=Y3h!D1v6^{@p zJo_D-#H6xTe$O~eM=s^I`XgCrJWVTNRQ?cA%JRoUpd8BMQTbCu(f62)LzLYX67Ms{ zxcnt@SLCmZlLrgx*?TMga3eAx3)@uP5ued zV&ZOPr4eBtmw!d}YOnkoA{4)CO0&IPMVj&-xGWzv`7h%zvAYEG-njfPa@D2nNaac@ zjHWUy-D3{(Lu@V`gWz6`%3(;Gz9BiBaf^ktCn$S#%Ny;8DAAB386Tixh@M4E_kKah zp5q`kUh6p!>*osH=20cNJ;{BC3wl#{}FJkBg z)cx-Z24G-}>Siq~ryxeE)^CspFb=hc8N5)jkm(+}DGzjReN6ly#;2=fI18rR2e+4l zwTV0!Zi3#Y_f8Li2#XXUxt%L)24sLRk}PO_Ia$c*%Snh3c~0X3m5JCsd3eFvEstnn zC8t=FTl2_*b-kPlk+j^XvUv$uHsnzS`+z(eBIFb!iqt=*VB09|5Q(jXp1iUjlhYz= z*IIcj#OZk?-7Sw~+E}^mkBg$+J#soku$^8obluZcb}b}lM0S0v_;`p=?Ou=L%4*2E zx1y6LM3Hhyra**SG&c@EC=NFgu{7O#<;)17|F89l5J|+)h^T%=kTXF3pxo9o?-~-^vOkx zlL%rxl1;goGuBsq>*c8sAugOYaCuq;>X)Z8o?7_m^Ee&EM)R@90blF#x%C-QQGZpQ z32}M>g9wwA*AeysVYEC8Zj01_JezTd)V0bns+-M-y0>zY>2R1w16?u$BDpRFG&Y=$ z39u`r3iry)sH`fp7`GQ@qRhG3L+46oN2!`z!nh?paG{&jK^TuFnOba zgZO3)vb4a^_lgjSZ?L$56SJ|r5NpT^h@>0cLiTykSHfXF)rJ2fou(TDv57K6N$%UK zs6cObRzrj^5bLxecgu4M)^+k+h|sxs%;QcoT`n)!dgXZuA|`rZKp&MgoHcVB@_fcg zOx!t4_IVhorj(+BhQ79gXo-n?n8&2MU>}mT2ViIVB>E(Mzm(xHn>NTg#>wP9vN(5_0}{yBr8~ZMIb^*Fu)Y+ey7w6wgDMxVT+X{4bBkX ze*NMW>6CaaL|7%Z>S#$@y0<)8g_}&1 zN|I7!{)Q;sknN1awYTfI)vv#4ljx_s6jlp~eq3nB!Q>po_apMMLarh&hX|`FEUZUZ z>UE2y<8osmQk7RgB+UzZQDr*|)|$K$B8j}mU|e2Ru+`a>C&M~h|M9^=SD!M1zq|1UKw-zEj@;Zp%86q@^ zJ%E(k3bu-jK(yz51{>@4HM%jm`r~$7(XUk%VtsNuMDW4Is2%zXW2_8icOg=hJ0L>Y zr6MsiXwj{>X1}u#*Y8|GgswvzE&F9OvaDSvV-O+lu+R?}#GG`e>?v49_CmC{js2-H zxesrMV&$srg9sA^8oX7|z`Vat_806T;}A&>UD| zq>Ki70l_62n)k{F z;5Lu?orx*H0l_R!Q zkn+MBm5;$~v8i^;$03q1dP7hNd*u@atA0}pBAEkV1(o|1DuN=~BcF;Q`fl>mEh0G0 zq~yu6Zk5jzB6ayJMAAd}l9%}BIAakO`Fsl(x?iE&n0z5})#Zzf6X%E?cto-(Uy7Xi zu7z>?#0bJo9s0E(Qls(}I4yd*$bA(e2?=3fuJ#h4KS$+jg-E}A9U|Q4_$>`KSt!EZ zBHOM6OGMt2-zYHZ@=b{3;+*>O7B(FDR%GAUFW-hZy>O1C!S1=H966RZ*>?(2k?%qz zb%+>ABo?Moz6Xb8WmvwSaN`?(!9^6Q+A;Y-1RvfYKTOzJgJ4AjJFHygN0EJ#ewPd4 z^ui6;+y#Qp%mRc(PksV7c2)IzU5rB=aF+7(iq+qwL8mry2-_VRfuQuYlvfWH#mKp{DvcDs=hQ~d|7ce4IyTG@KGA$ zW*;?_&mgaLCRuSmcKGi z(oL*LPHyktIBWKnH_G23LIVQ?>lWQS%z2IfBZBL9%ow-l32F@vQnB^rUr~|1g8Mf_ zVw2UkvTxT-U$_*k4f!ubViT;`WUH?3bBF&2mpR-oZTcxVFIt*82R)3Vd_Jz)zh=g4 zIUF(=?jNEeBDieL83m7k(;}po9Y;bWbIm=ncdj(kb<(O!pzSBAuVrroi@t6f2yMxR^lrC{JeR5p1T;I~P zpxjr>N9BZQOsz*wgb2$QN+=0df&Fq)!B&-%A@1$-CxN12ira-ltREn=m;5ms}*@*)LyU2gCN2uqP#+VCYki%LRtx& z?YfZ)(ob|aZpuk92ap_>2S-H>{W2Ov(mmb^CMyr+thu>C9>zF{KP#wdl7~mYjrzI= zB3vP-*DvU|+VEP$Vk>jqQ@Ci{Bae(4hvihpiEVHhgzk69qoUSfeH8?eRH{#Dh}cz~ z?o(wb$9VnEiv>(o+98q!D24IDw*pYnJZq;F;x&0JL}DoNzFlThlrqR1_B7USTuFg9zp4)`N~1*2fa0oBT?JFrs=)&PSY}50>PDL^G8fOHapy zZjW5(ng>fg@??nMAMAdc;Q2w^Amk~9SifA zrztqJ#KO?A{fMcX0z;fGWqQOa>-W$g4)HPV`1xYMV?W5uh|#NWpCCf}us~A`*o8_@ zPn=w2Hr!SN6}g0QxM;;#oF9`pk)vPcG7j|#2iV4?`@BBq!9h6>>c{ghg}6WoJ?-os zd{R$8a-0%iULb6RY4anL^vD8;;1wb`PY_7VWUo33(V8rTm|a-mjo^W?pt>1ga)N41 zYXu#6s$YTw&LUQq#f-y*0D{Fp_cY;Nxh!%H$r8p%UE;bY(Yw>v(H(lODNB*it!;2< z&5R|o46-Blf`%k!0KiOYF%E+bv|R_-bMIP~Ct4OSlNFHRzF~_3fXqIP8NmNPG_3@h zxMdB&FOM5@5pcxL+Duk)mKw?$-Le`YlpL)1P3>SABKzby&Mu|(@?41aJWL)QZxk1` zZjj3hu|auWq6IO0gv~2cfBdju7kNHJs7Bb?s2ZPqeLA#amlE7~u3zftVjQM4mx@!h zB2Z`guLz?=Rn{^N0YHKnc@uFfH74cAU6XZ(!1t@GJ*>6j(Gkii{{p=_+! zb&m?0nsrZaj!Fe?(j&EXvK}I_4pE<`DbsQ3E7%95A0jkNtNUXzz}X`Wxu)OqN}$sg zC(y_?r3QxuR=?ZDI9#!Ln5d7YWSlX3_0yCB5&DqAHXz+&GgWA{q5EPQsz)UoWr%UO zsiYVwLeB*f?oyQ2V>_i04cOQx8z7EV9|QXxve6aj1;7=F0(>T%6qA*O?osNUk8-1ahkZ{HO5f= z7L9ftcyM9hB$hYjMFmzSFNO%c;8^r3b>kDxUb(6esmn_sLY5I>%aOMfY(sK&3-XJV z&3z_hyLB6rtx-fjk$Me8d!84Z@USr{rv<%FwiRN7axFxte~cknUJ;1u?;yfKk=DEA zdd5j^y!v)3r`Hnum@l~@D(kMwc8JiYD1+7a=F$YwmlmS>1+YYvrPf+Q_XKZLH!CFF z1E>Gg4{o!0t-PFZ;-T9~rt+VGyD=(S+bgetxHyj^a|htQu*Kp)t7jM-o5ysYH|)-+ zy)3U}9KM#aRXN;F_CQ+%sW%2Rusg=O7-tF?@XU%)UKQ;v_sUHW;i3l?Fm}nS3zmL) z4MZpnXCd5J?w+tZAmrAlRbSe?4&vS(3D66ZU)bChHTKE~<8YskMz2(x(|KouM?Mq9sYH*#>?J%Z zuaBnnR^)bwP`>1kR1pY|r7!E2W7%DZ>RUjFBuiFFawkVEL>0M!@;6fA1KKiA;SOYIB3uP9~$JI0(`x^3F1+CL*p}j%RYX&B5$fU z7cy08LWH;dTa?%53~aEkgis~9+*=B{y1W%4-2cEr)QGJo5SmrS?xzZjw;^VApugV8 zIH?p;v`gL*wN(4$oe)Vs8;i1GrFRxu_sP2=a82ILIH?w-aDiCpo5H9-pWeOq01B)` zly#?WMH=516=d>$#-Tk38o<6BPA-=ZL`jhkGEQngZPuc|J_MJQj8x^r5Mi3|NFzpL zS#vRE`sJ(#g?W5jK2qR_d=w(7R1Eb>Gc)94a9DEc@^Qv3F(ept{FrEm(vR0JE6PcsfL2@YEI_(rDkr-7e|;tlyMx`51um<@wn-}gk;LxqDzH!aWS@KQDP#3s3s@sJ0Qy1u&jPxx;Eo2+@t631C zm>tJwG3o+yi#GU96dmrC?FBpzR!;H)K3LKH|LnP5k*-?#IP5A*_ z#8;oE{g81e2};stDBW8p%8w#vS$@no#1&5R1{Zs}WUu@L4x%ws9+00V>@*dL1Dy7z z-uB7Q3ig`(93m8vqgx@%FA6sOMaTrz*@y>5fI2R}D%gkQ*9Txn%xkYHzk$PI(IdZQ zoWx>>auUHjYQKw|z4Cj;;f{ee+b@5JXDjkY#>t`&1`(pLJb4()@e%nG+!nQpes2mQ z1lgm8D64?^DSs*0H^^ThLeyXfk;Sa_PKluP ziaY=!w2E8mvxL*docX}0WJn&wIGHfWtQEC9I4aOjV?P8UWW#IU75Gi}HhE|i+0ZW! zg9wfiR^mcaQB!;6;hePyZj?tbPTG%fVC{Z+WCYxp$*Bn-HsBavy3VWXQ4vsoY>{y& z1UP-&VoVZ?P&_6o(2s+(Lxd=%7JJ?&ik=olHx0;RAy(_0t?1b0a{xsElutZ3Z>!K2 z9T=f|%-ZfJAc(BbnlwGfn({bT*jPItr$dBh2aD*kn4=K!v7F(j+tdwU&_J)2{tA(9P_MGyI@Z<6nlLd?u&!|IB40~SYHKije zYcymbMB*8RO%?2tMb37G{sV-?5Wyx=>$VUCdiEOKh+&@g%izYQD|%%K;}8=n96Rom zr4d}$>tzXx#Y0)HljY7bT&l?mh>%{q@KL!QBdz@8IZ?E$OP&i63_}$6;!Gr$bCy61SLAt&+jXoQaN>gZ7!w3Ewl!r< zl&Z<|8Hbd*H|Df*QUKKWtx|%EJ{xY7r3>P$ToL&oKPdF(q319Yn)!vS=nErPx~U{< z83(6mHI#s0agnks+f*8qbr8WmfQT~SC}9@K3!*2AboEOwM0gy8E36!_j3qE50BnS4Og2Wg zE3S|$AXellAelHrL@|=t%Z(!1UYWM6(q!HP2vBgACzQZ>wQl=lI4aXZ-2@TVL87=r zuGAw9JG7xB`ui(Gb$Njv+AN#(?-b^Sw#D-nu9~+{UZ`V#9qv=Ar<}6H7NdzAA*6WN zbCBC_6jFyYEe0F2ya-rKS~-2z>^bum%$65(Bz!oH`J4#s;{iAoiWY(m5a~9LiPe46 zc9mi`tibf$P-RfPeTg2~EL-&N6nhamUGyKQU5yFJ^ywvUF_*2JJyK1cE&~<0<{-Sd zuHOqwc=i8xL4}Evn0b=n#UnyOBaq8cxh~3XsOz`EpxRZdoV#}}R0mh0RZ@oIzm4KS$SKX@eEXHPFT`}B>xD#}SoUpGO8 zn7bY5Lxu+9f|fnB{!6Yzwj!@-(do9bX9*|%_@wWlqFke=BD+4Sf^;+o2?ZfR7~0LVj+fULCW^kAf(q$`&lQuJ2?}I) zlfxIEg4XU1fP~mQd*f2Y$tpE;5z+PISDf^@Ru=LA#qSs^Z zaq||#{-)fW$kpYIQ1!el&_`J!hdxUzRY0KJX~yx*50M7l??t>6OcRoaHsu~SWmZ|2 znm0j(uCxhWal*^)@6-cyJvW^!FT3QTX4SPBG7Q8E$y9SQiLyc25P{}CKu ztR{q>Gu*ZC%DbY1A$>voZm3X+v_E`2QDzSf4sy^KJ}U2V`8nlUpS%|;gmnk!bwfW6 zLPt5mdaZ7hoaION#NSJBOx~9Oi@YBy)W@NKsg0p~BSRavm5fc=<@=mvWzcw1uC*69@v3^M5SzH`a@M94gc>_{0G}y)w); z`9vWj4f!Ngm~LDK9mrC8?1}N1e9GnY8oEn9o#>(hv5jO}>~wF_wR|R#>5OJO}^NIpV|aIw&@$ZM5ZoZh6?^~<-BghjJ?x#FCbq@ zZ0ct^6&3-Nmq zprMMt4;4Okf-u3vNP=MnLgxaMR)Ej6c$7~IKXA}_`fV`zAynudA`G8b8=qj>D?f_- zL;ASn$54m(6!spBARGWOeOL?2PaNdZ(m+jq3KhalD7>Ty-?;p&;ML{l=TN~wcv;gd zY`TYT$}b}SpnkjXmr%()pNDym{L1;}bFuyF1ea(N9M3{-^KS}%{et6f6I}Rdd-l8J zcacwj2TOhr6{d@8^}J_jyN;PM_zLYF`9mQyAo543;3G1=qIvR~@~6mO)qk4wXQ*&d zZ#JmR?edq%QxpA$9#pUc9;(D!3STYB^0z3%8uNFk5IbbJ+Oerr{^5KJN*arQCVa#S zEOL04{Hx%r)#Tq$!A|(L=r%6@DR_p~$$z23xB9;CupNEuGRRY$rhsZaIN)JG9I1=?g3?e`4u=X6J-EyfQKmfDEk{CyN=Jr_ z`h>Jyj*7e$ee{1cRHyVkb?Pgb3zmz?yks*P)QW15uZ4Ux;m+lSzD2l4fj?u*XV|S z_!DUY2LsADnLGKI2&O(tJ5;DF=k;tuTRqEZF0-&tXPC!Ag}@Lec&HsPMR(sT)V>1_FdJ_8$svk!gjHuDj1L@E*%)~!US-GJQ=Fx8jD;5Xx8a|8}y+; zpHhHUuaJwNLLm_+;^|4k>Y@uTj&l97R-Ou#B+I+jbF))rEnHlv5h4dQ3*~7MOol4* zbf_>NrU~|2B|6hFn(_>nU9w)MlV>KfD5uMI=te}5OQ)7mc~+FI>D2dZsHyo}iY!i~ z{LlwHF4H59KBJczP@&V|_bI6;&Y8}?R2yApL4_&TOM_y@cI1&`iYk1bUC8S#!6i^( z3Pc_mDnP&VSMcdSPMHf8;tJp0f!C|Xr$OXLWnPr+scw`@p~43W;rGIz+U#1CDx>~6 zajkBJvGXHPZ)u|}fC|CE2zmt>l9Nw09g)AH-{)Tl6{cGF;cfju_?Rq;G7Vjj7ej?A zM#gY;PxE@=Q4~$NEXob*&u1@zNNs(Tx4x= z(LK?@Nw91J@z75OUzLDYWi?c|Mh2YPH;;AipdPt<0e+4HFDv!vJ6@=;BxpJgCqRGy)e-mPc8W@aeB%LOmi6J88X#{F(p*B=$>-dzRVb_Fm~J_;t?fg$jM`{AraC zCMwU8DU~R@PG#3ag=$5XB1k8G^fjd~%JlU2NIz7t&r?AF$ZO6&5czxc2fM3K$L3*X z4%aub$@z*5ww&KDSv+6q($}m|p`G1EYKyst>wfgwajCo9a{Yjm3_*psY*ij=5&OJ` zt)-Q=`jm#tt|(P1vH>dCOwRVp#(2I`ACxPg!h*-N;<>>V>YS3}xUV}cA6goAu+BmK zzW64nLp-UlMjU+eYh-FLxlo0LzI_L&87ePT$VTT$T0Z)kb!g3CX=tb{ z`qFQQ9^Wi4)4x+Jb@d^=%BEKaF?FgEVt<2Df!nW%pl_A-!e=IA7jF^;&IdnTRUt4DIvCb<6wJ>2L# zK_h}WXX_&zscn>fdUUhw*T1P%<4RAo>TZrCR=sf&$2}ZztKKx}^qcj_0jz53;YR22 zZdIPqx9Gvm@>czu8ud1%CmQv3jwD9CV-m+ZIpRjWYtrd=>yZN(^&UOkXmlQ@R&6Yo z`_`;2X-U0T4{nzC>EFC<1}arOF!JCF8MpqQX6-aRDj(orn{^)$+6Qa$cKRSE zjxs?s5&b*G9O)Stl8-87e$VMx)_z7^ zKIXKPdn)<><>SzgRO`>Ed&9+PK^u>SbyPk96BV+q)ZgD#(nk)TES#@LzRK@8mz0!r}f}w`HcRZVofrApe&W{(z#3Zqd}!L^XjE8{h#ii zHKxz$Uu%Qz%FwWU9xAyY_euXIx0IQU#g5sJS(DkfDPK^rx~)iyOWl=qmF{!r)~dDs zhF)8J(X@O?|E@RicJ)AId{RUKs{}aA`nH!Z8=n4Yn?2Nh?($_b6K<9@zt{B(Oq&f}~rs}BItx(Lw zYG1Xsu`1s(lfJEgb8o}q%A^VgYYP@wSOF)LobYg%R{0L#Hkrrcu5(y)IOv8O1L%B0xor8?$vj;!pKUmGq>76QLa-vCz2 z@*4yFZ3Injbr2+L`mV=>d8J`-UR4(Th(uL>Z?b=gvh9UIR*Wi3BZ0xSm*r3XXjm9B zeVujgf`(lN{K>%n9Kpgh*KQRg*+eH6fc(Wk_@8VV_>y!FF$FBq_u^$OrN0`|-y%{- zBW6&Lw1b%?e>apt#6q zX~iM=)U_LBnDXBP;Vd1l>F449XE<#-8|3X5-Y?N*#QF|7Oi$H2Tb$`AZLI6Oe7K(5 zEJsA);0z8B5kQD>o}eQQsKuFCr49O#xuXo{=vEvWl8E{ZDR@me#&B8;T2ZSH>BlmT zHK5}nP`lZF>Ge3ULKYc4DZB<7aT;6C|{!+23oY_B*S_5 z#I(<94AiPavzE&S?X|L;Y=HNRfZ+-mPw6XqLbk%ruqRi7zyQ#Y6WTb1lRR?c?%5Lw_{>`RpV;Wu2g^+9Q?PnmM}e zmV0V-d5~#(aMTo5M{IT<>}e1)6lw_}V^U%%l82b8bRz7~i;9|llJ}v8{ji9gyx{=G z17{X1y+a;uP&`4IY_%@#YcADkLLOnLkBq3{kqCJ;#C9F9;1Con&MW#9^X|PX>upyd6(ref{LFpUiNd{*tLa^`B#`?yvoMj+q zw}NY z>z-z)Pmic!-Sw%@&D?YY>XE{jkhy!4+t&xC{R9_~E6OAL0Rd2?yYAz5me%OYk- zKkngoie-zoEH|u)sajB}t}QcTtT42d5iP961PN!&8r^%ku$(AU>ba%dzU8-%MY@&_ zudV7e%PPZO9kG)+5^PI%z!{V07|uj1XGo>q#WnnM4e9cTG-YzmL1gyzc*fkz^9VMi-=(sLI|fZiu$}&dJKRf3U@>uIIJJxuS&0BR3b*= zv|B|$eMY0WylC^ZuQzO-0&Y|4hF9EV z_m=d3t_~SeBO>XbO}SsG+cw!?5{V--q*1Sz`|GmN#IA^9q2trpi7HLI->O!I4btjA zziV97DD|jMjUJs!HW})bt*E@t^NR$($#&O_mKPW*iSUTm*6Fq2X2W}7#0w>aC4|M_ zX^qH>qI^hmuatDzc(KV}73ISmgqPTpmQY?UFEJcTS?=8oy#N~MYUs`E7Q?zaVofbl zMj4YL_LQIZwokv%=D%z;e7ge7@fYj!>)P21Yg${^n1XFlL2@mCvtAcWmiFHgv6vHi zv0ZD(wj70GTdKcJtM$=a?k^7v%XNl+eMApm()T2r`wC`L@j2}}N+)Q)Q)jxRBye&} zZZMS=tf78=>Zgz7X6T1}8u}_>yJ>rA)E4?A#RP)@?UWsc!*l68dD5urXS-fz5HF7q zN$!}}eEPs}OxiCu8Vs)o{K8J}02Y@v$tw(LXG9|WDq+|ET+ooZro7U`t*}D?=j#QL z-b7W__sOda;-(03K@P!m;l_BYu=i+EWy$;)hEdEK4hv$DellN~L<3yeGzG#B^9s_%vB7ty!UOtV;5F({Ov#5I*gN z!S-I?FKM^y0T6GJ-G-J{fqtB`r2k;x4uiTgLWPo~3`rMZrW_4P?wW)$vr#GOqBd$M zV-Y3HNJPu;^;nE6cAGo~R0NxV; zf^X@oer8#$AXq!(y#_Y1WV_3in!L}D-XD=dv5`nG79un*ADD!&q^$2q%JM-&_)tU$ z2_wen1_g((ZJ&JDP|}<1h58A)s(!2BBL?%)2oqeQXhwAdE^YX`IJhtyZ@0v|2RTloI_J?Y4KY$+VvoMd{*>u5d1voKQUeDJf5d+%}mj^#qv{A z_Oqxg%;N`4Aj)utDB%dv%Omx3Q<8SHqU&@2s{F$6e;M&Z@LOTFD-^clRBrdL3^I+; zs&apSZDU`R`R3OK`yR^jr+FjxpQyH02M5Kj9L2V`bgY8lI=8fe{WWR}83quSe6>!m&0^z|aZc=$znPY_yO!uD z0Ca`@yTSh>!iTlPZQY^L)@AZfLr9~(vQn*92FpG2FT?nE#F$bK5fr9c_x!lGNwgrGEWI8{yHM9Alb~jhe$1JVoMj4uJ8A zjJcx+D308<<4i*uwq?EgacX^@L=hfu_$NgCaOw1N6}NWRJ-ua6MbVvTnCY~#urgTb z(LO!N@J^0+A+u?P5FIL{=*#;}f?LK)J*5Bp%-~LGh4Z$?tV!)I510fuFDvyo^aEHA zG`I&vxTK!3im2YB8xc+GJ5SYv4K@wr;!?Gzs=o%omt!Ad&<~B!7v&{QOSF~<&b!s9 z^_-ywwO7f*OjR1+j#{;wdGO(;<`Gd%h_BCkUWFbY%b`4S65L#U(!Z{Bg`8?|kBV?% zT4f=3s|f~HGV}Q{0_7`OQyy*b>2f@$R;%Ze++$2ZdsGl!y%7Rj-40MuSEo%z>MwQY zNRKt7$3>)YCkPT|VP*^3>4ugz^$dMV(S7#PQkQS(pJ)oW@YL^2 z>rXG8JG0iU4-uba;AchfaH)vJ80UKni=1s3$@TDjy?E^{>Hjr3$6(Gq5DbZT8?pIL znQAbW?EJENL8D6_kd^BC_1$R(bY27s*A(7P1dpVrD;uEt&&~|gZpFe=H|?y3{urYH zUKjzBYhkZ+@^6c?Jo*1)?mgh7s?Ps^dr$9u6Jr92C=!zxHHkDqVG#utO_U6~3p=p8 zgU{}wiX4#8XOEQFPGl@y9vf^b8m$YOuo((@L=c7LI^AJ&9j{;%vnu^1T~<87 z!A{IzP*jC$sH7hNTWp?J&P$4?T7UOBWt;C+TXWUO2W?79D;g*cw9OVcl=H!@ZHqc( zo1MD5?IZ_Vn86|+Gz!sPrr%w5vR5t+&t_CsRJ5>liq~G0YscXkTBj8*0`0H1#g0&% zoXymoJKWl!n+8sGl+!XwY*3x&gQ8!u$PIS7BNlm@ThdKrCF2Ixs-2P12so-qZ-7(W zU}t(w?*h|;@66Kb4y^{71{5#z>MzgL;}s;BA=c3qdaTdGE@hy#?RJ*q7W+F5$xCf| zJLTDqxin)ILR``q0!M>8>=h1!9#WX>)P=de?ozLn9A{a^nI4+IYb(6Q{j#CIS3t1@ZuoVu} znSr8_q(KEL#ZdG{M+ZQFF-pzo?=AP}RwG;K5UVmo9P*@CoOnoX2wd)%tjl2wd}(>V zOP5u;9keHd#s&iFu|WGR`q8)`sEPv>I-gl9%NpP6vC!2HbxwvV#8IjzK0Q2`ISi36 zHgl$KT-Ev%4efQHz6>-qXc$G}P-$+G8j4ZV(E0}VI{_>xEw0Y0=q_(uZH?ofoAG0t zQ`o^kQhV8Nu=5?aBT)G%r+U&5XTa;9xbk<{`A)6a z#dNLEMPt3A(aBUZnZlSC9i^@Xo*|j^hhYrbs~ol1)##SBl0Gu3(Z{PD_<{@^7lsgM z;vWLZSOMo8%J9y^F3jLb*mL?z1Eq6xkF8zg;OjDYgZnQ z^-7u4rd1!z)0d#GbAanJKy*BK#~o-BLPtOx>jjGrR2T?OZ*MQ_ z_O4}Izq!HDZp>(tYtl(*>_OWITG9o9=q7ukLl@%gTrCZjwNhX=IquCFHx4jUnArlB zektDKxNfv|i$fx|Gyprkys~VY9q&yUFODvlg~1zPZJXWdbv;}qtu4}{TwS`SWsBFp zE!U4ygFX@?qNL~oZ`Vt#iF-h7oXxkhE$4hNlSn1IK z!ESeyJ2Fb4BO@Nbi3e!Aa|psbg&MtDe7hsul@VflpqnF#((vQ1XgeIK&Z3VOPNl=% z>QHxQsK`ulf*ZW}9*00AF^(+MeJQ>6Hn0EoTtBi>40OpL-Gpq=af)-M@-p4G?-P@E zIM}@zECxE)iQ0nM73Ew%Il0e)3obLiqI-Vzoh=7_K-)=m55$1FRllTpEIl9FJ7FR` z@A57sm+Ys8>p`Zj@`}zrdp9|!C`VO_Oks@PIcuLChA<5-VqlN2`h%$JV#WsTafk36 z(tCv6+rPwh6|Vr#(SmGA_Yu5Tr}W5`wxJ=>{8A?a0ip;Ey2joQjz2#YE*mW?>#@hO zeZVn3m@!&HE1-?(rXfZWxx1)+$gzqn%`6S*=E@HHu)}>M!xaKz@^+W6eKbQv^O>U| zT@N?Of6O61o*^Pfw2IagTZNQ@vwyw%ZBlQ*Q`3@PiU<@5@D{ftu2Nb0fh&WTh zd6l~O?>Wl%GfE-0CKg~Z#i4EX14k;(Ni}lQO|_MN#rhvQ+K)0?OK3dCeUE<3pfGZ5 z0D%)W2kpm>SZH9Y#+kZa`x6KIX$Fgig!BNQp?YCot{km_!w8?;|K*ki@?^xUUvrqa1oZ!xtMn%(`%QGcCL;|Pv+AuZa8fjMf65-5Qa zN!uJ#V6*+kNqN7J!d`z#pCn_IRMg0 z|2WovGggdkNqBIBdw9gxo@1(>Gbi}}tcD^F;uO#{!JR_;5cl?TNbiHt+KGMx zYRUF@yaO^`>=F?Ps!9#G)(-UgZZFi==uiuU1fhc*;UO7eYE1+vI=LvCbKi-12pfBX z%Ah^e(cP3mZxwekWwVDl_`@@J)EM?pMVD6GJFE7HdY}_ED_zYkppSH*M`fVsl(Z8r z;RLyPzhRHgAW{5!D3-;O$2iDiwT*+b$WD?v)`t~lh1%mF7zSpKC+TCc_9Te(soYJ% zp5}D2%4e3k+WPx6tZ8u)PtPQxrVs>(PC|Pe_Ii6p2FdG&zQS>^gFG{XM6rJ_)F zxWi4&aIt>@4%q}tIKrzI!lVcsp%PHAD_dEwq9|zr z`9w#amyx4QC*eDSkW$Y9@1C~#j*3DO>S8_Rp$EKM9dSWMjAIwn3fgUUlGntfQ@p6? zrP38!=oL@S6$?Qp`2%}EcGxKng30FTOW)FYpz^ zv7Qr4>TPsRAxHIv0~%gwaJIrubNtgY{^WpWmpMWXb@TeqE$QZrmpjB+jS#erK4!Civ_3@3vmL_Q z7ROYYp5xg|9px1nC59DHP<@u4l^j8v7#Ggz)7`1dymniz9h(9BAP^6bF~@gUyCZ0n z7!Xdg8O$5SNPdQ#{yiD;*~5_~e1L zyz)>BC#xK(DYBGxVrPf1mX^bbp49k|T(q^At(3 zB=-_q<1h{WH(yf+J#gw+=Vh$Jf`5$ce~19&WbT`7z|n~uvBNyA)ZV|=);jX}89AB< z0$?PN#!`d!%3R-_Y-Xja(yi%m)$6}1*FQ9HhHaq5q)k*oA4coR=XVc3d$r?w%nuhf zbYqcK)~L}JIP`@XIvNa6R8Knb;HBfNGrPzkeFzpI^&$v;gJPWnz9s`kjR2VX)+A9t z@34y<2(w8tD|hvj_2kBSN7|5)B5R3-WPq@kLe)m42kjC^q(_Q~^ZU>1kR1DMg-5}VToC9Y$RE%hcAWzhW}Y)UwGgYPaO`@A zcteIL@Pb&90|AAR++jC36mA-&yRg!(i>D0#Zgi|SW~^uy2nLH~ERnRtaT44HyU8(& zBT61P)omGevqRpJAqy=`)ls^hS#k*09pVsxx8L-z@=?~4d~b4?TQf{yw3GY@b&}?n zpfTtjw#A`~!>D=ZmR4#yrn%#74*cc}9Bl)sbl z&CqauRmJXdupJpJb}^VI76u?40iZkVtqy`yd3@B}x+^M*WOqBpJsBf1L@SU<@uo3a z7v%Fc$IAWq+{&7Ed%FV-W}wInHi@aDDO%(>-HqTmAEGPbI% zv(ndRA92u+Hi80xMw4kJkzuzG8MKc%XdSCswo(^or9S((qkbZzMr9y25WKP4qt}Ft zA<_)bvrjrYh8*LY7QSUTpK{z!XWW8of}50kwSC6xV|y_WwMv!p;tYdsGV-z}I zFyJA@Tog2DpLZ;5E@O4I>+bqq`+`G#aX6^N3gZ{x+}Z6*87etB4+szFyD(pNsIO$G zsUoLp#a<}6dXgS`KtD-xgZ9-Ld^DfM<&}CZQOUmM@L$jH(T))|+@-kY-eBKwn4)Uu z>iK2e!=(pW?3<4Ct&9{^O9)6-n0h|M2RgEVdG?n(uU$^}Zzi+xH#p2N|p-NR)s8Q{IniPm^=ne&~S3Md=wl{iufm zn6vASxgR;|k2C5KH9dg>^5zz8P+U?J;V>x)@`LshCsXWdPg<#gfCflEb^M=Y{3wET zs)j!z2597vZ9jLYq6joB;Z9X8CjG*}ewo3d2pZiGLrVN@vtK!2@!COa$9d(p%F>y< zrSjJf`I`(GZ_fe}hzf)u7jY=ahb*DHWK< z5R#E$bVw!$_74u|!^dP?di|y*et&edKV`H+_N%Q$bMkeKq|dj`h%t72AWxeN3%=FzttV{bJ1E34T2| zZVz{eM`Q?MtEwRiSOVrAd!$$ARP0fwcXLB~yDo@6%IiNm*N;Ysg213j&Vu%Yiqt&9 z8s`V?F^;WG!ak{2J;h@k_Hh|D_Bp@;>7A?gv~-6(-XUCD?j$AMpWM^lZ%=TLCuWd> z*QM?N9y2GC80O%_Nlr;)_n%8g1^<%3L zH0F~q@Z4?objK)~(9F(~?&avVXE@BkjWEbLMH4Q>2l+nJVbEP-WqNA+^aix6z@Fm}#h|N4 zz<7V(a~;#<$p1uUCu?i`7kQ+4~5u zIW55J(Je6HI6_~P9oJvTchk=_3=kK$n!HuOJEyaB-^L)+x0^jE)aWx0~S?1 zN6)qDUSoTq!yT33q6y=cu3qgKEu`QBtdp@9IV4R;JaUD6X=}Kh$BuT~V=`{+ijgi+ zC$Z|o^%iA7EPVzCBAfKX4xG3hJA~K_y}YPY?g=;Kz1WGpBom9loVvISjR7;+R&fz( zyS>!0wMkQ}p0e)cIL;xbXUKw$6-^bnY_S;*;g%BOgC2y?vsE)4V^+q9`bIrl^+N_5 z_1k8%y?$Y?etOAz^@*P29bir)0Iz0B0z|)CZLR~<4O^L&@yOf>j&WkfDA;;Zp9KtPB=F-*~=X3v2SknF-%JLEYTvJeM>K^4SQOg`By`54TgnZq)%j<9_4wukY$Zj0!3 zC>sO+>#*NTcu;gyb4%{b9a zeGOQ3i}J;pi*ok3Xs>F-p3WOwSLyLYd$nU~O$J4Tc`$F1KB~)^TzeU0k8%*E!1d8Kos~ibWS&o~#s6>wz9e%IgZW zd{zJ2o{l~N-r#^YX29bDV9^8t28hVN2|)cgkN!LgYF{scH#)&AYP|=rx2K{nq>A26 zPVeSSFNzxca``89Dj~9AgmI+MB&r=I9K)E)|a6;`O%XdNH8TvcyFitkt)0o8x6kp4L^; zf^zus!0nECN5+f+1!F~$7*SeNCU2{LNwTzr73AOHfcIv=*gS#<^7AHXe~o^Dv-=z; z$G%0@p|>Bes_6U9((wI`_CQ8k82pGfCcEAq(Te_q2JkOrfJUIo`Qby@JDmfcKZm(Z zw+1kMdWr43ocg;n_1G5BK>`s0B}?C6?{Oq;g3hPwVW9!D_d3k`GE7To1dfwLf+!FP z3Uf!Y_dArEPgt&+$KB(4Y{q?g)aM;!+bo$#9&K zttEYz<&zHisSFu|0D|_}h<)0t`K%*KM8nKJtxDQwyy|Cj)q+cFT!6JJuI6R%}_axH=z?tkL3t`$fmimb6Gi%hGC1jOL{m!`+Y6I{|=8W>%}U4<=!s6G{U~;gub5%6($}j zY+w)&N{WSvo9zb_1e2WK5z9yhx}0^WO_U^IS{hGSU*G*;@giMvcM-_>(F9X zxkt|tIp|L_XpFw_idHuX!d z%c*!3w6&txt$TL+?N?s^*SUTndSm7Icj}yA@(%lrW4V3C3qE=pl~J!=q+q{wwBKd4 z=u2353Vd+X*h2KZ!+!6`+9WPd_+=s6`PS1_andN)!xVRs*=wQr_Xn8zaJguhAY)EdvX{Tvd< ziwiOH^fDE#VJbB4@0bTPV!}#di?(3ns6NxN107R>PHr+ETR+I*9+Kf=97tB<9%m2r zs@kL}RnLl5`u5htyzawu-4+!PNfePpnBEgW^MbS<;aD}B>DMEtJ-T)Hkq-8#3|6oi z+Ja>!c|l;iJ=%c~dm48fugF%>S0^9iP>;<}k*^ei@dS8TrysWMSO4sB4wvV-v-Iq> zJ>G$ykb$CbQeZZ|4fxZl68LD?d3`j$A<1jb8htC>n%q4cb#2Oq-;n z#ae*twWm7P(;BhxMBMjc{Zc=|vEy5dW6_@^0WDS^tJOeV&wjcCJ|hE0X{V@`I#`Z< zm|+Jy7}Aadp%eI&B;PuGrb8W)p$=6URimAm7o}-mQGv-o2klu7T?}k~^+XR_En2P1 z8un}_Fewul?eRi_89li7-C0&M` z>R3l)tiytoF-3R#)NtD8>L(+0C>|zlno}sK@YJ=Px)rt3ZqIY@BQtpHev?^UDJVv8 zm@5tgLG~UO?fDK%+w*!@#~OQqL%uLW#0}IW&(gti#(B!a3OG)9pk`-er2BCHP7S8$2#hZGiqUSl=>8qx7bTELb8(9 za{IY@^XN+*;kb;@5)?vh8tAgo9%F<*Z?H{wG;OlYonBhiVKW?SX2y!bs;euE5I|>T zjMTeLZ`Tv3vmN93j1glM81NG6&KXj70iD2HuX{pcUECGkgZZ53b&LMuuZZNWp7Xr^ z{9M1FBOEcgJ?4nP<1;zmS{)bV=l1mImPfrotiu*K@JWrpGz#S>U>cW;oM;a$i7fiR=%N?;eXr0ejFfzT3-qz^bp z4|RoYsnaV8a7Lx9`%quuluDUWw0=58D8W2?K)2a42PrCbq3&VoDW7L;4%41tq71xu zS5|J4fXO;UgOD5vF&HhbGZ-(qNAPJHu6vb2Xw|X6o50iM!$~tIVqZs7M0t0zo$9%-b}s0g%Pp$eb(m?#aN}Ul=6nX4m~mC zAZs#6ORWjXV$f6SAY9sZt^@Lph-5Wkz+XE2G+wQs_x1GJc@8{~flmp*m>ve5Oc8A* zLO4449BPuLMq+K-IK*&)llE~~jM7OA z^Li@h*@aH^qD=MZpbUhKp<*hD>UbKu&Z!kYfSRc3?o3Um+w3(?@ZwDH#6U1b3ie5- zn3j7-Vq_f6T|XiNT6yZwQz^E=8Mq`f5I?*HG1Q8zi>s15#zFK_CpwIbd4R0fE^~^P zXNpJFnw*-7jO)x-$7v{t<|*ffZyTLfvEQ6u(HC&T%~Dr5rA?VqoS=iiAd=vl%s9Cl z=LYRcM=j1-lHN|!2h9iUDhIwg14lCf1c9YJo;Mydd99Nx2GMzno4U1d;BamtFSqdt z3%kaNzAh7uuh>XIGzAJgB*`avO3)hCOHQ#QdE4yu&OkAC&eC@UDthesS|@s4CK|_n zC=b+e!OYLE(@mgvI=$_gUL2{xEry3-AY_hRHg?w#D1EM>ucBe}4u^VcBNPHa zXGvEaW6N9YZigz42PBBaofTf$e2;^@ErU%720U!@T7<@3#8AO90;6wt^t`H|XVmya z#h~N9BjX+uaJgjTE7R2V&x8Pk!Mb3fkZg~lxjlBTQ^Cg440rZ&ZYsIY>D-^`#6eMV zIL6i3+je`v0kEkAa60d+?X`D0!n-m;v?+HS)!d>V{DsE8+flU1DAQN#vF`Uc#(OhH zoEw3W1|6I2eO@=O-Rb+tJ@$UD_<>w8ngtbUKQ4lgZPzat^#>hM$S6FfpKQiV!dbBQS)bU~tIL z$v*BRJRk%T^Yx}9O+r86;GfLkQA~(9bz&RrQ;n7Nl@@jK_Gz#Dna0X+gvs;UZl9%c z{}OJ<=3_F?+c#!MQ!6-pT6Yh_tkm5=~}ldwb_@I zv*ZY62pg5qY6gedEU{Nkkg-8O#DSEz+E>8+hQO8-ULiGXeKdqfGseiEUj@|POBFAh zjL1}xOMoE)b1;dx$@4%lGO@3TSby)5uoSO%@oR-wYpM2iWmoMRa1vgY^-YrA()ht1 zn8NCz2Ol&pdyvuy$c=eq+TRjpZ*O>4mRrzLW?;PfBrvUV6H2 zlZCOLJ7d47G4@L(C#`gUiW5V`gTPs~g)`{xikN-{F*m~%q3JtMpa~KD8mjJ*uijOv z6X3GH5jS$#eNaeOsaFyAx5}y7@8B|c>+h9}iill3mOx0@sGo<3WTQjf;Sb=rjN>$R z*t$)K?~eew_zDxoA9Pqf*&K4{|8K$QjE`I;xr+x{{r6FA&$!AE=cWvA||O7 zM)$c_+D&5}-2k9%6yF|7M)Ad!2%1f-Lu9T`)B`tk!?668k@dAFz%IknYeq3F80d9? zO$c)@sJJj==P@G7L#XV8hwd$E4bn_~>pnVFwS8eH7~_6QMrjrXk)`qhRJ2SCjwTj-m{$Nq?t6@f9@c%Z0C z!VI$Gx`m$g>(?7}bhY{*ovYeI;46sup-M&($570`nvNM`rAhqiz6L%{Q9leKF6!9$ z=7D!YyxB-f!$8}u8+g&qrwuFvcLPg!iz z2p%UkWduF~3wKLDUO82J0_+FfKT*l3`$Er(2$H^`xmmxg&f%lVlfZPX6?)cDahj0# zlL2>mFAwrgJdDU>qcK9v$CKKp7&1nSo+6@>o=?$PR(Yz9tM)Wl39@TZGRkgBJzH2T z(Q5O^z39`yad{O+ugI&eZWA(k27oT3!W@4HV3QVfus|h)z12Luu2R?CpQ((h9RjT& zgl8!kg-{r{ZcsxIH-lDmHOk=l*u;BGPa2ma9NZlqx zbR>W-qPSuJ-64RD-bJA;`k~x0qRsO~KqB!4S<{lAUW`_<7bvr8FNAgw%27&2p~Pzh zi4VMuNf5)$6cv5S$nnTw=tW?=pb9fQXLT&RCWLo1L|k}1HTxPDkqNN1V?lei{UQ__$5k40Y_gT9%FH%E)9*VF{lcpdQ*KV#9af0!PmqPY#cZxm5mZ( zj)NOl)s;b26W9C+(B*V-m*a+R7gw)5Ls?au3EM$~vy_Y)ER1N9f)GJ+kuiGc*=7^}ow;y3QKJa97l~=VBU?<4$L?xsAPN;b+ zp@a}aG)v)yP>T%VY#b489yDB@g+93{+$Q8ZA7YImrzv8)5X)OdJcXQop3v{oTlUg5 zg9SQSwUgj42z;TEQQ+s-1U~kHilpuaQ#7))Y)VVh1P*gYZEo(`kMdQvli|u$bXAQL zthp)N=2&k+si(l6D|Pe#8GE~628+b*5Hm>2N{e-}YNyhoUoO?OS(!j> zpAK=?_PIMLPCAESIc!3yOW?wlx?!TZ*ah94A+Cn#E?rPMQzxtTG8hlKd%2QPcPm39 z#?@^$?OC~Fk=(;T_bixj9mdf^8f1*yW5?vQ30D$)1_D#ij9iXgalUt?h-5v#YP360O_p~(P)c${q73ABcr3Y)4G&fwQd*+ z66{ejN-(Y)V0%1jwnaaDVI0z{falVS>jtA@G$Faw0K4SkTxnF`36R=3A{cFMMyI|s z-D9Sls`bK1kXRo{Z|sy1iCKN7k77tPhO_pou5R>TSz?Cns^t?IYm`;Ba{&$b=aF>$ zfyq^?LQR2(5KO=hq0mQptMfLAq&B#~L`)64goY<%z@f!&vU4${pgn69^$!6$OX6j3eOHb2lXFKdQ&dTU`^=t5-7M{S2aUn0+f5HC`-9Ghu$Zv*JbOg6_+Wm zYL~-PQ13>PE`Ydtj@D=%5=Dr<;M_!euMl8#{qz>wO-}U68quqij5>@<-B86NH|v+* zXghK@b~RYebzJHmv3?VrzZOu}R9wLu5p)-ZPS=Qtl)`lYJpiPyJ-<#FReL?OgGR1Z zG74vMuo(ErA!=lyTnB~=B|65CdQAx9dcYcmQOCptSm+x>q$Uh4)83$rs@(|fAdELE zIlM5&=z(qmV>n^tdQAx9X24t+anzI~o56O$B5o15gy3<|d5N8R@#Mu;cIhPq+rvoyGZ?!@77Vuq4F}OE{*@OgdgOE$mYBoJ?<|n|^ z-YfW~i&i5Q8KbWA6+>A=A!@IwoR?)M2M7 z!zf+jU4c38KKu)68e8pf{@z;S?`|cdRmLeEjGk1OCaD|&g!ppL8d4%i8XcdwFB zj_ox?qb;b6$I4U;Mw?LZeUNu?4@^ACCbV)te7IKLHt~FUt78hlUFg}~CjycS;cb>aq1CyG3 z0%1|;L#nR;`cNqJck5xqS*KcfxbnkJ>LWE$AI+rVI2=-l9*JQ9-c@Sv*EXgoLCe#a z)R+1%Rt7a(QQ9Xa2?C=;`HuxA>EKzjUb?uky1megW8m<8Cp_vUdcQHAUL@`E(_c=(qzPl%e zOcUn*d1$-2Upz6iC!k;Wf_RdLuud|&O)svLU3^hlRr?am1|Rt{NtapSMg>%ZE1>?( z`r$JeG=`kjG`!DzMR?I?!ef~Eg4$P|^w(;nzpi97i+H6mIZH8|x{oCDE5;8PVW2^9 z8^?g-8xZz}_67w_46!Cm(nPeQ9lq@QWW2Yi;6nF zUvFa3s}hsKey9>v`w`p+h5eYMi!oXq>d0dhrC|%Tq(|P?$MajX_o3mgw;Ynh4q{4e zdiWD@Rv#+Tg}a}6BYswE#Ltzi4;3&4?|CXI5)c$*TbhY30f6L*NOgsGVjM zqdYVHzrZ>RXmj)u!`1#-!re3=(F1bYMoH~K(j^rqy6{B^AwZKR)^5~ql!d1~g&`p^ zC{73EC|W#0l#y`5!+*1Gm{n)}yi9-w4&jo3I` z0`WPx_U=WU{ zP4=2#6%)(J1lahK#G!1wUY}_U{A8W1+EZvmu=1xW8THvyYY^tb7&u#r(s@8QfqH!! zjJRIc)rh115eMKqMZ5|9w!o3=_r?d4qY2RS)5U2V7U}yT`tGWZt9CH_2h~24qzgBW z03ezcUp#oy%_iB55;YGIkU|mzusQu*%k5cC>De_(lQN|^d&i5Rgma)y#v8>ZV_ytA ze2Fq~kljA@{y9S>!+>pa;DlwtIsN)jS;?N`ygawY%b}TDW zsa#$jaI)beJk^v#yHWBhwFC^N8n5RL}ogl7i(Y)pS3Bn3N|r%AuZmZA6)wZ#5o|d*0H=0 zFqiF|u>hKo-%+5t{Nf}1BePZX3fO}R?7=3gByS8^y-3tzAedWO({4xWxN671LlD!k zN=7loOBV2h7FYs@LY^ECFQpfQZKiGQ?7rBUhffKsa%6-N0}m>G8~_2^>mT*xwyvXshQ7c`Xde^htq14 zterL-YiT@qy0gX_eYC4HGHZq5J?1guh-?B_JTtJ!0OJIcwZF`{dU=hjvy_YxY>Enr zokSHyj$uP*gX4}JXH3J^ZNizC0_c$|UW6VNFola`MHJeiAL<(;qQ61}6s=fINS}x- zDXVJBpd11~o03r^Ckz!y>fsoK`P@`{%s6!|qm1_2q2c0+##wCLxNw^gWe3Dulxudf z5fjikEEf|JH>1iEdacyaWh<0ZwN97|(k?3*rCoTKfuONTKh){Hg7&C*6zQ%6)1}*B zJK!MQVX>N!=qd=fL>oGWQ3(`{6$5R;Si3|pcC9CBiLJ-Fl~J`G_z1$QC>ezp$K>!r z%p1dVSA*fgdP%U3A@!ON%sGI$U>1x3whKZqflCOCSM|k|_>s$AWmc^Zx;a%*pA8Z8s!7#IzCedSsUXWQ9R+Tf94m0&vin4}_4UDE?N7Wg9RgKYC zXGY_U6GlNDao7Rr z*MR35iEHV!V?>N51b#8VZu4;sW>nx^2zBd4DE5}~bo+0q!!{_VYL~!3FuO}hdLv_J znRp>8rA`j(TCd+IccEP-92wDp=%nyT?#rFt#u~jVl#H4=IXFB7A%JF5xI;5Y8ZD8Z z%$z;tM+qpKpydsUqvD;$Z$hJ2Lew?-s$Fc<1O%R|#7yeo25iNEzkvB_WmfIA@EH_; z4M~^N>>A5>Mv^z2aGZ2f7hZ<$(MrO-~?`{5x6lEh&MVzfMH-tOvc4b!W4(JC#+)2{g z^YU7I2%-c`50G(>8Dn4h4uYYU&lvXlk*#~XNXe&};HIzJ-{tJ=sIl`_CF{FeM3eYI zD%f`RK$L~gCq~0C<_!tw-OGF{$a)lV$9qIyz7%9LTC7KBS9}Ij3 zsq|a9udHuGf5;j9aE-x_C^^(Yuw8df?cs6^k$e=qMh6)Y0}>yBLYu= zgM3^BWA3uTov8N6CrQs`f#&I3O z@X_$|aOLeUyy59V=A;Re`2y^@$;5a6(uxO}y%eX$IV}64Sd@`zyIX6}e0s6+my}nv zFVlozY+q3_>iu#RS5rpQUbZ-Nk168A$u#|>j=fJK;()}-oxGOwRk(CJ*!=&DvnK4~ zYq0Bfargf-b{p*k)1(6!hu3{w?5Cbvm$CJ3k&=Bwc~$!+4GY%tEhVG16s}TW{7}i( z!DA^y!Ueow4Mc$yPqx~(0e2-A-qb%nz$SF_9jLf&DnU0eGd?O45c9t)>M7<|dfO`J z+V_-GweQ1K5bO_>jDn39zmxNL<rv$}sjHX*zDaJsarEET(0?}^I^88Pb&GzZ3`Bn) z&~?M`ZhTR3roQ{D%gyrCKRA^?)~NhR$!JjV5)O@^7xspv2Be7!bm4)?3c(^3-kb^! z_1r&0%yqFM7)Pp;31D*LBG7~<{{^aUlJRA7J5O~2Z1%6>MmEdRANn}6LvtQ|B=T>{ zuG-&WHQ4Pxl#JSF9Y$D^({slqT zf$c(LcA>BOw-}JvSrU`jm+KoH?JoEKD8Fj|g}os6|0x;ee#Y>ua_hevtoBLXBk5q2 zt5Cb?j=Z3Qo(ZDUgg$nMxa%V>!8RH|(~aB(-RvP|q#N#%SWxcouswBLwY^|5=wxq_ zZmzMXYvdMnj3VlNR6nlDXg;&N(zVL=bsGECXzZ_K)O%k|AH*>49JEIy1Uh1r`xen) zLZ`c@`(g&Y~CamQ^_;PD`!-LP)E*R25;xmp1q~}UcXUQI-tg1bf1_WDrn37S? zafE_ila4X0s@7!^EN!b)`ll28SO4!%1h?NZ4j6f!*+OOD#Sk7 zWN|n@N}v8jXt|K$rM#WSZ^F8s1kuKRgvK=8s0lErCySZbkDSyk9Xv(HReLHd20MD1 zl2He7y_Jpwc4;!+J5E`*fa$Vc5DaomoF-)YbiiGvQITVUPk`*6A)=BU3*!q*tHNh! z4_02)o(VfaeupSoFFz(A^oQ7Mk{#3d>~HWsG%P*~%%c3p#A!l)&j!3GzcIllKz@@% zRPy6;+(M1$`)#r^s`eas3Br3WNpEw!8kZ(-7fVE=Ob-uLy|^a3u(Z0rw3KOs9**tN ztsGOF$YC`ihi4-5f?-00AJNihW@rX&p%|x1B9aAt=0d%9 zv%Gq>thv`-tn8}21P+2oUaDlhIWc&_ShvJI+|}K$Fnqi@4$PuCjfvBQ$fg5cG^a7a zCqRTVL{uWwRwAtEn=$9*3w|?|S+!Yk6~s83q_;lKY+x`AV38&fJY98paAr2givmb_WCW2Gpivs?O{3v46t_^AGBhrhF0AzE)zx;glRc$I zc2OofMWqA{+2jtSN9mUq2l)MgAJ8=qtvau;Q=P(TH43L^3WbQA>=f(E5ALPRoH2B) zgwv=+kUV){?Le1qnkv~DPV&qe$(Jb^ou=^aPvAG{#~#b4l}V7-;6THN%a?=eiYeU7 zIVM&zsF2)=75Qy{)&=ON{0mFgdrMq>&T5*O?{Wlv|;Kb zX^i3#=K$bRh}T@|h)zJuO$5|(CMIfmMRx}&Ll192H#EFo$=L8X@Ju`qE_~83e3)1R zhBrQjxgqtE0LEbs=K|(}hy%|dU=tvW^F&0#H~?XE477E2baiRmIiOrUT>t|?BIlFz zhQ(z9c)=6X9>1YY9FL;hR|+SF?nULE6{Xd>|K6%j?Nv2uug=tBv;`Hf^P>tDAs&QV8cVHZcXbcb$8gM&cS6h z4ld6e#H-2Z%5@V7ASOgMidAe3gxn(sD(9B$3a7HEM&-&(rQneCHYnt_k)zR70huVb zxYVh;>+EWWer*l$@5-nW16C z%(2(&H_8C(da#OJ&4~4zaD+DiT8u3tg6_hQ_XZJ(v1M^-WjU^)-KgBEy%7dNY`KYK zF}A=9=6Q*J9#6CY@P2Wwrd0dL8+IF;LKRNky))Oob2MCNiqGmgJ>WRrahI4+KOchInPo6z-E0A1Jd zaiL)WC!jCcCPLCTS1lJ?|0=s($GYtt@Ta}E0KUIZ=iru7WlqOK@kstcTrf_sPA%7fpb~p6A6>-SEOEj8L zY?d{6ZZR#)@RQ?W}WAmoybx6vfYj*HL)Ncn?eKvHH%d0MHbztq=nA5vD;J`86; z#2-;Iia1U;v3^9D4AVo%$bG^`!E$jPA5=7A{U${BF+g2(ak@Do=md!A<02+8v1W5x zM^DFEt#p>`6Ux+G`|uG2^(m6x&bVX)ODRmVN2^I@9B&y}W}g<8q6bUrr|GkcWnGEx z)3;4N<1{~8qxm@{qjFkRVU3F)WiCz%T<{<)wnWF}%}wwalfQkKYd^#kgus53 zHwXS$=y61HMrl=lpKhu6iL!KiHDrUZf2L$K=@`Ti0MZ4VK#y4`$&VrRpM&d~i;H37 z!fGO3`~m`QzHu-+E&>x^w!ai%ne9WQr87EKmHIlgz_6^}R@kp}qH4c}uOQIhC>aHM zR?V`|C%mSC34$d}eBhi9P_!rDBKWlK0qdi<^KYT+0xygwc9~Wa3i%xjxI!+Qz{XC1 z!hSEt`t`y(ypL}gb@tjHlvTAqYCFlZmshO2)MtP4>_2-p-EV2xGV9PscKbTo?Js`r zubi8=yU*yPk4^gdXvqGi6Z7`)$L*AdXQES9N(SxkoZEBBqk~uwY0~LNrMKEYIKS7D zmT;cvlj^2^13h}bV*jM<-hMSsd0=g~f04IOq76?T4YVJ$e{*i%#&clZW&h#aeoLNQ zqno4+UpPCFWzhahx&4<+4dn;`iN92aV|d{hyWOgvx6%Gb-2;|Ps?p$_2M_JjgucGc zZhB~O-hru3>dw-LYIr)kQ|F*1&kS_vXOUUrwOA+cwTH?Flh7*yO%LVlsSMqztS$Pb zw^02}wl}zYBze1DZ6EUXOl5AdeL3DMm2v&qe&jXiX@BxY(9;2&+c#mj4(&kl_Dgiu z*+CrdpUQaK>>=bGkn*6t)gDUTfho`BXAdLqpp@tGv4<yyBb&|%dcsVx$C ze3XC?-NLmeY9YOC_9)QySaN76Q)lfupN5K*#S&}v9!W=COcu~D4JefL8dcsqvb5Qc0(LAB%rB79z{(hfw zus+p3rKHll)vU9zNaAJ%e*&SkEmNq|q_rHTI(4!0aAj0& zs^zQoqjB_4!ZXPmLBg{* zH-b0J=G-{E;dsjJq&Li=Zj;_HmpV;)!wJ-B(i=`xoqh#Rh79d`=ZVczM%CtPTQ|6D z_3Q&iTN`PT}0{X&^@)=h8K2(qZtp zh;n(53T~d+*<#M^nFgVpD-J%PN7*o-J(aTA)Y7>PI?n)*J;5mqv`(Y!-i>@Sq}XPs z>s(zRp;*<<&=xsx{WjukwKKulE#-Op?PcWcp7Oli_Hy!a(D63fS>)}Rc&KZeoz1x% zfV?fXl)UU7fz~UOS8(`}4)v~EZQ(Qyq3bjz&Y={f&<5geshlI~+|XfZJLPsyo%e{E zti$f0&K?QdTdebGzFy;DIpy|DgSI*;sJypad)IIs{tD{tmFlH(!)m*(UMKbTPJE>{ zyXNc4l~rz-!N*EvS8bKHLkAySey*EyBl$~@PLAX+70!*rUsh9Y1b;b)bK~?EqwF~S zrI)fJ_)DM8)%i=mGOD&l+admPE;tSTavpgN{xU#bgTJgLZv=lipK}fV@=Ed={H3bA zg1@{Wsr*)=_RJ{N**&+X;WUn0n*zm-Q+~heLSe zJ!x8j>a`8Z)cY;9t?P6y_3X<$yRp-`+|O;~oJ6>X&`v(WuF#=`<44nM6GwZ7qvzR` z9PJg3j zR_%IiL5=f!f?IK|j6lhpnXWDb+&6%_$C7v(mR}5M(aGYiD`e8gF+KI`t7D_y0P3Dg z;*w@v`3XS35%j&5#0!tC!N8v1Wuv{fYXYdeQB;Nrw>K%fYBy^;G~C|e=QeY$W+`vd zVa-x*nvp}wF;K9jpKr)+|F^qQtr@k!BXzjVb!*4 z+mxl;1?q%b$_`K;G)s9a=nuN3+$}0;WUJeqd+i=&RPAlrPO2>%z1=eh$yCHXDva4K ziN=f3;;0yNS}bIbAKs~-8@2X~Mz-2J1R?{A%SxkRq)`e!yw&biy|8*wT%own8M}WX z7<*tR8G9#;1yWy<3{QMrzey?XY2J83vx%c}yg0nuR^#L7t zFrMCOA57`h-S(lBUf60MCQV1tU9leBw|azqgq*2COGuHBNgzv+kR`-4?qt@G^0(VZ z8?dI?$H<8bg=mlkEXH@WIv=OR0r0zA-BeGd(sP7;g1k6lE?%W(enAlT+V;sIHK*C9 zhM`x_dpp+XUMt%BnL-`LpsAb4eA;Iz!Nq}|@`}#BBkXe=>$jUqW1qAN2@Trk zm0K6czMzb%eNo#$LJUa;65F&1vQ94Or9c8{~|t zm2Xm_K`Y-PZ%nOxdq~Y`_MKtq)obOul&I6n_X>4}*UI-PQP9c{IM#2dR(`15LO1Xu z9ainf+Gd^nLI|=wKT@KglRt5+-%y?WS-HauGXA3Ms{K{lp@WRS z`MJOQxftR8p@XEif2Oqb_OFzd-u_LxPH+DqXX?)A?Y|9J)9iobjHa_B>LY?8Y@_0%VwDJUwhtg1^@ zEuB0qrKOV=(sep{IypO~lV>zwO|yf^8C56Gq(p;G4k2$$ojhwu&1v@RVd&NCWD+In zbTYY6XLy}FhY|&yJeT8Pb#kcAFgWJk?snZFur%C5&}&n4qH2d}8wSbC`@6dAa2>WS zD=q8jI*h`-2h7rTak;x=VX2RS(E&D9B_>~JM|kaNUYlDpSBLZVJmoCWwe;O)>+jH( z_Lf%t9ojNrM{)v=<2?+|=lE$lK4cO_C-)xOa>%6i$-UZAB^(b-?zI=FVE-~7$LnI> z3VWfBS4J+5Qo3p{(st5Hr_Ak-HJV3L)CoPt2@MB-jLHZe&bm9=%l+MUEVUwm7b~sn zCE7*;=*bDtrk7IE@wsQBzYZ?87CR$-UYRAeY%H(7!Awwoe+$iap*@=YZ-`bH&aDE|NXL3!F%SAhm~zLg&%l z-ADKKwv<}d>d)p;-pN11$#+ifJ^GMI-QB+H?R7nsd`oe$GhY>oYH9@_5?r8k)lSkj z5@gm;AZQCI?9_rqj6zMMPFCr9m7PNUNNkbPRa>lWB!*37Vs}4u|;&4}-tWJ3^cjU7`t|{+q9r_K> z=O0mRIe%)^mXg7R9QTMgGK0N(;HRUn($j0p zb+T$Jw4JnMciLc`N+;2j{p?E4x^b=alP(Vkx|7%{otAK^J=?kpwY$A`Pp<9XZf|RA zvkHYAg=llgB;`qztCcGpI+WS%b`E8thD_Vz+tyj8g8?=q2=tN^HM9VIrtW$d8@C}Ki>{1mJ z5!5_Pl?nUDek16u5)gpb^UE4 z#hX-K6mif_yP3+7)-6g`ZL_uo1#~Lxy@^6jAt*rRFYbwVx9Uv9nrmAq7O`$qx@vFM zHe#XhxpVC;lyN8od&neA-L@)IC=`)%ZlefM*fZo!x04ZZ?@+pGcWN7P(S7ix?G$rp zWE7xdzh-yooG4&XIMEJ@(wTS;w*FRfB8|J1uG&4?MjAu}r-7xvjgn3#3=9g+nr!^- zDk5t5tf;NAL8?UXcPL%8d$o<=h%|R$EoPZ(HdYrB1h5)tIHN>}Z3+C~uXhz@VH&r`@@ zg2TxB!vN2|pfj0INLvZyet@ahlIbaxg)W+0PeBfwbRRQ5* za;>fH?e;Y)MBuM0UA1p$8-ZzCyI@=Gn-p{0;4|&w6hw_h?OQsRSXI$)Q#2xeN9n44 zSKC6v=g*&S-=mP@g|1wALi)aPGjo#R4=5F(eyDWSexz-YIi?o&V~Q1-^RVNQ+J2&Q zf}|zNkR*Rf;fVP&rK|RHZ6jvray>lTFDU4!#V)rHpY4|_QNtF$zoJUS{2E?Trwv5wUW{qn`V%{uVA{F$Gos~p$1oNj*y z(%Il~(KMNB2IG)Pr;FEr2uHl)Q3}2P1T`}HFQu#YZ*3!^DA*@2_8*El@nEWj`HKBl z=LCok57_@G81Z(KyHss=Z3Es)Kj|pJ!I^FCq0^C_fmYj7N2&T=UVZOe-Mb4-;cOoY zIZSYHX@I$#!1mP{f%(`)rn4UfBQyIet#vGI3yt$Bp&dvu#}o6xa%wX|p&q33LdCrY zFr9}`KEgg!>8d?U+X(BXqqxCj(;iMqN6rJ-I69~!@CX&lY`5AYsTJ`brL^9kt8K&& zL1xN;J%&<_%?d;a8;Tx?;jucE8I~_Uj-nCp@k&?i3ECFqAeYdr`-v2D#Gqt%ot6Ok zB%Ko^dSk5DZcnE0izP63D)JnO&!B3gbFk8Sv#GX`PI7X!=n%>|i4YTnDr1SL&(g^xrISxS*`7_|2s%mW zs!i6mASD$N=5r`kkdksUZ#knxeSA6Bjs(|P;0-{BOgcmKRcuIr z8UyH%N#{yq&lgylikEw|z@=yG^E%24oa-0D^#Z@GTr=;MA6{@xi)P_=6l`?LuC)A= zl4se`6m}16S3x@_o$2UZ$soFF$9e%`P|04b^jY>2&%qrvigtK=sj|W_RO9O7bkO0o z&$8)W)`yJ1&nT9gNxA-&jIZ@3Mjd$aESv3haEQ5csdPM*(2)k(bEwnnM;cSl)lt<> zp!~|f+li#T>2b71>usKL-J3$D&DU|_u+?kOm2wh#3mQtFL}`!0-L_Eav+U#{bxvuh zvxqwVf$MHttfQ)(O0C$&(@6Ugs*n00d%Chb40w*QmeH{?&^u#j=`-s~zl_rTK?NFX zzFdb@JBw;jFlUnOFnzWj}p?{@%^m#E&TjH=y4)kyGW(*BTZ>azpVEy{Nr zOxded$&Qo;=Im>s@gWnMe*M5 zb+91~x&oVbC@Y9p!>~Jb&=K*s4=sCFvFr}Y22~D76K~aF)$XQJ6wE!O{W6x1@dCNG zDKqH9$9-?tVG_yUaOK}oU;bV%&+zyxyKlJi_t%$yfb!vjppQu3sbeiRP&0D*ZqiwO zFclbmkMgtnoY(g%C-M5e5o*1ENUaZet-$dIN2v9oA+0#XZ8D&)Mvs8_u`W)$+Ykgja zE+Kaxu10-9IY~la^ui6^^`#+IzU)c;)X!QVu z$n7^tXT>sA4`|;~evWKp!}+(BnK=K>2o=9OT*dEs#lZjfy&@M?lFPI7Dc!W#4~DDz zL+aK<-fBNmhHl6KCTjU7q`j{cqphgUb2lE|Nd|K(tkS>QewWT1 zYQHB*Jknbm`s@$s#4+|ql5nNF`r0~r`WBT}^w^)$`9ti_Bne8ZyZU?m#BbGc?XL|cZwztj7tNV1D+w54* z{z*+np&z=={zcju=&;suS67Gqn;d4xKfK^>`%gMu?pa>$DfbQ7fAi@}ZnpoWgPu~4 z?WW}#uehMJz;@>Vd*%Y$B7Nr0N_`cxJ;+9yN86rC_WRZ9DC#`+-%Dqzwzswm;^pw5 ztKI_^xX$wB@O@N7m&5n<^80BUXE;oD4?gr@{-+*x@WBV${yOKDv)VeAm(Q~UI98$E z>_DYfBFgo4P%6~hznnr3;gp|ev)&%cc|_&vmq6`d%9*$4ygk<2!_zrUWR{9Zn>~Va zyU*Kay*-k1sByWK+QP|4aZ**++oMxOX)&C8jB*w@9nX?o*ke5l%j<2^_x$W}UcG-= z?~=zUudUL(y42RUv{8(YS1HZnwRNKnSHPd>nNLcY{*GdMvS&U;+t6tpF*W_!QavUnIw^2>(BSp|9U%wj3}_( z*W0r=j3QF;XLIOMS?PjUnVRp`U*mPEO`>FEcCym?9*4G(SxkDWxP2~#8o51`Ojme; z&naZW=gJy`d!X&Z$g44UIETYBh#?jjoN7}k8aX^d>8efBHgZS+k>Kap^C;EG;*n%F zviN*58(7>EyLtg9YAn8x!(my(M~f^@wWBB-d3=%5RXbYSqRJQBF_dZK@K`dl$`{*< zIcBroUP7{g&)w%q*DvKnjnCsa9F|W)b{(HnZ90V`qcfD&-5lE1se7@_qEI8Jv&nQ> z7I-|K%myA^-E%lm<8dyB!}7?jH}yPDwG${EnLJVHs?F23UgL{xKBXGDY$dai%LQaM zaOoO9i4!$07jifpm;HLhkK&y|NtsS#dAThI-jh|QYNu$sAhEp2vleSxkn6#-r`oB? z8p82uWID%%xOqC64IC>puD2zesBwG-hj6U0sk3Kth{Io+9X@zAoa)n2Y` z=K3tpI$PVwHQ_h)2#45GofyLVE68-->6BNpS#KpW;XQ=;WgONbdmD$f2DEcHMC5xA zrx_Ww_3JwrJ#7P-@eY-*+H!5fywBgNP_lMg0Z_D=PA^oZPzbs>Y--A3Q>T9LHd{&Y zM&nsUCe87lUZuLoV6)!3N!D7`!(pve6%M^sZvCq{9MUQl8yVr2+S>GOO@x!&+m`=Ww{j^!tD*t4N;=P(L1StLwE_s+R5$(RPv(=d~BF(owiANDGrJO1_#5 z`smQ7UeI{{LS=-JXQskCr+e)pov7M6Z3FuBSqtqo)Q&IMVs$k=EWr(|JQ{P2e(CXP z&tn;uD?wZ*V%654N3e^5q2rrAdzP)|AbvtSJ>c+$w0z68C6<19LLSj$OsUMS(}^gF}^s z4LidbMV3M1N#3GFqo_EfaY&FSYmy`|FDN=SyE-#=(sX+*2eWI!OLX$PpH&UZ1S$&; zpNPu9JJQNkW7x4k<1ylOBPl4 zM!}6bkxpV7RCcSf8*4Nc+8a42yzg#YG>Y+UM_u@Muc$nLSW~;mc-LgRsYY{=-ONG3 z?VG1*w`9DZQ5+vSIM-wpKoH5R9wYP9^MhyeoNb)3%@&y3$as(j6 zaS*zZMwf8i(Fdf^|L)1QwMK7&ZQ~%m-gBMGHAl~GPgpai&$2r>SP^)KS44$MXf7~>5oyrw%G77f zvK<^mAE522C~52o)1gJQ(7TeMw)EDFH*2xo&B5fFEP0&_W`_{Kb5lo_1Pd}Qw|jE^ z*)#2J9IUR@Pd1G%z<>|ehxXZ)=-$x_%%^V0+uAZoIW&bPP@O&O0Eqi9Hil&N&j`rOQk`S@S6LPY-qX;1hNhT+i43`W7 z0YQu?qNoTGK_MVUl;x09@kT_v5m6EG!V7Oi)Zg=YyX&o<+0ABmv+(`>F+ElFzHil2 z_11fIPj}CKS7P*6m|ONh)~PMu=Ua4oZ!rAmjf?a_ zKYDZC!r%Ztrv~r@$C;8Ce>>{=V%9TmkbMbe@8}RW2`-8*C55 zoX|(u$aCV5^2xp#c81y`F!esN(-ea=jrvaN0a?FefDTo`=k~R41(wnFC``E(B5yp* zUG@j@_D-T7=(KkGcIX{z-+?J#bKY&e)r!@A_E@I>32o|R`)(L*v+u$5v;)^g4WxV@|w8x~2dE!P0iRVF#ZTx z+DU;S;k2J*9n%KcPhn1v#P{4GpQxVp9Qsar^qmHO3Wk_8kO1nn@x(Q>cgXy^TQgrL zOFs)RW9>!f=euv8>{qBPVXLm;Y)EO?ZokcXM+~!PVD>3;h)^;&cCZGQ*^NHFQq0 zzrnn@@S(FnrC9-ga)6lIn5F>f))@{dj1X>~=ux5F{+=zi4Yq&4l;=Kp0s7Pp`eq7r z6&GXGE4ZQ58}`qvPxJS4Fy-#rrz&)yH+4CBFpxm%yVDRQ_sSNjqWvq3jI!rp%74ft z+3?M=p__m>Mgl}x3P`8hcyEaz`ui&TcQ!U@u)P4&R`dx~3Ft*-Rluhp;1vvR0-kRW zP?<2GJH08bx%2-MhQ`}}Vah3{OGC{%{+D%39%}39NsFn&0xXfCdh(u7c-R4%{~C*0 z-sxB-3d}*P?PciWTKV8<<86JIGFPb1{D5-8joze!NFZFUPl~3#84BoYw+*ts>7#5z zn94ibyc-kPs^S~f_A-4)f9UEg;KtKw8sG_ibmc~FaLAA`wlPc@9rS~b2@}J4L}AFI z#I%$97sd-P)NY$((gb0cH1)R(mc0Si!S1e8(?#NsL636 zvP6`0SZ!NpU0OxAfhjYH1o3dDOOJjAHB}eQ*f1@U&XBuWg?_8am2$Xo(W$6EJEXWLlY1*Y8B;2$^%4}Mj*YF3)82 zx9@Aa2aZAZDwuQE8AoU947k$&D`A(IrMZ0#p!Nt*Z@%ZuRd(#7<&y&dHt1bFIqeF zannp}ug&d`A7cGs%6+i6r(e_TOWu;?*XvV2-8Z)#HQx4vSx`WwEmb{XXhL{B=kl^h z0uH=kO8h^_@ME208HhY7qHPmC>e@; zuh1tCmnK|xVAiGS=OCDJ14S4KNs64lQ&{z#LqaHs7e3-Im2--C%(2eI)oureq0x2- zOl9?4tD&sV4$XQ-47S5y$`rm7`+)Mffc|g(nf^XW9^jPtE`9DOKlklxhlkDyb_C4M zMP78S(_WwJj~s7D!ju;ZJxGiY?+BpN|Gr1h9dVI_o*+~PZ@V3pb?Z9q(J&zA!#88*dw8gJ8-8 zLy!A;Q`tOq0xP{2q#+{yS{t18OgzDcz?7Yf9{LNAX?dr*KA6vYTCae2De?79RwS=% zXx2Sts11WDH`P9Xe6-ONRUQLWB+M>Ivm{X>C>WzBNDU9p6{1($@Gv;uM!@j+q>4J| zN!gwH+u`uN}1RXw_e7c3lbczl7zyd%YNBBnuU1#I6US-etieBRB zNkXc+j~*}hJnf~uV<{+nJ|XmuvNo7<1@DnwDktY`Le@8NxJ`s9`vCvx12QMA9rQ3K z3Z7D6yTvBu_LGL$WSEgfLeRc?X^Jq>l<+k9$h1)%vp7$H7|ZQ8#r2OI(q{Y}+|)_U zQ$UK9ssaZ!@Sb8FYykkjy`KPrEx@+hv}|kWc$*GWu7iw;)UD;C&I$HbnDTc<$G1kEU`xL*QiJG_0DP0c?RHXD zJhshFhG}uU8sx5nYBRE~6NcC+Fl9nHNcsTtDXBUp_{`kCt<7e2f`#_r=@f?x3%_P( zT@yyxsW9c#3l@S-I2hbir!zb;p;JH7A=Qx;XUcQ3?unyqE=-G`3>@@2q%@_w;5wV< z?T^>GT!SemFQ#VZ6Yya=#U300x=|l=5QKJ{pLL8IVhdo(Btr*PQ#F0lw9}Y%jQ_%{ zbNn=01XKEjPVznJ0nc)M+&OY70ky^6e$>zjwgjeJHu1%)d9&;r9f8o}bH1IH^$ee2 z1~aA@_~@ak`{pYT_~=WA<$X&(G}&1#L7K2_X|^$<&6dHG`GF1M=kq%IBbpJ%4%h+W z!WdKatb5EbI~}I%n>Fc1P5Lcv&HJb`vd-~S>`a*QdMiFNui+~(;2XRtMxMhiaICqI z))W>Ucvd#jHpR|{DX*K6D+I*@o`Z@<-BkXztbEE4I|ruBdUW8yN__|-9;{)8Xk;DQ zHk=FdmdFg+(rdTrgRTq`)LooqsWiu<<3M|RHaUHwod;7{buUxfOY~_?xCEb73`|W+ zp`GvgMh_fi7r>NZApfa;kv@b2o!JFqMCUOI+iiK)p|iFNE0|mdNlROrfN?D=)21e09A|-PN%V-kJ4H7;Trr zloONt3r@@v^0eEefV@PYd!BQ9P1q}7%0n ztE^QQm>eI*JYR95-QJV+>t~4f!jwPo(gb{@0t21up7QX-H080r$@tXgK708V2_-bj zmHUaQ&N^rZP)b_6JirXI_raVH&h{A0n(bT>c1GL#Vah9Jy>c2m^d`Z@*_5UFCSqhC zJ&WQLp*4g0Kn68=v|R~PE)lf#PNOr4zF&&%kTtCpi(dX<=+<4%Fy*;Nw{`o7qbC`X z$szl2)~gBfDwuK!rr1ZG#~{Up1h}H2Bc+gi#Py8PPuN#i@G-&qgwMC<3)|?d&$kwy zjuaNl?lqxzn0>UTdaHfae3{|etar$0TM1K+aL1d%BN(^}Zu%?ZrI19S^KQ0}WnIGu z+I2AHjE^o{V|1<1hknQZLRd9H!h3tX1Ed{ryDNsq^0(V9MM? zr>C6H5biVnI<)M&_Z5Po?{Cby^%MUpm~ys7cgiDtT{E_ua{Do(>}HrU2Wd};lWl#& z=hzWQ2bcCT_Q|Yg>_oc-rrZY7j+C!1tn_KZrtfS6oam~~RH;uS!=7#l&NlR;*J_w@ zHO7X=k*ZG9#c8X?O3dKD*glOYQ?E(%*NtkxKJ?qfb_&Z=KzmwWcfnM~fn)M?>~ubLedJ!s75iM)Ic1dH-GULF?i$~oUMc^G7adC? z@i0yr&~{JOH+8Jt+oI2NAf=9)_<91Lb>b^?35BcezR)+`?uR)$`mS60+=vH=z~n*G zWUOC*6>%HW{rcPsJ)jgkpl?2UjO>8`G}%56b4~yPcbCq2G(C&ytu$DPX6iZ!k9CTP z_zYPz?hx`+)_>BFk^9;gGNfs3_8?4UE_1h6s*Q)WLqGbMW?RbGp+Yf-d@<{uKGeR{ zqMJG6GJP0FzJsD^3V}P~Mt!m;pBW#zUpRD+v9G|C_h-^8R09?^Qnb*Ap|u*N5=PV3 zRo|e2Pm!>%hS9P1wVpcEweGLG?y*|*AA%_-4IH2;!C}9VIsk_V1icBil$7?3tYi3C zdl;r%h|$5OjDX{g_Zc0Vk^y}X2nhCd_RXwojZVVB;BmA> z)8_`tq46N?SKU`17!-Is+wHsA&bU$bJ(zONMo%>&%f*w5ge?7ROvo?fMa4bW)nBcuD@)T8hAcID!tfW_-0)HMbc;DmrmN7YKg8gEI#c)gIu#J`CV}{s z`sApQr73Fm%WQ7Mc>5Jhxy$s;0YRWDru}R%Mc&;nR_I@6J-YVsn~EN)xjCvbC*>U+ zK)rjZxXON;^^6{C&$Q?vVI0p2(Fq4>?-@;nG~wItLeF&jJuY4aC;V}GC+Kw zW5egPrmn6Esgx4L{_HwW7}#cifhpH0OoKCF_U@toQR>F%gLeC?>uA%nReysiCrR28 zV&J=5t|F%(h2Cw+nEgHL8#mhi0aN}sLmUZ*>&-cifPy?jiCzh40Ad-?H`_l$@mPBf zrkvrr+5TU-y>8Nd9;Td4=&yub-+4h7ot^Y;ID%Bs{+)GA8e}iPl;e$J^mPc7gKU~X z?LVQX&Hf8BvB>Xk>G8m~SM!@3@37ase_#7wHZ^6Kt+%~QmHFq$h;njS-*jtspE-n_ zpFP{7U4-on6I*}v!3C)Z5HP6ND$ik2~HJw(uH!*AbO|Ww#~YpI_d&F%H0$ZjwdA4w1}fd?GuT0_U~9(sn`t6<923zKWq z<4ZSq*vXJEMeO&;`X=bcP?$1N7@fq$o96hqp{C)x=0w>u8<;r6_JS#2Y=WNU`lRb= zo)mbVpHZOe(>n*y4pWU0Zg`j}Pp$Ba&OlI{MZP+l=cZDaO1wM`JrBqYb`dG|7$cx8 zU_Q9oZJ(@f@?d)nO!-g>uK4&#?Ewd9mKl#bg8`$CGxY%pLsmN)zEiaAwb_^+#pvGx z9?%{TY~&7Fb6@P6^-Ujb`@u|#L5o@RT&54Y!R+|a4Gr$5K|-bKh1fK6NVdve=e8z} z7-ajy=(C=R(l2EAOkh*AZ9uMje48BrQ~n-8vEv~`;98+ibvNEcXB`-NC)h!~(Mu;1 z81j;D0

    t&U*D;-a}x@2e`oNgAj~hCU;U=>pL~qcdHL+38WGgiVW<3@KHw{s<*u! za?n9X?Q4gI#ff$p%$OpYeP_`Q&o=ZB{t+;hULf+MINkx0j`rc#lznLjR8~sqZLiOI zb(Q@{m_rKeKIn4-krh7H)4<1KF14ewqVYrRXqa*=69fPf!5n^+(H^88Z~B7@Y5dt6 zvc9&_b_~q11u!tU9`E&(W}QVl^&R5?1lQRcL+La-7N*=HcBAc^a$C)n$H7$cit*>; z-SdcGqc?%WSt_N-d2AVEOyOyk#ck3Nv_;q-W z`6`fY+VD_6%0|G7%(Ic%uI_0%9%fqDCDZ64 z4-?T%G#T6>ME&|p>K8G&_;T-nir{|Hx(|I+*qdsjVGi%DJsXpC=`?aIOqn8#HV*}1 zp>Hzojwv!O^o+IfFp~;QJ=2r?r)P;S=F`GooptmK&Iw^_g0;bv{oD&%qy}>cF8Z8) ztLSw7s>SYvY=gHA$ko)mPny#k-aJ%*+$G|U@}sL4CkBLJ_Ewnkw7qX2 z*hyKx7W>j#>20S>m}s+L_AFA6p205R1yc?$Gwk&?+uKbYILuCkDc@*D8=~*{KP>t-eOCGq zsb1y5Va9h-{^r5M2A)W*YK_!XGCYP(vw_VC>%(m>O!@chphhWu&!mB)sqbxGG?`>I znDQyNv`UvvuyBPwy3;pTAFMllVams<7(NFCGK})wZi}*r`VQ z6i0M)8lBcoYVMrV!oVamm@;&o8fbMBo?S&oP|b#BLrb%val>pGO!>kRLWCzw6NDql;#2L5%}^jHpVW5DaS&Oj1d_S zB@{%tqoIq!&{%s1Os$A^j||br7(zeaxK7tFAn9s6?y&DGy69pDFkP4EFM%n;iY`)x znZ#2rpEs>}Fse3+J;w3dyVD7n(GHq)^HIP4qI{op zujq7R!d)WnC<}D&&bz|a6k7pP?!$X#%if*!==uB0U`7XK0*t$!s<@kilm>;Ei}XoL zH&(s2-cL|ot&71NTeX^mZtEL3^?*!lv$1ZgH!ZHocQEp?7M1AWXE`m3?nQUVKnm>*-=# z^ZVCN(qHeG{yOJFDsR|_b?jf`Rp|}83Oc{={UhRD)Yqq9je(8So5c&{uX(ZUeN+bO zHD0RTuxmw!t1B^Gj4tSqH zX?Y0@6l62-NcX&uiDpsEaH&Kg6HvR|fQo>5NQ@G-mtqwhZ~>6P-V1v z|FaPKXu}=v-u&uD3faT0w!2Xg(C=AyjrU4Ly~dl;8+M=QfO|j6%WDQio#k$YJ`Rzr z#0AiGnu%my(;8_HpfccpzV9u3K`QGtUd-OG2StZFU&L5>vk&e7opG|3m$iS1W&!!j zz0>j)HLKTn_j<#=Dmq|&4TXnCZj%h27)-HKZ_N|xN{-ZKjukn`mhJ9OfgyK6uDTgsVNQ?y-mo8w4meMsth~VoIMtrCq;(?KgUYBrNaTgssLyPD_GZX^8XY~1Me?-ujy$u zt=D)Td&7PyI^g{ZrR5&U;|nz6oaPXHlaL8w^`zAo(_;Aj8Z`m+H+`e^w^CED@yhpx zJtI0`|E|S=4=N@Gwm9jmv4o!7U~klMVErC70s9YqqxFwcQ?Kz>`G);TbijTV1C?aB zO{l8TCRfvqcO9YrnWh2tFTL0FS2eBIcv*eJ{w6x${T-#&qMVFVO+wdGwSw0+5j&Bj!iCw$r@>LG-OHL8MZ<{To$*@P)q9{2!^R*Lab5!~QEe z;QtRJl`dwydsgNhd*|7>-VRN0Uk2MdP3x;^y~g{=8@7SyfVUw^Pbl^e%!-V2X7W4@ zEf+%seek!QA5hu51i#qcrHi$;5vn8F8^3s#Hj(OjjaQmC?B$}vy-hJ%?%GHm_LFJn zqwlmO)_3X!dH~pIJ+aMb7SK2Eot7=stX|{A;#TVYI&E?Z(Z!&cBWZ)vrF%^?5bw<8ZUQm*lwZ&*6t`QX9?C~(udWfLppU_QeH*V zfVM~PHT6@|dX0C+H*8PQ0dFsqmYEMc2BdEtm|EER`i#CpblL$|_ZjRzY1nSBMpeMw zyYDpbBUSYpucmLv#x%d#0ICLr1G?YxKvk{RcvXGF4iX*a4{lMyW_t~(T$>owkZ->}0)hxsE=QtnYbhwz@<@g;~!vO~)Ik90+3UXPl9c4XgZJxXfo zHC}PAziSp9u-|}z^286=z)g9hZ&p#?vs_FkdIk3@tpauoDgyEw*InbWQc^ymwkgs9C+Xo*ofu*htX<>v$CQ;p_BAp)c@`?ql_1q_1Av zFgY?-bT~2&OXWQrOj68A#5v8A#MHNqH;TSYA2w#tDYHsG*QpK)-w9o1 zlmpf@lpS8ISuFa5bfrFo8Hn^v>JvK0;~mdnPp5f6d-J+!dyAUaYg;9lCyEZ3Z*5V` zRN^N}4i$uX-f13|C(%4$p1f|_W~h0+woQV0is*nj6UALzg(o+gE z5m0BZyT((cqF&o6!JQ*I;Lb&PxmJ2KS#%g@Rj7GT`V^nStV(1|yUjyQK(6(T*7;IX zukDgxFAyED7h<5?CN38O<__Qz$m$s#O<(EK1n23r%2v=c zAilfznl4k*dhLh=?>(Xe-g{BHbCKbf5*#v{$(PxR3}0oJQzc-$Z|yCvP?dV^$Yk#Q zqQl$=Xgstq=iXO459j^I*EFVpL+4eee0mya?RF*V0@?@rR{Mvfu3kGjx$$Aq;l@=M zD)&BI5$JG6=ko*p5Y1Kg5t;SS>9nY*L?Ho zN}2_vkM&N=b!t|x4N0)B7ag!Zj>59DfyLk>)!Ao~UPO%mrQg3;47~z{eg%{)Nm*f^ zKwZGSp>MU{D0TJP@yU%vS`z0>j;HLKUgCRm>p9k6agVYwRuR-S1^Gg#pn z(Ts*X&v_R31$h$pI%`K&K)t>1G~Xdr^;%nkf2Zhxe-}n77e1I{fV)~B@9Z>?OFr+0 zJa4bE&!Hk<-@Wb{?~#gnZDN9Zujqh#AIi&|B--R;K7C`X`O621Z2B48?x#t>d!XkU zKCdSA+T;Z13!($ggD4wWOzXg@UM;1Mi6nhXBy;50P!V1)q=2xqc(>aZQ5kT*)b|#? zES2@z)a1@rM2951RH_;V7J<^A&za?Gu z+R4d*M@5GN-^NP01#|~edI^@F(l(`BQ@_}EXdalqyKdUPr{?wADGBEHMF-3uptu~Y z4ih9qFvZrff}MhP`yovN+G9P}@FO*;*JdR+kBbgCKSo(g)Ub;64ug~e7ZyGJ1kD55 zPu5M_Pu09$J2k=lndpG|B#MW|AS4^fJq962$WrfI=qvQ;;u6u%Q5UeE>Rau^JIzUqu4^ie>@#*S*v78#Sxf79?1|6&XXCawq|t2{u6`iaxf; z3TCDhUVD}%0rAg0*YFoLsn?byIDZu#aQ=p}$`6@t)kjS3U|%KZU<%K-ztc2e{iFAq z{;8(*nk9J8i4J)GLg|=d2&KtJmc5hxJb@@Oq&#>&#Mn(V!Cx&wI?u7^Q5(?z{o+`8 zL2B!@Wy!7ohz_^@i@~Ac7P(tJ0|O~J+@Tk$lUXcX|3h84v)+zKm;aOHI9YW`ezm=z#rl47>>ctgCH;nGa8VM@4w_s&&`6hg8&S7bLj-L?-OwU6k4^%@kGQFK^bHUti{d|JfV0<8H`;cHP55c{vY z#(kxtUVBG^yPxQQ`?`v9qIR1;zV-m01$R&B zyuqRa-Vl_QmmS$WvG+@xCVewU5p}M*`4^Z3 zkrRj&`T&(kr-1eovAkqFL(&vt<4_S$$FIA_6QrVEyCK1C6CH3TpnPaC^nmL_kC8<1 zJhGk66rLayCZB8~>H_+tzSTZi>gu(dlN(b+hZ|EdR1Q7d$P=1q_#AOxjH!@*H?e6n z4an1buj$Qds^{erytjxBcqgK?Ji7!At6FvELhkyEk)e|yKxCo@HrbOB#CdxwY6JR7 zFOHRyrB=_rCAVgX4!2IhV7UdVCJ$&mkx22Dzc`vnvw%ITcUoqvnVxY=uuc^nu;!q! zyu=PHzrfEZ^K*3{ae1~#I8}jfBF>ogWpbs>MP)#q*Y_4`QdzIvk=&UtI^0=+vC53n zEq6$i*di@NMZjOQ?iv?MMZI=cg1ba?z&#D+m0Og^Yf{%Ii%u7FhwFEatTaPSKwjE6 zT9-+Uo!Jhp=@_U)8Q7i+e0N9~lALiIfA@3-DgyGE>#p%EsnBzW3GUgV1Mb^e zl>2b=iGukX$nZJG+43`~Q@GmBK}EoAth>f@r9w}}CAe=F9dOS>`OsKqJSmv$98re| z`((%d-><Aq2$IpMTZ-gVyK+ANe)mFeTTmi=&bxV>H}1IqTSv_ zvw*vzcUs=9X7$>`3D#wz1J-*`SnlwE#q>*b37F>s36t{~0zq0C?Y%S)c$cr6w)d&I zo?uKcuMizD-;d&Qf&+mMGa!B9_sYJ}`a!9w*Z8ld zhJ8qM!2U1>$_WnGRa8uHXe)cx`eUlD2PzYc>qG~P>rqthCA_nV7M96PIv+?r z|568CIR>6o@@A|n&^4X1m_mf0q0W{Wppku*784Dt7#H&KHYN-x2lPr<4kZqBRb%G z7G>oGl3JVT4!+=Da?FTU7&O$Qh1_IXLd~)S8NzBh* zrD?$XTJJS|T}|~gXM*>T=z#Z)7NtyX9=#Pn1QwIF&&O0qJ2QKjrUCDpz1Q@Jn(8sj z1n*m-1Ky)3E%yyX&zB5ln5KP$_yn~oq*9us?c1mcsNd-ut>2XzJ)W6he@}G4{yqlE z%_1F6Cxa$Igz)9U{V68HAJ8md{;+pi9#gY=?YRW&N1_AP<0vdwGEk6ec_kB__OL)< z8W4ZgdriMqQ#~xXJ$uyO zhz@waMQJ%i90h%spy`{!FE#br`U&qFP%#ldrq>3Nm? z3zgyJ^L=mO-%_cEPm?<@hz@uDgRyd;0-x!Pl%oIA=?@UWPXR(k0>h)-{!7z<{lDI8 zT2Bv;>FLe{?`5I`-umLI@cc?C2#6?<(*nVY;e(WrUu7H6G~jL6drcdush;Xg@HQ45 z@HRo|;V}|`aC?qkE13BwhSnl&2eVF1}~vxp!wX_H2ZW~ zVB4WCe0W9QYJa8F>G9O$#`dDajU6yl?j`645|s%vp=1t6h#wC7eA|&G0d=RIYuH&$ z>b2bxoLxi*oLy1YGWLlk2uKg0ts!%FqiMj}z4w}4rKa^-zXWd&(E+a?O8fd>{m>b> z_j(abyjnW-cyDrOZ_(k12J@gd6_;wVp)G2Iy4i08b3aq z`L6yPo2FaIR@p(Q4_6L;ajhL9_4V5R$<0GWhnt6CSn~CRD&4?C53oNkeh)dE;(&QX z*R@}-;(G0%WadcGVdf|rmbZwY*`vrRPBd5OQ$5j7QLN6Ggg}XU4q&M`P=3}I) zUOOzof1~Jte=J7IpV@(*mwC~+z!Jpdnfq6Ct4nEfMJ3!QqWdP)hAYRtI93KqtsXp1 zZVeJ0ZVkp@rB~>Q<@)&64|ja1dY-4A>3E(w1Xbb6(7w|=Ose!CbAmrybif~hkwc2y z8kV7}bxFy4Cb z50SjsqTy3XXI&y(bQJCUXl=ePD= z(@APtuMJD^P8J>TW}tLvk+;kT)p>#Gjxoj3-E`I1*K!6OzGOe_6x0RenSHB$melDf z?c~O6(c#9a7&<)MU|Qqqgh!j@I?>D(9V0!5<^g-|x@nuI=6Y&7!K{f6nDbFw<|^w0 zfh2&wHfD(6Wu+k*QYBkJ(}1|J_nH=|sUE~l@D_^>cuOiuNd{m0Jeqv7IHaF<>3m-` zR@-Sb4S3djO-t3ZUYnlaEfXE^>L?xB+{wQ5`gKN+q|1HCrTMqI%V@XLQ5TTU=v(b) zN}ZkqPHvnfI@~xLL*-Q_ei0;yK7yDPi1PdOVU45zb5h`=Ck5k_#zk_x4VB@_Iel-T zA(eV6IJtAK=y2!l7%Q*0R)65ct+e;iH!hIxsTVxA^ZKoV8|^&QgbU~Qjn)gKMo$SR z*vmx+>98j-Iu?Sk?7(aDs7(=z#G~6zy5SAU%l^ z9nUb!9nX&Edb^aW0pVTUZ@EHM_0(@N|8CJ?{xX!jl>bio9t?&P?|rH5UoL}sL^p-v zeWD{2R{*7axg~R(PkQ8Wz7Ws!!jee$F!UIb48^AI@&u2``~Bz+uRri2nz~ZD^&Dq% z@Pnem!4F~eCHoi14`VG{zUn14{t;Qziv5_256PPV2qK4u%j@h-a_E8*S8Vavax@43-X`w8jM<9o@i8$^d&H)7%NSmAwW z0f(89Z@fyqgP&d@fwxsO54<<6o3@+PTu*Q%n4c6KFmFNeD}dj#3L*3r`n21p&>w!Rev!?6TKe_uS90`L(c$Q4uw3p}*_zM?>{mOT_Hd3! zq??)TvosAKZtK0Kb~UZnr*5No=YI!Wde*{I7B5(8x2vpScj#FBF<|;fz=1=D*qsuk z|IaHV!^YZONchXTLNa=^eGUo#3Rg(R46(bB@P})KWbAOe2MPZmR!GJTw0n{8XIzD( zZGzp0g#Wvmy1pYuAB1gZ9 zgufptB>KPYuOZ`)cu+{DjkQOR@FxPLq|LsCgg5FJlIcV2Q6#*~K1l{EsNY7y`{N7AkYV;6 zB)pQnkc=2+-$laP(F@7w@%B9=ys&)ghU%NaV;}s4eIF4o5icr@8*e{A!uz=kN!wui zArfAJT}UPkw#Sh0&gfDy-hPB+J>4KtNG1=p$B}H9CDTXQkCANVk|D z*-wycl_kRSQzYADiNf(SBs;le=dl0C*zrT`X(an)$*A%6OC$#%A)Oz*-hPFEmo277!-tNxUn4mpOGZqv-yk_MOGb{j z-y%6WOO$laAUP&W#tyUJAsLb-6Hl<;BRM`xrVX(_AQ|nF5u^6DKOz~MC1Xe1pOEmL zv4n6$+bDY$39s@hBol|*pOH+?l1antFG!}kWaN-G`zsRO-IQ8Ab-~T{HzX&AoBbEb=~*&nnEemQnOQP^imkV^Bxk$i zsS9qhmmxXFC8P8ow(BF|-2#PXb;brr&dZYN6Kz8z7r12fz)`jlk_)qB(0JPz2~Tb( zJ)=jp*(OMMIJ%Iu4Y8LaS&=0ZN86@IuFR6jqir)JS7nLtY>wn=my8)W#I``PGE0Vx zwk?rdmnFjo+Ez$-k}+8yGir!!jpXJm(LX0|gXESh89ULoMY1|eG)}iea%+~fjk8xE zxg$#^wb?6?+?6Gh+iZIzcW23zQMLn;d$VNf-nJu>2eV{ao9%>z=Sd38T0wS3@{mi$ z%J*H6Je(z39dXt~-C$qQLBX^_1R$$HxPBt30Y zhS~l|xIrsPCP?!DB-|@iNVF~=fP@=}3d!I$I}i!?;1rS}!|fm>-1bsPhK{m>k#MI; zAsIfz4ne|A9fd^EI26fFS)xtKVMw^)pr|u$f*p>8-~0=S#?BE)`en(4@%DNo{7zle znK;CbM8c1?g=E@zI|>QEhZd6QqwQ!U{B)QkPu}%_y#Wco@+HZ{<0sfLNciEbkc^pV zZ$!dxPK88!iDQxQGfpAVNO=Uj-4cv29B^HNVp_iNQO_fp-8y;T1Y1BZNrdo!LyJ|n`Fb0aE-B$Nb?9JT&_!! z$wPs zx6}esUo>yoNlRudTQ=JkEwzb~H*AuQ{ikXKtT$uk%-IWO+l*!N7B3nwXTYh8ZRTv7 zoGML8l~{uoEM7FncwceDrX}G95-wge+op?~y1SUS9n|1dlaqs019b3{(Bg#b%~Xq% zfVXt7)rqQBPtBIjU2Mzjt>PPYl8$j^ax$vW41nP_!`b5hxleJnD4i*`K6PW&UNpmO z@fkKtf`-l3F*Ke^o3*<%hic){-0roSr)oNf*;^2r0>5y!dS}2AeU_e9pJB5HES)`b z@uFE)Q~id`*Rg-Ci2nlU)XT(wp}48@BmU{)s>07nc0T{-yq}Xw1e}<0B{Q8ldncuu z5_0aE-U`eWNY1f2mGg6L&i6Piy~P$`G+bZ&e}Q3%jOwzwjtx6a#|Vi5XVWqy3lCiS z;Ad?qq5!RiU%a5sps>?b*03{l^gcKfI`_d@;-(%JeLyrh z$>)NKU%Q9DNFOe+5L~(;T>!ANX&uYCQj`^q&QUG*z9BlmoJ)Ic@_ay6 z+uy48pRu=7BMhFm)&}RRhGMgYl$NoXF>Bt8MRtMY4O_0G$K^uk9G8p4P3;#@aDikZ ziHHZ6p$d22LCt`4G3-HIHzc340?`Du-7Zl}kIOqn2bfFIxk;(hX3Vm8Aqbl*TFc)p zL6g_BX3w$Nv+Xj;8}=R@-Rt*4XRj|8SM5OemazqBqHvSFk6K~{W0?F%cbZ>Kr7(F-ciMbZm70d)44XM% z;k-q4&5+lstYIs4^x%ICItTwcap^i$xg2rrjez@atL-dJK1Y&!c{{ zHGM)&y_;?j9q?{MY5z#<4)9vgwc9FM1ge{Qtl(y~@DBW>=m2vIx*}&fkIJX06!uql zr_HBTsY3^r>)EX;YuIOW^bY(ibnd|0#7#Z2>j-tWI5D!w`gUtaLm<9=ofY084c?u1 ziVm=Mp?fXeSq0l}pQA;9ySv8O2Kh?fMEHLAsyHf#ZRmwEes) zt9!NATu&R78NOkeKX1X}w2QGXs6xXY)Y1F+i_p1`za%c*f>sXFHSR*#eK0`TL$daH zissFYeHm5Z$5;AJ^H)*DE?0Xp`x?xtVg#b+o2j+BA+1bObkE9u3W|MQ_B`bt5*@Mo z21s6B^m4!X3$?d-7)gZSn;j}VB1tWIz=L;Ef1vEFHRdVS_ARybbbC~E0Qoj{N`-9v zyQ%OyGz+xf?VXnIshO|Mq~P4yGnXkB?fa7JPwI8_%=;m9&b-IOrM-8VdHz@gJ;V}0 zVzDzzONRZ3+JW`)9yR{4YI_$xAv!?(q(^#wO6>sgvmP~mQnkJNel9vdJk=vTzo2%2 zc)CZ8f2rE)tZkKi)%l{BD}JTIhW%Pc@3G%N=N|j5xaxww#x(0VH#|er0R6k(Yx=#K z79*&9QlaN_Kr6gk(m4Nv6nm2VQFQqIr{1G|mZstNpJ9FD%Y^Y42?}pY>48Z9DygT+ z-$VzLzqcy*2ZAv0&(`wiBv6Oz_0CNlK6Cb>W%G(&|Cees?0Fr%*Z&Qjd;JA*>CULN ztq{J-rPGLV0JCDWhP&PVgUSH?-@do-KdCI@dP+Gz3rNp1rTZ?ew@YNt%S1=~))$vo ziJ5fo21vsF4LelWNRk45xw;&f+HEYc`jX#Vn+ESZT{7B4W%^Tf9laMfh0eXWnYi>M z)Y^KH-eQmPDchVT0dtFGWZ`wdinh8vu4^6|CxP zw{2+_Zf@5*Ew50s<}O<}PhI^=iG3t*FFMff&^tRj(k#&K)H^LZtC=#13o|K`X3W%r zy^Dkm+f_$Tq1~W!3hgegdNR!k6Pdz-9SilVs1*SB=vJeCs^y)!r|2-c*BaWVt79@; z><(T{tuVTGw;JuETHZIW5gkTf+pYHfsTD@|?N+1xRI8IQeAWz`Wv^3N!}izFJ755G z?tlZtbt}O=I4cyOb~}(}f%Bl=X*pQUyo(MI9k32Xp>KoFnx(8i3`tl#yhDW}Bw9EGFBbt?+o=ffqw;*!D}Xcm}`>7AB0s+mXOSkVFNO}$fi z9L)mOz}{&Yq-LJVgGC3dA-z*Llx6{ISnsq9SF=vKdETO#b8Upm^q1N?dN&^rox6FI zxOCUq+7>LPA+{O5?I7t_*=U-F17p@r+gLR(X7}<2vz~7yI)&-knKq!~WW;l8yy%F< z38428HgAzeSR0aXZ$gI(6D4V0k5aoy601kH(!{TyG}r~&fcZ1@gOg2GNyDb-=>0Jj zI`_vkaZ~%LUD+SZ`spND-%P@+1jR_3PR+pf=59B9i)wlRP81!+---@?D#G~uWp)yL zm^itmc!qd+3EJ%C!g&i8%$s8~7N#F|X3d^CZ^1lW#I#dXw_!7NbiZdoXTN8QOE+Ve ze*12g4GC#iy_8H@`~IAPuQ5NkE=H)>S^DJ^zWp-FEp{pf!?!svwf(s==)EvcbcCV? zl>B4PoC9Z#w)uzx?1GLp7D}YP;8&F9zF4?ezwGcMThR}TRIg!+b@YB%0-gKeG;vcW zlqsNqwe|zN|G=}BKJc!Km>bH&jioQ9tz}Z~@vVyv7f;9RW~GY@6`un~+Zo6L*_oYG zIZHA{Sa-oigcaA6@cPB_vkR@a*rgZRcnC?;AfVI#gcUS@o3&L*>Uht8<-%>R*1#s`jsDqhhw7Gh=~nV6p2} ztzjS6(fjoi(79i45I1#H3?im?)=m0%Ed$6`!B|srS;& zqQj+6V$SEJg-hnxEeHb6r&`NbOQ2A4e@Yjj958R8X8UNj%Xk^}56q~XBlI<0iKr0O@W)6JSUXWp_I3kGPXIpdVGbi7Ap4ZBxI@1y&m zb06I=u6mKh_b6Oz=W*|1i~Rt#0>Bc$p<`mudU6nQLdpf$G--phA{y<#SPlg1(@!i~&Kcr@W zc&ytEf25l3=i{Qo_>a-yehwdGPr!$XpR^SJRD4T!CO_4kKT}b|p48FZ{5f=X^C@v% zxf$L03u*?2r@P(om#XP*{z`Nh|1~2Cg4bQu31I8H{t;7xMucN!UFLZWu zKXI*YMi;)0(m=3(mz4*o)ZIKlbQn3X%XSA*8b%K8vhpD+_0d`{?{DYoW8KcOLsizW z!*q0C4~Nda9wDxJC78V^dj>`=H;Qm6E!`+hU$fbNPx)Q^HuQR$2hJncP1{jw?$J70 zbijNAiYqq@Cs;zlb_P@lt{p?IK=a0KH9A(c6g{3FnB~zsYqsv1f0GItcASnLx`EI+ zbc4iIF?AlH!PE*&L%P*ysA?4#m=71MadkAk^%hD3)QM}X z_*Rwl2GmJv=iPU*=m0fijkZpqBtXqvW5ro2X&tO*%$_~pW~-oKr|RgvGzU8O(p+)X zIh_fF0mU45rOl%>?AN-iJYS_nU@G@RtZ{HQ8(N^Y-eU_z2f#&L+FVR&09?{#<^N4$%Sd;x27oLTLbeXP1>PRcY%moV&Pg_AV7PY=w^AgYSmUJ$RY8 z)`xajzy0^+57~RD5jftv)&`fWMiDGt+p)H_lBa~44Zct9y+^MQ9bn(T7TcHG2dEKX zuUu<`52{A*!Cr13QhV>+4~q`4S7F;PsmVzky}&+#Gyq=RX{BoF<{s#)1R?rzK&Xf;`(ki`nYNpq3X^asB^=gkPh$L8$<{2 z8@q*J6}1BRP2FmAvudp?@J~vI_wy~H1Nf)Fz}3&nc7sS?V5=z!u%BLI#amU<+TZ0< zE1ywO!#=B{_xEkkxxd@RRnK-=-TZXHC&_sD;&y5WqC0xj_)gU>!pN)k);6xY26C5l zc^-UDbU1W(k1*Xs?QrPc9yPvCwfoAU`=!hC;{nm((C5Ka$qx_A1@;9>0{nw(toTKh zC_i{+I`+cc;ZY{ZmsH-cFYD+@@)hWuBwrOb_0Xczlpj7c{ntZB#5r5XocS7!1LfCY zE03J^OxZ(f?fw1@(Sh+{^!gQ(g-h+5@L~3mmf~-T_jo@lIuw1orRI0wL(z9zioYkm zV{B*I;xe}1SGgYS(9vW2L+Bja$HYxNCI$rY;HL|M$-v{ZoFBHk4)TxC5+EP%6Qw_v z77z9lq673#(CR;Isi4;$pkJaP0RC#775-WpJUG7*9bkWpZqG!$w%{4~F#Wrh;@^ueCvUyY zVCFKLH*>%Yex#gje^61w{-~pe z3Os-5m6E@zmAn5p(E;l3uAUiwp#8(y;7sRDEx3(;vX=>t$+3tnpKd6b2{I_qk{!eN=M(gQXSHOOmxSS#j2ip4ZVSj^` z;tj8ob)-A=`h?j3%t;@dY{RPWxTNN~HJ00D*S3qayUMa5XT=ks= z3<7>EZMW^I71np?R-+wN%bnXvbQs;))sb(LZ5L;Y znK@&@Vw*SHc2{Y`UZtb^w+D3gub;T;s{~jO7|5hHo#+dM-%Nlk-C$sQ(lUJB3--Wb zmMGhGPtU8>(8I8|=)krQD*aBT`SQqKgCuOewnK&fk|-Elk1K=Wf!J3i4ckvg55()B zb0GE?SN)xB&5jSCW`H=L+YJv?P51O5(P8{xbofe#qlX{}8;7=*A0|O_r|UlbS?=rM zDs9*iI=Zi~ht9qpDXx3I9!1T-adfvEzCktJ*JDJ7@i(HweH|=ck3|qR-qc!toCNZf z&1ogUYm4i8#A=|*8a7Br_jE9H_H>B2>WN2ddS9kg<#`0sz1@aVJCF?PQRCsN?H-R1 z9Uw-c$LFf~$J_DnVP;fI@o4e#H_gMvfG&I;BYDHd>gc|XgU-H=7gxQ^)$H2|l!no^ zE-Oz^srxcfbQqcBYM6YEx5>^HQ_~b@i&7>|dBPb%rRUDjo0bNo%RbXo-mvL9x<_w@ z&K|u*Ty@=T?LA*a!QkJZk{=d(53}%g(mhD%M469X(8QpmUh!imN7h^~M$! z;j|&sHwn>h^QawQYCUQ^U$x!o1)>AQLiD)P!$+KLix7mJ#jWK_B*=2BAi1Qttu2Va}oZh3xXQ;M2eWvIDaTa>q=`nKpYy@HFZLQ_! zNYKG)?inbYZm76n=j!NAza2U|eV(}L3pH8?L`TQZr$qp|pvMZ9tA#s%q38f}5xU&@ z`Evdp2*TFIt>u?UAm_PY7-?QO{!SG&>{1=w@pnOI$5)7}UI6as=)0*A#xGlIgZHS0 zJN91DVeE3+`g|?F-UlD5uV^WLzj(RD`m|v7qB+avR&JI4fXW(nrH<~`2cffH9}?G9 zhmzH7qx_b`cKa|b0?buCR`3zED6S{*FIP;|(!a*vp;|MnBcQ9L&*ONF=y2|%U}N$x zjkvC)!>*+?99h|A<&UYf0NtG*&zcQgr?!3(=6cZq@Z(+D`~;-|@P;lc->6b00gHB- z1jUp5t0ZsOO*(o4+zg!);FIF2iQO^2w@@Qsd}^%?R;xx4tM2@=(b3?i)!sYwR?z|W zGuXz(vO|lG{4CM{cw48H+9fSO?Gx?Sn01BX+ttQ9?herbt3k5?4Kg^h=2T z+Z*(3>1a!`h zpNOjt86P5?aCM#)Kcz)r`&o|_JgFAmYd;qqV4gx(rPmxx(QCh;Gz>r8W#wP0)Fb~Z z(P8A*UAFrTrD5c^T~>ZZrLB?IHUA>=zf+;^kJiy6{|D$C`9F%Qj!T^E?2^9+A+{KQ zqGe!ww%3aOtd`yre-Rzv{)$fDJ3e^(Li-znu=)4a@_$IsJZ*Dfzlg*?Ri<00b@WL5 z3pz*Qd2!VX*qvS1?-+%D(<%_X&?_bXQ7ezYe?mdTR_o~gZv>tF-&kCA4En`-wn<#i>*)I?v3TngIkLZBiqo9(`ju~J+rh38&?{7`xN|SC z@9TKA&nqQv*!DVl$ajFwA>UD4RVm)FQz))8?L=uH*tyHfyQtJdxvS_fvRjw!cBeFq zysFE}d#Kby*-vyB*|W=bdr=xjUfpHoy;a&A%k+wseI#z!YjpHjz7{&ivcI@$EIGr! zQJ)q1wA;Rv27>*%to%BadMx)B9YzLp+3o;J!^nYMRz66j9?OG8hmk|NYyYMRnhDEYaJ? z;6vM~EyZ)h3wh8Zca%h)<(7?Y)iPOp!4Sw z7SJ+KE$p?TMQZ7RSS&igE$Ow+(`Xsstk;T`s-@@RGSLC9j?Vp?M}Jq5EAGZPomK(t zj9w`@Q?1nFyga|m)fr2d*d~J-l3yM`(o%E?MuW>Ju0G2 z#0ZdIlOa$ZO_C_RDxi6<`c6~?!b{g(evTRA1++^;#&Kl)O&0{Bs$#uFor$0OBLIz5CpJ~w3c5jfnv+M zrHYAtLH$g-M#6@DR7Vfywa_`3E5%hWXOmPOH{#fCAEQQ?y>6`yu2&6r>Eoiq*e7V~ zgK5E;b_0Bb`|KaLUr_D+zFk7ahJI2_1_gKL_ zYEf+Odh?rAM?m*VpNH^1(c#?vV5?jWz&Qps>(nZHfYNZ}^IcZ{f=au8{?TmcLACYu z|BIpn;Fr3z`DIE2;8(h={8g2fBRpk5>iw@ts2A+(=)M0Cbng9ch^vn9j=_DH8iC=P zYi;m|Y7~L$&JR`{4Sq}Qy*D2f9bmtW?H!A`T^-o5>366QSicKf`E#I-4Zf!u>w@+B zYVRHU1JQx?hikR{7&QXykJj4Yan(=FaHEO_wrB0RmV8v z*vB~E9Ru?-S_HT!d#vE+YT>>3l;{BS3v~HBzi^H{4Iid{*;4!~@y%ZAnt96YU#p~H zztPdX{w;L&`WbQ6vl6`S?2>s$?|(7x2oxXrSc>5fC7D3qj zb8GouBv2f~_PARI`{1DqC#q_?Cdkr4t&z#iDZn8%vKzY7^1n#LK&l zWm9T~6Pv+$h!>nwZpFRluVGr!iL7W>Q{s2RX^>~_PQRI~fNx@G`7OON;J zE~3MUUAuv0MM}-xs2NV|-tC63Qq6U9q5!am^mvN&6CF<7Z}iWAwq2HtY}`JuZhr=eQgut~!3$buwEK z5BBS9b<>@+b~rTyz!BYU_|T~EK0_}h z=8jly9=12Cq+!SE=w7}FI(vDXxa##<)@$Fjd^~$NkXm7WP`4TlRxS5#i0Cjnl=kl3 z@F_M7KGY9yDIOud$vbX+P2P=EiLU?a=-!Qj&fbj{SM|xCW93D=i zW$LcP?}e?>uqU=X@iaHA(`={54iwpb`(?LeZgok*i?a zFvS)-TU>uw;%rfRnph8>i4HYOsaSayIWR7B6@|w78Y`Zz5(S5)qX7u( zOdUN!XF=x(oh`1~b*-m9f#z-0jEJ4n?S>82^a!3SI*h*^9iD&-r`UP$VdDIj;tRyf zO=4BJslS09A=zT54SBO_2IrU#+ zvzIQd>mR1$F1G=TPn|o*-mf|h`+$xf&?}*HKtCvM>Kmn@+%&f)j`R6OD?ckBvVN-2 zZXZHTApLOPXuV2mJmen{9k8#)K>i1Th5bg%v1jtkI zr(GY%W_bCD{{sj&$fozojiMtUt3cyt`%9M2vzrhE+M8R;KPiEFgvUU0j}ZDIcW+T? z!#<^>$A2|+j{m2{RsTk?%Q!dZ>#Z~mV4vx|rq8OWN8>ip0k0jUzCWI~NGWUKI|nyS52xsbfA^`dVfX9kv3&qK$M*B$ zx>``k^t;>>Kc*>fx5+Z;DsYxR{=U#vhR`UNS>J&@He>RNk;}>F9BL z6gtQ4+v2LPV_<>e{Di#}_XjYKvLj^Z`(i~I^8_(!x9^}K0DgC!6@E_|JkZ}49bkWe zZXd66$Iq}IA_&`$wU+-#0uS@!qC?e>TdO{SAXNRNwfv_ND9|ikOP9=^Ju99+O7n1f z)beMlqqj!u=)wLubPo1Y;->OPO6B6!;VDXAtUA56McAv`TTj)z)Y&i4A3i+&BAffA z^m|ABN_05-Yb<+5&0jLteuE&8{T9|o%>0E1&b4PG@t*pf=+O0h>XrinReyjFRex+L z{*!q16aV{J^i#ThxmYV_>)!-s*|VzAus`eQz4RC8+)IBIH?=K#sY9H*>?HOWL1I|ohw zg%3^tYbjn&6RkRjn}*BI@qfoiP&x zu0XnRAFAF&x;*kP7ab04ij^FBCG%zo0>$R765usM?CE9(ifn8a^~_(^9;x zctxJ;`{netNPjuFous-FtfL3~mC!lh+l#CIQb95^^A}gIcAzv&?$~AJomA>U*;#ZL z*@bq#;>}-VyTXUs-CBxw7hmSkve~>`XNF#;JbS<#9)6!U(_W?GhV7xFyVMUlyR@gc zq+N6HgSXmV&K4)TuXeU5-CL}K-bZw(c};W0*E(CM>F;czW?!+LK%O~!!P0s4rM91n z8}>RK9rFIr8S(&e)xWCe7ZnzQ>MvwBF)8`nlQO*Iskl;~75cQ>0jP@D9@ux950WYm z)xn|z{vjAC`}e_H2iu|Wf#I;0;={#z${!&*6urKs=8^EB=%|+Bqs1%gtOV6WId#Td zo4si6Y~4rq2GwZTF*N^M6_T*_>wBP-e&Q5JSwFAltJ!;&h+8(+Iq65T4SIbUq zludHB7~YeeElQ_|EfYLt~ zy^G{8zol{(!azozeo^rXjC8i=9rh^p7F0%HPV9RNZ&K5WI1Sw$Lm&1`^xyGLH z1=+8pajHgxjy?7^REJOJym*!xQe8x+aw)L)J=uL1&y`{C;kS#9xSof%emXdl&N?4S zgyVt^6_!g6|BRAIwDsG~>tL(nT`JV)uF#%>&y*$_-96EdY32{C0wE5Y+8)zQjZd^BQ ztJK`Xa+BzQc{7SVgr_c32tSD=EZ@?h!lxwZEG+3Kh}9}=*r#>$u-por!}1w%)t_(H zI>eTjGp5g=B*H5DENTMeZGEG)U1~f`w~G$gcVNK7r2iAY&F(}J2=3}o;d7EGO#EtC z&P3dMQ2gcd-70I?Jvw@n?uE`#x=&nn3+z`e7!B+!H3C5TZ+FeUV-2ZK4r%jG5C(;4g0Q+9)s^e z=NNonT=ll-j=uhY8e#Z{Yi;nDY7~oPckcP_Xz)jB?=g8?bb$TwT5Uf;jR5+OEl~Z*c~xiJI406vzHqc{3?HU8X(@iWcsb4mn{vupGH=nc^4TrhRHY5u zOh@;8bLi~(7UHUFy02Dv>OW*L23YIU#S2b05U{3Gfr{<6C29iWR(+#&YpL-VZ6i8h zZ;OF^TDe3Q!x034SG1PDQiA66m|0)qLE2u04ckFS57Lg%IY>K+tN!-C)*ulr0@ZFi z(=>4H(tAz2s;LKKH_-uaca-LY(N%Q#u(`+otL?f2qo}%XAlSR&XV<8ppdg^2pkl#- z2v{hJ6$43tKnT2KMbxn&DvDUJSFE5$MU1`o-uq|oz4!L{JLkS~XSO6e8-IW7+j)2H zJ@>xz>dwx*$vRzuJgA5*ZYuF8J8nzCe+uj4Tx2#t>Y3P($AO7X$c>6^FgOE+o0%sc~KaI9fC32w$q2OjK3N+Tf+2{K~U_;{nP@LjnRWWk7*%~LnBQMn_ zc+^+CZvzcnsz>Sx?a$*t=yu4B8d??#%2vfOhW*UHJAti?t&4I`vzbu77GEPO`{nEIqt+p>T7l|k3-E4K`!1^I8N}AH)~MF3VhocWGFQ?!aa&M z+!LCfioI~G&i5vU9~Y-KnqkbVi{V+PM<9B2(&7l-&7}Ih!4uc4ctyC6jys>i3r0Rw#^?1f{ zI!5~QB6BX}GLI}*A0dWSuf-m&o{(d3tl=F? z&?U?4VB0vRVTw7967@PGN8xx#K*tI&avh+ty3&#{6Q^)t8L21ZL>>n+PC{knO2|i^<^lD)%Z1hxf zF0>kI4_b@%#0dW zCg5!ET!gSw$P~u*P;kEY5%|fDs}*_exBsopL6v>W|DKXT$XpJ$HdNL)Zq9mek+}l0 zOzoi()|EJRVXY1Y*z6ojw5NbD>tD%yqJx*ZfZApW(}#o4XI$`BsZjj{U-k%3e6$54#2`6>x;}S5M^p#5ns3B z*cBf~Y@hkA3bSiUb(q_rWs6#r`t8ul)P5qa?!d8g{2G>Ef|EabLmAOfWeUK+~DpB!I5M9MY_n`3sI(ai8VO}-iKpX@Xk07h=M+e z&0c)HxgSQB=&nWD*s=2g*kx+h6vq$Z*g1B6k^PGJY&Tk|4?)lR%2Ja-5URHB9~S6M z1^N+%W|{H7;3D&AfN3pck84Mn#{_pP!F^nDTLVd6xp<;z=SjOK#rbaH{3&(btE}aU zB9UwizHzW53(V6Y2$F)ouojtTAj;J4Blyqa*wu#{wOJ2-=q1Ul8#}B$7ob{IeO_FQ z5f?A0i?L-=1m9fQJQ#6&wC1_yZWTxi&Wjwq85MhjA8GjQyJnMlF+{o;Jl2itfs5fU zL6)hVEFry&V^``up#aM_K;3Sp-9aPj{d zj-CIVp#eXnyvp$9NLju39%k`T|75Z~4i4=EE;asXPch}!^vD?cR0`yodD zc;A6POBffKLwfY;*>hr@d6!bIF=YYmrSCzSsl7ttd>_ZI@&=ZL#=}aWuU2UEO?{qI zXJxX(Hkl6qYr}EV2^k8gq^^){v-uFVnc5pAypJ@z#?;}>fE(5_eV2UotjT;F%Ca0n z;5|4Ea>WnVgUly5m#Mu=V*M1yj!HMo`%c8^NN=M3Ea0&}j~Fl=zezq9oW}&`3&n9m z6LCl$M=)ZsP<9miGGK8)95DvB1Aiq@FA3DwIZ&jX=KM~E^-X|k52%3y%(nvct^j@4 zDv-wXeG+Jl`9Xlb6rdk-fPBlyjp(NY(9i+qX94fFI1ew~k1neIi zJFpckSTd5b^}TW4)9r9NQ@gQ1wa0NTl*Un>4@ysW5U4E#YB7a!lQ{bsn!g}BHA(% z!7zznS&d*>TNiA%v+==ye!*+bspW&GoKq_ZdbOahsOYXL$%$NI#P>O7rQjj&>6L?* zyr)+YPlt)8jyaw<3$vzWrDayl_LMyRpKMRb)2oT6Q^eEi>Zzk;jK9oTzkW@3o>?P! zE1+_QSu=PnsIr!Ly+pjOtzKQ-vYveTv_-EIJh!N}Zt&is+IkYfO%g$cMu7gyA%J!1 z`v<>SelAM6^lLWjhe(Q2-ylR(l=_Ae*~1c9CylJ9jm&eyxt`p#9BJneX-VcAg~&@X z-&jgw-(KHEOVU?M!YP(x2f5`?!E}(`v&+;)lqNj$X6cM zJUnjQNw?snWQgt(l70L7W*Sl#8xqG~mYE^3M*UicHA{xTMDG%uP>0wQn@< zrKtTZYNBoM@=$SZHVpg3TZos%u#|~RZ}sB(6G2HKuZnPNkoZlX0Meq`mIA$! zKyQ@;%|=aVev=-qqMA+LZ0PuFy2+eX>nG6b2=vwp-OX~tRz`Nc3*YLU+DFewbRU4UW*^0D~s1*wl9?T`X##{|+&KpG%OI||ZHid3O7 z#fv)!aqV0I5aNhII8J6POQi<=?p#uY!lW@bB;{)BIqq}dEjpz(FKdkET8 zLEAG2jV+wB08w+%_DZ1fJ+XTWS|n)06s=SKs>wwho5HJkluB1^WSO%9MK?OQbu)F@pseN^h= zpb%9-m4ibR1yx3iSNnR%L)5E_dakQ{PD|`jxlvSxC|rl|CZcM_2)upK;#h@uK8x`K^Qins19j`OlP|4GW z3RGu-nwA5_QENUvv+-#*hh;-0Pfr)9Ed}cE9H``V;v=%5lBbUps6hf1DO7BEK>mEY zXLJk9Q30|=wW9_4K!H9+p?Mw6zX|8qfE1S=Cx+w2aE2PXcF4(ygtIKtQ$m<7A)KHg9E8~6juRB8JkE!#f6j@d$xmPm$2U8M$J+DyLM7)Q^YT<2qTj zR|ac_gvDd&CdUQG zfNU4GkzbqbBA@DPiRLWe>4*gE_SCJh03wjP3t z+&q{7#onL~3Fui8-NOo+?@9+ie6;M90?5&q9+;tb+h!gKUgUpS*$(qjab&l!d`unH zSSJ1S@1tk^5|4d`wD{SH{iW2cDjyF~ap>W8kWWZVc3a0MH757RT#LSw1%4_(v%ksS zicbr+-PZ6K#V%0oEWec9Jez=$-3Ff%D7(|&^9t45QpbvCcV!p$S83R)SuMU1@Eqx6 zi*GhB1Q#TN`|Q0a9_;pZFR6!N)heX5BCa1 zGKsRqh{(JuLD}8hUeloVutDX(wipzN@Fej&IUBql0{VXde?yAVZavN)|J7n_R|>Z* zG{d*`_+|(@512HC7CA|Ry(M9;EMdN_VY+FUe6a!9{{2pH%%KTedc7;g>x%JvYRt3P zgX?{-Udy9Q?Ixo4f$H_QTySb;%VFpDO{>U#uRioHT#P@>|{QoP#Tr2HLx|+ z$Krn*@&8Hj{`rH8z0ADLIW_rB=BXQj$Z}eZn*JVdVD{D&PI8f&F=|(*-GON!MEF7{FxpFlx@Hv#qPM!4#&xR4Ez{JIyh*udc)$yw1>Xl zV}Lyn$_32sX3#;w+^?KMGi@&LVhLdEDX_Qz+bsf?P+<4_Ef-+P08mh6DXPfmR#0VW z@oJxKUq-!lvi*a@Et?>_0eQ)dV%ZQydzj$ny5$7WJ~O_&0y=&Q^`~6m6%xRBa(hJq zw$EU%q`)px-yuDa|JIsZIRS_#qE`{Xr7Ae4h6 zVzXH_c##nZ4^{m~+^i~YR#P`_1?gK~K{xbASIuVi0L>AmZY-X?T0^kc7wk0^+ufWx z17<7&A?D*Ft4ChkN%qXO0xlO;_PN)!1-QEaucN?jY3gU+dB7sk1h>=Dx&e#D=L4bZ z3DP!#RG~!HqEdnG}v zAisj3Q*lB--?YeEx%gw5{zqv1rmQBj9ks}yee7`iqKtNcRz`xtKJATWM`R;20I5E`wG)BZnfd&p zBb|LM?mg5ndqa=WGbIG|-_%8SMeB7-xGT8=1Y3Drb8WC>>|RXriGEPmeGHCaysWXOr;)fcj}> zB*b{=7iogDeMLM<#GbVMkZYZ^{i&sq9#E9gfzXPPb`Y|WIT)#uHkv@`NIQfk8cJn) zgfTDyY5Y@29s|d7gkvF!Ocl}uVbvn85wRz19CD*7v~S481#|(wQs-F2e$r&dQ&S_I zz$~W#*Qw%$YE%oY7-dblJT*1; znME6(0L>V!Cn6h}laMN{vj|o?ttZo5Lp!BZG_Dp#>h#wcR=jaLK zTIc9VYH5H^6=n1^v|=1RgKT7;MXDSy)<-#`^KE@f$S z-Sb-rBl8{71exE9_y-YtGJiy_L^6M(sRsRX=}5o8G)CsH$VTQjq)O)RL@$oaKd7p4 z{aL)_Ur=>}9onRy4*!M}n@%E4u=$UO%QlQh*$%l9*=$c!jk>&aqz*8RvAGzsky#w6 zvbhA&i(_+1s%l(I6>qsTRKX^HU2<4tFJA_t$Sg~Ya)=u;lg)A>S{`YF-4#Tlj9QmxxW&|Z!eR+Z&s#-2ER&bfR3<;ak(n8*kBT=a=98od2P=92=x(U zN0rs(SEreVwnk|vYr@QRe~{_A|5^}6W^JSiO4kwbx*{%jl&*(dI!Y^Op>eOD8ejuh z#3A%6Ql`FHx+R=5tlnoyCav5 z)6Hn1f%ixa&=VFhPJ1C6nazr>nd|Q0(RKG-AdJkeNE2)h6!C5%E_ZAWLM|PfyVFAB9-JCr2rOc3 z4n;OHdmvRd_ata~GWMdGhPHQUD8pdpx;rU#-F-Nukr{zB!Rbg5?<3-J$LYSvrQ>uI zEi~}`QUmM{ix{T|ARCzjkt(ML5i~ug2h&VL8(kX8Auw~@y)lFTfRM%hlt>d~jumm0 zh|3+B)yVmah4H2QvFPf&Xv?lIe|Y8X`ZcuH=*P7QY&@)EBu_vVFN{K}Bu}J+ehA%7 z{r-nXOVMWa=t+dokn7rxI2jObi~#v=jHrh&GE7Z>@a5y0}V@d>RWR60bsDq>FGDsmmm^h5uOMi8O0T4uhIUnHC|ASGjS-~OjS=%9jm!e12~MvO@wFl@ zcbr~_TslshXrX~$pBmr>Sj0HJ5!uKrM5>(LM9}n{E~1%+c5`Vc%`kI)zHxlU+=6Um zZbh0P^EMIRF5+@W<{ijolgYcExGvAv_nXX}w9ts}N)2!~EMjEdgKT8(MXF@pN6^?m zhV1h#MU~a}@29zj_(0px9)!6Y13<1D10I4fG7lq7Q2dC99~E)Aqxdo8(oy_4Ej0co zQUg2*ix|aEAsd;ekt)T{5VUlPpQX8m_*~o2o`<;`6G*We6JCHcGA|-caQu>pUlwt> z#47t%ys{4L`DiMZU=#Xrckjl!}{iGsCbwoP@? z9tg2IDMvOk9gu3BEJi17uam_Iqjj>xzk|9YVBFZ$P}yjfLKg4+LYkF415v0_O5uG88%tlBPoNg@QE+Y1vc1127r<>41 z1K%_?KsQ*#IPH!s-UEhIIqgBv^qlsjnTFP@G?dL@=9($~6~*g2Ce&A%Eg-}eb42Wb zPCULoV@w~BZHY8N^Hw76D`HP`Kjh-Q|KwP|+4(oG6mFk?cTq4Q0o4)&rpKnkLzD-F+uWBeOHo1ZTU5cvlg7&ITe^ z9A~>xQv)4TwBhd1jBz#?*~kn*s+g&#z*1I_2<1Ij?6Hm z3DSm(c!Y>OX(N#{)+93yQ%WFxabQYGyGf)!8NfmGK}4oYWzFw{XB zpH!)vFgb&5wnjq|nM05!_^K4~7!iBE#v&KLw~K!ga60zWGH(lNGF8;l0IQ2Ks)1IF zr*X(eW;{~mX##;__jYA_mxXMyQ`XW%Lz$Q!VG>Nhm)uw?e7UY!2RUBwg*3rhy@;oX z*t0ejxz<@T)Y4EJiZW`1R*ba_vXMCysj@bWK&W+ z$Q+3@L0cr^qeSd!I~uvxX*-5m8tbt|865|$7;Q6k!88<}}XmBq^ln2yEEX`&%rksjenn7GdCSadV% zRX7outC1#XoG;=9BK9<1gIv7x=B<8nEwwb(>zKu-xE9<5%@}>xBO93;kScvQBA1fB zg*4HSZc2}^2qvJf1IlqYZ}qzw`N%X=DlhvRJHFCXj^)H#Z>sQ^+ATOEBju#(n#S&p z_1(>capN1!trV}q0Tgcq#1o};)sq`XH%xD6tgdS?w+ZI$NNr7Ezf3b>ths|W6|g~P z5H4Gv zam;wA_JlWNT`+!3{D|>b9f**vqgdR`*-?AKcv?*zB`e}6JYzgp`(m z)$yXzN4KzpSB%%SztI^@kXha^-m0TTU*)>cxL|xyhtgmmllw&Bb{~1jg+j(x I#<%|B1_C3*hX4Qo diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ccp_IN.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ccp_IN.dat deleted file mode 100644 index 78f88294286e8247d4efb9cd2b1a56f50a0dfe30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 632 zcmY+C*=`gu5JiUolYJ*)-vfj#EPsI_@$5Itao0o^ZFgTUphhZ*Pp8HMt(ixkTenvK zSz}Dj)#hX}X*+9L(yqY`HI=uuz5ezcYie5_nPPOgi;fa*GHxv#CR`VDE$B95sx~C< zr-{yloUqQ=Q0qdHjjk84$=Fi60$P`{?oF1IAz_=bQ4R#rOi|ai+c^*Zf(J7mlad0^;YDaSZ?gHsq7rl{6hm0e&B{VxvdM+g#GwxL8DVu-ngmJ3& zBrX(xMNy~0Uv+K5UB*4NFT5e^ylKb8_Zbh=kqF5;3faw^9kqvyN7d9*v?7keW5yG8 zASPR4q+o|pdCGXEPM4Ju+|p{EGhWpGMrSZyW_igtQzy&5%5~qCXj;5tyk0H%f3P=< z^SZ^=I&T^87JYQS?}}`9Re#U;P{*#gaj9?3pclP-WL(q_BA1g3IBJ`OPmIs%SQ_+X TQirCZC3 diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ce.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ce.dat deleted file mode 100644 index ea7258217f07a4627996c57dd415e1d03c48c574..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138778 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 OIZH|MJP<0CzW)RBa{KQ9 diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ce_RU.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ce_RU.dat deleted file mode 100644 index 4968d93357ec341cd9261a72a0cfa5bac1bf64a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 626 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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/cgg.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/cgg.dat deleted file mode 100644 index c1c02be4a81961ba719159cd3d842440d5c4bcbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16228 zcmaJ|2Ye$(_4bvtOYe;Yr(E#CC3h*LQG#sA%lN(by?Hb9=1twvm780pqigJ-j*gDS zaN1k+Cxe>VG`0o&^z5wJJa#asrNvmh#mSja>SoLIlsDxso?~U(h7>Bti~csVb;ng^ zzst@3nmcUx=76ySkz4#luNj05bKux!utCEdG`0yu!))8JW)2?PMjfv)>rXBQQPUi9 zxjA%fKgjlZi?MGG%Wt~c9KL3bm^)(49O-8ea)4T# zX2pZ%bahQe;wjkk%o$c*FlTC4WF)BjjbOzy+bvKsXC;l9Wn&&>rDfBl-h=wA-)II6 z&+M>B#XMMRR`Kc~>b2r^X6k5Iu;7`8SdFULsZ}UNK{FOq;cP1(Hs@%2t(Q{LN1P;n@1%TKp4R5CS&CTrd#`tIU2RV^jPs8lhv;1hANbE zR$4H<)(9L{X8`nBdC~N*8}S1(V8tb~M?1P3VH@nDi}MyJn?Va;#H|KsoGDnKVv4p{ z#BJR(B`d9(AuEkFF85mLs43gZgw1H#gR3i6K5nW>OU08It{%4X2{V#3NrF}1jHomNh|C(k5ge~IY6a7D;zLWV~28R1^YtrQ6>U8 zFw+*yo0`UdZYn_RVT@0)T5-G(8{cXSni;j(GZ!rSX4VP|W=_4I_v*gHF}gRfK+(*n z+HmKB6_(7R)ea@BPq7p07ATvB#+ud%v4-Y_78y26V_Q+_9*lcqtZc-{*s*lbhPwJo z@je8-iLBDNX=+&&FIYlozzwklCd|IEW03nkT`=MM3xQcyoovorVTVOL3uo6oj?onh z?J=twpM5LAR1E(;-iq_)3EG0Jk0?h5w4h~?f_b9GP&TY1{2_mmm6yzwW5@q@J*?Wa zXRfkp6XwZww!pAmv6IVF6v_3Nr)szjEG+v7x2vr*XV$dcIrMI*GvYNC=rh-1`ZFw0G0)U$SAr#fh2!>FR$evF*81d{bHPfu#7=yUBE19Vxpq** zGt_^cmF_Xm*Ffk+^#gOA73R$gwCx*uuoqqn7QF`A@tq?2(g7q>810Zd9NzV{Wn?|sd5g8nGBGsXYQ96XMQPg!}{K|^Q&9CogE$~(_2g5VJ zu}Tx>w>re~-YTXTOpL^Sr`TY|{9cU#SHc`qm#Ndc*Ce5w& zpx5LEO13y~T(*+t8DcQN!Y})!P$47xr}+x#^y%qP4sc+P97vjnhC!P4lT+t4(09(J9;_Rp+j;U>C-lrf7g{a!it71k3lRCcI9}N zZLgd_+BQpYzQC@-mlGXcmXk>HcvSE(_u}ltC0b5)8Wni}X&xfs(q@FC8pfZT;uNZK zDrxmO%EwIdK!*)Wr^`(9H~_%0a+*^Zk<&@@@XE^9f_;7@XE=CN&Lo}K_HY2(?yxaA z%VGW%0s8tu4jY#)(liSvWALrQnL8XjArB_4UI|w**Qi$>lH$dT>?F;ODth&R8$&tU zp*?aAY5J@f#E23fQ#|bNavC|=O`6p%de~-oa<0RAdh{Da*=}vr6L*aCciRIA_8q6G-#q4GZFRqL+9uk(N^_$P-Dki*Wx0 zHzW9;xm(Ziaf(%6Y@;b z+P%xTr?FGyvr@d;BhMzS*B4PeEF`nG&pt8K2G)JiO;;yQPI={l{ROL3(JkFv9nCEIx`a7JF2 zqQeU~fOD>Wy+ixt4WwD@FfNlZ1HI8<6?qeB`UO|DyfczFJ8)dyl7hqR2XysY9XKIx zBh3*xyo#N->*lwoDkB+r2WeJ%1pBWAHtC%X?U8qpJ{hQ;HbyX9u;r)gl3N6}FvNb%#GL{n{pv#A@3Ica2S}g(zq6(u z`k>2Kln;^S#5RJ}kayvn96sz6hUHGu^zVq*h&>F%kEGyeuY8m=Lw6M0YJ1-6#bCwc z`7x(ek&lzs8A0#WRq#Z$0^LpcS*C&RN%~FXZr6sm4C)Gcth?cois4Lf0JK0 zg-CwcW+007UPFGB;<(}absG+p=Wh9p!$p4Eh9?(-^1Bp=$A3>cY2X~<#*;rdG>|{G zqXBpCe{yIne$!lYf#<3ZM6^WB%pvee!S8NmR~zn415Sf(v!&Ky;=xTSzZ?WD})~ zTP&xWNhhU)#m$UtN#S}VTS+JVR>#Lq_4|HKVMX?D%g?|>>>rTA4POpygB$)5HVtx+ zgBN8R>7-Y1$AzFdI7OE{IfQgl_!6&eJ$$@6)F~{=VQtx$uYB%S&k!}bUNGP0wC4$^)H(NM~DqEUXyv za#{+<3vxQ?q;i1ujB|#=Mb2!?em0g+T-k0<;eCOeMVea+1T-#_-170DRA(iWt~L{3 z@c~D6r10vTJh%;>os8cW&W0dXe<8?m@6wFq9Ee)7E7gpqad3oq zw~EiDm{TS{l20yqO)MjgNX}F6e1i1uGA6spng@qppuj_sc4;a2S_5Duk_#cqZ&Gb6 zHLwM#TtuO@PZNHlHi@fMY0AX}_S3FO0f2G|#rww^F{_v%^lgBL%3cbfB@aWY-O`5v_@^D2Sks@`!=_SY`6}gNECzU!bismADlu9#5yHw2A2VPUURotUu28=f~CAgTy zHC9csisgu*gQAbU{4j!Kd2Hp}JWsA50AbUu{cFSI{vF`ABmsE>rpGNsaKr1U42l#V@80|zgX=@p;M7G(-DLuRWo8JQ)s-@MB9pVv$W*gpr( zD`sD_RAi2d+cZ~60x}0HQ`wk4}bSv*f`6?A|vk7urQ9$ydFCs4d8nVwy^wkWmli%M8-(r|qu#aohvgktpI zlPKG215H&KuAy8>aT3K4r{Q`P#P<^zPlmW9PeIxq7*AE{)kx8ldF{du?Wnx0L6`(f zS*{_o*(z+A*ABG-Qk827*#Kd`atSoJ48;5#$U|aG6q_oEMCqG)MW;)N6 z7c$%CHqm+VB8s-OiO!enDcag5x{w7+;f1I82ANNL~SPOKwA|GZ_}i^;PSYirtRXHen`ST$DS&CXd~y9Bs=Y#jS@w zWEbCU@+xTTxJq8FxnHBX>EdK@me)d}yNVqC+u2#`Ea1P+6?q-yT~0zZEJlt_!eV3*x%GjhPbjZwK9ycOXs7vz=-l?Rh5^)jIpR&AO}kyPyH%oGGHY z5Zj7(GfQIoJ)m3iUZm}|Yr6`CT`TfFDz@8(Uv|+i`iEY5KQwTN)K1myhV^PBA5gm= zq+RuycIt;{FDdxLs&FS2tk1Z;>hHg_UcWSoI#=hd>4Py?B4_3lJ6r;n#A~@Lj-hs@&oFrCBE_8-ZkgCzH@t* zhrakB6cV%jb@>t1=^|Z#`*GU5ixPH;ZXVJie+)rOeu6Y9k{ggg`6>0<>OF`8eg;`m zK%pi-r$*8hcY|)pFOViixab#l)#R5{QZw8$V4&zY!Jv^}0f8}9%+=)AR7|Y>26Rh) zi?q!Pn6YT^chqb1LNYzA+xLn2o)3%4DPe4h$v}WiA_-aXA>!iU&#;q|A01m5+%oTRXDb!EQo(j4p4@8=nO`~X64VF8p zsh0T_WxYSrVToc`?bD#<3cx5jo!OEC&H&w#Gm*B{8~urucRSV8`o_?w$+LjLB>lVs z?V3D@%3R1bv?xPMx+qKv+5x&H4@R04MCYdCVJC`v2$i)sek)jS%zA8b=fc8wLbI*# zf}G8)Njc|$#ytnpq?|O=QN(WQX%Y7s8MJyXz|>27_wJSRsGJx*A9PDDK-%UdD8c4K zsn+HtNZrolLSSh{A>S((Q8}@BG3b_Dg0!uo)Pm7Vsn=Ffik;Pm0Zf;?0B@%Rzh!V& zBo9}sk3g!M!$w@k9r8E5Q1XZLOy1fn6hB>qfrg%rqh^xt`#6iMU%j!zqTIm_(V=GD2)q ze(Rcy65|XyBi^(HS$uwTe)F1)ry2b#mMk^_Nm0vD(PA9QqgBLF7ER+uSsuge3@OHM z>by(suJ>|a^NE)p3%VtfNZVrT&f9kH-d&Z)QIBq!-{21qk~Nv4oKBd(7EaS-O{U4S z$%VVO;NP0mDA0DQ4}7xPGE{C&X2@z|=C%IwX{}@ZdhUV(A86a|8fTHKC38r%aZU@5 zYjD38C_0a{OM5Vr!(9h;8K>Dm@Uw-^RetqLJ{T<$!~Y$bQby`z^caYXXK3+7C10_5 z(r{|SSqaH-VaxJWjB3RZ?zrsFRAedD?e5QtA!EzN6@vcOpxZ;){5B^}aiCYCRIwND zQ21K`{Wht;`H-el937IF3@eET1y(EheTD2x)p~ILTqeV@>ndq~K_OQ-t!%HXq{iAx z)gL{`s#ELlmB-(Yn*Izzp5WAqTEpIz{^2?(Ye+sR=eeCWVmW~qg!c> zFZuN$zdYUP4VUE^WVnEj$M{4KvHT8kD+~o8M zz4GEzudQx*JduXyUXtn!mb3CwGTPL1JmSGE?pr*0nNzC_%FSdr9}b50M?d-yIFwtQ z(s)*GC8NW}#gKiy`|?z)fWh?&GFl=ZAJy4XKIFx>zT2EyUq)U@h7(1GmCWFhYcQ!sX={YC+~7PJ!N?}nfo{gZ|C^z7m2*b>1O-n zy<}_@r1MSkjP8BwYD4mVGW6m4z*aT+fYa(9k`I!h58Jf3sp?E#&wa=#NoOk2=+ARz5~%CsecHlyz~%yPpSZ8hRJG(EIqh ziK2Xh3~vqpw+Z=VnyFgM%BRR^2)IGUS6F!DDxY?G6BYRk8Ft2orc}8$^TE?+Q{Cad zG5H)BhRX)sYW+mDeo8Ga$O_hi zXlW6b>vrq+Gu8MxHF#v?CEnyr;4k9V{ceSRfz<8_`5Ne#D*F}H^+b&oPkybk-%!TU zrQd+%w<`Qys>lz}@_Uv2finD$vR34eD*6*eyiTGT#eY`uUnu4dA0qoHK>n)0Jp@?( z9OintS7m>rjAspOpJE)_{;tx0q|(Tr#;?8PpDO(q(pclZ?t2mTpm_Dw#4#?y4=N)0 Lx9a?dI_LZ!TlYL*!Z=gx7K*luE9Mumb0Bq^v~~DQJZool#(lLa+GnO@nG&SanhTKpofgH zT9dlpCOH#J#wue?tqRFDxlX`3V?%8V@GckKnIe%fW0SE}!)}Rw>Bba;ZN^TmoFR&h z&c&pH-5=wuwj|(B8%f`^DHw^}W9+L9p~VH#Gb!VMaadWPV*ars#s;Q%7MI40Zj2CK8Otw#nqMZ)P zOU5g8vZ(aYE$rcxaaQ{qoY4fC$w-s}Iq=j=VZEA#!&|NPH`%*>tho;!2qw3$2i?)wg1 zl{Ac9`22>3hMq!urYGB)>qrh+_#D>TyO12Z@FwoF^L=WM@r z#{6zg^pIRAI0P)tCADP&Rmt8Gmm#s=( zZav8KC9i1yzyrmMb+5O8d@kR4Uh>MzlUJ=uUOjf<;RLm1IofP8hIGbc2@1W*$nj$@!J`3z7>KzC`Wi?IY#KM#@{q zj0_Hq3_dwhet4vOcXDBc?4snNg)gm;4Q?ALUp-QO$SI#185|xN+?HHip}aJ?q;kW1 zN6KYmGeDNf>%INF^O8#!o@$&P94T)!@a{1q8oX%eIlh117U)=RTo=xipzrksc?ZBHEF`t;r;BKmWXB^1@d>dv^&)XKhM_`qE_T z!WW2I)4qD7yk(@kCzjDoCe0PtvyAFs*vty- zqGZ;>vnn006GqKM9dysx74W6WWijeHuym%pcVuv{RCkS>*TROweSUo_$(u?dM&1e)4wjwhK}GQ`x_xLUKWJ z`NCI>>efL*duN6CqNKGlQO{y%2T#L6$iq}-b@TBhpP6{V=94vS_F#>TW>2!xo12p>Ynuo6tC_0%Zf~BItg7Qo1KFFr$J;JT-doXn z#uu6ydrpmgB6*)T&q=PT+UoswS51$Y4>-l#(YWJG^xR(9qZEvg7f*YN7 zak4JNQyw(IGxiN6gVsF0F)1&6l_>(f1YLwirwJN-bfiqJ;(T#l4++9-+*PBAgrSP}OcYrB7BkpJyZZuRC#$tKI6M#?vg zNC6ITNIOQ#Hzk|BeR8s;0>55xIw1W!l-%acQ&&2(W8N-l#`>Vf1AZ=RamS?M~t zQztV^D-hNi~k zNpH|>v*YWNr@Wyl*}w2KlMfA=TDoq`SW_B`YT%56Y~g7KO-SCq@T7`RrJ_5>jN?cc z$fyi=(rl9hPB$re#-mfc$0qGin&L@>+sx#4Bp-0p0y0(%^M;i`K4jBGsWI=_lzhzTrzan;=m@(-)in3Ta3yWR*SopgojwlmX=JLp}00B-*EB;$u}#5 zrx8-j)V6z*Z+Y9o+d*dQS#l2wlf&;mQ;gv$@jc%aq|6& z0&u|8jG^QQ)-YjWGE(UUCzN-(oimjD(Ay>_KU#R422|c89i;A>0xGLZe(WUElAl!g zGFZ_}HzhyyhUv-ADxD#gbH~};mi*k?nv-8t+L#}B?A)IG(%WVwzw$UkN1wKl!5CAo zRQrGJw2PD9M4XYsl4_}MzqRIxjmhs8o@m{_ne)!R579&Of3}Pu+3%gKDfvT10{58A zc;DgVkKQ&h`BUW%Y~v&__)tcBl0SR%;`jDYBzf_l>FD5=OzDh zy-X8L6NM&)x*!KPQf4Bs8x7o%aKvI9qO#>#0&xXR?QkVzFuE3prlgam;yEhYlG?IQ zQxVE=51t!D({Px|+Eg(2b3YD`w&{4D%D(2NW-3V3xey!?w9RbTp60F;xa~ zx|Y;DierOf0*(s?N;D*M93RaSaY8UCGrOXwsmWXMlAxG`6IC`DshLw(=_#jD){K*a zb~0Y7viEkkXv<~1ESjg_<<({~8De+vifEpSSE_8%kVZ4F;ds{LRY5TWuU6UjP&ff} zY*Y-ojYlvhh?;S7m56s?ysx-soDxJcajMGRQ;ven2Jo6_o{iH~_O3ATpu=W-ScB7p z;xfEeWnTeSjn@XHK$h|x8;ChLLuJ1u6@!j?4_+6|b8)813rtTLlIU-)_DzcFw2&`l zCO^Vytc1K;Qq7MEWbi>>C)X?US#h%#j8i$r$7MNHdN0lnig`FkWj7nn#D1I`Z3}Ro z%B~WXfsT`uwG!Z*?85m$y9gJk916@JasU^m%~Pi1B9&WBzqz=lc4_6v45w1^ER@bd zsz6iX%7ra76lD^c7$t?92%$KcLqy!ul+|sT;NrMxGcHm2ZFW;84}#alV%CSkU;Fg? zQjwIS9K`E`>r7m#vMVR$Pvxih6?pN6Aew_WR*5)u^lnrh?T6q^LDYgbtL!qPtEO^p z##^F!9^R_5dkuD<@}Qaz<83L$)Fw2l?3;wNBnoQvK|LQI2)_@RAAsafEhtC3(av8sU_2ZGRMypj9Q~zA z9he=>bHKgknr5;dz?^8Fi@7SBM5VISQBzi>ihIx!bS;=y%Z3>u=W%}8JZ&NtM01%r zn%q0Id2gX|S~C`@>{d)K!Q_HH-HydUF$-_6GN2e~E(3T+G|$H6wG6cU&Xi*M zM6?EjL0>uS!Mmb)GBPT=&eIdHgX{+NwhDeo6(4p%C5v*C^0!(hvm^c9xGJ#u5qw* z^YotsxFRT;(66$4dUwSYaWWh#7stw=or)_}_6;%$jOu3Tw`)GxzB@>#W0lH!dZcdK z%1@p|%KM(6nuGVM?A>ECqc~M!58f9Pb8(f*>G;Yw(Q#oQnp<$S%C4P+vO6AFhHy;~ z&BL`-BAO=!$!#NMN;|MRh~{IB%Fz{Sl6Eg}T~I8-T9v&kycfOB9$cR`H#g#jYBSZA zet#!!jOHe+t2Q$d)BWwlU^GuaS!Evxo5`Q60qem{K{OFJtL#egw4|v8=T(}B!N+k+ z&`rX6l}*bPt;0l^iI?xeh9I1bja7!!NJdo7DW^-eiCcqi3O1>1(MFofB!C&vDCON8 zbBd$rf{|1S^G){Gn?w#E%+<6f0509J-i zCnMc-DX7~+)PRE|cwex%4EL+-+Q?y38#$H-uq`O&VEZVFK|19c$XpN+x`!N|l6+}(gud*vX+wP+p%Qh-%?D6gCAfJf$tL!5rPa+<` zfoPtDXH>Rb9H#za!-SUFpoF+CJ;etCG#MXM*;GMuSlNcahk{}%K3q$o4pOwM@sXgI zfsa-x7!@m9toT?^%)-Z2_Qe2KB|GtnXq$~ss%)cDOl1%m#;2lr4nAFN=BPN3efUf? z&%4bR;H8lO4?2MLP|TU8DCV{WlM`=b~k`8rOmS&@#Sb% z4=Md8@s((vh_9;by`U!S!`Gs1627joZ?2i*(F-ztXhC$k#n?5n4duhXJ06AE|7Kip;@v{oq99$AOrGpQ!8^ z6$Q%(vxPUIQqw4R;-^747e7<^Ov?y3HqJ1|X8D7e5oLXi7I^X+R9|i}Z$>&VOpHz1L$wBj$bmdY4{5gnb;V&w? zzh~y)?s^aY8WeN!HeM-e~;#Q_(!$bSBzWn&uCtNf2o}EuPg)BZrqfopp+PhO&r#Wj$W7IalF@Ucc_I!|+2@}^r=A$a;XyGO&r>4#yP25)2ltYjXZ!;=HVB(>oXW19wYi_=O(W9v zt8sjg&%_BTyHNdUDUE6vFA0iSI8kMv6;8IIJ5Gw`Ie2N6!7VO922;E&DCXkjD!XRU zp^!hFzs>(iYN}Q@Ogx5s#Vw|S3n>E#$3Q2Em zJWfxES{m_MmHl7_cirVGcoz;z&wQBOGfF*(u|eO2GgLm;Qqv(DDMK~ytOQ}m^l0#b z5ze6=mW(pC*9DgeI8$Yhb#zOca8|TU!Z?*LuHHfOQHgc6lOxNa=(Lr>fKE|b-v_ti z?BF#S=Tz@Q+MPHz+NR(F)1h(W3tLVCgl}oO8j>Zrldsk z8ZouXhPz@^3!A%XK`|NA>nNxzAL%1b>H#ZEsK|UB76;3Tc)Q9z=iD7(GaWD2 z#e4CNAexNJRldOFMITEx>s-*xH5l;tFkAn7fKujd4st&43`SGYs`A-&6aW8-$Gd{Z zOk`B{9@9(Gz0$0y1pCnzMDx&IC8FrrJIafN+t85`EtrI?%I<(^Ez%+zmL9R_i8AN? z0G0&(Ty(1J^Ue^WLr>^Rn-?}Br}8N#CH88|I3=y7*CT`U%A8#0i`QEc4s{t;YQb5AtOgmPK<550VF(ZF}VSkTx%FL{Vi= z*y_AIJ6b)ajJ`lLqolIC5(>gr$Mh1*gJJNk;}(*D>PunEX4Xk87$_ z{kT?@=nY5n09NY~{~9t&utw!{?I+c!k@$6LvkrA8SgT6PM}h81Tp#VZJZ`9MFF!)v z!;QMczlKaV*3~x4YahU%E*bltEXt~+Yrbc(5y{jRc zL9U0k;ucZzuOZWm^(v?0W-2xKpy=pOHv~~08*7Oaxoo4B0>4!a*2nxZY*HoqNNJOB zJ2nR&V2jEwBxZW_rPtv$T~dtApp~cdal7iCMA6OB7OrRCX`T$g$}(&qJOrV1o}Rn1 z%rQ=P2x)ym9(Pvn#PpEP;y&C}ZC{4FRZ06Q&%}?LI3q*r7_Q zTk0&g0CkCf4VixIQaLz0Le*1z*c}ur@u14-Bx@s=X2s-k01u@^Z5iwdA~iEG?Xejg z!ozA%U)nNxJfe!-j8yEaLQ)xzR!NH3tBQ43j3~JwJf=(hjPZj4t5>DW1JW*|5i6>R@9GUG0@RaKOYiR4lew95lz1}2FTTJEtwA$<@T?M>f z74OGd6NkugKv((K(3Zn9RSJ51N`#$#5+Bf2V?wk3peo)Ik__NO(b$v0hpTuxG0q$R z-HwmwD*qbVdhyXJ1*K_jm{a$$pvdFnRf;vdfw{1~_(V_?@X0C#moOxBwr5DBd^1k zf~r4{FRSABQO=C7sLsEJ_6)wNvMVtY6}lr5tLkPu_5ACqxEU}~b1t^w8`0jr z4Bw1)?dsEqK8bJX68{<)GQM4Hrt{=~1Ne?E8T)J-zFTc~3%MHKi}ub=d|wssJqNfA zKTw^2dKGL$WtT8-ttUwMp)MKku5SFO+RlD)fP?sPwY?WVQN?)6c!%-RYGVOE3$P?l zyIqf;SKEPKM7zdKx$M9%tL^>xRc*WPVEj7TyW8*^Rcr+&{@mfkUcfx7Cvc}=5p3~DnSQucq7;4C-6rR z^RJ=3h(D?9GUm#42mTywCHzHY-+$K~O+(mAj{wadt3j|EJo%-h$!={I}W;{I9N^8oe3~#8&Xj zafmA3I|XLyJr30+!WufVcuuvM%TqSrkLT)=-v8^!wl=olFjZrHLh&+SYNyJ?TV5~3 z;Wdb+DR`c$r;>q5j`GtpcP0ybw#xqb;zT1g>=7d7UqeSH@O)KVO(;j{2yKYlzJ%S6 zBZG2j7DuV#vqboIS4KutEaNr0BsI$BTN~%$ zG*#>7#B;`!{PY^~CT@(W>YBjd%7v?T#8TR^HMEn*yUoTIYOABh;n25_z}X-=}mR=)Fu z^Hd+hxUxW=YP?G_t&NlLR#n}!>G61~Ef_38qsrce>wP9LKALlAsx~WCk~5v4 zOZ;nClIy`lRlJ83CEbB7Lni5}^>8UB2ZeT27=$HqObLntrdBDa41RoX9j56j{~DGQ z@|doQkHFwFRJR)d%__U4m`kK%o2g4Seza2cXQ?_`^;6o}wX{=kScI#FNIhDQRB(%heEAFMiuCx-}s`$Xg3q1i}j@~Mq z866kH^xb9T1HK}Mf+{{H8ie*Ruq@@!l|d5CgItp{*4_xD@UF}X6l>eHD1RD#0nehO za+niGNQ>HsNadmiI#HLM`i1{)?ymGEc-rPa{R?U^R=xP5 z$}tqWzkT?UF7dCSySEKrR>e)5L)C&vHuM!;H4b@vRpnIiYz2X@MRNgPuQK3Vq{+}X zbd`S%-Gy#^vr0ly(0%A%d@D%!&6{tl;@Zh%@G*Qxb?X4|U6s=g$kK=Ly}+U!-&e&K z)|4be5zXt7aZ*!thnI%&gDQOwMpOyu(%+|@{$Z7>gdeHmcjZ!VpWM`sb;&wa#7|Uq zxk<|`vT!dbI50~7EJ*l{uo)Gd9)4aWS%P1vVmFad@jgTNWwpHvzf#4!nx;w~2Y;;w z>q-f~2`1H@pkPw!#qVm{6#=*7_W@syKd2nWv>$(rwiWnOKy|p2LU<5=j^=*+MP=`v zJ8JqqI^%WtYf8kO)xQM~&5hP;_`5Fguc0T?fq&Gsb8p~k{IlBLiGS6#Q+syc-@2sH z_q5?ZD*F>+MihEan~U-dm7e@JSTXzkpDI3SG#3(*d;ksnwvuz}#33sCtgDTI3Wr8> z4$o292TZ-8v%g;2LnrfGHIRElPj?>oxWdZ~`DR>fzB^UIwqX$r}A0 ztit8@WU_Q0Z>o~y@n%(gyd?3(A0x+oc#9gW8{K%T%5EvVN&0q$YtP$)t_O`(X1o)% zj2SMavmfJwD37K(W;D2(xH&;>*86-86IJoS>m0&Jd974wQjiq7Fj*BBA7_h;x*eEO zZ7*VKZMzchGN$R0jSHAwZT9|d#*An#qFLoswv5U%qpc6KR8D6`(?ZX_4zqRD`cH>& zS(W7d*8lbD-<&E*59X?J3TMk!CtL|>F=Z}GDpkM4YN-N?n5T*loGUx3*NvDT?JIh) zKo##Ertx@{brFKnYzN3g- z5Npqzq8#<)VX4~HH4?YZoPq9Vq1UqS_KJLZ)NWnRqE}^`Mp0<+$m^2bJG%mfx^^WQ zSQhY3B+;xuvW0#K2sqd7#b~btwleyv?In~{u{o6ZIW#H~Ct(1~)nI+>!3vd4^c(_r zo~}?`+l=|1*6|b3ud2(^vjHyO_}_j?-^f?0-Nr-5d8H~o-qog5kK*0BWVgy=mCDaL zlk!ZQ*>$p@_XJ0-&EKnvyC#Z&)6P>%)JLZAJcbj5g-%?hir<=ALhE`21JRxoaJ4F- zVLNe+>eesdT9qxu)m6Jn?C#h|X5)cG*GtV&EXeX=d%spmJPdvoBxT{LV zb2X~C@1ZWz_fjyPFKoe3m5^I4b?g|=xWTDaFSZ6%doS))#g}2cmrT{WMm0&dOz#tk zW_4K)?pN6-olZ)sjcvgWo!G95Ppi3K54H~khaz@VIk5i>99yt6n)|S;%3!TMi({A9 zVYjZzc$f9Hj-P`ERdvNC4+@i=R?1w1c&G+3y9Ikxb#tdA=rZ_`yIS&x)vhrnB|M_C zE6fAF{f0+%Nwb-h+Oby^H#v6hK0KB-f}vqp71tNug}tL~?84(!5@4SyZu{&DR|E8b znrF?;6KYdG(2FNk_E1IDX2wC?wUdoc1yLURRrby@%cu5j!qd^rBREwaL{q2ImBIlv zNTMjTHc!Aas`@)#Oer|8TYO|%T)GY8YeB*d>#qli z>yH?%!8fWTJh7un+7Slp!Cm;4E=lyoc6?i9A25f)6=$j*-w7t|d3?7@MF;EVCXK}R zs#FDhUlqTV%`(OI16{IPbzr30OeUtNKaA!qex&mM5ql`Y{rIs6q!L9w@&CyvW^|H2 zt+sdJXR3Jc=MKmL{Jh#l9wry5MTw3{ejXCEq}e;>dv)o#7+#IIBi`6=tiuY*@t z4!=>w1<1fd9j7Ov+HJ;ft5kXXP8IJCzdOgHJgVCra`=PFu1%CI{lJ6l5dIhx-S|_L zf`X;LpqJ*souKH!UsU#(;1o=V(wY2g(DmYPRZf&CpCqxX+}F`nlWcDW|4=3UR;p~Z zk~8>jgw}HV@y{w?DgLF3?UQTQKnKT-=HFGCJpQAKuPV3N81-_3k^Q$yR>c2Qi3g&# zzS8SQPT4?br;k44vQ;tgQ=~tP@?ZgX$ zT@f!-Ikg#j5ylDYS=ibYS~%jLQG_d|BFdY|xi*oXW1S+?%F!=)CxE z8ON)^dSB|s395LHZq_=DOP7}fljS&3Wfw91B$bWYQN~F@u>voxqoBg>k@tF;uJW&; zxT3Xb0$#4F8zR>;GA;^;3{&z~sNK4>q7AQ9#X7E)w{3E`*k2V?{lKeL32U-khPEfo7Yc@ZEv!gACb5!5cgW-( zaB* z2Ev|tH{TLmupDoVc7;vmCOh%AfEUqNZ8i_bNgf}~eP~iS1ib+hRJRUtUw)!0J_at0 zJ#=r!q##+|gUPD6m~DHOp?ylUuShVp%7PQgz)L~xz%*SoP3XsTmD8|d0j1(&W&|JZ zbu?G0c%K@dKQpLS_F|SQmr{L=Mde92w*)8^zP~8@uO9ZdDl;%8(-a&>N6~M_?37=r zqZgN{;#$HL1(le2=Vr{&RrQ`{mFKGL@}uk6hL&jS#ypihRM9CiGkVMwRWm$aZIW|| zkGK}7;`Yw4YI0VtbsOYBoGRaeMXH>p!70(EzG_LLCA_^u!<2frv1gp))lFC|a_c4V zc9mU+EN+waJEECqZd8t863vy{4!l!W)y3tR99mWJanfl&f_J6xVPf=DNqW#*CGk%1#Ks2Xt0X`{l~fd5qAycj zg66@vL}l+F;mlul0V(#1Ob?2xxTL8M)CxM~?dVH6T+xM+%Fca=27~1R=MKq=Y9pih zHe8W5_VeA3epTF%xWnSBEDPr=gQ~3!SE}MY^nI8c@NQkw0Qz%SRc+?T8SB>JJ<(ji zd#lY{zfcWV<9)iM3F)>bjJ zb{drIs2+2@NUSF%+@P}06cdMixKVWpVkI?oU2P-neJ~oYxB_KW{4)V}a?GPm*Deh{ zVWutb#I$_}ZVCn~Gq}0Roi6o8+`@Xve)42Ftss-{D`Gt_t-=NoN-kUg<(BdCM!S3~ z|Mg#NX#`JhY!a1grSG3I&D(*^y2>=Qp%FZpwM8|bSqjuOcSxS>wv=pqHqY&!U}dSK z2FJ*JN6-|O6>w*jX7vbnCX}7;#$7=J`kT8|^Yi&sLd`L4iGtz8Tx~mWv@Pn^CJd#p zrY`Oc5^MyUhcrwAm~RA?p4imRVpy~O2E_&u8x$1-85U8%J@_C+K%vrC@Fz9O zHIwmZ4Wbi!Rdf9i!m{LHJXS-K!?0@Jana!Mn${xrRXI?5D&~kMYH0fKWR<3Bet0Tq z_*M<}S7{_X6Z0^h4w@WzNT*7}Oq@DksoQ~|0Uv-rqnhukaSPLTPWbMEKGH??dQ3w5 zKnj?a;qMlGP&GGpiv4MPC|Z~CJ+=?4<}*unl%x5)kEAryGknnU(V$@}pp3(|N(-2=s37UKQd0>eb`?a|7lDE z3`|KLGd}-R1HYKma6bN};)|SyE|_}cB>(31lBF1o82@2q75>YA$1dbQmHz#Y#rpm= zuy3{fJ4AK;AY6>#P+dv;_Z(F;*ERj~G{buNTsAMY{vBV}zZ#OmNK&#Prm`GI7l*%|egT(nUKtk_kc$e(YhBl)lYw3?)N6l?YiaMsJyt!ppfHSd~qnGO6w z7fsL$dA(%GN-3Y~!;4s5g%|VRTDcv~dc9PR(G~us^Lp$-6vydGD!1bgYCeHiygzm0 zd+o4lfuNTv)y28J-N3S`E;xt`JyL9?N&9CK^XA#p_ zUM~4Z9#&+t-K`xN+TR(xxC*c1zm*^H%jMb7U&NWbH2n~BVtm()_RXs}OBa1pRxGGD zt!~8Q)Nq*ndSBWgr8--e4=b+L@{d2W*vTJR#09D=!ktz$3zo~=s-Vjc&|IiC>BN#uPfuH>y&D(liZ+i=8++av z#W7<~8++~<#WQd*FZ;yw<$ANN>QfPy@Zu`Gp8t-u4WikZ_S}+O`#Dnz`9e>LQR-47 zc!LorMQ_jb_2Z4KR$@O>FmAo>Qv&fOT{Y)nmiA^tzQvGIkj`wLKj_$ww~9U8i5oQx;Tl=VU&FVskPDnZ4fO|IP`-<>b4$YYvuoGy+g3qPmu zEb)U(xta4QW{8jZqlqOHmSxXr%y-c3X3%V$W(FtEsMrZ6c8rHRFw2noJ)~P7MFw0Pz?zY1FLf{8ZdfU5MJ6pws;MLIFyQ3@ z^ucj2hdJZ{ywgx(X7X5+1=mk`v>NDL0rFgjNet5$_H+Ol!|85~OKgBMN*0^j4A@=| zq(WD6_4Vj5psbG~$$&roN$Jcf^l=rKLDtYq0_}+pla#wO!cK!8QxBb;>7j_xWyoA0 zy~C?5mFCfdVJtPUc5Q3!+k!$*54sK86Id1+q{>9~J{xLoe}S7;c|#Qf<#J^L%k}9F zEHmJ!zBXr86zP8wL!utZ%vsy411K7DR7WRdmgkD-GhnG6Shf`|w`!IfaMUg57m9s6 zD8IsxR|L|<<5?W{u(zY%z@zTklqqKWvC^twq2Y-gc}tBun&!O5TV(8*BIspWbp-YxSn zTx&dQExMUuslYv*)y8B^F!AnC=QudJoEveSLA7u{xI1$*`PON)9IQ1i*9RAST4@SF zcdB(RZZI|`>(r;jsOA;BN*SI?yV1C;3ohOlj)Bk7$Yc)&jmfk3Wk#lz(&4*JW#e*F zaIwDVeHP6RKi%*kZvKB^qan>GQCn{@HtU0pOP8Ht{?A=Sh%U)C>O|0;@b>wuB>wN zX{Dv5e%x-TJ4T^+WB#`bcN*&1r=z9RUh3tf-enx_4i46JMKCHk&3ynv#-vuOnhI2L zo}0MGpj!j#o{&mOm0FE^4W}$W9rE~6HeV>VHs-)I`Z5&RsUeS@pvG3xI)sQ?xaHMf7oGYU9SY3`MGSKtBIY4+!aWdHs_gE zbpX2!WkW6%`}mvLjKZ_C;DY%tnae04m zVWFY2#dp9^n)Yf3nzKD^g%X$%JY&EQ1kn4hD9QD`o)&-5;Pp41BCYJhhYb7Sz`9=Y zi5*j=&G?7`>%}%Bm+#2R8a`^!j|EgZAc4tIQgUVxA2$Z|cb?ndk!KkCguy=zHiu_s?H`fgMnSi<-t}%PyzXSNJq0OGENlA02Jz>U1Nq^4ppAWnb znjMyM;tK|@7xoOAaqE=AiY&fp*e?Y(ooj8O&?cCKX}X#B@4}ajQLQ85kAqO^UojS6 z4Hka;A#EpzOZb+7z8xSI zXil{FUHFcXYu+linwvppX?A%5-!;(p0^|~Q4@+;e8{apmO>D)HNabzYMf1Fx@KiZ?jj5=vT%-d{Yq>mM}2?+MvG) zs4Fi|zHo6ggx?0JG7VjPl)@uf2Ks$~?0%XF&K=E$k1Pi82ZNeiy~E=fyL$OOnhgGE z@IQ@$UvDQ?`4E>2mA&}0!7cDQd^UG=3gc!LIH!Lx{9gm_i5t&>)3ws(xQXfo29-@r z;&wbCtTHE>omq)P*suzR@?T$|5>I7g&bkNBF^p+UWyI4N)R-IQmUiR0hC3{9u5TP6 zmr-1iZo=V)t~HB^IrWq;u0GGON7Q5a7+y)!RWuGf->|iJR&qO@i#~p(>qtW%6=+WZ zDCn!Gt8_RlF`0M_FEA$Nyei!{4QQR8?ddAug~sJY!Q~WlbjA)89M487?~40&Q8U2T-pQTK3?!D=Uj`7FE5V^uFT;L8H&=BPEB8H1_o%MD(e zm^Ed3mvPC#Sz+ez3S;rgU=g!IW70QyIe1%Fy~^0sMuPFOAH3S|V*>AeXB4uVpKPdF zvGXZ0Hyya{!6}A3HIPyp+r4H0;=q~oa995TUULwOxfvydC4S4{G-Gjku<(qKK3?B= zr%peP*BZL6+nFwUzp;iqBao@3>VYDEU(ryt-JV1zL>uDb>P$nP6-YNAhE58MHZ+KF z2Ci3-_H3?zvkiGpAnl$?GI)OWQJi}aY)+P2by=Keu=7X3cq=9vJ8^-*H1VlA&Mcsi z=eGeaG~7jj^Nuph=BWs(B)@iU(Atj9%oK~65-u_1>jUW>WlluR+J#FECT`}&TDo$* z%eqQy50cZQW4{M)GLUuCz53(~zem9xO1#-{ZwZ{64TBe-=JUz?Rd}mGbvex@ za`|F6-e$PQQMji}_w_6b;|*6kJZfxiWfo0_oDj%RSvvW3n0OFug71+`GT7u%FsA3S zH%u{Dt?OIRmFvsWV->TQYS3u`4I^{cSNY7`Fs2)m+AdGcmzL+cF~b-%2Ll%p!|gS4 z5*+MIL)L2Sd^z0`&s1TSfoBKUy##$N_e5!E@@=@x@U>1?8s9pTDGIlT<`{>$!ND>{ zMO>x}{-bybkS2!~V^r&ITzsuf;HEm}8K?Qd$t0oWx4>gkNB$TV7@JzPCZ797d1y0u z6&3{t69x6G%%HzPGqKp9wL@8y?dd73=+4WU-fr-B1l*jxk~Hd?o;k7)%zWwTl|$fi z<5lZ>Cw6EniT!w|F=`D)?!LI>;xkVz94ftemvN{|KUU_E>! z*g4rEA4Kr!YOi7Q^;o&on?{siY(~MbwG%ssfux^XMAGtQ22TQ>3Q~D6{XuPp0b^9F zqjNI(Zay5En(xW>p=g}?f|KV1>@|euA$wzO_~~ zGq)_)N$q{N@mv)=eWEx^JZvP-fcG2(ZIQq3Kdp&dWBe zF($PGZ!YB9WwzHDgSElHJ*j1B?mn(R2s(v3LQ67N;0A-<7*Ov$S3dN8Gz{izWvnxF ztskCTC=}g32Mu2iyn9hPK7J-?lx5y@Fqkv9(s5?d6}PUvbZjwZlKE6FM>6?ynhNb)Z{KE&ZVyK8Z)hD<#dWyDKsK44J4|N+ z(3RnvXLlOzuE62JsaC{9ZR{#wcB712Fzu|sbxse?BF3o zN=E6H>zoVlWLOPtn5hDd($e%Kg29*pE1Y??N>#@lI1D#|`%Q>Ut0pKI^<31jhO zu&{wx(jiBzGgUkBl)-D}dqSa<;co7J!#*8Ylc1K`)O60+UcBFcv9OnbHP)%wV-yY7?Kv=_v~zYkb_Gp9rW=woFhKO*P|2)+dcY?R}?Y_;fad zPZ{{r0d^B+Un!vj_>95Ksi%7;O_^m`uIa%j_gTY!F0lSa?beY&o;qbjp|0qsJs2h^ z@V(ZZP58WVR2S2A4>PJvd!~Rd7`HD5H&=M-2-TL!(7pJQL8T_C6YAo&Y+o-m?aPM! zN?=`O>CWg-ObU9~L}hstUo|G;ZL6S}Ir=fKE5Bw8z8(x*S2%GLBiCzt@D0P605$28 z_(-XfJMtNP(~#c^q|Z77BV!Z23h%xF-!^cKYnZLobQa$+>~{m}n?dv`Yw$gTh*`y( zj4u^)c|Lo@_YL%e0Qn8+{Mb)+SY8w(hOW6Gce;AG5BNjF{wT1nW&U7jEYedUJWH_pgk@uY*IFG1Fs?cRPM#*xF1^8!d%a<3JzsTVwFMVBl_u4vfmd-=~yE zpk438?~RX5am5w)baKm{hX;+pAA^Bw=8$`E{);~uvep&z!ElD(LST&ivw{B-;4u`F z#rxH~HO+GyCyrJ^|H2aUpxZ|Vx8kqCFtw7&rA&V&;Qu1tPpD=(!Nl~;@QI*>^7P)H0rhcGTWO4|afIP&$C)kBj-PL!BLn2N$fw;KaFiix ztf`sr#q$HGFEGdp1LD4ui%5Pkb`xG?sG4k|v7;l$=c;YmI()G~j}B-m9j-#tAKT)L zuEsIOM1!o%$b6oV`SmSV9a1hPNAnl2h>7HN*jyJT1nuhpExurRrV9=KY)Q3uE zbw5rtgxO&#)VVw=+ry`3CmHIcfwBpaNH@xoXaz4bZ0+4zz_)8(Zn#$j&hNHek@S^@ zkfx^nn_b`+hq8E;VO|{=pFu8xX|iiD<{;Q~8XDj3I@w^S)Wa+p<)RO#8mvxXCJ|J~ z;x&dlEpXmN=CP0CbOUKnl?j;5XJY*PnIXmo!aGQxMk$tYhJk9+*BrlqD4?A<^i9RK z9M4_naFKy74v=+K2^*KG(obAsIGc;g!-A$vKcD$$@p^+^8c;VX`Wx=;@Fy7qSDB8< z45N9SEqbHj-ZTog+oV&*n+>OKq+X`IolfR026}6NY~r=ZUyZjJLY9!;iF26I84xrY zYJ8x4bo4Kb`W)SQG#OS?m`aoT0$f8(FyO=h+U@uq9nShBgVYLSa-pNIi?3!)Hqew& zAnpb2z*Ga(=HGMqz$RO4>o0N}0@DmRJ&+!Iw_3zw1h%-xmHUi?xJ=08d19uUi?!u> zG#i(h!NqecC3ohCIWr8U+F!veV`Rgwte-OZr99y{+c;bn99&-XZ&Y0Rfnm%sU`^z0 zq8sR@C!cG`mO#2PP=%RZUWa)GtIdiTC3&=>P@)T&Z_ot+^_#MvjJaGau7OUs)&-ts z#%ykGFEZfb0Qx-@az@H)@%BJf)S{6OB)O)3hoLSHl-*96bZbQe-)TVY9W;h#Wp35g zsu#mLnS!<&hj#@B-{GWuxOU)h^(m`+?G!9u8{3MEu`?G_F(8heuk35#(`KC7gHsHh zq25AghkclQAHI&V3bh2No zj&6hX)WehjF{wC!-YQJFHjg}awocc1;k>~L0rRLS$KXzlO05!>83VP3{bf5#?YYiO z4?kg*7#9Q=GYig>(sd>m6gQ1{HHyZh#t$#%x2^aFTA#s70rw$uyd3p)SZ*kr=E{)u z6m(psG;TI>dH!tF3WHw}@N?KpTU}GV=%P7AUSMG5vv3*NGyEUZL%K3{kc*)`=(n55 zSyYs8JfC7O<32l98uu%MyJ##+XMkY;#1!u~v}WIY_B5S=pj%sI(Dww?$3>N+g>S%n z4P;ZPIbodU0$oP>K7(BqFqftqH@8ZMYzR9rV0cp?;hT9=DiCnB!LJFp+YPmpcjW`Y zVO(1eoW?YGna(7vHsG3ipms*MIl<_(7uN-_A|#&B)*5K70k7x3l{o4HW!}wc=ix|k z^dNepiWWrAkQlWJ?0}D9_v3y8)Hnyuv9geD z2H74E@1!XX1@eHQH0h~d;+v%zEpm4lZfD?JCNw^trDKw|9lHz~Czl#~bq;Q~p&ksB z-AyK^2U&Qi9@0|i=1*AdG04O95TybX{-b!rAT@z_rq+P`>B2`1wl`odL53wh>!%r9 zhsO-5%jQ(Z=Zan3d~P^wxX0^p?ulehJFw4iCKB^2UHL+9>ul~G;0c318BhtE8cpdl z64I9q;3>n_F1sh{;R}x}^<%%GpANKlnA_}HLCCMX-@sCsGzL!3A;&jxGTiStVCZK8 zZFXv_YkU4f@ovTkjDcj8GHBr$HXi5ypn*RWVAlb6>^tybgK03SDHZr~aRDDO)JN-4 z%GP|68o8DkN8I5%5hg7;a2e=gvjIPm%3Fg|beVawA?D>8hb^aTTa zF#xW(3~%%soAD*XST`#%l#2uD`Ep48uNms=qfoRG z`os-NQ@&v+^}%#^7Snuu(?H(}koS-V$pAczZyO>;)yP+`c%$za=DUIM?$Q5J_;hdg z;d`TCNne3KVETQ7{oo*&`nQGJiV=f_+rCU&zj;15{-FVXGzv(E&0xTRU4- ze=y)51Nbb~K^ELF*@HhB7Y(Qq1m>iBPMTEfVvjL2RzFXK?Q78lCd zR=_h#S7bTV62F7`9K%1i9zXa5I5iIWjOTFvsPd8=sa8<0ymG?7i^SBR)3e_P`Ouaz8}VAz+8!rHST%g}J5VNIDT4pS$$`CJJn8T6&~P#UUm z9Oq`d%%EB-Rl-ptAK>M+M$7Tw?#m7Sihx^OP)13uU_fJr$^WP%yYWinQyYt?ugENA z(#wqdRmSDj!NoM19+BynQr@j(hcSlNY^Tw*IkS{+Wa4B4pAujeC~&GYSH_RyRD;z_ z)7cH#^}Y2wV(dG@5U zK%;$~fzAw&o4S%xTTu?+EW`01$4x0L@4z?%ogE;x@?(d#k+KQruv&R}Q%TXho(#X* zlF_TtIM;yZ1<<_%R}gkX33UU`H@K;T;7wfx{@_XaG^Azj zRpsRycDaOGdv7xIo9odQXe3|8#DIh213H&$6!|7hFdiCJ>L_fJaH63n1)2qy7G=BvlMN(e zuUK6(1TmVZs-}K&}Q%2U10E7hvq=1 z+OOmA{rq&yOheBKGz;{s)G03HAH(b_t};(A$yKI*Pyk6 zp2CA;eDcZzerPfDyn3{rWH9C_AHjS>*M|4z%*u?Gd01drZA#bfiF1;uVD|CZMTRx~ zNOQ@q9A9zde^_kbw+EO74wn*UaNmJ<7_xRJXS|Le^DK`R8GPt`xxwEVaNn?_88K<* zn>dmiRb`{;Ng1ui&Wy6sky%R_85jfKWqdNh#~lb2lpB3?uiMaO(AqID80n-27o6<| z?g%go)H6zs3*%vA4OzPp)||Z}*IsCC($@l(7`8L8eqheMJ5xyYe+=)hOova-yNp*| zFZ5<5*Dn0|1>>|dIJwet8W<#~x=dTj=r+8?^VH7yLOYYu9s~CVm<0~OUm{zN{6VlL z#&SMjEEsHAz+7y0h)6qm14s;M9hMuMu0tVwpR||TNBpR*GM-|9eJ7DHs;gd4W$wZ> z?FRH253x3%KfTo6#i#Hn8GL!b{oaIAdFb}HVTIx960~I{9>TlAfc*hvfn%kht{>qE zyp@JB9r2Wh2Q)jn3S38DX}EU>&IGL0(lxg4!}lR~V3nb3T`+xNFMqS{JqCVnfUUPW zo64|3F%RK=hOFuB%v`3I%5{|i2Li|f4TMU)hd^9yDD@-_**wC&q|noiYYca7;JmlI zp;86?%igXwv`N;-I>UC9))@4FcZ_UDr(pzB#}wu(vc_ z^INwV#>8q0nBiHKd`AiE4YeUqCLZO=bh92`Zo|gFhHx1oO1Raqn*z%Mr^M%SA2u6G zLJd@oQFM!eZVQmF&pD5Kal0XEC$Xt3!{<)DxWhnq28adTiDT0b#o;c)NuueU8cXfn zbjcmK+kis>^x;vWOs_eSoRCep$KbKbYc3Vr8FIH8^4>tYS@BJL-@x3A`wUj=LwLwk zZ+G8s$ZdgSft{rgq2HFvzSbRK*orb8jr4~AW?hNfR%oOw)<;o>1f?g^xe#Zz&5Ee5PI9yWaKY)s}+aUMd!BZhu7 z&@LKEly1uQv-TQP&jQn1>%l{7vp)~SV}>6Nyd6fCyHXNk1Mq_Ok;j+rXYKVYa22FezGGVEvQ@i|;NLaxnu zMr;Q@WGw2E4P~M_cl%-E@{!=;bHKAh+<{_<8^A{c8*`BBYv&ef9v?I8#{=tPx=u@E zc|`_|`|t^a*GB8vG+v%$;xWGhK4~026&x&NY3{kH$zx3Ns@w+KiBB6B{^KEQGE*gd z#;~6atZO#7Tn3ksp*MPN}(8$N??fUN1_YC{}z}jpI#q&bE zFJHdD7C$g}ETS&6<=cn>e;7a(I7YgDdXQoK$RP4MmArmVmfz~){eEn)p9IYBM}bo7 zsXDyz0DfvD=f!94E)akyVU6AIpQr`$KhXw zthsTcK4Q_$)5Q3-_h84J>17HEa&@m|1)d@_0CsBzGXuP$Jt_x zy4qI19Q<}1LK;82lTI6-^(@Dsyu1p}2?pdx6=hyb7qB`y#`>IIyl;E+U#SpMMyKqm6?Y+im$0 zI(PJXaEzgk4Ybd&=N!EMFpe`E|8ZPPLH#}6P$!H+Q6tj+zQj<-x>9O>L$hAS)_~jrtYFAx1qF z-6eJ5m4<#*pk3aKJhu9wTD{tE{KrSl9Z>FDjWN{8f$|KL>Bk0~V)SvJMf`Gv?sKXk zUK0qHE*Bo@eNHo6jBq}Gr5B|~aiCwWJ4*)`Unni!n0}VoMXI2e7&A-4Ju~ZNoay5slGhufOM_7=G$Cma+wlfN zMy}Dw1BUz+lQ$adO`~8#zEY4Kz1d(kNxoE^p5sZL9NuEUw+1jg71QEjyvZ4saFx-635J~*ST`K{b0(6M4`*1r;h1DhbmQ2a z>&jxXfu{u6Q!viaLzrp+MVHEk+;qn6KCay{%|O!w##jbg4bXbA@KoQ2AGE!Rn7luAlu2Qbh0)Qn-qQXbRc3sC&Pp>bIdTx{^% z_LnXlfWBl}w2v$|+Nb}{;W63He(rX(@f;}@8Fq1C&!Ld4^ZdCFI=ITGt2S!Mt=BOb zmZ|CdYVlTfjYG5zueaMBYO)f35Th?w?BRPaqP6L@obx?DG{)HzwO6W3RE`V;@+}fkCD7kyE)Uc)xl_fS0 zN-H(s8zks9bWfmDX;Dtf4>$p9(Q6FMT>a+L^ueOMAq#=@xWV48#xeuch*#g2V2sTo zF%SY|os|#1*S!8yC>peOp~cr0=4N`9^ZPtNpTSE3ckR_F-7(S>378YTg#|1(MhY+K zfu0%qQd6s+^($h9vAQByjWabQD=G+=*%I9yoNs1lj7bb^lm~Z?X`yBA>uq5>`t1%8 zpe9hH#dba>SZSQE49+f6&ZMWdWXEqR8rBTFGM{?)fREx=8TdT`cFW?R*3jMKy#}kD zO8e$WYfA|{?q|@e0_rR2YpMe%-@*axmW2)&pPC7p$rl@YvcMRGL_Eq0_VA3sZD1SZ&xffi)+r8`7Ong7j=urvY4N9BR~QhBRZXfv*p+J7K2t zPvHgwn8hfn>7CJTe(v%{L#zvg%b9YbFQg-7WZZ#4gI4FL#Dmj$9_%O^_NKtP9`e`# z(|8Vc4Q@7|Sf=4-63w*04-(&E(DkFBydi@OwRkr+7*rEyiOU3@yT?WY-5MY_7N#r1 z*kt6<#l~V+Csm;jn+>uhAT~U$H0Z==+Ej_nxXrL88CRngE=r5I-Jo{_)RoBI3 z*t-Ht(PaT)0YMQLScEGqc$NWC$AY?cP*K5-sMve&z5CjG$KHFd-}9VglFZz>_b&gB zpF5r;r{|>J%!EyoN@yEZu576oI^hgdI=1QnpDzoPKSMMzuvgSrKbCLHU7@V6bgWIi zqt&C*u~{=$u2NbJPR3dteksKc$kj@AjUzJ-g*Wg^=?QYJ(&$-#Qw!BNGTzX{ZmS-< zwbv=}^^TZ`W}JgWy!XM53%$!da)a^-96R{1aX4o%X^h;cEN*fvOf2XOlyQ#b-yFGF zsj0bJGd4_>Ta@xvM`@ZBda-NdHYEs#u;H9zOgd~FZX~!}$?kAuCJrzbV}=1~0B({y zl|JahYVZ{#9&*1+iSKsA>SQ(#Og6CwyG8DClt~5Ejvq4($ENO8%KIFpv2>M8YW& zbRXx*{Yp%p3GvYSgYmsXC4JD5Y87#kj$iJtl!qKqG8%LngA>vZE72nvBFIB;eT6() zMAVNx)niKZxFa%c`B?T;PbftgdHPyEzmo8zQa$CUOyr@%K&#;VO`cX-R)G*)#Lh2>delGsa=H9Z=~v|16$#Y8myrVXv&3X+nJXc;&Qtg853}MiC zt{Prc!j~MO343UZUqh~tmz7HE-%{<3kD6io?iD3_)sYzoVPBW+ZoXrNhK&vrJIU-i;4XwA zca}AYe(eT%N12Akcb_yK2Myj;cJDcM#(3;oqRr2e_mwL2_5l1E*f{=B`9SFwIy&tH zc_ap#mzdw8>2RVeA1Z^;d({n%{OZa_O8>E=H**}UoAAS@nVYaD)@kr3%7cr-q{{I# zAKqKRj1n)d;~RR>g!*yvsWSY`G2}Os(QWCJ=9W%y3~B}ug!whY9=m5}$>+*A{J3(8 zaleLX?A&l_{tM;(rQ>Zrq=Fv*GH}DmHrRYmzKE|>L`mIy;A|qC@wM{*#_?C(IS8Uv zU!2eQTV)*94E8xj^NR)FDYNe#GgG7ZDIb+{mHeP|Vf(|!pZTUUuKE2@DSvX5E;7;T z(W%XlpOu)u(kC@xW=Hi~4dJULczdo%eo-dBIwnRkxjCcGF;j*)O{RR)A}QU{#3yAJNzKaD7&zm>^lix+crPzwN+-zI%Xyq@6c6> z{-(E_Qit=aqzZ=MyZ_T=d1bJIV_Su*ZN-<|CxurnHlg{-WhgllF9v0B4Oca^NAgrQ6Iq|Q`)>v@u_t)%NXQth*OR0k~) z+qP(<*pIkb)>R(bXLE9>`|AhuclGs@etkzzyL4WMm_hH#_ADDHv76`D;fp!=R`e9v zP-&|&wD1~!NWqL2v~y)6rKMmyw;O`(4(xo%#!B2SP0V;guZF<_eabx9M2SPou^nW( zr76;08Eonpn1e=`Hlgb<`$4oGN}z|DE1M~+u-1BDD`7N#Lhqn_IyyckDABQEW(yC@ zlFf@q@%5`IlQ8UWp`@K0si|-*u`xW~BAt~k?3ST@-MC5ow#b%Bxs{_V-pnEogyAgd zqHORmi!z*m;#=m8vYS%uo}qwti0B!zhf+{G(?#Izzv(!i*&ur=S+@)s=3d7VZi)@WD;E|8weL>q)*(igAdVb!d5BPnN0=f8)XjA(d+H4ApfSfVWBwsmx726C3b#9&?jVU!|$Vvx8n&(`_ui z7K8;fmb21N%lhMKUpX8=up8#G`?{~ip|>?H6egjYV6dPng4YfA0S&Ig(H=u>9LaeN zUt$@k><4-Fb&h>U)P^$R90x41fr3}7Ac%|GA`yd&M3`?yHOdebG1QBojmCmb6oEMg zXFix#URzPhFe61ceF z@nuE>Tqov$tbOc@OhQPaL$Gm-27H+DVNG6eS#Kd~ESZPE~ER%?8UIU&C&{n$h1Ntbev5MQ`AtcjE*7%?? zS=3T~5R$4N+9iJQq`8&Y1PWAQFjBgfKLtgxM0h5(IaOh;O?S@Mw*7QfP6MJbA=^h7 zyi)ofN;=hlGpoO@pHO?{Dseifl1emhE(r~PpZNQ^&BV+%X9G({=T%peE#Ojmj)S7tdM z9Si!zN5^>s=%b!>a=g=z9_a}mH9L8l10S704pDd=7!C&VQ+?P7JrQNGoP=lMq>~j6 zLIoR0m`~qXO)x|5luq>VFsFQP@Ml^l^+;N^0q&aZM`Q%{k%+z_`1xUwoA@NMlcM(9_^SM5QbHJiN zxR^BB?YTZ9g;&b>d87*h0baFqC3{A}f~LDAc&-c7WD3=7XAuDNHcAPRy(DJ4mTM*veLT9(E~(?j*GuyJ;?U%Bp1Y zco&FZ1>Poh=YQpH42tmP1s^M^BQ8`e<8Q%ehR-dFv^#K%H~%!d(QG*qXHR zr-2j8GZbb_eiooLdFL{MOEvyrjr%_`RX6PYe`8e2HP4Z;x~9*fGA`$?=fO7V4P9s? z)6y4E7|V;4Z2a^RKOTF_2I7Tu(mlB@e?ps=;UvpzUI+|V>mK1XgWUyz&8|4V>jZLktB4r8wg6@uN( z(~7M4ip0J)N)wc_ozvF3Y%s+-Q|u|>*X zPKviNegGb}6gk80j^CE}S&|=>*H50;&yJT?tR4&HuNXO#(q9ZaP8e{85^sHj->=H= zH_z{PfMKN2ZWD#YGxk47<|8E!wUl@NB&m;-G-ze^Nv(N zBuJi7`d5avNvuliI98gVlmY9Iff}IGs5}PcoWCx}VUxB-|IL*3kQ>YTWNi%F0AR{6 z98=JbnJ{2-2j~q+92i!Tpp;=%WT1wb{w0S&ZY^yDI#{%fhEsA`!p6vqr5#xsgEk?k z>TSpV0d7Mr@wXBH_TB^p7!D~z?0NWkNPD(Sz_kYtv^fo2y&Gmzm9m+a(!ohFlME<~ z(*PJhdCaH`=Z=Q6b`|<{Eesx;EAuTp^G*Q6I^mu(esjX28T(0S%Een&ok{HLq%=XP zI@yv8e4XSm$gPvDK!-ZvFAzN@;e>G)q+{tyZl*f6254>Bk@Z1Oqb5v!;H(qgF13fv z$~$fwvQ!J*(q>WEl(KtUvQ@kHT4e3)(lysF+ktQ57aslJ9_d(ipfux`9RXUuXwS#v z-nc{|6No#JK&>{b>=aTdn|3CV+O&z$)0)_kU(7qd^J8Y+9bOoBbMFB$>_T~ zLDj^JFqkcZZ}GHu58$Ec@b|~+Xd=$LR1X$&2xm`a+0C=;?pW$PfGr0jBIW^eJL6}C z50Az{1oNgRkLVP+riT&4{*6n~k#*xa@K&pko?b{VC&Y{$;l2&_9VxMxcW=X+O98XY zl|IUMFVA;xfVTcjKZDIZbeEXI_(O{o`XTXC_S*JadD% z7OW5zoH+L!jaSFu-+su7r9WkuxEMfCO)x7W9Fu6)b121L-3O>PG|ZWtWXnYcD%U}t zYaKxAUAF`>&5duB+=7m{orS{2b>w%CwLP?YlA5OPq@ZBEbSa>(`5P!PgTjCpHV zvN^)b1aMCz85?&E2WSoJtksi>NAr_iNfY-YA2o5e7Son8c7O6xV|5oTZ(k6lKgmkf2(S(;7?FY(0q5ag*%0j8guiJ^wKPQ|`^# z)(Ff(j077`4dfHJw1oJhTamb5hJeeDZ764j< zjYn}BiYK?r52go`fm*7o9v-18O;pOn31p%snn*6eB-gfypoMLmHs~cTjY#8|0y!GH zCIhr~nS}uc8y+xA*VrK>2*N3aR7!6lk?Nfsd{xf5dNu(Udh)~--gm^y1tWXowrngA zrl0^v63EIZJe8nVg^FTvz%%Hm4gOGP*0yQ=r-2BO%`*>{y*ndxs0x_w1svuCn0-ty zz<9>YXpiNYp-pw*;ZerZIN1sonaMiva3h#gX@9xX5h^nFB9C+;lZ{+XQOFT9Tn_!^ zXVFI)AsjxE5C0skB98GQW;hXM_<+MO%{?J+P(C(bXK$G}PT3vr*);>SVPp1ju*!y` zu=d0DMJ9MoAeq)!Cupdz>t#_(h0uv4)ezFriEsLO(%e8g2^0t<)^zXj6Yx6Sl#%!n zJ`Tb*$;l{+!%iuNdFV!&(e)AMh^A@(uemkRqV?n@(>WBbceIXL;7AJJx1c zov*JQU`>Hek-<`Yp6m?6k-voY#v8wl)YfGM-X?!HLiJR0oGKA&s?vn!C6Gy4Lv3d}CcD%b1_!NK;+y`u?Z=W3a~#*FLGXn25{|H!fEwY+d3End?@pPo0xtCeE^`9RAr162xn1Yw zh7}uBAAF~N{P>aGCgAEb9-mmCJg>kr`Stcnh4t6lP7KSL@C=R`-_)7ymeGgk$L=iJ zaPjW(RiF*(rzNDN%)gqfw0_JFh-I}v{ghm;T?0nRuf5j-wz0=%-v>YUUguQi0NaPZ z_g?Qrn=Jg`djpw7x}D-LrMVHAvD`##Q{guQwCqinfk`z6HvW8q4G#;!alt(57E)`B zn3;HKic*fcl^oPjW+tA;Avb<+1EGyy{W9_GNXK#q*%@>01Zd4M@deh1gyMehF4CwG zW`ie-S4#D}NvEn;X{33&T!rreIuz!@TaS~=y~v2=K5{V{-%l`Tap**6K;eb#K>S8f zDRmwIHCh~=_PF}U{-YbvMjk{?EDw>l5%VxX71K%eW?Rsg+%TtN9HO1z0Ov_2DAV=* z2uLA=lL^=`i60fk6|l&}i2-so0v;!*0=7^A#tyu*zzK>*QmOOWPZ<8}i^(5n=JDa$ zRWQ(_3}fTzNpL>P8jVpSNp&wvz$qy;5Qxo1%r%m2vT81x)LHONe& z!|^KlJ-4FB=kr7+x@ zC&8MF0vy}d7!GUuU6KV6pMzS;fcHqM1|-v{KuT^qe;*W3o+IC0yxnnve1M!-7Lt?E z{X>8m-R)0?X087FWDg_yx(l5qYSkjQEnIYJ?6DY0@%A$X6hQ1$@7z2H%oA zcpTqcar4=)Q5wrPWNys)mY}Mr)1A~V318B}YkGL1Gr@Lfar^iV)aXw#!jjhgy$bum z3;Qu6ENtDCh5clNaU`k1>4kdvS^59s`Tq(qtQ*!gCZf5sp5I93>n0DiRNeeeQeQV| z(sFh42MBE&u~(q}iJVyeB12Oje-l)-%;?SET(IL>)VBWt9z2g9q+5j_i~Cpk{pb0$ z!ph#d#Qdz6{cv0n=fyx_G%!Ewl_V(Tp2f*P-J_i*en(~eVBL<_#9#~iDLAS4cuH%~ z!8;sfYo^OV)Ag0BHpq-+39>W}T9TkT$Q-vcYe%e4(aeiacPs^LxC#Df)faDVyCvz; z%61vgwyk4pru~Q+C_P(Wcs#zU(yDY>BZjK?#f?29`|z_u%c+dzy^IwA+PcuKEbcB` ztG_Z}V~|r2w1;bo>SIMRP=j?8E>BddPF5lltrK&ku!Q7t!Mie8*y_Oz6Nlg<-uTe* zD#(mwRdP4gvl>Cw){K~V(bDd9l;28O9dxKDj(y2z^43t^YkJ;m0ZcV-yh)4I6Dp~= zXIh(Nsz)cV)YraCpcXlN9g?cA%-ENbk{h|}f&#ALMka41osQ|7tcN`O4ozOhGaC>L z0vBv~tcrmfOmmUYy@Cya4S!gc=C+6`Wx0`Oxp6T|5Mz%WGlJr_(9W=Akm99w`5CF+-8O+-@OJ;d`Jl&3P`qnIwNAHLMV_~EM98(Wc5tHU(-eC$%~sSBw!Modf2Qs;(A zR}k6mzqWo_6JB218acSFnaoU(Y)eqJGTlF#5By#n-rE5W;h}yvS48N?IHvLQ!P_g- z9X!(=0b0+Pi9AMhgx-8OJ~aZP&%-nZ-ClE^$eqYgRqMqT6?`G21x!l$ac44BKUOaa z({laPE?@~S^S3H{dq(oo(5@)KPrejsyuCX>>lo8ZWIRyho?s7P53*5r=w_ZyG6Lu2 zk(P48o@Av?aL2C0dPuV>XL>g!myLV(CE<#^`E*)@akep<_0S6V^L^ zk}iI6tS70}R?u!T08j`6c$*@p_TFQjJBvliVVId&R)x8!J&|Swg>;>ZMiqa2R_;s1AjPe5r zszOe8>;__N$oX{{sA%(?|Mt_%B?c<9L7rKiW2QeT@lfL(MZ??RfK3Cw%_T#W%}~#V zzXlndv=idbEX{ce4KtkZY{d_5;C|W$Y+fMdh9fJM{m8~xxj#T#MW*Y=WDQ>f!knL7 zG`2`)l$fQDAP;rVPV65z$tz1&s`3sXAFVv|Lr-ZwxivWweH`%(2Li&;tdC^#2K7>Id7#Ai1 z$xdW3Bb!SEm?*qVDsN>NAR4tr! zHvS+QANNGBbzPBLr<0G`Y)*!>gtnB$hmn_WDi!p|wfAtaNIHbz3-w1JJC>OIjm<{_ zv^JaNH>y+{mnR=BF)wO1W-V8u9XJV zA8bC=aw78Znml*vYK*l;>QRmyZgP^x%*KLbd1X)pkvZ>=B65etVp@EJxq zQ#sD|9M5tbb)y=J>KCoqi^3(?TLDz;oU@Gx<8XY8GQtPM&QaELJnOjtt;5YUf^!JN zJ{|Grl18mE0h`4u<>d27r%tZY?!?pOy7zpb+xQ;9%Xcq88n4fjiSh150IkBtz1X-Y zcJIX`P;E`srjSahI*&xEsyUHkiE{P41h~+XbBzJx@b1mz$*8&}nU8F|GEYWE-OB)4 zb=`|+7?E&*nu7>B)1sKZoW!cSb}e?vl0#6+j0I$%W|&zV>M<)Z*Q6^z2a{G*lk|(2 zZj<0j6yY6uGB##iP0%ZeWoB^RRHqXab_=cn1H``y<5gS@BWsfzp{`Y7*Lh*r1GGLg zE=hgl3|;h%deq1q*nwAyo5Brbrs{TQ5ONM=HVt`{r5uA&KE9C*)yI3blp%c1Sr)dA ziod#Z6WGD^+EkOvt!_qMEVodQ@%gO;)d=m_8AEV88f&q=w*eL2U6NIaE0!nYv%t#j z4$tjQ$IY~R{G^Iuo*&9jxBI&ct7XW_U2T82a=XWKyVr4RPk+#-*hj{C0U?f`JqZ+X zzRz&x!YjFw>3-$=fam+5<7;+{FgfQcxWqc-p@8Ego&c?vhn3?ap5vpAquR|y^+i}( z7issH;l(O(_mDiU%%1Sfo&;zk)6@xe%1YJAQzX;s)4>)yMn$NlqU~vtYP9KKnvO=yCW+C2v4OZY(d8qtX5qfW)hhDA<8hlN4xNg{8F~QX=E^z2k~_pY#P3$65jR_-fEnUv zR=yB)aFRwl_HOZk)&}`dnSbP&f9#l>V8_)S7{ss;D1O236T?sAZ~CNZ_427Q`^+=@ z+%YrZ2Z!SwoZ?>M3&V+BnY}IYOJ((yXZ3Z4)mi9i^^{_!EBhv7rC*2tR#|=LS$z*M z)hf=?*U*Z)#UDr$I68}0DpGzVUC=5#UAb2A6R2#fsH-oGx3lM;ksHe|%O#gIDO|4_M;7aaA&g9%P9Yuc` zcC2;1m_YtkX8(9*{{l?;7u*m)#UtW>qzU|+#Vh6CR@hNC{;h%*+_g&h=k}9}0UeIz zZbF?z2g~9}^4yjNXwC1S z>fyCNod?dup(aeyu+Bl96_4l3kcDcYFRx+irYu=0=d>jo4L;M!m1L9at7SnAUujE> zrq)l0WI5!-vOKvOZ>>O3^)!tddm~t#6i?4r1fGq%!4m1pWF_Ubvgfr5z*MLpBhuj7)LQGXMHs*>4Pz=;iPnB!(q@GPGEwFfrhldHSb6?n>ZGtadHz_7CM zBM>K)_-z-PIjD8?KE=I7N7DPsZV641hc_n=U)d#i{6B9h16<|S*>TObM5E~BG|$1Xo$I?aBJk? zcUm$tMr=z^wK5^=Dut(8(nHsFKt+vnAka%mwpU&|cwRd?UOEkC6UD;jN-!$F4ZM?K zOf~K2qjy%;yLi^SI@abC8M;i&yv>i{JXAF6WSt=Ln-poKcQd@%Zj&1xcUR_nc;FkVmFehzf8N$K`m8<-ANj>+Z1VT{q+C^>JQ_5tMt{S)hLLiCmEV*>;*8@ z%5c8|ejMk020ChE2kYCf*<>33|!AQma}|#+C%n3j&TuAY6~tF-X9sU zjKGujwuU!guN*+a#clEm8Oda8o17;HGTFwJ)-$<;D;>q;k|sIpY#GhuQnvIO8N=k# zHn~6=m|VsppC@CPZ0nK-F}bWw9xvmVT+Y&7F5{6jpZ%PMiwUHFWGn~cNlUoRWok~} zP{ADUc$q-@#dX}$od9_DHkruG);5#1h~m;%g<}Ypevx1q~#LQ(Z6V|Z~Xmex=^V_<7%7v11 zBx3%uHlOuP(YR4?D)X1KLRsrN5xPmHAs?@OFyc8^9@DuVx4}2ap~#M9I-cgk?qO>< zOv?^uS-LeGfvj|Eh?$dW4M#F3)f$dsPO3E=&74$gIEFc?)-Z!Psn&2Tb5gD0IOe2U z!|}{XwT5Qqq*}uX$Vs(^6On;mNAL_=!^tG{t>F|VeQP+CN#7byW74;VnN0fDFpEjw z8ct`@w}vyA^sV7cCVgv|&7^M)XEEtp!`Vm%t>GLbW0`|zsn#%;^x4*ME;F;O;XGz$ zTf_Ox%x?`BuqdZBT*&;K)^HK?v#sG`X6CepdCbpg4VN%Kr!~xHeokw+6#0?;Z15Ny zO_a-!5zFOxrUr`zntg?4X9tTbwd^XE!CuaX(f+i-T`N~3x2BcNM58|*TO@J~GZ(X& z*fc>CKSr))rmYCx{4k%H*D=#p1ZgoVKSr)+rmYD60DyJ;RdNF}m#{ps3yd-4ez_5u zsmQ(w8L`}qCsoyc9$m#Pq-|xBC&{f$+ED;ETiwQ_jr&;(zxls#Fx{o<_?8V|7ef0gzv16}# zNFHF0?QPUO@*s0;Z==4EhnQn~8{?ISkrT9$N05x=Q9P*=?*P)NB{t=8@&>(WQk9R9 zQL7w;q*@;*f*o^IV=i@2kC-Gp!J@^@ppjIrEqangt!13XZu6|JKL zRycFyX_hXLqfb)%&j2B(r+*gN*pbGwxTk+k%bsUhQ7FHF+@er^k(t?0eu|Egubu?*%d4sQE&mEVzsMVi`L{$Q%LNo^y4GS$YUww1q- zN(JHH$iTM~@g%>+z^|+POOnM4e_=Nke3-Y5{KvdDn%GuaVOAPc+G0rJIyOAXgJ+hz zHci2j6Ma4QdC&*Vk=7`LhAi8-!uU2DO316+wvJ$>p17*o90Y7dw$(qQBWi32A=+=cUJ=WIDb(o39rMngA zwK0TX`&5q&W5WUvej;K2joL6%er$)GFYAKJ*1m2w;CKQzvGCLS3|S9lX2Kp$%GXzE z8(3)!-tIkQL&JutZq-snLPLqU%}D$jJ$@2CII)pZZcIuYaP4}yon~*M+1Yl}UduMs zGBU>8#EeLblUhk=gM{dH9 zC!LtfCXO$8HI8pQsH=2lj+s#9aJ6IvJL6YZ0Jp$GqW<9@4~zi zn(vCTpr6Tek7(_)4*%h|FYQ-Lk}Gi_}dLAc141DKn# zWh8UbLJnkB#+G{Km9S+L%7RE7jbtoi@N||mkUA}7EVG;?2Qd{`GLC6$$#}vgL>E|= zvgcstq(x0&R>q!*WtcXijQu&iHwGJiBTX0BB$H4O%Va!FzdkmaFhLGMa`dSBQ4JHe zByv;RYCQ3|!G;0#y!WrMtq3qW9wSXkJw>UxH$2&tON1Pq;P=G8PF1z|S2dR5kyr%TIg(UXz)^r>IT}wZfYsw{I)<3af3<{v zR{I%10ek*jZI*?{lE!jB4sa~T<7v55i`uQmY&CtlG!svGGg_c~$EK~+FL+L;Urqo* zG|E)$6x5Kb*b|lON#v?t(~3Qr?5x;R6ya1N7_VW*)@t0&6DRK6)Kpbpbr}B1X~b9Y z8>{$n9h-J;-(liJ{a;g)npv+;qC=gTAPB2z78zK9rvr}V3_Ptsj=6zAIg`jL%|t{Q zX%ICV*y$=ei}Y65*??m?2Tv=EG2w*C9HOcy{(RiNLkUqb7kH_PJC}r3#(98aIUmoU z;wYo4UM?V>3NRJt1t6~BGPw{4tT;|_*~n6rcad_wn4Ep(%|lW@)p2;&7;`DituP0f zUv+qwST11^dme2Y^GhRM%Az33FJqd~44$2o)#c3bfx4gw;R@tL+Icy(n{c3`0T0LNa`+jBU&HGy&k#nK9RbQn0A!1!zro>|{_mz#;F%ox&P<$~ueD6|m@o=tKqkuB5P0LOAWo;g9&UG5;N@--ca zuTwM%Z4KS!PT+t&7eQm>E)rPYcLT;o5T1s2K?{`|y{(N}?)B6?<-UOWex-iEQL9fz zj~*=#5=prj#~}~F^$>Eckv-|Thlynsc?2+afAF+Mvif^gY20>~$B3!?OlO8J83F4p zg$Ex83Yb%CGH;S6NMpG_2{@Lg@U-07$PIV)E8XR3BC7yi7>#Z}Bfz`z8DK&Vhs>U1 z#ah0%k<)35UE$M9b|Zz&P@UXR$-- zBF4@hlAEd(6P zhj?01oPAg;P_yz8aa9tpYft5n>n=Dh9FsGij}yUjWDQ zE1p&kf5tX*DxFe6)Ne#rQ5&I5U2msRYEhBI-+>Q_?4!oXA0)Q2{sfG#kKh?pz&MO% ze-lY1mLdRW&GPyWa4fAbyjfnX@IHNHG2|FlbZq+$j1XBInczYc zG|tvU;ozznXiaUHVfiirIF=>xw0v3jrY$W+G}V$mGOX=%MV3YxBru}bh?XHL=Lnj^ zSZ~W5D`Q!}u`GwDmBB7jWiZm0C#H%qU1Uy-uK*NCW1EGvsj?zTEc2BB<4OoTEpxim z%}lDM$|^)w{*|UdQ{lQ*fo(;>jH$93sjaBh0mrfio>mmwY+?r_tw~&!WZG=8C8%Wz zSqq5HdsAg?(peen0FGr{JOf{uNf0EgM@*Gqde2}W(fG0a*9V&A-)G`f*??4*|Av5L zslwCpXG2jNzua8!uZ0}UA7>SvM~+D&D*6DO0221XzHDbXt`|(IF_yO zwA|Q2*wn$W3-OepnNKE5rDQ!IU4fABML)PT@h#tN0LQW|o`IHq`}URXh@?!-))?7=SeDg}fMeMSPs@s4(q2z?CYmxctuN^CWEYfyrA3C>yAs**+zl|c zdGNG6bwZ-6#;P&02Qihcn~-EWH`x;?o;x(|MjFe#J79e80MEdw&nsPrPX<=Pu?EPe2_T(^QB_yPY}II5ohAx%H*Up2H!Kkttj`vU-~C`tAr zLlwV61?u)4hC;6thh!ZqdxHz~WOSk%t07OTWM9Cs)Z!UbmagxlAJKx!3YK)zA7x<3 z_Ap%r5Yh762XHI{@ihDjTBux1W8s2ykfEkJ(`%(JARnycLmatwy|r6Sm!U*bHeq8S zGp>%Hip~R2ufvFFl^G5g-xR1AIE$-~q(9Y)1l) z zBFlqN2A1?Q=Q(3!9FdRW2*zH5d9Y+WGp(QkV4MrW(+Z+cGx1EzVv@oq z0y7X^D~%+zawY-B4icVL4)tMt!=giory?>9j9dkUiI?`-XCG-IvSm62Fupd9XW%6u zaSMrPftQf0ZI&#jp)64p`TNMBM7BJq1CHe|JOf3E1*V4+FHn@(j_VO91Xm5|X%Z9F zvOE$nZYamovg`!g%XI_O(v5hS98GR2c-so3?K?~>?gNIw=wrYl*-04Ri2XU7n0MPi zGgQN4sbN1o0)_1Y=rFqq3w}8c*=iP+>BlQ#GZD4vcb5|YkB}2JhphnXbfuJ&kY#34 zSkIk|L_>kI$Psdi;6Nr9?N-1C^$mSS6Z4l#)!Kh zDQjp_S7J?bA+ln*NHN)q_LhqQkC1tqLswz}VyG`cmg(LwkDrf3gLbMTB)l)19lF@6-u!1oUWEePO?LTmHL@BC?eH8S*C-v8WH}>6 zt}UjxPAS;`kC5w&DQ+mHxRDfQOC1W2k(-dl!5q?B*WN-{H?_4JH?nUnIjai8U6DE z$cW`ZGO$KJL|Bg|n~7fH^M{eIwdb;p>5m{kG5t}c<;*vYWIXp+2@a1d2jhSzltZ$j zRR3v>KUsqIDWx@Tc)A4bGbL!BC9QJ?M#cXj1G_k6W9#yH!ulJ94j)M)c>&qxt4Vh4 z{vtAxczsD}G+t4v+P|E|e?{?)+OI0U*12+1ir2Cfuam<3n5B#IG4cj-VtJF)w(8y@ zY~mH1YTUi4`KfGU`j^N~O#ezr zxpWC;AW8jxolpOb(i;bStMo~rdePtIlYXzH#tlCxDIO`&>WLrosedAMq+?nvKPx%A z@p}0M@Cf-;bIgcXZ>r)qWZ4n1UVcX+8KC}9++alfGsOIhm{Eb-Cb9gDgn}dFAEh!2 zT_fOMl5qlp9hCn_Wd<7zqpdK<#ciW_b|@JA7ANe7QLAEWUfLj?Xt{(^q=(TZ zGx$p>z8OH5&cR*i3bS46QsDU7nZ=YeD_8QtM>sWn7G6TcvJr$G0wj_-{HS8w(IM^_;+l%&jJN^GSjLjby5=ClrXKv4H zJd%l13VHYkr|~B!z8M-P=HWM{@h1`A%-eMeI~nO%4k4x0QV6>W^olki-&KX`It4k2 zu2Bi9sYO)Nl*(v)XbGz6MO258D$yHJe>l>y96@?pl`&ye(6y5zk(C51b_I??GO5g? z6+4-N*^oIVjX#6r}r+uduQJqFAGs(64M>COwH90w0eNQLsD%VfE&OpBF+nCMMJ!c{_(R_9Z z!n5)S&sIXC|2ayCIZp9>ZB8ETT+(`{*UGubz?z+GY)zj}*sOV7RbPNS?T3-Wt*Q%= zPU`w1#piyRDKs6@#Tkluq`;XfuCW`ViMZlyWYhGCqb5ygl1oq&%Y0?SY228G(c>rL z)2f$}1?Q4m%4G!EFCHY5qRDc3QqoBl5M=K>0pE6zE0Tg;9)7-L`f`n;n~j~STi-z z)V812h&!-$H&Ae3?H@YAxN9$$%GIUWXhgGPCu2SS*UV(TC*5bO{4MgU3o^yqft%!u8F+S zlO|5CA3bGc)`!mm3$MrEX$~9d8KUPj^Lfo={qc>-7c}ohhuF1CmoD-Wk_GGCmlfd^ zBADYnfLe9IStY#Mh1az4jU!wYe4D&V61vuS&3N@Srs>Lk+4PHOUS}~M&GH68y0rH5 z*7&bk-eiXL<6_P77L(Rx5Tm*dDrR1;{qF*{B66EXN`mY)e`tXQlDQS=K7 zycNGPnQH}Gy0xN<{6;iu#_xb*`2$aD22YJ8^^jKRPm*Qr_=}lk?f9D*d^F2H1T%JM zIQ`24Z^wU3=GwuYC$Xc8v_jM;hAajc@9W@c4dDlhTtuZUX-&GUC2g2l){-TN!AG+! zNibuH#??|R@RlsiWUeKgq&Z8v$TCE5%1q{(!(rK*(?wPxrnP5Pz}Vuz)7rz|C6gG# zTPA6PRwrfFpf#9T$)Gif#7DENMKEKKM%vme@CL2JWUfIxgdP~wMb;&%wP-!S_#6

    Fzb-`9-(gq~WnzSJ^E16V9BtDvDBZ3)|G~_mBfj6lgles2wx*eL-MK&R>wW&Se zST@BoH|p?K)I1+`n~^YUQ3qxgTa>2kNF+X*WpjcVi!|!CV1c)&6O*|XaaNnMsEc$a zvNdT-z}U#aGe7Xsnsp&%)~2q^tYp*HMB<}awjr3YNds?N7I>SsV=~t!&LGn^b&>6f zZH?Lia4b9GSt9n*R_#R6tW`TRvyxT25Q&dw*_B|%DviC}Sm3SNoyk0_%+g0cLMnRz zDV9C)G*dYmE8R$GE$prcJ%~_lhE`3ItYtl!sg~u=(0Z|$k7nsjFk_QOUmq5DoAzQd z&!%8%wl{IC_BDX9Q-!D19#GKRxd~=1X|n3~V`gdf`?HvjW*I;*qrL{(J}mI+4`eb| z{a|V~h)7odI>50E#?$IwYHBuwL|FrdGPAS+Jd$7FqgjR#%ow0CHJkUZ0!(^@%si|25 z(X1I`0pkV>Jgpg}r)J|wmbGI%Gt1ghAO;`JaxlS+9U4v(Sm5oL$Yib^>8V*G@vI?} z0ORltp4N~uQ?o-zm$gKgS=N#!V(`%{QwU}((YT6O;4PWTWUeKdso69lT2l@MjPLQ_ zX-z3NH9L%iSz8WgrrJ_wYIX#X_-K}xV8$E`up?RE%{hw6TywHhv!jV=?KuW;EHm)5 z_LQBP9ZSlrLB}z(l0nB4iH~M!CYUiuBkcqhc!N%4GS{G@so64+U^3UF;;Gr0#I-if1{}*-c;-f3dcZ%M zgjtKuVP>&KY05c7;-gvS63kenQFks2yhZ0RnQKwb)a-mBTazvTjEfBL%n!V@W*3n% zYtzNdtYp(XBJt5Imk`X@q=7e|1>UAhnas5*Z)$cKv8_>;1CC_@o+V;0ZPgVd&02LO zGb>qj6_NO8ma7S7tkT%Kh6UcLYnjZm3Y){a8K++Yx(-;eT#si5-4W%E+6|g_qvmnP zSLbUtA(@zcvm)F=1T$abPHUGMxs^Cs`)*^V+Q%*C8o8ZmKAPnYf*DgZ=VuiJ}E=IWN3AH760tK7?g zV|fM7RJGR1t3=9b_Zl;^+P%)qjCNYBZ?M2?_a>9M+NEbbZxPR`_cq{I-oZ0nv$gUr zv9kKT$IPsL?=v%_pVsULEb#g*WHML3%v|O}B3cDM0vyZ7c!rhRT|OaBR=rP|sp|0< zte%B!md}`(QBN!Pa~62@zF;y}z3klNOJZ96z5^}@Jv^6clm`_Srva}W>&@Dn3+*gtN3>ocoqL( zGFQdoxx=5twL1O<80WU|3~RYg{vl3Q!+)7c4fXfGI{A-jKANQ!7DHJ*wXPRqf!A|! zCUf=7nGv)mvQ@MVU|gDwXR5mEWJw}rHC>9C>dQdKrJ0%WrB?ScEbuzEWinUCyb*p` zVp}Db1B_3+(9Un3>U1YkXxEcr909GEd8JGi6mEVQ&@BU^8WP zQd*7IP=qy!kQ$uVB2HG{wVA2<2E+0?%*^PkHNP$kyuRx(nWt|sEU!--tJwyCahMFx zRE5__6_K*4ZN$v1Y8x{%qncKDI~I7=HeoVXwP09oPb90`rhswa49|2u*GLCqWtHp5 z%&c;oGc%){*7FuD@XB>!GFQ29Snfv9F0|Sf{npg*aK=x-wIB3x?&bnVHc| z>vS6yc-^*TGFP|Mu)H17ta94}#(_3GQ`K54I}$0Y-A>HRYPT~pGummj?!p4E-L6dL zYL_0CcO#xvZ+E~r0*7b1W@}|nVrBK~#>}jK-I6VH%qXb!JBS5d!8#^$6)YN-2NTt5I0SGkL-9;kad+95SXmW^F*B>; zaAsyy)GFSO1zyGdnaowOcvv1mT&v>&fMXenXIRU1av*WC8rCyYH4Fy3QOwL}sI@$r z1zy83Oy+8sGaxq**{V1eF!mquOjUH9j3ZK3$MMX}>R4cAMn|pagIVBpoWNwRj(G#} zL}FVd8v(~M3D0z0*U4mJWwktnnOQA`nHep$uA5lkwVc9ao|gP*6(&hI&@!HhcQz%4o>eJ&diL)IH1!kN3g(a95YFc zad-!%M>5ItB`3M_CFagSdsfS7eH0M!Eh#*m*2iep3_PvY969w+QhPZTxkZW}$4piH zYA&YvXqMxdNyW`cqh==k;i40m^xB`uWRbrY=TRa4xHCG!J&BE@r#r1r0)8wf<7rMz z>W9?pWsICcMmAthRix91WadNciXXnr9IwI;Q8S6lu+j5k4__v;kfD1aosl>liDo&2 zIN3TmlbPPM*-U!V&SFwc)A&D|$s*JE0w>j}A3YlPSn~v%oI^yb`W(Qq%*E5H&dq19 z`Ys(j+)>UYp@zRR0OfKXvYX|67CHlTvfoiI(4q@jRFQ#aDXgD#*VockMTKNHs^SA!~+Yw+}YV%H+2F9h&SRlcQq9W%I(W`5(mK3jeR zGR!GVCxy4lHOY-Az&E1sG~B!Otd^Tey(gG0#NCFoPEJk-@l#sn-T~g2fZR*;B*=+c zKJzXuoa^rV!>7h?kz2@#+g;sy^^;qf;O9E@r~GSpaoH@rCn2~^SgCGvRQUeF?M&$X zRX6}Z`6noqy&_%l?{N6F)pBPBU%!?LiO>=U2o(P=hu^Qa+|9&RsujLTVD3ZU$5+)h zd-oT#oU5|!eTK^A9>=ABH@TMy{-UB%a91I&A+Z-3De`>|dEg+qp9#GKhbrL~2IY@u zO3Mcv$>3^v(DOH5$N8HJ0+Swc$U}R}!%W~$mBGhlXEg_yk2uWX{p3+5oF=o>MjRbO zty{}g`NtBH?%itTaVB;mb6!_5i^|WO*LmSgTo;J1t>H$ZYak4#7~#WMMATKnt9n__N$gxJSNoEkJxEwDbH6OX8-Q;8WTnV-j0b1 zNL%;1Lmt>y-tfp!Kr0-d$Mc-ubjX9M+L5Om~jH0`@}6ZMbnK5b=w{AKXKJWnxp>!aH)H$nb2^cD=<{CdIRQ5Ipl%;WND9#K?-aU zUm@pZ9CBTEY0HEO1aO|Sa3(?(%)@?pS%*J(pe)CP@g6z?)X4dP8p|h`z4oq_6__xs z1YKcR9Vj(@a909RULBA zzOtG_F1qnoIj`=J`wWsbm{21*vduFwn8e(g4s)*ovX*CyTER#KcZYq^+721R&N@sO zUxO{$esLpR*Wvf;CF?O^)PRAgo-m%)cbIki$OcTf?i_c(VHz0Ddp2~)!>XmqvqdAu z%MM}3zfpqOr>0sqW@3G9k^a7N^cU!i!uo9IX!`Y)O_(r7UPnyUB^z!~G3_1xz#7@q zgBC4v1j@ZszdodP@f;OlNXE=7Ry-jt*^bFWH<46C9WlL1B12?5Vd%koT${ zD4m!v9VorLkdq%g(bpQQgqgabgTn04^!*q# zLQ{80NcKk9?#P4*u1goO9576F4cX#GTzY&~ zP@TIa$Td9&$?lFV27F?M+V0^ndk>O5nJ`W^y#jPbrG)X<&EfYMDBYPbb&vQ%qr`L? z^@7$O`ml#1sqH1zOqkfhc#HetGx6QiArHW(*qG2j;e8XR8ur^DyDi#cRf z!|S9U6N%Gi&D6mTfy7ZVsKNdTN#AZYGJpxwZV}0s259>@G<50%nJ_lMSLje-ddPE- zL#`PpbxiPkkPKsO-l&Ng>F6Bn2nJTm5YHW$=zcSU?ofve5ADl@X?{S%#Z6(%4NEX< zF&!Q5F%b>u!@^1Ceh#y`uk6o+iB7XpM^BSkD2#CUy}QW)Oc-~tOJ^{o8p%k9jPClt zkU46_bYrQpyx!s0*2t)kIR^r&6jaP;hup7D#-y0T$;C0;;P5de8q0+79@rv`!zw?> zVGiss>(9}}1fOe7xV zegYavSg{iw@{obj7&2$DV7-r~6?P_*9RAQ6naqSU8X?A2crtM~#9{8+PsCxe2X0OW zd6UB&Hc+N8kr;?&Fb5kn*KmN096mM^rh5E)7qV^MvyjWFaO{|t;P*rD9_sP2z6G+* zN>VRNjI802lXE34tC~KJ$OXE8@5vqst{$mre{;!+GZUf~k#~BfV)}N}-vlGmL{rkx|Oqj-t zUX~+Pn(Z8ijD3^2jxD})%AO%q;9Q3}xVxO^G0kLge&Dq89p=zpasd;G0(R08&i5}& zkO#r8i#%Igkc0(n7;zUnOzghRV?qbxS*Pm&QeiN@#1Z!xDD#;x6^Zc1^x3q@u#>vf z;aB&T%a||~iL2f-WA^0^vuBMgV8S$Y1P4044DuBYxp%c($wZ4x!YqR63|)9^4iHg31(fN?s6{^#)TNiZ(!x5YUVzNyf?PsnJ|?J zWW=rMhB9IHfFr4`lLwjDSlx#o2cR>0Mt0HKe}PFD1rIqwY~?=8go)4d5+7sM7>=Wl zIDAZC9%aHfhiuc6y2l*mz+v(@6J~0QtER&a_X&rFihq&`qd9hDpfJpwQ^lIXBoJM2 zIN&|y2r;jJnhCeoRla=unWXzeqOX80g^mI-4mJ9UjHJi{*Ve+mBJZhhoACQP-V zK_Q+q)%LtY?!B+PkU~Z~2j{RCe9_p@^X+cj$UOp&HV&m%PD**^|cZ1ttw>qJg({PkKkwymss;Z+g-} z@)i@uFL|W$wnIjUy~BhFXH4qR6JvU5=2T&4{H`MzJVf4O!qgM&K$O8O0Otj+dOyJ* zI;c)QV8XZx%^jzcLsOs8F=ScX8T{Bf6K@E9obQVzX0QF4}d+}KS|J% zUxoi7q8IdcOX>arVpQPI$g%tj*o*#;EVKz=ykkY4pdCsWV6E`dV<2=fCd*SS4wR^H zr;2M0*o$kEA!Z$+-G%LF38Hu#m#j>&6i}i9f5gW9tbo0^Wk~#g`C+>)3B3}_{$Kel z2g0bpU&e7{8L(Gv1+vsoX z`lWp}VtH|^w}@yBU_}M~E+5O9fW6SQNN=pm{jGj&mV0sQR6t)BBq7jU@vHW zQX;<_u!$GUq^@tFd3n91v(nEH7)577?`v zR#f0|0(|xXuot=+>37nO{3JVnSkxm19mv9K)banH3G@Y z>L3*kyPa9?b=k54`c^293Owl$OBcXiP*+l#u?K?CY%ujluZ7uMC~j+Fd2!pch-h12 zMFpOfh-Ev#Ug-9uH}iy(DGmcMpJA`H15v!h9V=7p1eB=2qZYC34A_g?#S>#@ntS|W zSE6`vyH%#x9Vk(OCpB>N8n73)Cy7nnouW+$6UuP0+>Pa4R`&|%Jy0GMc*-M|YQSDl zPf{Ykm5$5!@i&~d_F|!z(z_gP9~4Ff9uJ9SFTh^J-kuCKl{qp}!$L2jZ#mpr6h;M} zD~Y8aU@xLS$&98)hWuFS@15q9o-cUh<0DD1oo)V#M)`;QW$Y7RxK|?B_ z4@G%Y;CU9@wF}q_8b(UwYrQbu!ZR+zS?HzgR}Oc76h;Lego$MYU@zhTPlkHWtQ1GG z(2F>*9Bw@dqXJLR#4-x77crV-t_#A_9&6L^$JH?`_fi@vppQj)RN(0w9KZ(b1&#BR zSOA$dQ`q^8XSo+tsDOSj%A*2L?!+*#Vqt9jx2|J6bhpPk1OGDHefH}7)QpXG4|`iU78sz^dgQe zhkG0fqXN%4;kIAEUPLp=%sw`^83PkeV2S5{VoAi4P!bh*Its_M0ej}Bkfyy>H23pT z`sbXOI+f^N;%SRUJrn3rfd{Sd8Ck$yjnm1Wvk4^6N`#TtA0cUfi4(5zPfwRNyhMSk49Pg`P)xvv|Ue2I2%Z zVkQy(qJKV7yu=GCQ(Op?sK8TVxJ?GI7k4p<7vbdCJmP!Vmn%D$KG)A z9I#jCdNMPuG;4$W3d{dk?f~pX-08_Mtwu)>_V{?qxky0sU!|M}?(T&@+I&pl3a0?qS3KvD^!Kt^)e=D31zl zRnQB7y`UFKX}T>~lzUL|C8Bs)FIT2`1t?KrITiORU@z`95}P2$^a{UWhUXk#XQ3DL zMmgL!Q5Y3gP!Vqd_9EUUnQ5e%1CsBs#Pff*B;tE0i3%$z^Y;OJ<{yxzrN=5464}f9 za8YPK0&-MXMOFA1uvg&|vN17;c`!mgb3XG^mV2q6RY3n7Fp_lSQIouyn7!}r15kCR;B7P>B znS10ODE)=yUdpc((0@aDR9Hs^{SMd*`h%3FJ;4_I-pn2%y`k_YQM|0bDpULol&G+t ziu(t!7xyoTjq4B$Xu)Ae`yUIvpjNQIB<^A;j0zj5h{XYW5v@svKeM(kJ_Or_ROq1M)&=avtw&-r1I!#9UY{ji$_6D7H$+KP*j$-c0rt!{A`Sjp z={s0p~Xc19I zU`2&3Rp{n`z0fU4?|yB6cl@yBi9l!uBd+cfel69wamS)0oiW*KV`M!}2l=kUfdzWp!&2QFmZPg&kFB z55Qh%HRG6lI7uzVs=kZ6g+>0Ai0lfj`QK6R# z8VlG9I*62&&+?BWnwK}eWmE;AMTI^p_F%wX>;y8X(s+bZF1C?ddZC~CY%J! zsIa#RpA6UwKZHE+2j^nj1pb|$eyKoM?nO3LK%av0sL)phMS#7asia(l7ZRos-wQr; z5y__mKPvQ7MGgb(6*-)ok{B-ea>EhC^5Wwb5giFE-0!ABj{@w49!+{PH^I0Qo|Qj_ zC0@{sl8DEmBq|J4=Eni{%#SAx{!oV)aqxp)=B0{emU|H=R6suwU9H@e>0PF=_Ny@~o{5M~&B8r!Fb!CccfD#o(skmzadvVv17=LP4 z&WkhGv)s$Np#u7iD31zbRM1U;y`Y;(>FmOy0{w61SN~gx;$_`hnc_B}M1`>`?smXl z+#Mt~L5}*uSQGX`ce2n6x~m-S-6)I-<5a{wfW3%&Nwz32``kwYFZTXLrGEefQK6u! zJP6pU@(@`$=b}mTH{tXS$iqbO!XK$j@hDKD!UPrf7+^2%aT4Rt1PxAxVjvAWktbO0 zWj$E|{V9}3g+>+hG+;028B!*8v5^HMDgMlR;Kt6 zC{f{1755QfFYaScT+48(`1;chYDJ;%Xh!v+!s2KUnDb|5*qGqx_~s@q#w1Owj=- zQQ<5V*AcK6w>gQ;$cv4>%zKktu+R(YR1UW@3Zud~Dq>5(Uc^=;Ll=NaOYRGoU0Cj= zbgh8CHOiyHTotqpU@vG}QkvQ+epz!n7J4b$m&4rwg;C)=6|o~=FJdQ8R{WOd&MfpI zb}5IuD+;5+1u9}Uz+S}eBum_7cMii7rhBm5OWCsmdN-6ug^N^Bcfejy4^kR;;WZ$< zGZdb|sAi#;(z6_HFBC?Fc`BkeU@xK%$rj(H;y!~z_hUpT)QK@@M% z0hK960wpS3t>O*@?8ViS*vv8zlC#Ua(mRTnUh3!;6OI99RJc}!Hvsm+$C8Kn*+avG z`whh}1|LK$FL+#wh{gjeDqOEZ3xK`QgGq0KrTEq22`u!oCYHl(L}668QAJDw>_to_ znF*HMcajfbxtAgp(3?;m6>e5RQviEG5h=CyD!tDZ?q7NqruhbF$-wb1Lz#D6-?2&-IvPY43dya~D1;@R@%{O_mi-6fv`t5Bwn&@7$ zV-}5i2GH>)o2qdvV6Vn;WMqO*f00eCR*z?)7usA7_XHH;?KKr~B497#Bu|E(3Ujn@ z`|e~GdJ(6T!#x#+cneKMoCes7m`O4d-`Ie;LAR*Gso5-+dnu<^KtBWJcneJhoe9_r znoUa6K|l}&5i{jH8&wu;C!9qrFYfFX5uF1pyoIJh=K%IX=aRmKudAO+Trc{(MIb#N zxOh8F6}SMfSKvZ&F+)J9*WNE8ikEwFWr}$~!JBF-?h?RW+1?&YqM#`ek96Zik&;E&Aq$iP!cgd9LQ-D3w zr-^S`6Wo;fFv2q|^t_)fhxr#JguI;%mTO#5W{c zln+>ZO9C(UyG5n{9t3y;O;z~;uvg_rvTEtqFn%JkSL5eJq5TEOctcH9_!Y2M;Wx5b z#LsH{P8zStAO8mye}V?@v#COV0rm?0O>V`X>G+4)Ugp2~SpOj#@31M`R=920vt10S zeK)||y2HX*r9bV_Q5Gkjm(#k1WNmTWF>MkT_IKu#UCkIndM&aDizRI zML90N;hfBU)TC+p#8HzbG|6fxi)D2@b=cHfMmCW(kZ#iGN#C-ured#!XNP^EH}61c zn9v~gQ^rqf?0it?v6EzUgRHGc>nKtiAWfKrD^k|g%=I+0H8Oc;?fOXV+X)HY&!N8< z&epRp_-=w8i=25?XWbG(nqRch9q2i-0ja$48~&e|RDmkIQgv$}g@IUM|AFscUUL{+Q ziFZ|}6i@!{{D0ut8BC&r@z<7sy~zIhpV}J1F0r6j#1Qhm2c- zg4j6gOk=C6uB~d2t$*Qc#n@wlc77eO_tqBb*p<2kFExnV-NT{-` zAA!0DKZ-{9o1*MJ!|O4?A4!Y{bW{n$(ZJNHbE#Y}l}muOp@Z!(tY&Zv8bpo(K9OTl zTKbP;J*NM7Km##3O-BQKCv+Zed3Z1lNggkw$>0v1K+s2zz@OeWP2@!ISiC2p?$%DG zwDq#-ZCAsRoI;!%IJFGRX}}>k{5)N*lZ6g;I*5s!fzl#8ll2(kS%CDhN(Ye+I#?Pm z#*(qpMge!IeTMRdZge&TLJQ5PTW751d(1gdVHrFZb&qBYy|M9^9p*eD+}rbu^b3Fp z-lS5!C^Z&XWRz3l>}5NcKjawFIu0B-N&%&%^&-||TE_#@*;zKNdAZ5=gj#*XaevpE6smd%N%dk~k=54-*bGcl8haYrvNVYmXA z{Pm}DR|1WM@{u5$(E3`;<|l)e$Wswn=gm(eCig<+*MFI-l42 zTC~ShppjS3f;F#IgE6Sx3S=VFP+CH7V?8GHc0l@Q8ytzF8E%G?S@Yww+R6goUqx8nCjH+Bi% zDPI!pPJBg>1A54R%7sMB*PvKr-=OZAzom>13#R!yqFwX%<+*+U8o}^KWU-{dd$Cjw zufk%G{0IsT$wg@a{mgm{=odh47Vnp^6R&-Y{7ST&{f(dpgsa9Fe+R_^`U7>>{3m5* zPm?gbMgB|JRsK~V{|y)+RAfWIJ#a+rP^qfdRh#OX!L=i5@$e`AfH#qUQCd*lu%7Rx zX8|;@F*U7+f1VaPm_Ges^2ojZ$A<@9pLd{!VIDKfb8*|mLRTs?RTsi|0{|MwpyRy@ zKSqECo-Lm5xU)x;jA%~Riql_D;xg{GMse2L71(wb&o)?{VCr7LV)T(1#LzPJ5Na+bgBE3+$zIAgVy$QL#J~`rgfRGtJt!6XBZc-!bgNUn^Pbi#y>pnCfS0p>)WzG z-U={6ShyI%D5=FV=GLGlvJFa$p)cz(hJJuD&5ILm5d%Nt;{TY63ip6+tmYoQ@)}0IFT>v8<-k4*PaLAMXASALYN(*H-)?+BU1BxSs4mY>T9>lq= zJqgBJK1U?%?Kn&J0@{4v8+F&Y4+ZQ}gBP+d5w38*B7Fc5@Sd9%;C*vzeUrW((xF-h zZC`EU8}UT;M``gKzu|F2Nq>30fKd6LZFfhm!-(8o_Rqu7zt@M0VgFTTNl$Ng{tjBx} z1(bPfWWhlR(vl4@zhsfm*)S?`r)vrN%`=m;nNwQ_J(joOsJquAXu(!$`}cxcq^_Pw z_oAU3Pa}{x5CZ4J2 z&l2j47jx54Ife+gd2Eq>91zF|AH}mBw2+a?+Iq|^YVrFR$AdqS(I_o7C$Jt>9!Fqgf~?# zA%ok#lpr^1hM_+2mu6%F*ete*sJp?-sK8>wPjOEo?D{V+kgouY*cQmNp2k+&B3FWx z$Yhij+EuK_(5?og6Oic^mOdY{)uzfdB)Zva3C0&1CHxriua@h;V=+xZ-7Q^D=@`=> zxq+}Nzp+5R32>pkhSm-Z?R7I~iQIzHf||;D4C+=ux?r#Q$7XJZgDI6Y*EG`I^lb$B zpqF7UZLQnEWs%*1x|_R`@)p?+edR8~uKw-<`5wT9*3!t(TK9sK$bBd+u=`n$fjt1I zB(O|_JxID+euyCcvVn#70O6`cdp!)YMfC{kZtGDB$EXI$V}xDz;|1~)fD7$aUz4`i zlb|K?6iN&0Y1U&{&j9l43%}XcHW}k>roo;igWG+frG@r7>oK%90F{Q8X|gxT;HKXq7_Tu)Mda6O z>}~K^T<@Un*50LbjBAj*N7$9WUm$+~xX@;t@9C&N9kfI~L}`J2#Ciz|KeoHP~0rpo-Jxc&t?WLyvwy9V(qZ~C~(m7!J{B@2Ou zAIw5&;Vr^?3~y0Del^)zt=+xxOQP?Wi_JR%mP;%n9YXK}M(-xWa3qHM1SKjDCCe;S&8cSr>Aa zqTZ;xvwdhc_5}`f=gWG;xohj^SkyJy0Jz{t`f%6_k6*GOu=aet5$bMcW9mo;MsjXK z*iCF&Aa4d3x#z2*nEU$1hL&NnIVg#2fzpz{CF?QyTLJPW#~UF24#yK$rI_2RWG7%Pw>zWm z_I9DBnA@wQKVdhtYk|BQ;9|cXSyMAyb_XGmJy2R|_hdb$b}v9aGi5Kvqc@i3@yLjk zeSJT>H(A{DJ_LP|9v;R^g!Tnjh<7zhc{%0z^zR2DOaB1W-A&HKyhp1h*`GM~>i~jr zTu2uQ?vn$7E+oGFTsa6>OZIr(c#_i0EH-J*eE-uVQU@f~%sJpSlsL8SmP9f}unhWF> zz{PGotg%(36$C84p|tdlWId+$2tXN+eT7Lzk>VDQB`ORKu|ykKLb!3jD5p8! ztJ@)DNk1EP_wgKB%#8;0QO+gW{TfrA>pY-?FR2FH2-7I#e9)``EmdHKqFo zQs(Q3a$8eMIj#o^`Q;Z%KHcE9jx@m2Ja}tawl+>*1J%5g?E$N(#lgZ zCdxfTxxRZ#Iqn0hG_8ZBF-`0JpeOPGN=xg5tjDxI1SqpR&eK}lOJF&Dm;&z7BVCk_ z34Ig-me9vgcUK;#Dtiy|+&#_m1QBlP$s+wJAP_rm7qLq05G|yaP8l1lnqjWOi#zl6!`tL{ zZ{Ep?BSLO#>qPur@LTBbq3({nZ;I*2Hu8ai;Y+>g1_tVf0MlL^1J*q;Y1AKqp2){2 zE$UBLk5PXLXkb4ZKQnu_$_@@Qi0Lyb^OStvb=@=0*B4M``T7!d58*4CNpDvb_1nnT zgx!m83gmAABV(NC#*8%%tC#P9Pvm=)mZ=|DkD2-rP^L%XaLK#nC*s`H&jjPWnlUNY zFF>2?zoPCsf1`l8{@gY4J7L%NM}hn&V7N{T(RF-Zh>d|DB=Q$Z^ZjquqwoI!(q9bh zuy5OZu^q21@k##}`IjQ@N;kYko}mVPCkYMQ6*Wd?fry1YE9&k}cPgW9y0f3mW?<;y zJq!%g*#RPGZilJCXSPE}=?;RyRU;auwnpXvHIX?{TI6%F9wVO{P~LC6d-X+Su0Qa2 z9(_Oz4<#}WMLhC(JJ!H)tel4VAYzfvkGi|F0F~LMis1-C79_^4EmXp=FffRps|{)V z7W*QgB(f+bUu;gVwis6cHIWLG7UPPn#~4=vG~*aoCYSrLN=~Sw7*_?C#kd;kZgh3Z zTa5h>;~GS`{xysAwSYj3eDcin;kw3F?1EYwv_#fHX%SYk9wY1tXdo`eIK#zVCGElZ zQ5vj?VFj%hdEEZG1mlw)?pqlVbXk+?4K@p~59)4nJu0wqY52~vK4I6tL4mv>V1%bb zYPdv0Xd3~a$i^rwv`tu#p=}B%GhUisn-T5SHYey0?U?|!0L22>5_Q+Sm8swuva@V$ zU>ISxF)&d30)+dVU}suqWK~N`r9Pwg10BEZj?%)|j`bME_JH&;l2Zgvwa*vE$PQ%j zkai?kQKn5R_4!Q4QQcA_JAu5ym*8ghu6YgQk=-$6TJ^(NxLuru>lG>Kq=3$jB!>~mdTTgiKgB%EkL=Hk} z5&nnu7~#Qy1`aTnvHg=H1J0nsf7~OhFCe*R7+=`&Hpy-72p<53RsF4mcAVvb51reu zPwyvfQ!s19`Yd*JdsvkV0(kzpt;t+lMjwAKNN9cSOYkrJ%qBeR$42B}FhoOCxmVg~H>pj%K4 zsJo#?O4<@w!H_hO=vEHvj8{NJu-rtfhk#TzHMTZXrw4*GgP2GQN(;A@^%(BqfHIHU zSg}L*K=X5Z93Bbo$A1{W@wkY^X)NXF%JfLexN}GR4=P4M#?o>m>h91{)MjlxV$cvd znh3X+6zRtRf$%w;hwvL}Mz&z1;IY6bavVyF{CL)5G46sJrqB zl(ArTMKBYIaGjSG>63sc35NS7LNJ$uoX8a@Eto4=kHJg^6bF**y*3T$D$?Ej)iYqf z26PMTTGZXpb(FNgh9j^kM7ZYbi}V|SKwumly~~B5ZUiZjn^0O%H?tmtx&=_?u~OS+ zDsgV^)-o*9fHUWBL){hLPHww*!uLA}yRthA4R$H{mYnYHcO46|7iJcFzXxY{*HdYou7hX2(ysdhWNlpd z5p{R`C))Q#Zd}J>{0dx|7f)m5HxTR%$?vGUr9Y^~-jHy>7%P7g<%a%S z%JCOaxHWJdn6^nco#b!e6Zr?Fwa34#$M)!kO%*Nu~I=E_hH4H2#2pA;&G0ZmB17F#Okq6V(c%`o$s0}L&{RK z3hM6WsBOW#m= zJE@`#AZbb85OsHKBkJ@QHF#r;-9i&(W1`*iCgr&{1==#a8S1Wfa|&>{#H@rN2d!HW z>sq%g%d{1+#XRF(bjb78AmW=}l$Phdtj9d}1C;qfuhUo2nVZ_S6m!S6>!OxImbZtP zWqAkG-K`y|&>o{6npQ765#a`RF4A`aB0moDrF6(af6(x;FiOk8Zmh=~><%b%x$}i_ z$?bm+^0@sy%ZU`C+Y3Av-QK9X!F?zlFI+C|Oq6|za|8R8VHp5iKE|fn!D)2a89qO zDx%%;pz>UUfksyN6lzlq9^O?AG`-J)k2(G zYb6*L&lm@m5bL`3wHwQu6!cJ;$^|6Jy|Xz&NWXe!*V%r2qrTp#raCZS}OJ9iz`4($EvMmHh*%1)L*3n(LS-=pRCbkI zPn_Gkp$yB7z##=VJIdO#s<}lPai^}uYy0r7?I!Rfax+TH#4W7HOiTqdaFZ}qLI=g` zLHy(+zlonXz3o=~$K{lYGH=pA;;S@VigGJexTn+p?;3A|3d_{(sJpv&PJCwPJwEzeNI zoqLwxIx!8o$U9c@9HcBI&!g@hy+D1j5Ad=*M_we(O}|3XIWz6XY#WES9%XcjfO;#$%z3yi1&` zeXk75`@kU<4z_83Zf+b=C6zc|y%ukRKL9zA=_oCv4_S{PeFR8H&ai5Wv$lARpTfz( z$0WJ&PdeuO6eJ7kGt^!E=M=KdReOCn?lk#=7}xq`3By;wARs;!hhcm~>k;xbkcoVQ z(!%(b^%%x?fINBpn5A95C(bSXP=@74;LP!#P<8J6FGgY*1?HaH&| zV?--He`sv3Z5buMgCmhYP+BB^vK}M(FChPxoQI$BEj2Et^rj+zk-@$AyBvS!CM5rW z!D9RubvM-w6S>$p{nEw^B)w-s&Te5Tielx2Et)ZNo{09h_7hDxP@As0OjWCtB8y#NN| zY4&;zm34u$H1|f`RrjHAdT!uQS&xv1yMB(i0U#uqyJExGVCS65hM**}5lYMS#;nIo zZvrUu8q^od$}FP9oMtbDO{u{B+Kk|))(oAlPx_@*Xrs-c!?L{v>hA59)NcK{eyD6k z*o|*pAa4UWpB5}4Y6t8KN+SJGT3WVcJ*H(lKpnhC;KLLKuJmZkvN_qF((cv{1pQUB z=NLn7d1Zx!><9&xkeyI>KX;~TUsN0_yAa`~`xoiE0)dopUZ6dNw~yU`OJsMHmW(}E zkIC2*kl*3Mki8diZf9?Tae~bJ=)k@Y(B}BQsJqVnC}1tw(jWr}yFOmYS@QmX;Wp=J z>b7n{lLLTF_(7~k$NvM!CyksnW8B2ee2g4SikmxxVD6z==Z%5)P!PjaTVeg0 zqp)-2$BHVjTg-z{cXtNUip4x)kW>?PCu$1hA%OFvGGvAVnN0+?;^Akxh5?&MElNv7 z9qTa>!vT5o@Mn{8GisL+M7sm^1an!yAYi-=AO>%I_jO9k$KMD>i@ynV_u??>xA+^6 z6d~;9n+xO?!1?$g(+VWwkFy|+zY@>eqvUXq5*dlol5hm;F$tpp`A-w^%HtEZ#djpB z?#xjHW2DB6X3wPLXz*C13F>a@7)smRyYWcOT#hBi)gM>Fa6B;Ch8?V@ZI1>vkrPl_ zOeeA)V>$^?reV>y@%%7GPA1x|okB3Klj7=R$5zHuL9q}{L)|r>P8n;ge%s0!gk9yC z1@c*d;XaqF^#ZM~8o{BZ4d_JLQJVi}vmX6F2T;Z{JgQx&53y&-xum$gFV2a1Jo zKI*Rg0?Jqj+g8a~!me^$fqWt0Y}dm1A=r4qXyhW05*d%u!nm0A7{(=lylZ9FZ|>w} zb}6ZDcS5Jk6G63bE<@doOro51s$D-k{d~Ec7*~8n3B#4ZWJ3y%L>kg$knl?&C@rL` zS&t!I1E}Qbv`yo=mLxZOUB{eLK(b)2N8Q!mKp_tX4?s5(<63VjVYnF>1j9*AQ{zY+ z5YAn!{4POm0VR>CC@q#-S&y+y1LVCdY+~gvs*jc1NO7aLcgT1LC>F_`sJrsJC}X{B zhXHaoVOM!ifqXCETol}_r%~JoN+S28v?v~6Jx1{$Aa9ZM=&}&TLnOJ)hY50-jnhu9 zlJVFG-jp@wM?keu9!1?PJVrSSW!C}nIAK@&M1lMy;9Mwt;L=c@0ws~BQCcX^upUEs z7LY$_=bn3lkI#|8Ek92%j>dU@3+n~&SXeKj?$%zSw1qW%fV@oDmA_ITzX}*(ajp^i znTGTlu!+2m(n5NJ^%&BdfP5s5$$pDyxAk^;u6KYo-`_>u)xKx)Y{~)hzJcNS;sXN% zbvi(J&YNTKTz4m^`yYao$VVv6{f}9X?tcQvAAviaw}%$`lmZ^uX9VLTaOd*YVxL3C zqW%JP_vTA#vlgo#AYT!7V_z4@-vCD3yu*dKhc)7jidN-Y&=UC$r3L;y>oM>j0QvH8 z``Mhi>Oubcpv`w|__zhv&3O5dobJR=T^9TqoEGOVsJroBsl(zN)+E0Xb`!rB$bSGv zoP5>LBsI;=t@zDR-+)rtIAqvR`4c>e{1>Ig`xomm-oF85j(qlqkunc_So#WUuPyzbf~r)et+0K@1ZG-XeXP0h8k01@uWf<^j5Kp>I) z>NqBn84F!*VNerU1f`{IQPyMH76arz_{3)?f45!Qu@)z{`?3Tg5IA2~#J~sPT)E|ePh8rCIlfDKZAJ>p{ zYW8K#jF~mb=`O8BF!%mkM+W=IHt*uvV76qhgSy+Vq#8?hJw5J8jN9o|!mutdNH)_E z|viEeyDg4x413+x+# zZgFjlx?93K??|eGIQ>M06=a}eCB0&{{B0HI^56tj#c`MC4C*{TkG;F8=%9o)QGw}+(hj*91gGV zHB1g8#?4C!Lo+b;W}pRiSJq12H07%6a3WmS$Rhm+Adqqncp>Gwi!{uC!f)1(0!Jc8 zqO^n`#d=Km(SS0y;h5v}iz^;MmQO`O0e9(`oV+KrL-}JNV5vL~b$8`>s#j0 z{p{Q>-FAYxV^mqtat6dK2WO)0KAlB{F$YbTtS*j}Wc4Fqz)huZX_Yrt<_o&#(m z=c2UG$FLqlKM#=KTX>ma)%*DAZMVqzq`18ca*SMNH^#A`SPbJ(cjXsS#vXo#H^@bV zUFG-!`C`CnE4I|s;}EMVe5hYjIg}sZ*AA9TKu+XRlorYa)?+9W0jYL0!9zF6Wd?=^ z=}86#>g52<=_^ooHCN^tCmR^lTxDQTb2Y#+E)T95(aa4Z*MOYJwJ6Qy>sXI2PXRQr zXQtP*Vb&HdGdsZl3S4yYTEyUlujt3h^_25O-ayb_GKZO9dbMIAK6!fkxS*x1vKt|7 zskjMsckgEEP22CGoBGKugx&1a0{K?JHk?gE-4)$d;Jlr%E4rgVz7sIA%E2t#5r$L^ zlbVKMH8|ShE^s7rH%d$FJ*>yX-U~>7P#x*id9f#z&soUG3Deup(4=tt9pCj~9!aK> zT;E4k?(6*ocPZOseCP?eo>?0YK&dssgQ$BT57As~g6-vD!tTu@1@fbStqC4O-4#7< zf}!I+VPNRiPZ}7gPXR;&@M$pH0K;oW9A4WXPlJl%@=#jxpJhEJ|2aTDtHqlLZbKO@ z&lBygzd$fP7^TmQ#`_|OmXMcFcjYge7I<2*i@aiBh~rfQ1NAk4h=Y^XmPWzR2-%Y@ zaJ~fw$k)MwWAad1FmJLRgLw;(KV@a!FjneWM0nK4(<-*1j+VE{>G8eOu^`?oa@olQ z-vy@y`yT3U{C(<3Kd`C5Q5GMbaT0zB_yc0y(DbrQ9|CJ5QwTkrYQbGa_&wB*K*krc zC@t(ySdU?U3TPl!e8T;#{lsv#1!B%#A7kY+vbigtcTMUGuvx%gqV8tDqJs3Bt%}_c zZoPa>l$-dbl;c~V(%}Lp`?S{AR1R((gpE^tUekAQptEw04q zTf~WaZTm@T;oi>KqWnZ@_weVLQ|2=zRrU*{EjPcS?oR$jy*|NwXsY~9j2r%=gyBzM z((5>vnUIzLf{Ii0P+C_0W<6%*A3#1M>>w+dnYjE*0r#gHenhZy`9kcoKp?yijyJOz zTg8~I3%Q(LE2Ju<4MJOKIjy z&AGsm$lNF`uk)}T^Exk}fxY9kRajTl-sYQ5^4HsZ6m_5HpP?phVn`op;-akfvjrd; zqTBL+@g$%11)%#QVI_+R4a1mlWghfjj76T@Dmdf=~xy6A-;<;9qOFXw) z%Mu_avLs4N`BJRMlrIg)7bwehDxac{k!8s3E-p*3tL+u~VmkAe@ z#MIX!F%`tP)fGz^RsyD62J~aAl|jUYJCv4zRauW2SPjrXT%YNHUZ&H9FQrx|pL?+e zK`yWJhFY=)ZolexWBO6nn&7r@*FxRRuT4D`?x<>nyACmKsIr8iCotv0)!TM25b-H4 zN(;9)>oMFufM)1-dJ`Ti>yg`iS)btQGYZ<5xMc$fSlk<;?tW}URTlS<7R0?VF>Y&< z5{6BIDHpfCz}O7LL^elhac{wTjC)H!nMc_&&CJmPLl^gW3kN>KJ@QM3Ik|HYFDsXl)ItsW_PCod)VEzzwANS_3v3A z?*%yD%DQkHLfjj~MD{^xA@0k13~@g|nGmrQdtn@qGtLemo4ddt^(`xv4{?96S%?Rq z?q(090t<0ie>sS->;F%Id@x{y$oXs9h#|T|fKTL5lonkT>oK}PfPCq`wB-hq?q;h? z*z@t!fFABAxpy9zfP1Q9_H+_41QM2kp{ToS!)S}9IUM$vS_8w=N1cIzIvijyoJ#Z> zAtQjZ2ef+BU3CM6)6KyBrIC=w*pwq41}J}Z@cfLBTmdbSW|WrP7S>~OTLE>jRh8cs zA$~jsb0rxkJaYG3xSx5Z0R@)qQK-ACM^d$Qx9a|K6k)e~bb*`z z&Rs1GJr{) z2sR7uB-GvD$y8v$4el?e5O)2i7RaXo&IhOO2}5wFgNW~NQCe_kvL1sw3sB~!(CLl< z^Sq5R?oT^GzbSO4!sDMNXG6^5KL>U9>0Bzb`0M-27{YGvyaM@rz=)qK66sjdgpbP7 zPh{i*P!k!8(h@L^^_YMQ0r^R%e1_F6A2acJ4En${Tn+kj#+*=N^K)3())z{05e>Na zf*pmCN`f@nM{4|>{b6)_4x$K)zD{Yy9RX+CmEr=jkaZ=()dU8x#efwiRDiE=AV|(&D^_^%&>9fbt7`Q`wutInVcz=yvZf;nkiWcpm^U+(%>l;kIPj;%!Rr-VcJ^ z;(rKr_vm3-v1b)RUvG3mUI0#4zSEzGI@t;zE0v!0> z7o}zADb{0lo(42120XTP zqO^v1gZ0=DZvyh2r|IJk`xiFFgal2Jx5(qZz1@)ru0j)e2Rs)3yQsUt_b6>c&0#I_ zK4Dk>L4iCSFyi9A`^=qBJ_H)uJyBX%AG03A`UFts0eA-YuTRPCK73YAI6s!6u_uOT z<#TXbs9&J&PJBr{7Ao#VUlDdQUl+*V07j_1*3wXME0S-4#r{r|7U}n_$4Gwwlo@Ao zw`lp1M7Q`;jyE5X{0ySS@eAs1;#bqciTz;t&A>42|J}eq{R1GP$V^p+jA*T`t_&aY z{0S;{Z=$ql{$f2w^EV*xj+|AF(HFAWFIoN}j|cTH!3rBn@*<%h+b1yHz-1B6g1VcX z6;Ql23>i^@4{^E^&zvBE?~d)?S%NeJGqAY}j;((n6k-^%(M8fCeH4eW>EK zjJ{Pi?zze69?e5=)lTH{!OshJ3w}P--GTY3h+iGB0X6tABrQO^+gq>$wuOL48Zs-B zEmea?)HF9W;`^9|LB!TclotG=tjFLN1C(!X9FQ|wuP!cC=V-3(SZp0O=L;% zSg=c>?gp2pw5`Up3~FwYWr%V0%a$-K2Mhw_2DkLOY^kXV;Vlmmwn?J2@G4l3;jIWL zA6{6E<{aF7U5Pwyf8`EDvf-@)9t&?()ZO4}l(u_(3!+<{2-m(wk-jDn2re_f;Z{Z* z^t=`biL8y%LR*LR7+NJDf6a+ATG&{lr6+(dR%!JS-i=P1Y& z^Ta*M?E)+e@@A!}=_CDt!3lgQQ;WN?8gs*A>?pW9uvx(kWDgbG(*^g6f{bxUO?`_> z?hSNSa%0&Cm_+s^dkAtrR-;L@r3wzn3-;+P9R6{Vo(moj1!?lgnx-ImAkZ0;eb$$Q zfWclvvImm~vl{a{su8SVK;Xi^>#h z%!zFxO)7Sni%Cw5pQTZ(If(JXWKQ}>3lNF4k~w&JIIGc1T!|_-5?BOhavR7IDmTjI zj?Bq5)wHPGQF*zILn;flrZR;mPedHWquq}?< zp`pe^!6mwN>sIbX7aROMa3LYgttwhi&Icxu3s9zt#2jV?+i%bMhYu$Qk_A=B%2hpcEjrjcO?YD3@;v~>QRP%OAlVPOGL29krN>yCp zD$pN7(s%$)3;?EeN_8a|gT5>ua~wBzDBomNzKbfq%9Ss!%CTA#_v^s~+hUwt9W{5t zbd9PVplYvmwacnnI02ve2#VPPW`k3-Wl=dvu8YcN$T~$$3|14@yNPVLe6$E%N=@J+ ziW{Q-&iQUs<&CQRCRe_0H};m|OUIjaHp}dU?K8R77%MkNo4iX5uSc)A1*q1#V^sZA z)YD$E2(hm=O-Arx;OK8lH^1u<+h|=~PFVj@#>8kTK*SRuvmUFq_xCb$3W!rw4`O>tO?|4So_13@*5OPkewukFMge&yYAYc=8skE(dlRWx*Cz@5GF;p2MRvqxvoz(VV~7*>DFyqCW$nERec=k+bjIpBQ}h}Xwbm`J zPQH$M>f}1A6^Dc2rh;B_Zj9DntVWb3;0?$IhgK+v_R`A{iE>eS6WpzJE2-7DP*1Ju z<;jF%cn{w|jhDBh;&Rk?Naa+j?ph3Ut##|G%6DBQCpG#3_1*aLPTq^k^7!|GZ>`%} zg+FlNVDXIUZ4kzbfQh(VWO`Ilj{2c0>aU7Eaz$#54T??MXUWG=1t(_O(6`DbD#@>; z68Y36HzWtHQodH>dtGFGqTaZ}ttmGF;0r!9mi5Wcpd~a(7y(=fnxtbT^0|6at)6`0 zo`jC(N-BDsr-=Z&1&6%KX@F zHp;(Q`Ig!_71!0e!fnC&rHRUSYV~-v`n_A-y&KyIdBx-=y`xl2Z~wo&Yxp5L*0)r9 zubI~_KSE(^-C64UPpGFE1B~8-Ve~w>jG-R$C+w8K91y+v8u=NFAw3+l_UJnb&wIZB z*IIX>D*6@moFaT_JGGpm-=ZR&@w5j%_RU}oJAYN}m8$j+SG#yO`j@inm>isIzgqq* zuQM`DmH(>Fn^osut`p6T_QLRi`CCcIe@CqgJ6qP#f56aMcdsh_7xgs$#WLK{1zeI> zOScs*iCK-2XR6EshSs_#RpYFvXET~P2qoV%-J@2>Asjz2CC@jTDt}d#_i*K!SKCPz zeNlgBkD9~mG-wVtL?(Z#%%M7`tIj!Hr;h8naicW7b4BIB?TLk<%DThcYT_F;F^`+D zX9PA~I=MQl9KHX3#y_XOLJ6S$Q9|(?>W=N zE?m%(ac2?LvXE+7)U|{=C33>8OFF)simMC5%=vgO(+_;c$YN2e-YYn3xk?sSeaor7 zC0w88oR?hK3RTdwWYiSyeJP(TrOMV+WlOsJ2wm6IoGJ@2;v>a@Ao(&^se%bePiM zBEoEhGeB86n(35nm1r`w1AkdqR#kh0)ZS`tFZ6xP>+l&7vV2WwR7jwa$H?l@VCQ^m zREw=@aV@tP`eV5F+f&cl(M~z)I#GMbZhSf&Bb937RJGC5ZG<5ZHV{Sr zA-`9&)G^Px(Ozh>RFCvlW8>9WA2$}dD7qV0Ze+b^AmGt_m?YjO>lc*bhNJu&sL~r$ z>4vU!H4dej2|ii~10Fu%!u5+!NV$*DEN&Dn&V0}}8#vB>ra?@DZChF!gKvjKHv-DMkAF0BAu5hcaWPS$LwvE=<3G~H_ zn%quJey1k4cazqGaGYY>-LgYYnCS`l9aZ?hD!h{muS$P;uPY`1-Bzc8nE&B17gzJn zQE}I0c2T2qEW?{h|1w77-H)xvrz@}&QN<)-q z; fIyb81Se0xlO6u7sLGrMiB!8bQOr=*WUJ$;DLdkU}O zQ?v#2SEG-n7JcY0M@>L&tqVT_eT*v#Q&$YFSmR)~&8s{%s_dNaI8`2gv-x<+XfW#` z(t<|xGM%1x`t!`Ap`p1h{9^J6QCqLF+HmQ$Pj8#5X4qL_04Ts5zU4&K6n?Mxq^K#p zd_c@$I@7h^B|ceIh2IN4C8}CSoyw`|+@n)fP59y7(@;;_vp5QdmdM=lPp3(3+|a2e zB33zr$jmffk!J$gS{Htb_AIv$`$R@*TdC3s(q5``f}E{N7lfOMoa0JECbN?%4z);q z?$Z!<_tiNRo%T* z_c+%b+RmLXKP$~Reqpp2MlAas%ZsAXJbt{|-CFHl>~`1GKI3-LSx?sf>od@d(MzIH z4s-mm$V*jie^ood)rPw_C!r;sXJXV5Iu8c=iE^2$8K`O|xtfp_3@g`$OKFB#xjZTl z(L)qZOcUh_)nBdpuXO#|57TQjggHhgM-}C$SE-^VRdls03PUBXHr%H0Z>(GswUm&q zRTW38itAiOw1!zJTA`g@0~YBbsh8Eq)NxB zcQ?DzXdls`gXk~3-4fN6qfS*t;kVXqbwxTsrboEXr`Hj#sJPaFo(P&QFHDQ-!-ZE) zMs8CpH>ta~yOj;ttuyCcPsHR4T?oTHf6M6lU>a{2fWuYEZ)Cz`X_DL#t%mN2DH(o5 zOs(9bR_<~ufV-i0abXTqy3B`X)|c*%%CtKMR?L&`QGMaZweEF&AvgXIUP(VOso^-L z&tdULwC;vV~ zox+~^NYqhEdsLN#-)DNvm4tj^HKbi0kJ1_B6Dk&d4CzT13yaCAZSMo}RMgQC$J45C zw&i%Ac*YfOp0*mN$XFnTLtXr_As9b(I`&FF8!gWQRW0(I+F4NTJnwc^v)+MOX?7hm zou2EHW9WDCLe$6!8GgIwMI!Xpks@AF8!M}gm)%Bqnu@a+gp^hLN>tl9->cDD7`LN7 zyn|!oi3;NB&*=w8__)miJwh*Q%&?$6K}bRFm>zj9@U}#x1;`W zw;C$%sDa(oz`JfB+$*ek--}{-{QD|=fC_)$!g1`=D@-3>WO`Ilj{2c08m5XqDx(N@ zIotaFaa6<0Dtoxfe(JJegv7v{e*BtI@mW;CaPXrKI)L9OpR1qkIYJD^<~^D!wkNz-VK?nea_PMTYdPs<=p1eCH|_WUtDM-`GZgUvG^|80X^hJ6`oQb%cL7>SGN5}RG60)WmI7tnx zQRM1&FH`Z+C8yo>Aqj zOh$wBQo&19a9tN973XpG21ff(9c!(1;cU!4&Znymxb)F#x-SPVh7RA^;g#!|R^60c zT{E<2ML$`eNNpx|SDswCftn1bMsDaPcSv(s&LjsW^q(%D6S+~TC)>-$YBwC1xQW}1 za~Yi-aN;~#HZ}RW+ih6hth59>cfRpxJyudLF0B&BO9Fxw^xO8VI;<9L9Vcpjb6@Q-k0cHiRvAr zYC5Z@k?o|qmr&h1yY3F13EmyRM}Te?VzUib5r4wEZukm_t1>EabO_j%9{*`s%J$iaWKQE@hHqw(WOU4`)vHfTAJlZ)e+8HILdWYsCzT$N=HX+U1CqvR5gW;Yyb{Mn|o@?T2#!PEcL5BY;FsbX|A= z?pE$&eGE03HItK~!nutNv}Fgy}8@P5WHCElP$be#5s@KAg`{UDZ-^ z$dKBa5!KCdHqdyfMuqytI6nQ9a}_rRr5?2aRAn=M$gD-qQ^NTqFij*h;9;uV(!+m-IyjnkU^CMPo+YbWe~uvb+NC|l-OPwQ4<6)$>$7P-(re%a5E6M2WiBf( zDf(qaTUK5HqzzQY!*M<3Rg&GS*E;8Z9pp?#-T;`$nOY*(!j?fOGA1|ya!4m@1xA+;R8iaSG48fLqMJ6;UkjWsgFD7{siPq9zF$_ z$Y&@$51&&*r+N5-9B%T<847#_4&;F%^^FZJ!{loq68Q#YF8ps5{hgvM{O8Xxya{M^gN304jIlS z<^|MIjI!gv-`3VK~Ci2w5f~}8S$0Dk9={?#C)Y! z$SS}lvMS14)>c#W>Wc0T3HFmU0G0F;^|`04Nt*k%Rwt}$gO*9lIsg-?MCobiN%7cE zf{9Edy-0Rr>vqoF8{~9o(74kZL?56NSr26{@bwkFfug&ofo}+?qrf*J&3)Op6V^>Y z%LKkDK%BvZ(gWX|;vEOR1<7t~%g(vC0yz`-?n8FfTf^2sRZIxp?a&!krb=4@@UQs)s%%yWjMen5O?rA!A2BfC5S064Se7LgG|D*3KxY!yJqwU*6q1uPg33bUIbT< z%pI7`^vk^=fQ0iw5-CZuxet&y{0U_)G5aZcfTFuYfEO4?f({b1KS}P|0R+38m;=F` zNz6e2aW)i6Pt3to*kNK0A=RxPN^oWpQw4!^=wV{gUNi_;93_P^mzios*C@JsnwcSh zI>^jWlH9jp1iPG>T5xAFQwI>IO`-J6jG)2}GgD8hTW=sZGnr|GfOnbQhwRUlfF>Xl zIgGlv3WSseLfWH5$;~8l_k@$vytXL4m2^HY@%jai9Ioh*MDwvBMW;HCP~s>OIhi(M zs_{sr9#x>)fO51_6H=L{R5m}R9HTtPl83`vfhRR{oH89xrtV;BZf%g!iaG&hu8*9k z=#v!P9jv^1P6kwRQ^%r6;l_;Pa84noH`=LP7Ca4{neK8rKpfDH(!0xBOO+lg0vT13Tz@1Q08(l zQPGzvx_g>~Nq|a*72a8<$mJxtGgoxXc_m1h*e3(TA{0uG{c1|bF+>ey;=YDdH+5~N z%-4a6n7bna%=cvqz(lS`nG5y?Mc=6C?rE?$0qXqvI8EQ5-Y7Sd(;d2{%YswEnMuX1 z0I@8E(o=C8mEo_<^^uy-Waf413`*Be1bBUnokw|nWDR=srejGY5z~X>?vQ6>|TA@Irmo}XVURCK&(!o^mKen z4c`CFP$m)Ik;6@XKSO~Zz>)TUrXcPAKLVS`PbhOa_*v1vD7t%^gI@ua-XG|i{6>;H z^Lxjfe}I&U{ZD{cl0xaR|3zuPKhQuX?!QTOQ~z|z{4c2KwJ@@#TDoB>oX9LFbHUE4 z=PT^`P}@x zT@;%SeCf4-q@>rv{6HqM0Loly7F6^?ini1&45;*4NWJVSi;(PIE!sKvVjySIu{c01 zTcPxHEJ+Q1EtsK9B9Qw+@*$Jgby&6URUNAWm?&>7Dku^HzToa_U|F;Zlm9+rkv~QHT z0M}7;rJ^mso`6dGKX(&k`hPDnxg+a#MW#2HGNJbYh=nJV9{T#!56u{A&} zN1^m|^rZ&x|7IwYh<@a7liSWvU^{T6{hujF`~UX9VizIGTn=_r^iGPl9PA9J^j<*M zWEYa$nf@Jf?g~;S_T2zti3+91z6YiKUO)qxxc4O0P3_ew^WLDQ*TN8~m3;tWB?@IO z*!>heK+zT~S5WlFjB@iLys5xTpRf&FSI74!n|pIW*Q5>vTP6ty0mO0?N>9SU)Kq~R zQrl;AlXdKQrTlM|}NppPWEW_vXYd3!VhdOcG88n8+z8Jqf2$ z*~)e`}qMrL>9^qG-81I+0)fkdU(#F;=Qau&*5y4n=ou4qfw*?>x~iPXoQ zat_Jv+PR%`j{!N8nDYQ8az08=%mvio*Mu3$WMeEj+~l|!3S0<|^qOD_(re-(U=taS zGM9sk6@7`KEeDqZD!or=ADKXsJ2SCk&dWf`#6AfieyDQA!8+z`r##WIV z6n7)aTo!Lq^v#O4EZzdBbf1BL-Xl}V-~rxBkb4BOH>~htHtx=!2A)h(Zv&Xf?I=B| zcbJ-R-*J1H)ZR%Rw|o~te4d#uXz9CPGntXP8*FL6VlL8a>mFdSZwh5DBlju#enneG z9spGO5|SSFlm|(3mmcbb^(( zp>e0(<0+uAV+v(1@MjeLtfDRO=KysS`17Q>FE4b$`XXqVz+VEG$jc}_@K-3_ap13# z?8aW}ocnc<5%}x~yuP-f6^F*Y0Sxv;q0GhnmZINQw8i`mpwjye`W8M7$)76tE;-$) z_qr_jJ~%V^_yAxc(@}apKBTghvt7GrKGQ8eBC|X4@yy760%qh&H?e50(#zvh;IVrO zWiDf%EBXsXTgJWwRC4R#06>>}%2y=2cVBnT{SC;O+?;WPJ(<}n`Pz>9()do-8^{i=c}Mhlgwr$RXSl^6|_v~s{u@8b(9|Z8Wit1^fgKD z5sj_YIrrKiBlOw8e+v&x z__UzDrlIAK=26WpHTBKXM|svm8B$qa(;~HlWqlw9>Nh_#{Y92+K-pR0%f7qFhMD?C RvA(x#oT+budTVRX{|8?F2WtQT diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/chr_US.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/chr_US.dat deleted file mode 100644 index 96e967fbe40c2fd8655efdb58b4eadb4b0e78b35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 627 zcmY+CS5F)<6onT;mR z*UN;_M68cSBiCx>jI<4w#F*duSCl_5uq-zDkxh&?x6zt}dxVvlLxroNt{B}XjKvzq z{ZY}XkP}u3Yhsm2($RJd)(IP8n}M?_%T8rZ84@-LTQ%8VV}8pP*xu4#Eqi$ zU1Bsr_k;3^@LC+rD<#;ut-K+;t^Ezopghm=j__U_&ig8tohwl}d?0*WEck!0PlQR` z{$icagfFu`THm!LG;&e@O88dCuDG$ObE=oKUXBST^>6Ue_yX3rCgGHDCJwkkZ&WJL R_}hJ?K4s$*z7u|wlN%Er$$bC- diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ckb.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/ckb.dat deleted file mode 100644 index 741a28bae22f862ac55a12933de283240235c372..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41606 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

    G2k1h@~Fd*d`-4F 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μ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 z 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 KelmXb=l=jtb;LRV diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/az_Latn.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/az_Latn.dat deleted file mode 100644 index f2b58c72f9d731ce60364d6dcc817725ad2692a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2225 zcmZ`*2Xquw6x{?8LVyse3Kmq9MG+~ApeTrf$QlGh8PRc>?Ed7B?9ArQ%z{C`f--Lv zMN#YxMN#Y>8z6Sv*+yD``&%!zTb9ksX`)YwNE4xxqQaSiL{$V ziB-zjnS)ZR1OI5q6#^%huFD4=+GJ{-T9F&rWUHKHTvG};QHi$w=b_9-xz&ba^1eVj ztAc+8BIiVI-baPW>iTGJm9X7MWq(2kt5S0uzh0zsZWy7XjZRh>+h#erfWL2s%#`c6A2z>}UN^WDPBwO3W*qP8*_9g7Xux*T83H@Y0LQ)X=7qJ^* zcb!-EmO9e_Syi)+gZ3Z{Bfpfhl2*N&f$a+ zas**t#)}y5M;Iwb682}jf$;%^QF0VvG-InY#({(}atz@h#w!^gOc*Q262>v^!%ZAQ z7%#^Y4rM%_@dQFjrU-{|>orA8BpgndM3_vNVzuR2dXC?SBV;fBXh~YoRNeoP+;1Yr zQG{u78o}aqIJ$`Ggkv_6ek_xCh&JIkLYgo`M>=dQk5Nm=$P6LNk)nt?LOnqe+>PRo zXDZKVCLu@g2)>Tb>&Yc!G!P&`2pEox5fUO95ef{a$CyQ!EoT!>U}23#%psgeIEkPL zC%10LQ<_yZE!13&a1n6InFx*89f2t`>WoX(KvdIn*ETtGOJVOfl`2n*#x z!r2Vl#W;tsNG>9r%djHGd4$DsG2wjf<$@wEBwVzS$cvf8A}=9aO1O-0xh{K!F55lE zm4qd73E?V+Lt!-Hx_Xd;by`ugj)%> ziCU|gmow`$rW-`y=CkR5k7$V774Aq*RJb!~j;7~keYajlxXZ@f3imV}`v@yiiO?|{ z!q4-;z1PNl3irzuHEWi$T_0*MANa0cKNt_#cu-+w(kf?bt>8OCU{%eGsV2HE$a`2_ zGkSPolc*th$i^Clhm&#@r2%q zxABC+lgyYfs6$DDIo0c#qdPIO24k&_rxc#njJcCF!w@&-48b!to>h2G*BL!ru1+Ni zPQl!Vp~#7hxw)QKc%gY>ExKQ{@sh&JI%>vLuDrR%S8Tkh@S0|9QRC}2-cWc`bGD%I zEgNquyu*wwX?)kldkXJs#uhbxVBy$_Fm*j*k^SX?h9xIxaZ% zZ2DB;Gqd2coWOPbD8%OqUs&yU#9=0I8`!W;;Y+I%8}#*^Zg3*Kf+4r)AnO@|3Tn+_u}+-XqwudeikU(X2tU)< z;t3M`2CAThzpb8}wAEkm-T$W;lp0nW&CY`oU*yRZ)ECj;SQw$r!NO)n;)lj` z>(*xfU1U^eYOSg&*Vg2Wwhb24vfSxTU;M_R+K_WLG1}ZlYZ4wYmZk;@*F9YeT4p>} zs}grh(Nf3>D~wgOA|%z(b^_KI>uO7YvnlJ2vZM?N8;s48?2j=wx}i+iVr&;Qu~9-B z8nAO&CABH$yEYg-X`?4exyyK>)`e#4jlP!>_89wxd6VgZJ!KrIZHWuLzcNv$!C$p5 z;gIo6?Fes7Z9Ta$@e$*>+7ltw)`V;)wjQ+?jF-jKnOKWB3a=Qi)vlQ8K1LJjVN~8Q zj@99;(g!=UgA>Nv(%nmJ$u8-vKp7CM6;QzrsGCq}E&(}F)e4h5v z`mXImqv!Q6jIU+vf*YGUM}waB@{RGm`~-O-c>!x&lW@-Xq4uRgZz%QA`1^gNA!Xwe KelmXb=l=jtb;LRV diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bas.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bas.dat deleted file mode 100644 index f10acc97a8df2aa61a14df11286706729fcf7488..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17128 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 I<9mPc7Y|cfiY_S8 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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/be_BY.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/be_BY.dat deleted file mode 100644 index 3a9f989174480b40c4845b9e385ea0f02803f91e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 608 zcmY+C*=`gu5Jfv7A^T3k4haNESOWY4ul#^{vOL{2k%jHO zCGN&VYeG&~W2~z+A*qhG6R^S9R67EkO<8v)OUjV2#n>*%Zi#;D#$*hpPucuuj~K^lSK>nNClqxW{G@dW zCyd8xPk2MM^~Q~fpD>=PLlIJKDP%jf^{72#JTIn>VlCn*ykNXk`(mp57%9}lsJvpl zRwwgHAMD%?P8nyVztI_tms#F0-m2qyU*WoQeKZc|jCYF#?+1I&_)vDeSm%OqIqReK zUE7C7FX|r|pUT(;H#T+740_hfXU3QE6Xc2H1uVHH;fnE99Z7?pOzI=~yM3e~W%3E% I7~lJ=e-RbGA>gf#=Y`F&n zPf$R)At?8KDR{+OPyz4z!1ccGTmQd$dU{s)bid@y>-y{cuc}_XdawK3>9O?WiaYf5 z^wff~Q*(#BicBlcz;nsY3S6Yx4$Jj7JI4V)JNQ*nin=?r!!^e z;w;D}oLc0{F8OH}$*wKgt-4!Fc6VB`$HlT|OZIBX-cHG^Yq+XjBT&x`WuI8~wOKY7 zWWVBUuxxhxlIO_&Vd5j^iJTE=9uUicIa77U>Eoq!(J8HMnc9GRbt8j-_`yLLuJwGm9^ z)IB*Of$Ng%CasS+HBb5tD~EEVh0rEkUUkPjIm(cVD+@C7*SJ0jk2c7y$-->V$?9Ry zq6DeS;tbgsAzbp31PSG(#hp_dH;#iXta@^cfy0ixEE_iHh6wq~6GY|M%=T64))8fS zg<(}kUYU&=aH7zWS0#uiOS%xRUWw$m1c~JM;x4Hf16WTBm7HKGlK0ic-BNUQy@E7^ zEpYtA1Rs%;EGaEot4o0_P2>$(mN~b&f%tOJasx*lS&@Nj9CO{1l?gZ@tGdAn#>JD9 z4IJ}jAaf&M^<9q-)4H$#`xE0%Pq2m*GrtFe zMleFZ&oEE}*_?T>Az0Y(h$1*cPwiV!EjYKHR0{4`S<_7sC5l5_Gs#>Qc8y)qOw9Bs(C z`B~;qDg`3vV`$4@? z4ds$p-jp)|4<@G}m&S5g&L(wAC3Pn}r{PxQ&9S^C2cvnUtwC*nYks=*SGgs5TYiT1 z3r<{p1_qWAzyK&SV)nJR<5zC!) zji>z@xeHFQw@U7YH|!PU9(cmuO1U>bt9nmba(o^I#q#l7X8I>$`D6}ul6#qpgm?SSaKlJG1xxA9(qV8U zqE9Ca)4c~i6U%2gn)k0|%jHQ7Vt45Zd8)mPh~Ch+t6oqE<#VxozB`Cth~??$@2h8G zdA5Cl^5u)>3gTI=y0t*QWc1^{eA#lw8FNC`v#)fe{a0i8T4(szrw;!{I{cechJP!H zLJK5nQ&v8{9m{u;Kn+K=ntZo?Kc!CCy8`Vdl$F7x$o0zia7X=qEI-H@bG!D*b5@vF z;%`A;rLTa$zNY-JI|h@*gAuU#IqLL>3;O2gD*Yi^>RPASAIguSlC2mv!-)L2%DH|L z%TIIF=ghwj^Utc2#l4K~1xS7l67ECat$2|yzc89##_}uDa0eOx9Ot1j{VC1Kd-^linT{2enKYF1YJ!zJ@`zHdKaXtp}mQV|pWqdR>6G~$27 z@^2C|?YoGz2b&+nhx|X{{!phubxKHeItOEMbOt)H&P2;OxRE<^=qxHt7We;OGw5t6 zbw^s~a1^QMq7&;5Xi3fWBz2#oz0{a2?(tu|NF~HVcLd6?^9suh?hd`~WSl#rwc#B+ z9CK@KBdCYEi)rkNHfQCrqPwAQ2JLRp9)zmTjhcAUQp7S@_XGe>SQVxZCiQiwoJqw9$isN2TgL#&d}A^tE~L)3a7zj2{rty7{@a7;z{BZSM*d zoky599EMJ;^U=}SDr^w*BGJTKe=7h(N&89yO?< zFQp0@jzK5Zm!TyCgTQ)L(U(&pU81yX(X(R#fT^ts-(EpYQoRzLSYL&fR9qzbW^7BS zlP*%~UAq>N^f=%dDeOC*14w!TI2hgSww34Q) zsgOpntB~m$0N_E})6_h*NV685SPN)DGiu^ADN$c_9f0=a&4QkijvBO4>yuIKq-^R2 z!c&uy92+492UE9+7;mB$r#=;(SWiQndVqqzsHvw@VY0ZpMFbIG#ZL>q(teOJqneEI z8B`|QW^`hG4O+6LX|SjQ!q-w~vbdiSrXf!E4A^Ppnb7I*BG+HXG2|UWC)U@aO|8V@ z^flF?LK^3Ey~tDo048Q?6Y`3dsrgGw3<_X$g%Xmx=)^jVmgGD@(%fBuDMqL^Sv+ux z-C1Vvfaio&sC7+PP>qS z0Whe93TYf5N{@F{0I6A!uh)>8q-vlOYlJp6i#WI@sF9jQS%+*3ko3&)>bOSY!&~}t zre_&n6RqvbdgPZ}9SWO%DX4|I)zGtv^6OQ_Eqiz??+ku}!7*W;cVXFc>kV(%D|a;B zXd36F1h|2gq0)iRHTXQjJQ2&0^7~PHNCWpQ2%=Gjk zs24#4@oE{v#bm%T@+Q4~+q?zy<}F^hc(Gmru`Mm$vxdF1^i6zbvDm&%FJ+(m?r1z* zhKH8EIaLp%VXD7{&(P@6x1u-7rloJAkXvX(gJ|5VkLcSW$!E zv1$34Exm#m%iFLzEB!LEd4oy}t+ymRPPCgR=+`Jq>@=5VGF zy>`mwAj0Cno_9k&+78cq(2w;Rv<%O_P|U(}TrTVP>$M!k0F8Dc16;3zq@~wW&Tv=| ztWNgp4F=svX%>Q;_?UTpGaoZQZ{ef4Hfr9Cc6{K?GhO{9cI(w`RBromEBdj%7j3#N zwr^X!c=0BEAC;z>%>}&;;+Eb{&{h$ho=tiOpV_qZPIhT_;U_cjucdcUV20aL-pxld z95HU`J$!s2!=vIppzb6#UfZ)TGI}pY#d;rF+k71@d^d7Kz2DFWi1LJ+iVh{;=k-BT zdWcF>c2K&5A2$3E;!Nhvh12y>KHz^(ULV6xXqURFhP@y1SU*5TGe7Xhkv)~6salVl z))Um?_BXKNh2u56YbGvy&@?_o4HjtLXorS9w^j-D!v=i>ZO$yiOR;{`WZS83hm?!Y z3?DPu$0=iK+qWV8gb6>HD)JkYe#&H@ri`BAg;zggqR&#qodr?y3an2W@Du?~R1Hvg zK4-GeQ^snK4`LB&cmOQ>Hooi9;m G;eP-$-rm^& diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bem_ZM.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bem_ZM.dat deleted file mode 100644 index 26b669725c77cb6b0f45ce1eb03018a2097eeecd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 590 zcmY+B*-jiW5Je}Du#4(p+s@nydc#;!E0T9- zqBS8WEHhTrvXE3o+X`4^tf@@_&Zewelci)xSZ8dMV)sPcQ)Rtzec^YE zL$xPDsw{IrcjzZw7l diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bez.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bez.dat deleted file mode 100644 index 9741a55e2beab9ff7b829a98215c612134f674c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16977 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 diff --git a/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bez_TZ.dat b/IKEA_scraper/.venv/Lib/site-packages/babel/locale-data/bez_TZ.dat deleted file mode 100644 index dc04ff73235c77d67fe2560025c4b0e3faac2a0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 590 zcmY+BTT>J<5QSGzSgwm8sK`Y@WkE%Mj1MVaQrVe?N|9vdBpIlss;m6zHd&e4eeCb_ z>FeJm#$c@027`fXD&t7o8ZXp}#1nedzyDxKZAg$QMw^>xDPfuMa^^7MwllYaUNKhG zQ1b3gv?k<)RmM=Q3Q1M8t$;Pgy4n)pY|6SdSxSb44aR0E_CR!}Ym*JO7~5)7G9Q~j z`lgBAh=0V`QR_mp^`xJqgx8GS!aQa3pY1W;sBOs$ou5$DY3e79OW0=|sFCoRD(j8w z3%_N&Q@bLh%2LSo##X)do^e=AEyYU2UiiQ`QafU*x)>=`(_T4doT!6&r3-d$;Zw%P zGGFfu#>+0B7-wpK-dDJ8T^EhRIpgzU!{^1mFus<qY&NaaGnX xxVEWvW~yhid}DksZvEmd=vy^v>yQWa7leU`hx! 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•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