├── .dockerignore ├── .editorconfig ├── .gitattributes ├── .github ├── CODE_OF_CONDUCT.md ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── config.yml │ └── feature_request.md ├── PULL_REQUEST_TEMPLATE.md ├── badges │ └── twitter.svg ├── graphql-inspector.yaml ├── stale.yml └── workflows │ ├── codeql-analysis.yml │ ├── publish-containers.rst │ ├── publish-containers.yml │ ├── pytest.yml │ ├── test-env-cleanup.yml │ └── test-env-deploy.yml ├── .gitignore ├── .isort.cfg ├── .nvmrc ├── .pre-commit-config.yaml ├── .pylintrc ├── .release-it.json ├── .tx └── config ├── CHANGELOG.md ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── Procfile ├── README.md ├── README.saleor.md ├── SECURITY.md ├── app.json ├── conftest.py ├── deployment └── elasticbeanstalk │ └── Dockerrun.aws.json ├── locale ├── ar │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── az │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── bg │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── bn │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── ca │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── cs │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── da │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── de │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── el │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── en │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── es │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── es_AR │ └── LC_MESSAGES │ │ └── django.po ├── es_CO │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── et │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── fa │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── fi │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── fr │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── hi │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── hu │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── hy │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── id │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── is │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── it │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── ja │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── ka │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── km │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── ko │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── lt │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── mn │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── my │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── nb │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── nl │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── pl │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── pt │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── pt_BR │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── ro │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── ru │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── si │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── sk │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── sl │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── sq │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── sr │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── sv │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── sw │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── ta │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── th │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── tr │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── uk │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── vi │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── zh_Hans │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po └── zh_Hant │ └── LC_MESSAGES │ ├── django.mo │ └── django.po ├── manage.py ├── package-lock.json ├── package.json ├── poetry.lock ├── pyproject.toml ├── requirements.txt ├── requirements_dev.txt ├── runtime.txt ├── saleor ├── __init__.py ├── account │ ├── __init__.py │ ├── app.py │ ├── error_codes.py │ ├── events.py │ ├── forms.py │ ├── i18n.py │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ ├── __init__.py │ │ │ ├── changepassword.py │ │ │ └── createsuperuser.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_auto_20150907_0602.py │ │ ├── 0003_auto_20151104_1102.py │ │ ├── 0004_auto_20160114_0419.py │ │ ├── 0005_auto_20160205_0651.py │ │ ├── 0006_auto_20160829_0819.py │ │ ├── 0007_auto_20161115_0940.py │ │ ├── 0008_auto_20161115_1011.py │ │ ├── 0009_auto_20170206_0407.py │ │ ├── 0010_auto_20170919_0839.py │ │ ├── 0011_auto_20171110_0552.py │ │ ├── 0012_auto_20171117_0846.py │ │ ├── 0013_auto_20171120_0521.py │ │ ├── 0014_auto_20171129_1004.py │ │ ├── 0015_auto_20171213_0734.py │ │ ├── 0016_auto_20180108_0814.py │ │ ├── 0017_auto_20180206_0957.py │ │ ├── 0018_auto_20180426_0641.py │ │ ├── 0019_auto_20180528_1205.py │ │ ├── 0020_user_token.py │ │ ├── 0021_unique_token.py │ │ ├── 0022_auto_20180718_0956.py │ │ ├── 0023_auto_20180719_0520.py │ │ ├── 0024_auto_20181011_0737.py │ │ ├── 0025_auto_20190314_0550.py │ │ ├── 0026_user_avatar.py │ │ ├── 0027_customerevent.py │ │ ├── 0028_user_private_meta.py │ │ ├── 0029_user_meta.py │ │ ├── 0030_auto_20190719_0733.py │ │ ├── 0031_auto_20190719_0745.py │ │ ├── 0032_remove_user_token.py │ │ ├── 0033_serviceaccount.py │ │ ├── 0034_service_account_token.py │ │ ├── 0035_staffnotificationrecipient.py │ │ ├── 0036_auto_20191209_0407.py │ │ ├── 0037_auto_20191219_0944.py │ │ ├── 0038_auto_20200123_0034.py │ │ ├── 0039_auto_20200221_0257.py │ │ ├── 0040_auto_20200225_0237.py │ │ ├── 0040_auto_20200415_0443.py │ │ ├── 0041_merge_20200421_0529.py │ │ ├── 0041_permissions_to_groups.py │ │ ├── 0042_merge_20200422_0555.py │ │ ├── 0043_rename_service_account_to_app.py │ │ ├── 0044_unmount_app_and_app_token.py │ │ ├── 0045_auto_20200427_0425.py │ │ ├── 0046_user_jwt_token_key.py │ │ ├── 0047_auto_20200810_1415.py │ │ ├── 0048_auto_20210308_1135.py │ │ ├── 0049_user_language_code.py │ │ ├── 0050_auto_20210506_1058.py │ │ ├── 0051_alter_customerevent_user.py │ │ ├── 0052_customerevent_app.py │ │ ├── 0053_auto_20210719_1048.py │ │ ├── 0054_alter_user_language_code.py │ │ ├── 0055_alter_user_language_code.py │ │ ├── 0055_alter_user_options.py │ │ ├── 0056_merge_20210903_0640.py │ │ └── __init__.py │ ├── models.py │ ├── notifications.py │ ├── signals.py │ ├── templatetags │ │ ├── __init__.py │ │ └── i18n_address_tags.py │ ├── tests │ │ ├── __init__.py │ │ ├── test_account.py │ │ └── test_notifications.py │ ├── thumbnails.py │ ├── utils.py │ ├── validators.py │ └── widgets.py ├── app │ ├── __init__.py │ ├── app_manifest_sample.json │ ├── error_codes.py │ ├── installation_utils.py │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ ├── __init__.py │ │ │ ├── create_app.py │ │ │ ├── install_app.py │ │ │ └── utils.py │ ├── manifest_validations.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_auto_20200702_0945.py │ │ ├── 0003_auto_20200810_1415.py │ │ ├── 0004_auto_20210308_1135.py │ │ ├── 0005_appextension.py │ │ └── __init__.py │ ├── models.py │ ├── tasks.py │ ├── tests │ │ ├── __init__.py │ │ ├── cassettes │ │ │ ├── test_creates_app_from_manifest.yaml │ │ │ ├── test_creates_app_from_manifest_activate_app.yaml │ │ │ ├── test_creates_app_from_manifest_app_has_all_required_permissions.yaml │ │ │ ├── test_creates_app_from_manifest_installation_failed.yaml │ │ │ ├── test_creates_app_from_manifest_sends_token.yaml │ │ │ ├── test_install_app_task.yaml │ │ │ ├── test_install_app_task_request_timeout.yaml │ │ │ ├── test_install_app_task_wrong_format_of_target_token_url.yaml │ │ │ ├── test_install_app_task_wrong_response_code.yaml │ │ │ └── test_sends_data_to_target_url.yaml │ │ ├── test_app_commands.py │ │ ├── test_app_tasks.py │ │ ├── test_installation_utils.py │ │ ├── test_manifest_validation.py │ │ ├── test_models.py │ │ └── test_validators.py │ ├── types.py │ └── validators.py ├── asgi │ ├── __init__.py │ └── health_check.py ├── attribute │ ├── __init__.py │ ├── app.py │ ├── error_codes.py │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ ├── __init__.py │ │ │ └── update_attribute_file_urls.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_auto_20201030_1141.py │ │ ├── 0003_auto_20201113_1149.py │ │ ├── 0004_auto_20201204_1325.py │ │ ├── 0005_add_assignedattributevalues.py │ │ ├── 0006_auto_20210105_1031.py │ │ ├── 0007_auto_20210308_1135.py │ │ ├── 0008_auto_20210407_0632.py │ │ ├── 0009_auto_20210421_0552.py │ │ ├── 0010_auto_20210412_0736.py │ │ ├── 0011_attributevalue_attribute_a_name_9f3448_gin.py │ │ ├── 0011_update_values_file_urls.py │ │ ├── 0012_merge_20210608_1034.py │ │ ├── 0013_auto_20210609_2245.py │ │ ├── 0014_auto_20210619_1836.py │ │ ├── 0015_auto_20210817_1015.py │ │ ├── 0016_auto_20210827_0938.py │ │ ├── 0017_auto_20210811_0701.py │ │ └── __init__.py │ ├── models │ │ ├── __init__.py │ │ ├── base.py │ │ ├── page.py │ │ ├── product.py │ │ └── product_variant.py │ ├── signals.py │ ├── tests │ │ ├── __init__.py │ │ └── test_utils.py │ └── utils.py ├── celeryconf.py ├── channel │ ├── __init__.py │ ├── error_codes.py │ ├── exceptions.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_channel_default_country.py │ │ ├── 0003_alter_channel_default_country.py │ │ └── __init__.py │ ├── models.py │ ├── tests │ │ ├── __init__.py │ │ └── test_utils.py │ └── utils.py ├── checkout │ ├── __init__.py │ ├── base_calculations.py │ ├── calculations.py │ ├── checkout_cleaner.py │ ├── complete_checkout.py │ ├── error_codes.py │ ├── fetch.py │ ├── migrations │ │ ├── 0001_auto_20170113_0435.py │ │ ├── 0001_initial.py │ │ ├── 0002_auto_20161014_1221.py │ │ ├── 0002_auto_20170206_0407.py │ │ ├── 0003_auto_20170906_0556.py │ │ ├── 0004_auto_20171129_1004.py │ │ ├── 0005_auto_20180108_0814.py │ │ ├── 0006_auto_20180221_0825.py │ │ ├── 0007_merge_cart_with_checkout.py │ │ ├── 0008_rename_tables.py │ │ ├── 0009_cart_translated_discount_name.py │ │ ├── 0010_auto_20180822_0720.py │ │ ├── 0011_auto_20180913_0817.py │ │ ├── 0012_remove_cartline_data.py │ │ ├── 0013_auto_20180913_0841.py │ │ ├── 0014_auto_20180921_0751.py │ │ ├── 0015_auto_20181017_1346.py │ │ ├── 0016_auto_20190112_0506.py │ │ ├── 0017_auto_20190130_0207.py │ │ ├── 0018_auto_20190410_0132.py │ │ ├── 0019_checkout_gift_cards.py │ │ ├── 0020_auto_20190723_0722.py │ │ ├── 0021_django_price_2.py │ │ ├── 0022_auto_20191219_1137.py │ │ ├── 0023_checkout_country.py │ │ ├── 0024_auto_20200120_0154.py │ │ ├── 0025_auto_20200221_0257.py │ │ ├── 0026_auto_20200709_1102.py │ │ ├── 0027_auto_20200810_1415.py │ │ ├── 0028_auto_20200824_1019.py │ │ ├── 0029_auto_20200904_0529.py │ │ ├── 0030_checkout_channel_listing.py │ │ ├── 0031_auto_20210303_1045.py │ │ ├── 0032_auto_20210308_1135.py │ │ ├── 0033_checkout_language_code.py │ │ ├── 0034_remove_checkout_quantity.py │ │ ├── 0035_alter_checkout_language_code.py │ │ ├── 0035_checkout_collection_point.py │ │ ├── 0036_alter_checkout_language_code.py │ │ ├── 0036_merge_20210824_1103.py │ │ ├── 0037_merge_20210903_1013.py │ │ ├── 0037_remove_empty_lines.py │ │ ├── 0038_merge_20210903_1048.py │ │ ├── __init__.py │ │ └── fix_empty_data_in_lines.py │ ├── models.py │ ├── tests │ │ ├── __init__.py │ │ ├── test_cart.py │ │ ├── test_checkout.py │ │ └── test_checkout_complete.py │ └── utils.py ├── core │ ├── __init__.py │ ├── analytics.py │ ├── anonymize.py │ ├── app.py │ ├── auth.py │ ├── auth_backend.py │ ├── db │ │ ├── __init__.py │ │ ├── fields.py │ │ └── filters.py │ ├── error_codes.py │ ├── exceptions.py │ ├── jwt.py │ ├── languages.py │ ├── logging.py │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ ├── __init__.py │ │ │ ├── change_currency.py │ │ │ ├── cleardb.py │ │ │ ├── create_thumbnails.py │ │ │ └── populatedb.py │ ├── middleware.py │ ├── migrations │ │ ├── 0001_migrate_metadata.py │ │ └── __init__.py │ ├── models.py │ ├── notification │ │ ├── __init__.py │ │ ├── mutation_handler.py │ │ ├── utils.py │ │ └── validation.py │ ├── notify_events.py │ ├── payments.py │ ├── permissions.py │ ├── prices.py │ ├── storages.py │ ├── tasks.py │ ├── taxes.py │ ├── templatetags │ │ ├── __init__.py │ │ ├── placeholder.py │ │ └── taxed_prices.py │ ├── tests │ │ ├── __init__.py │ │ ├── test_analytics.py │ │ ├── test_anonymize.py │ │ ├── test_auth_backend_default_header.py │ │ ├── test_auth_backend_saleor_header.py │ │ ├── test_core.py │ │ ├── test_editorjs.py │ │ ├── test_jwt.py │ │ ├── test_middleware.py │ │ ├── test_notification.py │ │ ├── test_postgresql_search.py │ │ ├── test_tasks.py │ │ ├── test_url.py │ │ └── test_weight.py │ ├── tracing.py │ ├── transactions.py │ ├── units.py │ ├── utils │ │ ├── __init__.py │ │ ├── anonymization.py │ │ ├── draftjs.py │ │ ├── editorjs.py │ │ ├── json_serializer.py │ │ ├── promo_code.py │ │ ├── random_data.py │ │ ├── translations.py │ │ ├── url.py │ │ └── validators.py │ ├── views.py │ └── weight.py ├── csv │ ├── __init__.py │ ├── error_codes.py │ ├── events.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_exportfile_message.py │ │ ├── 0003_auto_20200810_1415.py │ │ ├── 0004_auto_20210709_1043.py │ │ └── __init__.py │ ├── models.py │ ├── notifications.py │ ├── tasks.py │ ├── tests │ │ ├── __init__.py │ │ ├── export │ │ │ ├── __init__.py │ │ │ ├── products_data │ │ │ │ ├── __init__.py │ │ │ │ ├── test_get_products_data.py │ │ │ │ ├── test_handle_relations_data.py │ │ │ │ ├── test_prepare_headers.py │ │ │ │ └── utils.py │ │ │ └── test_export.py │ │ ├── test_notifications.py │ │ └── test_tasks.py │ └── utils │ │ ├── __init__.py │ │ ├── export.py │ │ ├── product_headers.py │ │ └── products_data.py ├── demo │ ├── __init__.py │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ ├── __init__.py │ │ │ └── populatedb.py │ ├── settings.py │ ├── urls.py │ └── views.py ├── discount │ ├── __init__.py │ ├── error_codes.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_voucher.py │ │ ├── 0003_auto_20160207_0534.py │ │ ├── 0004_auto_20170206_0407.py │ │ ├── 0005_auto_20170919_0839.py │ │ ├── 0006_auto_20171129_1004.py │ │ ├── 0007_auto_20180108_0814.py │ │ ├── 0008_sale_collections.py │ │ ├── 0009_auto_20180719_0520.py │ │ ├── 0010_auto_20180724_1251.py │ │ ├── 0011_auto_20180803_0528.py │ │ ├── 0012_auto_20190329_0836.py │ │ ├── 0013_auto_20190618_0733.py │ │ ├── 0014_auto_20190701_0402.py │ │ ├── 0015_voucher_min_quantity_of_products.py │ │ ├── 0016_auto_20190716_0330.py │ │ ├── 0017_django_price_2.py │ │ ├── 0018_auto_20190827_0315.py │ │ ├── 0019_auto_20200217_0350.py │ │ ├── 0020_auto_20200709_1102.py │ │ ├── 0021_auto_20200902_1249.py │ │ ├── 0022_sale_channel_listing.py │ │ ├── 0023_voucher_channel_listing.py │ │ ├── 0024_orderdiscount.py │ │ ├── 0025_auto_20210506_0831.py │ │ ├── 0026_voucher_only_for_staff.py │ │ ├── 0027_auto_20210719_2155.py │ │ ├── 0028_alter_voucher_code.py │ │ ├── 0028_auto_20210817_1015.py │ │ ├── 0029_merge_0028_alter_voucher_code_0028_auto_20210817_1015.py │ │ ├── 0030_discount_variants.py │ │ └── __init__.py │ ├── models.py │ ├── templatetags │ │ ├── __init__.py │ │ └── voucher.py │ ├── tests │ │ ├── __init__.py │ │ └── test_discounts.py │ └── utils.py ├── giftcard │ ├── __init__.py │ ├── error_codes.py │ ├── events.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_auto_20190814_0413.py │ │ ├── 0003_auto_20200217_0350.py │ │ ├── 0004_auto_20200902_1249.py │ │ ├── 0005_auto_20210719_1116.py │ │ ├── 0006_auto_20210719_1117.py │ │ ├── 0007_auto_20210719_1311.py │ │ ├── 0008_auto_20210818_0633.py │ │ └── __init__.py │ ├── models.py │ ├── notifications.py │ ├── tests │ │ ├── __init__.py │ │ ├── test_notifications.py │ │ └── test_utils.py │ └── utils.py ├── graphql │ ├── __init__.py │ ├── account │ │ ├── __init__.py │ │ ├── bulk_mutations.py │ │ ├── dataloaders.py │ │ ├── enums.py │ │ ├── filters.py │ │ ├── i18n.py │ │ ├── mutations │ │ │ ├── __init__.py │ │ │ ├── account.py │ │ │ ├── authentication.py │ │ │ ├── base.py │ │ │ ├── permission_group.py │ │ │ └── staff.py │ │ ├── resolvers.py │ │ ├── schema.py │ │ ├── sorters.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── benchmark │ │ │ │ ├── __init__.py │ │ │ │ ├── fixtures.py │ │ │ │ ├── test_account.py │ │ │ │ └── test_permission_group.py │ │ │ ├── mutations │ │ │ │ ├── __init__.py │ │ │ │ ├── test_external_authentication.py │ │ │ │ ├── test_external_logout.py │ │ │ │ ├── test_external_obtain_access_tokens.py │ │ │ │ ├── test_external_refresh.py │ │ │ │ ├── test_external_verify.py │ │ │ │ ├── test_token_create.py │ │ │ │ ├── test_token_refresh.py │ │ │ │ ├── test_token_verify.py │ │ │ │ └── test_tokens_deactivate_all.py │ │ │ ├── test_account.py │ │ │ ├── test_account_events.py │ │ │ ├── test_account_permission_group.py │ │ │ ├── test_account_utils.py │ │ │ ├── test_bulk_delete.py │ │ │ ├── test_i18n.py │ │ │ ├── test_pagination.py │ │ │ └── utils.py │ │ ├── types.py │ │ └── utils.py │ ├── api.py │ ├── app │ │ ├── __init__.py │ │ ├── dataloaders.py │ │ ├── enums.py │ │ ├── filters.py │ │ ├── mutations.py │ │ ├── resolvers.py │ │ ├── schema.py │ │ ├── sorters.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── benchmarks │ │ │ │ ├── __init__.py │ │ │ │ └── test_app_extensions.py │ │ │ ├── mutations │ │ │ │ ├── __init__.py │ │ │ │ ├── cassettes │ │ │ │ │ ├── test_app_fetch_manifest.yaml │ │ │ │ │ ├── test_app_fetch_manifest_incorrect_permission_in_manifest.yaml │ │ │ │ │ ├── test_app_fetch_manifest_unable_to_connect.yaml │ │ │ │ │ └── test_app_fetch_manifest_wrong_format_of_response.yaml │ │ │ │ ├── test_app_activate.py │ │ │ │ ├── test_app_create.py │ │ │ │ ├── test_app_deactivate.py │ │ │ │ ├── test_app_delete.py │ │ │ │ ├── test_app_delete_failed_installation.py │ │ │ │ ├── test_app_fetch_manifest.py │ │ │ │ ├── test_app_install.py │ │ │ │ ├── test_app_retry_install.py │ │ │ │ ├── test_app_token_create.py │ │ │ │ ├── test_app_token_delete.py │ │ │ │ ├── test_app_token_verify.py │ │ │ │ └── test_app_update.py │ │ │ └── queries │ │ │ │ ├── __init__.py │ │ │ │ ├── test_app.py │ │ │ │ ├── test_app_extension.py │ │ │ │ ├── test_app_extensions.py │ │ │ │ ├── test_apps.py │ │ │ │ ├── test_apps_installations.py │ │ │ │ └── test_apps_pagination.py │ │ ├── types.py │ │ └── utils.py │ ├── attribute │ │ ├── __init__.py │ │ ├── bulk_mutations.py │ │ ├── dataloaders.py │ │ ├── descriptions.py │ │ ├── enums.py │ │ ├── filters.py │ │ ├── mutations.py │ │ ├── resolvers.py │ │ ├── schema.py │ │ ├── sorters.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── benchmark │ │ │ │ ├── __init__.py │ │ │ │ └── test_attribute.py │ │ │ ├── deprecated │ │ │ │ ├── __init__.py │ │ │ │ └── test_attributes.py │ │ │ ├── mutations │ │ │ │ ├── __init__.py │ │ │ │ ├── test_attribute_create.py │ │ │ │ ├── test_attribute_delete.py │ │ │ │ ├── test_attribute_reorder_values.py │ │ │ │ ├── test_attribute_update.py │ │ │ │ ├── test_attribute_value_create.py │ │ │ │ ├── test_attribute_value_delete.py │ │ │ │ ├── test_attribute_value_update.py │ │ │ │ └── test_bulk_delete.py │ │ │ ├── queries │ │ │ │ ├── __init__.py │ │ │ │ ├── test_attribute_filter.py │ │ │ │ ├── test_attribute_filtering_with_channels.py │ │ │ │ ├── test_attribute_pagination.py │ │ │ │ ├── test_attribute_query.py │ │ │ │ └── test_attributes_sort.py │ │ │ └── test_utils.py │ │ ├── types.py │ │ └── utils.py │ ├── channel │ │ ├── __init__.py │ │ ├── dataloaders.py │ │ ├── filters.py │ │ ├── mutations.py │ │ ├── resolvers.py │ │ ├── schema.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── fixtures.py │ │ │ ├── test_base_channel_listing.py │ │ │ ├── test_channel_availability.py │ │ │ ├── test_channel_create_mutations.py │ │ │ ├── test_channel_delete_mutations.py │ │ │ ├── test_channel_queries.py │ │ │ └── test_channel_update_mutations.py │ │ ├── types.py │ │ └── utils.py │ ├── checkout │ │ ├── __init__.py │ │ ├── dataloaders.py │ │ ├── mutations.py │ │ ├── resolvers.py │ │ ├── schema.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── benchmark │ │ │ │ ├── __init__.py │ │ │ │ ├── conftest.py │ │ │ │ ├── test_checkout_mutations.py │ │ │ │ └── test_homepage.py │ │ │ ├── deprecated │ │ │ │ ├── __init__.py │ │ │ │ ├── test_checkout_billing_address_update.py │ │ │ │ ├── test_checkout_complete.py │ │ │ │ ├── test_checkout_create.py │ │ │ │ ├── test_checkout_customer_attach.py │ │ │ │ ├── test_checkout_email_update.py │ │ │ │ ├── test_checkout_language_code_update.py │ │ │ │ ├── test_checkout_line_delete.py │ │ │ │ ├── test_checkout_lines_add.py │ │ │ │ ├── test_checkout_lines_update.py │ │ │ │ ├── test_checkout_promo_codes.py │ │ │ │ ├── test_checkout_shipping_address_update.py │ │ │ │ ├── test_checkout_shipping_method_update.py │ │ │ │ └── test_customer_detach_mutation.py │ │ │ ├── test_checkout.py │ │ │ ├── test_checkout_complete.py │ │ │ ├── test_checkout_digital.py │ │ │ ├── test_checkout_language_code_update.py │ │ │ ├── test_checkout_lines.py │ │ │ └── test_checkout_promo_codes.py │ │ ├── types.py │ │ └── utils.py │ ├── core │ │ ├── __init__.py │ │ ├── connection.py │ │ ├── dataloaders.py │ │ ├── descriptions.py │ │ ├── enums.py │ │ ├── federation.py │ │ ├── fields.py │ │ ├── filters.py │ │ ├── inputs.py │ │ ├── mutations.py │ │ ├── scalars.py │ │ ├── schema.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── cassettes │ │ │ │ ├── test_get_oembed_data[http: │ │ │ │ │ └── www.youtube.com │ │ │ │ │ │ └── watch?v=dQw4w9WgXcQ-VIDEO].yaml │ │ │ │ └── test_get_oembed_data[https: │ │ │ │ │ ├── vimeo.com │ │ │ │ │ └── 148751763-VIDEO].yaml │ │ │ │ │ ├── www.flickr.com │ │ │ │ │ └── photos │ │ │ │ │ │ └── megane_wakui │ │ │ │ │ │ └── 31740618232 │ │ │ │ │ │ └── -IMAGE].yaml │ │ │ │ │ └── www.youtube.com │ │ │ │ │ ├── watch?v=dQw4w9WgXcQ&ab_channel=TestingChannel-VIDEO].yaml │ │ │ │ │ └── watch?v=dQw4w9WgXcQ-VIDEO].yaml │ │ │ ├── test_base_mutation.py │ │ │ ├── test_core.py │ │ │ ├── test_core_reordering.py │ │ │ ├── test_federation.py │ │ │ ├── test_file_upload.py │ │ │ ├── test_graphql.py │ │ │ ├── test_middleware.py │ │ │ ├── test_pagination.py │ │ │ ├── test_scalars.py │ │ │ ├── test_validators.py │ │ │ └── test_view.py │ │ ├── types │ │ │ ├── __init__.py │ │ │ ├── common.py │ │ │ ├── converter.py │ │ │ ├── filter_input.py │ │ │ ├── money.py │ │ │ ├── sort_input.py │ │ │ └── upload.py │ │ ├── utils │ │ │ ├── __init__.py │ │ │ ├── error_codes.py │ │ │ └── reordering.py │ │ └── validators.py │ ├── csv │ │ ├── __init__.py │ │ ├── enums.py │ │ ├── filters.py │ │ ├── mutations.py │ │ ├── resolvers.py │ │ ├── schema.py │ │ ├── sorters.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── mutations │ │ │ │ ├── __init__.py │ │ │ │ └── test_export_products.py │ │ │ └── queries │ │ │ │ ├── __init__.py │ │ │ │ ├── test_export_file.py │ │ │ │ └── test_export_files.py │ │ └── types.py │ ├── decorators.py │ ├── discount │ │ ├── __init__.py │ │ ├── bulk_mutations.py │ │ ├── dataloaders.py │ │ ├── enums.py │ │ ├── filters.py │ │ ├── mutations.py │ │ ├── resolvers.py │ │ ├── schema.py │ │ ├── sorters.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── benchmark │ │ │ │ ├── __init__.py │ │ │ │ ├── test_sales.py │ │ │ │ └── test_vouchers.py │ │ │ ├── deprecated │ │ │ │ ├── __init__.py │ │ │ │ └── test_discount.py │ │ │ ├── test_bulk_delete.py │ │ │ ├── test_discount.py │ │ │ ├── test_pagination.py │ │ │ ├── test_sale_channel_listing.py │ │ │ ├── test_sale_sorting_with_channels.py │ │ │ ├── test_voucher_channel_listing.py │ │ │ └── test_voucher_sorting_with_channels.py │ │ └── types.py │ ├── giftcard │ │ ├── __init__.py │ │ ├── bulk_mutations.py │ │ ├── dataloaders.py │ │ ├── enums.py │ │ ├── filters.py │ │ ├── mutations.py │ │ ├── resolvers.py │ │ ├── schema.py │ │ ├── sorters.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── benchmark │ │ │ │ ├── __init__.py │ │ │ │ ├── fixtures.py │ │ │ │ ├── test_gift_card_mutations.py │ │ │ │ └── test_gift_card_queries.py │ │ │ ├── deprecated │ │ │ │ ├── __init__.py │ │ │ │ ├── test_gift_card_mutations.py │ │ │ │ └── test_gift_card_query.py │ │ │ ├── mutations │ │ │ │ ├── __init__.py │ │ │ │ ├── test_gift_card_activate.py │ │ │ │ ├── test_gift_card_add_note.py │ │ │ │ ├── test_gift_card_bulk_activate.py │ │ │ │ ├── test_gift_card_bulk_deactivate.py │ │ │ │ ├── test_gift_card_bulk_delete.py │ │ │ │ ├── test_gift_card_create.py │ │ │ │ ├── test_gift_card_deactivate.py │ │ │ │ ├── test_gift_card_delete.py │ │ │ │ ├── test_gift_card_resend.py │ │ │ │ └── test_gift_card_update.py │ │ │ └── queries │ │ │ │ ├── __init__.py │ │ │ │ ├── test_gift_card.py │ │ │ │ ├── test_gift_card_filtering.py │ │ │ │ ├── test_gift_card_sorting.py │ │ │ │ ├── test_gift_cards.py │ │ │ │ └── test_gift_cards_currencies.py │ │ └── types.py │ ├── invoice │ │ ├── __init__.py │ │ ├── mutations.py │ │ ├── schema.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── test_invoice_create.py │ │ │ ├── test_invoice_delete.py │ │ │ ├── test_invoice_request.py │ │ │ ├── test_invoice_request_delete.py │ │ │ ├── test_invoice_update.py │ │ │ ├── test_invoice_utils.py │ │ │ └── test_send_invoice_notification.py │ │ └── types.py │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ ├── __init__.py │ │ │ └── get_graphql_schema.py │ ├── menu │ │ ├── __init__.py │ │ ├── bulk_mutations.py │ │ ├── dataloaders.py │ │ ├── enums.py │ │ ├── filters.py │ │ ├── mutations.py │ │ ├── resolvers.py │ │ ├── schema.py │ │ ├── sorters.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── deprecated │ │ │ │ ├── __init__.py │ │ │ │ └── test_menu.py │ │ │ ├── test_bulk_delete.py │ │ │ ├── test_menu.py │ │ │ └── test_pagination.py │ │ └── types.py │ ├── meta │ │ ├── __init__.py │ │ ├── extra_methods.py │ │ ├── mutations.py │ │ ├── permissions.py │ │ ├── resolvers.py │ │ ├── schema.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── test_meta_filters.py │ │ │ ├── test_meta_mutations.py │ │ │ └── test_meta_queries.py │ │ └── types.py │ ├── middleware.py │ ├── notifications │ │ ├── __init__.py │ │ ├── error_codes.py │ │ ├── mutations │ │ │ ├── __init__.py │ │ │ └── external_notification_trigger.py │ │ ├── schema.py │ │ └── tests │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── test_external_notification_dispatch.py │ │ │ └── test_external_notification_query.py │ ├── order │ │ ├── __init__.py │ │ ├── bulk_mutations │ │ │ ├── __init__.py │ │ │ ├── draft_orders.py │ │ │ └── orders.py │ │ ├── dataloaders.py │ │ ├── enums.py │ │ ├── filters.py │ │ ├── mutations │ │ │ ├── __init__.py │ │ │ ├── discount_order.py │ │ │ ├── draft_orders.py │ │ │ ├── fulfillments.py │ │ │ └── orders.py │ │ ├── resolvers.py │ │ ├── schema.py │ │ ├── sorters.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── benchmark │ │ │ │ ├── __init__.py │ │ │ │ ├── fixtures.py │ │ │ │ ├── test_fulfillment_refund_and_return_products.py │ │ │ │ ├── test_order.py │ │ │ │ └── test_order_fulfill.py │ │ │ ├── deprecated │ │ │ │ ├── __init__.py │ │ │ │ └── test_order.py │ │ │ ├── test_bulk_delete.py │ │ │ ├── test_discount_order.py │ │ │ ├── test_fulfillment.py │ │ │ ├── test_fulfillment_refund_products.py │ │ │ ├── test_fulfillment_return_products.py │ │ │ ├── test_homepage.py │ │ │ ├── test_order.py │ │ │ ├── test_order_invoices.py │ │ │ ├── test_pagination.py │ │ │ └── utils.py │ │ ├── types.py │ │ └── utils.py │ ├── page │ │ ├── __init__.py │ │ ├── bulk_mutations.py │ │ ├── dataloaders.py │ │ ├── filters.py │ │ ├── mutations │ │ │ ├── __init__.py │ │ │ ├── attributes.py │ │ │ └── pages.py │ │ ├── resolvers.py │ │ ├── schema.py │ │ ├── sorters.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── benchmark │ │ │ │ ├── __init__.py │ │ │ │ └── test_page_type.py │ │ │ ├── test_attributes.py │ │ │ ├── test_page.py │ │ │ ├── test_page_bulk_delete.py │ │ │ ├── test_page_reorder_attribute_values.py │ │ │ ├── test_page_type_create.py │ │ │ ├── test_page_type_delete.py │ │ │ ├── test_page_type_query.py │ │ │ ├── test_page_type_reorder_attributes.py │ │ │ ├── test_page_type_update.py │ │ │ ├── test_page_types_bulk_delete.py │ │ │ └── test_page_types_sorting_and_filtering.py │ │ └── types.py │ ├── payment │ │ ├── __init__.py │ │ ├── enums.py │ │ ├── filters.py │ │ ├── mutations.py │ │ ├── resolvers.py │ │ ├── schema.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── deprecated │ │ │ │ ├── __init__.py │ │ │ │ └── test_checkout_payment_create.py │ │ │ └── test_payment.py │ │ ├── types.py │ │ └── utils.py │ ├── plugins │ │ ├── __init__.py │ │ ├── enums.py │ │ ├── filters.py │ │ ├── mutations.py │ │ ├── resolvers.py │ │ ├── schema.py │ │ ├── sorters.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── queries │ │ │ │ ├── __init__.py │ │ │ │ ├── test_plugin.py │ │ │ │ └── test_plugins.py │ │ │ └── test_mutation_plugin_update.py │ │ └── types.py │ ├── product │ │ ├── __init__.py │ │ ├── bulk_mutations │ │ │ ├── __init__.py │ │ │ └── products.py │ │ ├── dataloaders │ │ │ ├── __init__.py │ │ │ ├── attributes.py │ │ │ └── products.py │ │ ├── enums.py │ │ ├── filters.py │ │ ├── mutations │ │ │ ├── __init__.py │ │ │ ├── attributes.py │ │ │ ├── channels.py │ │ │ ├── digital_contents.py │ │ │ └── products.py │ │ ├── resolvers.py │ │ ├── schema.py │ │ ├── sorters.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── app │ │ │ │ └── __init__.py │ │ │ ├── benchmark │ │ │ │ ├── __init__.py │ │ │ │ ├── conftest.py │ │ │ │ ├── test_category.py │ │ │ │ ├── test_collection.py │ │ │ │ ├── test_homepage.py │ │ │ │ ├── test_product.py │ │ │ │ ├── test_product_variant_channel_listing_update.py │ │ │ │ ├── test_variant.py │ │ │ │ └── test_variant_stocks.py │ │ │ ├── cassettes │ │ │ │ └── test_product_media_create_mutation_with_media_url.yaml │ │ │ ├── deprecated │ │ │ │ ├── __init__.py │ │ │ │ ├── test_collection.py │ │ │ │ └── test_product.py │ │ │ ├── test_attributes.py │ │ │ ├── test_bulk_delete.py │ │ │ ├── test_category.py │ │ │ ├── test_collection.py │ │ │ ├── test_collection_channel_listing_update.py │ │ │ ├── test_collection_filtering_and_sorting_with_channels.py │ │ │ ├── test_digital_content.py │ │ │ ├── test_product.py │ │ │ ├── test_product_channel_listing_update.py │ │ │ ├── test_product_channel_listings_queries.py │ │ │ ├── test_product_discounted_price.py │ │ │ ├── test_product_filtering_and_sorting_with_channels.py │ │ │ ├── test_product_pagination.py │ │ │ ├── test_product_sorting.py │ │ │ ├── test_product_sorting_attributes.py │ │ │ ├── test_variant.py │ │ │ ├── test_variant_availability.py │ │ │ ├── test_variant_channel_listing_update.py │ │ │ ├── test_variant_pricing.py │ │ │ ├── test_variant_query.py │ │ │ └── test_variant_with_filtering.py │ │ ├── types │ │ │ ├── __init__.py │ │ │ ├── channels.py │ │ │ ├── digital_contents.py │ │ │ └── products.py │ │ └── utils.py │ ├── schema.graphql │ ├── shipping │ │ ├── __init__.py │ │ ├── bulk_mutations.py │ │ ├── dataloaders.py │ │ ├── enums.py │ │ ├── filters.py │ │ ├── mutations │ │ │ ├── __init__.py │ │ │ ├── channels.py │ │ │ └── shippings.py │ │ ├── resolvers.py │ │ ├── schema.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── benchmark │ │ │ │ ├── __init__.py │ │ │ │ └── test_shipping_methods.py │ │ │ ├── test_bulk_delete.py │ │ │ ├── test_shipping_method.py │ │ │ ├── test_shipping_method_channel_listing_update.py │ │ │ └── test_shipping_zones_query.py │ │ └── types.py │ ├── shop │ │ ├── __init__.py │ │ ├── enums.py │ │ ├── mutations.py │ │ ├── resolvers.py │ │ ├── schema.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── benchmark │ │ │ │ ├── __init__.py │ │ │ │ └── test_homepage.py │ │ │ ├── test_gift_card_settings_update.py │ │ │ ├── test_shop.py │ │ │ └── test_shop_taxes.py │ │ └── types.py │ ├── tests │ │ ├── __init__.py │ │ ├── fixtures.py │ │ ├── test_decorators.py │ │ ├── test_tracing.py │ │ ├── test_utils.py │ │ └── utils.py │ ├── translations │ │ ├── __init__.py │ │ ├── dataloaders.py │ │ ├── descriptions.py │ │ ├── fields.py │ │ ├── mutations.py │ │ ├── resolvers.py │ │ ├── schema.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── deprecated │ │ │ │ ├── __init__.py │ │ │ │ └── test_translations.py │ │ │ └── test_translations.py │ │ └── types.py │ ├── utils │ │ ├── __init__.py │ │ ├── filters.py │ │ ├── sorting.py │ │ └── validators.py │ ├── vendor │ │ ├── __init__.py │ │ ├── filters.py │ │ ├── mutations.py │ │ ├── resolvers.py │ │ ├── schema.py │ │ ├── sorters.py │ │ └── types.py │ ├── views.py │ ├── warehouse │ │ ├── __init__.py │ │ ├── dataloaders.py │ │ ├── enums.py │ │ ├── filters.py │ │ ├── mutations.py │ │ ├── resolvers.py │ │ ├── schema.py │ │ ├── sorters.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── test_pagination.py │ │ │ ├── test_stock.py │ │ │ └── test_warehouse.py │ │ └── types.py │ ├── webhook │ │ ├── __init__.py │ │ ├── enums.py │ │ ├── mutations.py │ │ ├── resolvers.py │ │ ├── schema.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── test_pagination.py │ │ │ └── test_webhook.py │ │ └── types.py │ └── wishlist │ │ ├── __init__.py │ │ ├── mutations.py │ │ ├── resolvers.py │ │ ├── schema.py │ │ ├── tests │ │ ├── __init__.py │ │ └── test_wishlist.py │ │ └── types.py ├── invoice │ ├── __init__.py │ ├── error_codes.py │ ├── events.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_invoice_message.py │ │ ├── 0003_auto_20200713_1311.py │ │ ├── 0004_auto_20200810_1415.py │ │ ├── 0005_auto_20210308_1135.py │ │ ├── 0006_invoiceevent_app.py │ │ └── __init__.py │ ├── models.py │ ├── notifications.py │ └── tests │ │ ├── __init__.py │ │ └── test_notifications.py ├── menu │ ├── __init__.py │ ├── error_codes.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_auto_20180319_0412.py │ │ ├── 0003_auto_20180405_0854.py │ │ ├── 0004_sort_order_index.py │ │ ├── 0005_auto_20180719_0520.py │ │ ├── 0006_auto_20180803_0528.py │ │ ├── 0007_auto_20180807_0547.py │ │ ├── 0008_menu_json_content_new.py │ │ ├── 0009_remove_menu_json_content.py │ │ ├── 0010_auto_20180913_0841.py │ │ ├── 0011_auto_20181204_0004.py │ │ ├── 0012_auto_20190104_0443.py │ │ ├── 0013_auto_20190507_0309.py │ │ ├── 0014_auto_20190523_0759.py │ │ ├── 0015_auto_20190725_0811.py │ │ ├── 0016_auto_20200217_0350.py │ │ ├── 0017_remove_menu_json_content.py │ │ ├── 0018_auto_20200709_1102.py │ │ ├── 0019_menu_slug.py │ │ ├── 0020_auto_20201223_0845.py │ │ ├── 0021_auto_20210308_1135.py │ │ ├── 0022_alter_menuitemtranslation_language_code.py │ │ └── __init__.py │ ├── models.py │ └── tests │ │ └── __init__.py ├── order │ ├── __init__.py │ ├── actions.py │ ├── error_codes.py │ ├── events.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_auto_20150820_1955.py │ │ ├── 0003_auto_20150825_1433.py │ │ ├── 0004_order_total.py │ │ ├── 0005_deliverygroup_last_updated.py │ │ ├── 0006_deliverygroup_shipping_method.py │ │ ├── 0007_deliverygroup_tracking_number.py │ │ ├── 0008_auto_20151026_0820.py │ │ ├── 0009_auto_20151201_0820.py │ │ ├── 0010_auto_20160119_0541.py │ │ ├── 0011_auto_20160207_0534.py │ │ ├── 0012_auto_20160216_1032.py │ │ ├── 0013_auto_20160906_0741.py │ │ ├── 0014_auto_20161028_0955.py │ │ ├── 0015_auto_20170206_0407.py │ │ ├── 0016_order_language_code.py │ │ ├── 0017_auto_20170906_0556.py │ │ ├── 0018_auto_20170919_0839.py │ │ ├── 0019_auto_20171109_1423.py │ │ ├── 0020_auto_20171123_0609.py │ │ ├── 0021_auto_20171129_1004.py │ │ ├── 0022_auto_20171205_0428.py │ │ ├── 0023_auto_20171206_0506.py │ │ ├── 0024_remove_order_status.py │ │ ├── 0025_auto_20171214_1015.py │ │ ├── 0026_auto_20171218_0428.py │ │ ├── 0027_auto_20180108_0814.py │ │ ├── 0028_status_fsm.py │ │ ├── 0029_auto_20180111_0845.py │ │ ├── 0030_auto_20180118_0605.py │ │ ├── 0031_auto_20180119_0405.py │ │ ├── 0032_orderline_is_shipping_required.py │ │ ├── 0033_auto_20180123_0832.py │ │ ├── 0034_auto_20180221_1056.py │ │ ├── 0035_auto_20180221_1057.py │ │ ├── 0036_remove_order_total_tax.py │ │ ├── 0037_auto_20180228_0450.py │ │ ├── 0038_auto_20180228_0451.py │ │ ├── 0039_auto_20180312_1203.py │ │ ├── 0040_auto_20180210_0422.py │ │ ├── 0041_auto_20180222_0458.py │ │ ├── 0042_auto_20180227_0436.py │ │ ├── 0043_auto_20180322_0655.py │ │ ├── 0044_auto_20180326_1055.py │ │ ├── 0045_auto_20180329_0142.py │ │ ├── 0046_order_line_taxes.py │ │ ├── 0047_order_line_name_length.py │ │ ├── 0048_auto_20180629_1055.py │ │ ├── 0049_auto_20180719_0520.py │ │ ├── 0050_auto_20180803_0337.py │ │ ├── 0050_auto_20180803_0528.py │ │ ├── 0051_merge_20180807_0704.py │ │ ├── 0052_auto_20180822_0720.py │ │ ├── 0053_orderevent.py │ │ ├── 0054_move_data_to_order_events.py │ │ ├── 0055_remove_order_note_order_history_entry.py │ │ ├── 0056_auto_20180911_1541.py │ │ ├── 0057_orderevent_parameters_new.py │ │ ├── 0058_remove_orderevent_parameters.py │ │ ├── 0059_auto_20180913_0841.py │ │ ├── 0060_auto_20180919_0731.py │ │ ├── 0061_auto_20180920_0859.py │ │ ├── 0062_auto_20180921_0949.py │ │ ├── 0063_auto_20180926_0446.py │ │ ├── 0064_auto_20181016_0819.py │ │ ├── 0065_auto_20181017_1346.py │ │ ├── 0066_auto_20181023_0319.py │ │ ├── 0067_auto_20181102_1054.py │ │ ├── 0068_order_checkout_token.py │ │ ├── 0069_auto_20190225_2305.py │ │ ├── 0070_drop_update_event_and_rename_events.py │ │ ├── 0071_order_gift_cards.py │ │ ├── 0072_django_price_2.py │ │ ├── 0073_auto_20190829_0249.py │ │ ├── 0074_auto_20190930_0731.py │ │ ├── 0075_auto_20191006_1433.py │ │ ├── 0076_auto_20191018_0554.py │ │ ├── 0077_auto_20191118_0606.py │ │ ├── 0078_auto_20200221_0257.py │ │ ├── 0079_auto_20200225_0237.py │ │ ├── 0079_auto_20200304_0752.py │ │ ├── 0080_invoice.py │ │ ├── 0081_auto_20200406_0456.py │ │ ├── 0081_merge_20200309_0952.py │ │ ├── 0082_fulfillmentline_stock.py │ │ ├── 0083_merge_20200421_0529.py │ │ ├── 0084_auto_20200522_0522.py │ │ ├── 0085_delete_invoice.py │ │ ├── 0086_auto_20200716_1226.py │ │ ├── 0087_auto_20200810_1415.py │ │ ├── 0088_auto_20200812_1101.py │ │ ├── 0089_auto_20200902_1249.py │ │ ├── 0090_order_channel_listing.py │ │ ├── 0091_order_redirect_url.py │ │ ├── 0092_order_unconfirmed.py │ │ ├── 0093_auto_20201130_1406.py │ │ ├── 0094_auto_20201221_1128.py │ │ ├── 0095_auto_20201229_1014.py │ │ ├── 0096_order_shipping_tax_rate.py │ │ ├── 0097_auto_20210107_1148.py │ │ ├── 0098_discounts_relation.py │ │ ├── 0099_auto_20210209_0856.py │ │ ├── 0100_auto_20210216_0914.py │ │ ├── 0101_auto_20210308_1213.py │ │ ├── 0102_auto_20210310_1552.py │ │ ├── 0103_auto_20210401_1105.py │ │ ├── 0104_auto_20210506_0835.py │ │ ├── 0105_order_total_paid_amount.py │ │ ├── 0106_origin_and_original.py │ │ ├── 0107_set_origin_and_original_values.py │ │ ├── 0108_origin_not_null.py │ │ ├── 0109_undiscounted_prices.py │ │ ├── 0110_auto_20210518_0918.py │ │ ├── 0111_auto_20210518_1357.py │ │ ├── 0112_auto_20210616_0548.py │ │ ├── 0113_orderevent_app.py │ │ ├── 0114_alter_order_language_code.py │ │ ├── 0114_auto_20210722_1146.py │ │ ├── 0114_auto_20210726_1116.py │ │ ├── 0115_alter_order_language_code.py │ │ ├── 0115_merge_20210820_1454.py │ │ ├── 0116_merge_20210824_1103.py │ │ ├── 0117_merge_20210903_1013.py │ │ ├── 0118_auto_20210913_0731.py │ │ ├── 0119_orderline_is_gift_card.py │ │ ├── 0120_orderline_optional_sku.py │ │ └── __init__.py │ ├── models.py │ ├── notifications.py │ ├── tasks.py │ ├── templatetags │ │ ├── __init__.py │ │ └── order_lines.py │ ├── tests │ │ ├── __init__.py │ │ ├── test_fulfillments_actions.py │ │ ├── test_notifications.py │ │ ├── test_order.py │ │ ├── test_order_actions.py │ │ ├── test_order_actions_create_fulfillments_for_returned_products.py │ │ ├── test_order_actions_refund_products.py │ │ └── test_order_utils.py │ └── utils.py ├── page │ ├── __init__.py │ ├── error_codes.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_auto_20180321_0417.py │ │ ├── 0003_auto_20180719_0520.py │ │ ├── 0004_auto_20180803_0528.py │ │ ├── 0005_auto_20190208_0456.py │ │ ├── 0006_auto_20190220_1928.py │ │ ├── 0007_auto_20190225_0252.py │ │ ├── 0008_raw_html_to_json.py │ │ ├── 0009_auto_20191108_0402.py │ │ ├── 0010_auto_20200129_0717.py │ │ ├── 0011_auto_20200217_0350.py │ │ ├── 0012_auto_20200709_1102.py │ │ ├── 0013_update_publication_date.py │ │ ├── 0014_add_metadata.py │ │ ├── 0015_migrate_from_draftjs_to_editorjs_format.py │ │ ├── 0016_auto_20201112_0904.py │ │ ├── 0017_pagetype.py │ │ ├── 0018_migrate_content_json_into_content.py │ │ ├── 0019_auto_20210125_0905.py │ │ ├── 0020_update_content_fields.py │ │ ├── 0021_auto_20210308_1135.py │ │ ├── 0022_alter_pagetranslation_title.py │ │ ├── 0023_auto_20210526_0835.py │ │ ├── 0024_alter_pagetranslation_language_code.py │ │ └── __init__.py │ └── models.py ├── payment │ ├── __init__.py │ ├── dataloaders.py │ ├── error_codes.py │ ├── gateway.py │ ├── gateways │ │ ├── __init__.py │ │ ├── adyen │ │ │ ├── __init__.py │ │ │ ├── plugin.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── cassettes │ │ │ │ │ ├── test_capture_payment.yaml │ │ │ │ │ ├── test_get_payment_gateway_for_checkout.yaml │ │ │ │ │ ├── test_process_payment.yaml │ │ │ │ │ ├── test_process_payment_with_3ds_redirect.yaml │ │ │ │ │ ├── test_process_payment_with_adyen_auto_capture.yaml │ │ │ │ │ ├── test_process_payment_with_auto_capture.yaml │ │ │ │ │ ├── test_process_payment_with_klarna.yaml │ │ │ │ │ ├── test_refund_payment.yaml │ │ │ │ │ └── test_void_payment.yaml │ │ │ │ ├── conftest.py │ │ │ │ ├── test_adyen_version.py │ │ │ │ ├── test_plugin.py │ │ │ │ ├── utils │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── test_apple_pay.py │ │ │ │ │ └── test_common.py │ │ │ │ └── webhooks │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── cassettes │ │ │ │ │ └── test_handle_authorization_with_auto_capture.yaml │ │ │ │ │ ├── test_get_payment.py │ │ │ │ │ ├── test_handle_additional_actions.py │ │ │ │ │ ├── test_handle_notifications.py │ │ │ │ │ ├── test_prepare_api_request_data.py │ │ │ │ │ └── test_validate_notification.py │ │ │ ├── utils │ │ │ │ ├── __init__.py │ │ │ │ ├── apple_pay.py │ │ │ │ └── common.py │ │ │ └── webhooks.py │ │ ├── authorize_net │ │ │ ├── __init__.py │ │ │ ├── plugin.py │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── cassettes │ │ │ │ ├── test_authenticate_test.yaml │ │ │ │ ├── test_authenticate_test_failure.yaml │ │ │ │ ├── test_authorize_and_capture.yaml │ │ │ │ ├── test_list_client_sources.yaml │ │ │ │ ├── test_list_client_sources_other_name.yaml │ │ │ │ ├── test_payment_gateway_process_payment_production_failure.yaml │ │ │ │ ├── test_payment_gateway_validate_production.yaml │ │ │ │ ├── test_process_payment.yaml │ │ │ │ ├── test_process_payment_error_response.yaml │ │ │ │ ├── test_process_payment_reuse_source.yaml │ │ │ │ ├── test_process_payment_with_user.yaml │ │ │ │ ├── test_refund.yaml │ │ │ │ ├── test_refund_error.yaml │ │ │ │ ├── test_void.yaml │ │ │ │ ├── test_void_duplicate.yaml │ │ │ │ └── test_void_failure.yaml │ │ │ │ ├── conftest.py │ │ │ │ ├── test_authorize_net.py │ │ │ │ └── test_plugin.py │ │ ├── braintree │ │ │ ├── __init__.py │ │ │ ├── errors.py │ │ │ ├── plugin.py │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── cassettes │ │ │ │ ├── test_authorize_and_save_customer_id.yaml │ │ │ │ ├── test_authorize_one_time.yaml │ │ │ │ ├── test_authorize_with_customer_id.yaml │ │ │ │ ├── test_capture.yaml │ │ │ │ ├── test_capture_incorrect_token.yaml │ │ │ │ ├── test_list_customer_sources.yaml │ │ │ │ ├── test_refund.yaml │ │ │ │ ├── test_refund_incorrect_token.yaml │ │ │ │ ├── test_void.yaml │ │ │ │ └── test_void_incorrect_token.yaml │ │ │ │ └── test_braintree.py │ │ ├── dummy │ │ │ ├── __init__.py │ │ │ ├── plugin.py │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_dummy.py │ │ ├── dummy_credit_card │ │ │ ├── __init__.py │ │ │ ├── plugin.py │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_dummy_credit_card.py │ │ ├── razorpay │ │ │ ├── __init__.py │ │ │ ├── errors.py │ │ │ ├── plugin.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_razorpay.py │ │ │ └── utils.py │ │ ├── stripe │ │ │ ├── __init__.py │ │ │ ├── consts.py │ │ │ ├── deprecated │ │ │ │ ├── __init__.py │ │ │ │ ├── plugin.py │ │ │ │ ├── tests │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── cassettes │ │ │ │ │ │ ├── test_authorize.yaml │ │ │ │ │ │ ├── test_authorize_3d_secure.yaml │ │ │ │ │ │ ├── test_authorize_and_save_customer_id.yaml │ │ │ │ │ │ ├── test_authorize_error_response.yaml │ │ │ │ │ │ ├── test_authorize_with_customer_id.yaml │ │ │ │ │ │ ├── test_authorize_without_capture.yaml │ │ │ │ │ │ ├── test_capture.yaml │ │ │ │ │ │ ├── test_capture_3d_secure.yaml │ │ │ │ │ │ ├── test_capture_error_response.yaml │ │ │ │ │ │ ├── test_confirm__intent.yaml │ │ │ │ │ │ ├── test_confirm_error_response.yaml │ │ │ │ │ │ ├── test_list_customer_sources.yaml │ │ │ │ │ │ ├── test_refund.yaml │ │ │ │ │ │ ├── test_refund_error_response.yaml │ │ │ │ │ │ ├── test_void.yaml │ │ │ │ │ │ └── test_void_error_response.yaml │ │ │ │ │ ├── test_stripe.py │ │ │ │ │ └── test_utils.py │ │ │ │ └── utils.py │ │ │ ├── plugin.py │ │ │ ├── stripe_api.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── conftest.py │ │ │ │ ├── test_plugin.py │ │ │ │ ├── test_plugin_deprecated.py │ │ │ │ ├── test_stripe_api.py │ │ │ │ └── test_webhooks.py │ │ │ └── webhooks.py │ │ └── utils.py │ ├── interface.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_transfer_payment_to_payment_method.py │ │ ├── 0003_rename_payment_method_to_payment.py │ │ ├── 0004_auto_20181206_0031.py │ │ ├── 0005_auto_20190104_0443.py │ │ ├── 0006_auto_20190109_0358.py │ │ ├── 0007_auto_20190125_0242.py │ │ ├── 0007_auto_20190206_0938.py │ │ ├── 0008_merge_20190214_0447.py │ │ ├── 0009_convert_to_partially_charged_and_partially_refunded.py │ │ ├── 0010_auto_20190220_2001.py │ │ ├── 0011_auto_20190516_0901.py │ │ ├── 0012_transaction_customer_id.py │ │ ├── 0013_auto_20190813_0735.py │ │ ├── 0014_django_price_2.py │ │ ├── 0015_auto_20200203_1116.py │ │ ├── 0016_auto_20200423_0314.py │ │ ├── 0017_payment_payment_method_type.py │ │ ├── 0018_auto_20200810_1415.py │ │ ├── 0019_auto_20200812_1101.py │ │ ├── 0020_auto_20200902_1249.py │ │ ├── 0021_transaction_searchable_key.py │ │ ├── 0022_auto_20201104_1458.py │ │ ├── 0023_auto_20201110_0834.py │ │ ├── 0024_auto_20210326_0837.py │ │ ├── 0025_auto_20210506_0750.py │ │ ├── 0026_payment_psp_reference.py │ │ ├── 0027_assign_psp_reference_values.py │ │ ├── 0028_drop_searchable_key.py │ │ ├── 0029_alter_payment_options.py │ │ ├── 0030_auto_20210908_1346.py │ │ └── __init__.py │ ├── model_helpers.py │ ├── models.py │ ├── tests │ │ ├── __init__.py │ │ ├── test_gateway.py │ │ ├── test_gateways_utils.py │ │ └── test_payment.py │ └── utils.py ├── plugins │ ├── __init__.py │ ├── admin_email │ │ ├── __init__.py │ │ ├── constants.py │ │ ├── default_email_templates │ │ │ ├── export_failed.html │ │ │ ├── export_products_file.html │ │ │ ├── password_reset.html │ │ │ ├── set_password.html │ │ │ └── staff_confirm_order.html │ │ ├── notify_events.py │ │ ├── plugin.py │ │ ├── tasks.py │ │ └── tests │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── test_notify_events.py │ │ │ ├── test_plugin.py │ │ │ └── test_tasks.py │ ├── anonymize │ │ ├── __init__.py │ │ └── plugin.py │ ├── apps.py │ ├── avatax │ │ ├── __init__.py │ │ ├── plugin.py │ │ ├── tasks.py │ │ └── tests │ │ │ ├── __init__.py │ │ │ ├── cassettes │ │ │ ├── test_api_post_request_task_creates_order_event.yaml │ │ │ ├── test_api_post_request_task_sends_request.yaml │ │ │ ├── test_calculate_checkout_line_total[False-24.39-30.00-True].yaml │ │ │ ├── test_calculate_checkout_line_total[False-30.00-36.90-False].yaml │ │ │ ├── test_calculate_checkout_line_total[True-12.20-15.00-True].yaml │ │ │ ├── test_calculate_checkout_line_total[True-15.00-18.45-False].yaml │ │ │ ├── test_calculate_checkout_line_unit_price[False].yaml │ │ │ ├── test_calculate_checkout_line_unit_price[True].yaml │ │ │ ├── test_calculate_checkout_line_without_sku_total[False-24.39-30.00-True].yaml │ │ │ ├── test_calculate_checkout_line_without_sku_total[False-30.00-36.90-False].yaml │ │ │ ├── test_calculate_checkout_line_without_sku_total[True-12.20-15.00-True].yaml │ │ │ ├── test_calculate_checkout_line_without_sku_total[True-15.00-18.45-False].yaml │ │ │ ├── test_calculate_checkout_shipping.yaml │ │ │ ├── test_calculate_checkout_subtotal[False-40.65-50.00-True].yaml │ │ │ ├── test_calculate_checkout_subtotal[False-50.00-61.50-False].yaml │ │ │ ├── test_calculate_checkout_subtotal[True-20.33-25.00-True].yaml │ │ │ ├── test_calculate_checkout_subtotal[True-25.00-30.75-False].yaml │ │ │ ├── test_calculate_checkout_total[False-33.13-40.98-3.0-True].yaml │ │ │ ├── test_calculate_checkout_total[False-43.98-53.64-0.0-False].yaml │ │ │ ├── test_calculate_checkout_total[True-23.94-28.98-0.0-True].yaml │ │ │ ├── test_calculate_checkout_total[True-23.98-30.19-5.0-False].yaml │ │ │ ├── test_calculate_checkout_total_not_charged_product_and_shipping_with_0_price.yaml │ │ │ ├── test_calculate_checkout_total_uses_default_calculation[False-31.51-38.99-3.0-True].yaml │ │ │ ├── test_calculate_checkout_total_uses_default_calculation[False-41.99-51.19-0.0-False].yaml │ │ │ ├── test_calculate_checkout_total_uses_default_calculation[True-21.99-27.74-5.0-False].yaml │ │ │ ├── test_calculate_checkout_total_uses_default_calculation[True-22.32-26.99-0.0-True].yaml │ │ │ ├── test_calculate_order_line_total.yaml │ │ │ ├── test_calculate_order_line_unit.yaml │ │ │ ├── test_calculate_order_line_without_sku_total.yaml │ │ │ ├── test_calculate_order_shipping.yaml │ │ │ ├── test_get_cached_tax_codes_or_fetch.yaml │ │ │ ├── test_get_cached_tax_codes_or_fetch_wrong_response.yaml │ │ │ ├── test_get_checkout_line_tax_rate.yaml │ │ │ ├── test_get_checkout_line_tax_rate_for_product_type_with_non_taxable_product.yaml │ │ │ ├── test_get_checkout_shipping_tax_rate.yaml │ │ │ ├── test_get_order_line_tax_rate.yaml │ │ │ ├── test_get_order_shipping_tax_rate.yaml │ │ │ ├── test_plugin_uses_configuration_from_db.yaml │ │ │ ├── test_preprocess_order_creation.yaml │ │ │ ├── test_preprocess_order_creation_no_lines_data.yaml │ │ │ └── test_preprocess_order_creation_wrong_data.yaml │ │ │ ├── conftest.py │ │ │ ├── test_avatax.py │ │ │ ├── test_avatax_caching.py │ │ │ └── test_tasks.py │ ├── base_plugin.py │ ├── email_common.py │ ├── error_codes.py │ ├── invoicing │ │ ├── __init__.py │ │ ├── plugin.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ └── test_invoicing.py │ │ └── utils.py │ ├── manager.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_auto_20200417_0335.py │ │ ├── 0003_auto_20200429_0142.py │ │ ├── 0004_drop_support_for_env_vatlayer_access_key.py │ │ ├── 0005_auto_20200810_1415.py │ │ ├── 0006_auto_20200909_1253.py │ │ ├── 0007_add_user_emails_configuration.py │ │ ├── 0008_pluginconfiguration_channel.py │ │ └── __init__.py │ ├── models.py │ ├── sendgrid │ │ ├── __init__.py │ │ ├── plugin.py │ │ ├── tasks.py │ │ └── tests │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── test_plugin.py │ │ │ └── test_tasks.py │ ├── tests │ │ ├── __init__.py │ │ ├── fixtures.py │ │ ├── sample_plugins.py │ │ ├── test_manager.py │ │ ├── test_plugin_config_checks.py │ │ ├── test_plugins.py │ │ ├── test_views.py │ │ └── utils.py │ ├── user_email │ │ ├── __init__.py │ │ ├── constants.py │ │ ├── default_email_templates │ │ │ ├── account_delete.html │ │ │ ├── confirm.html │ │ │ ├── confirm_fulfillment.html │ │ │ ├── confirm_order.html │ │ │ ├── confirm_payment.html │ │ │ ├── confirmed_order.html │ │ │ ├── email_changed_notification.html │ │ │ ├── gift_card.html │ │ │ ├── order_cancel.html │ │ │ ├── order_refund.html │ │ │ ├── password_reset.html │ │ │ ├── request_email_change.html │ │ │ ├── send_invoice.html │ │ │ ├── set_customer_password.html │ │ │ └── update_fulfillment.html │ │ ├── notify_events.py │ │ ├── plugin.py │ │ ├── tasks.py │ │ └── tests │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── test_notify_events.py │ │ │ ├── test_plugin.py │ │ │ └── test_tasks.py │ ├── vatlayer │ │ ├── __init__.py │ │ ├── plugin.py │ │ └── tests │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ └── test_vatlayer.py │ ├── views.py │ └── webhook │ │ ├── __init__.py │ │ ├── plugin.py │ │ ├── tasks.py │ │ ├── tests │ │ ├── __init__.py │ │ ├── cassettes │ │ │ ├── test_trigger_webhooks_with_http.yaml │ │ │ └── test_trigger_webhooks_with_http_and_secret_key.yaml │ │ ├── test_payment_webhook.py │ │ ├── test_payment_webhook_utils.py │ │ ├── test_webhook.py │ │ └── test_webhook_protocols.py │ │ └── utils.py ├── product │ ├── __init__.py │ ├── app.py │ ├── error_codes.py │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ ├── __init__.py │ │ │ └── update_all_products_discounted_prices.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_auto_20150722_0545.py │ │ ├── 0003_auto_20150820_1955.py │ │ ├── 0003_auto_20150820_2016.py │ │ ├── 0004_merge.py │ │ ├── 0005_auto_20150825_1433.py │ │ ├── 0006_product_updated_at.py │ │ ├── 0007_auto_20160112_1025.py │ │ ├── 0008_auto_20160114_0733.py │ │ ├── 0009_discount_categories.py │ │ ├── 0010_auto_20160129_0826.py │ │ ├── 0011_stock_quantity_allocated.py │ │ ├── 0012_auto_20160218_0812.py │ │ ├── 0013_auto_20161130_0608.py │ │ ├── 0013_auto_20161207_0555.py │ │ ├── 0014_auto_20161207_0840.py │ │ ├── 0014_remove_productvariant_attributes.py │ │ ├── 0015_productvariant_attributes.py │ │ ├── 0015_transfer_locations.py │ │ ├── 0016_auto_20161204_0311.py │ │ ├── 0016_auto_20161207_0843.py │ │ ├── 0017_attributechoicevalue_slug.py │ │ ├── 0017_remove_stock_location.py │ │ ├── 0018_auto_20161207_0844.py │ │ ├── 0018_auto_20161212_0725.py │ │ ├── 0019_auto_20161212_0230.py │ │ ├── 0020_attribute_data_to_class.py │ │ ├── 0021_add_hstore_extension.py │ │ ├── 0022_auto_20161212_0301.py │ │ ├── 0023_auto_20161211_1912.py │ │ ├── 0024_migrate_json_data.py │ │ ├── 0025_auto_20161219_0517.py │ │ ├── 0026_auto_20161230_0347.py │ │ ├── 0026_merge_20161221_0845.py │ │ ├── 0027_auto_20170113_0435.py │ │ ├── 0028_merge_20170116_1016.py │ │ ├── 0029_product_is_featured.py │ │ ├── 0030_auto_20170206_0407.py │ │ ├── 0031_auto_20170206_0601.py │ │ ├── 0032_auto_20170216_0438.py │ │ ├── 0033_auto_20170227_0757.py │ │ ├── 0034_product_is_published.py │ │ ├── 0035_auto_20170919_0846.py │ │ ├── 0036_auto_20171115_0608.py │ │ ├── 0037_auto_20171124_0847.py │ │ ├── 0037_auto_20171129_1004.py │ │ ├── 0038_auto_20171129_0616.py │ │ ├── 0039_merge_20171130_0727.py │ │ ├── 0040_auto_20171205_0428.py │ │ ├── 0041_auto_20171205_0546.py │ │ ├── 0042_auto_20171206_0501.py │ │ ├── 0043_auto_20171207_0839.py │ │ ├── 0044_auto_20180108_0814.py │ │ ├── 0045_md_to_html.py │ │ ├── 0046_product_category.py │ │ ├── 0047_auto_20180117_0359.py │ │ ├── 0048_product_class_to_type.py │ │ ├── 0049_collection.py │ │ ├── 0050_auto_20180131_0746.py │ │ ├── 0051_auto_20180202_1106.py │ │ ├── 0052_slug_field_length.py │ │ ├── 0053_auto_20180305_1002.py │ │ ├── 0053_product_seo_description.py │ │ ├── 0054_merge_20180320_1108.py │ │ ├── 0055_auto_20180321_0417.py │ │ ├── 0056_auto_20180330_0321.py │ │ ├── 0057_auto_20180403_0852.py │ │ ├── 0058_auto_20180329_0142.py │ │ ├── 0059_generate_variant_name_from_attrs.py │ │ ├── 0060_collection_is_published.py │ │ ├── 0061_product_taxes.py │ │ ├── 0062_sortable_models.py │ │ ├── 0063_required_attr_value_order.py │ │ ├── 0064_productvariant_handle_stock.py │ │ ├── 0065_auto_20180719_0520.py │ │ ├── 0066_auto_20180803_0528.py │ │ ├── 0067_remove_product_is_featured.py │ │ ├── 0068_auto_20180822_0720.py │ │ ├── 0069_auto_20180912_0326.py │ │ ├── 0070_auto_20180912_0329.py │ │ ├── 0071_attributechoicevalue_value.py │ │ ├── 0072_auto_20180925_1048.py │ │ ├── 0073_auto_20181010_0729.py │ │ ├── 0074_auto_20181010_0730.py │ │ ├── 0075_auto_20181010_0842.py │ │ ├── 0076_auto_20181012_1146.py │ │ ├── 0077_generate_versatile_background_images.py │ │ ├── 0078_auto_20181120_0437.py │ │ ├── 0079_default_tax_rate_instead_of_empty_field.py │ │ ├── 0080_auto_20181214_0440.py │ │ ├── 0080_collection_published_date.py │ │ ├── 0081_auto_20181218_0024.py │ │ ├── 0081_merge_20181215_1659.py │ │ ├── 0082_merge_20181219_1440.py │ │ ├── 0083_auto_20190104_0443.py │ │ ├── 0084_auto_20190122_0113.py │ │ ├── 0085_auto_20190125_0025.py │ │ ├── 0086_product_publication_date.py │ │ ├── 0087_auto_20190208_0326.py │ │ ├── 0088_auto_20190220_1928.py │ │ ├── 0089_auto_20190225_0252.py │ │ ├── 0090_auto_20190328_0608.py │ │ ├── 0091_auto_20190402_0853.py │ │ ├── 0092_auto_20190507_0309.py │ │ ├── 0093_auto_20190521_0124.py │ │ ├── 0094_auto_20190618_0430.py │ │ ├── 0095_auto_20190618_0842.py │ │ ├── 0096_auto_20190719_0339.py │ │ ├── 0096_raw_html_to_json.py │ │ ├── 0097_auto_20190719_0458.py │ │ ├── 0098_auto_20190719_0733.py │ │ ├── 0099_auto_20190719_0745.py │ │ ├── 0100_merge_20190719_0803.py │ │ ├── 0101_auto_20190719_0839.py │ │ ├── 0102_migrate_data_enterprise_grade_attributes.py │ │ ├── 0103_schema_data_enterprise_grade_attributes.py │ │ ├── 0104_fix_invalid_attributes_map.py │ │ ├── 0105_product_minimal_variant_price.py │ │ ├── 0106_django_prices_2.py │ │ ├── 0107_attributes_map_to_m2m.py │ │ ├── 0108_auto_20191003_0422.py │ │ ├── 0109_auto_20191006_1433.py │ │ ├── 0110_auto_20191108_0340.py │ │ ├── 0111_auto_20191209_0437.py │ │ ├── 0112_auto_20200129_0050.py │ │ ├── 0113_auto_20200129_0717.py │ │ ├── 0114_auto_20200129_0815.py │ │ ├── 0115_auto_20200221_0257.py │ │ ├── 0116_auto_20200225_0237.py │ │ ├── 0117_auto_20200423_0737.py │ │ ├── 0118_populate_product_variant_price.py │ │ ├── 0119_auto_20200709_1102.py │ │ ├── 0120_auto_20200714_0539.py │ │ ├── 0121_auto_20200810_1415.py │ │ ├── 0122_auto_20200828_1135.py │ │ ├── 0123_auto_20200904_1251.py │ │ ├── 0124_auto_20200909_0904.py │ │ ├── 0125_auto_20200916_1511.py │ │ ├── 0126_product_default_variant.py │ │ ├── 0127_auto_20201001_0933.py │ │ ├── 0128_update_publication_date.py │ │ ├── 0129_add_product_types_and_attributes_perm.py │ │ ├── 0130_create_product_description_search_vector.py │ │ ├── 0130_migrate_from_draftjs_to_editorjs_format.py │ │ ├── 0131_auto_20201112_0904.py │ │ ├── 0131_update_ts_vector_existing_product_name.py │ │ ├── 0132_product_rating.py │ │ ├── 0133_product_variant_channel_listing.py │ │ ├── 0134_product_channel_listing.py │ │ ├── 0135_collection_channel_listing.py │ │ ├── 0136_add_attribute_type_and_page_to_attribute_relation.py │ │ ├── 0137_drop_attribute_models.py │ │ ├── 0138_migrate_description_json_into_description.py │ │ ├── 0139_description_vector_search.py │ │ ├── 0140_auto_20210125_0905.py │ │ ├── 0141_update_descritpion_fields.py │ │ ├── 0142_auto_20210308_1135.py │ │ ├── 0143_rename_product_images_to_product_media.py │ │ ├── 0144_auto_20210318_1155.py │ │ ├── 0145_auto_20210511_1043.py │ │ ├── 0146_auto_20210518_0945.py │ │ ├── 0147_auto_20210817_1015.py │ │ ├── 0148_producttype_type.py │ │ ├── 0149_alter_productvariant_sku.py │ │ ├── 0150_auto_20211001_1004.py │ │ └── __init__.py │ ├── models.py │ ├── product_images.py │ ├── signals.py │ ├── tasks.py │ ├── tests │ │ ├── __init__.py │ │ ├── test_category.py │ │ ├── test_generate_and_set_variant_name.py │ │ ├── test_get_variant_selection_attributes.py │ │ ├── test_product.py │ │ ├── test_product_availability.py │ │ ├── test_product_minimal_variant_price.py │ │ ├── test_product_tags.py │ │ ├── test_product_without_variants.py │ │ ├── test_tasks.py │ │ ├── test_translation.py │ │ └── utils.py │ ├── thumbnails.py │ ├── utils │ │ ├── __init__.py │ │ ├── availability.py │ │ ├── costs.py │ │ ├── digital_products.py │ │ ├── variant_prices.py │ │ └── variants.py │ └── views.py ├── seo │ ├── __init__.py │ ├── models.py │ ├── schema │ │ ├── __init__.py │ │ └── email.py │ └── tests │ │ ├── __init__.py │ │ └── test_seo_schema.py ├── settings.py ├── shipping │ ├── __init__.py │ ├── error_codes.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_auto_20160906_0741.py │ │ ├── 0003_auto_20170116_0700.py │ │ ├── 0004_auto_20170206_0407.py │ │ ├── 0005_auto_20170906_0556.py │ │ ├── 0006_auto_20171109_0908.py │ │ ├── 0007_auto_20171129_1004.py │ │ ├── 0008_auto_20180108_0814.py │ │ ├── 0009_auto_20180629_1055.py │ │ ├── 0010_auto_20180719_0520.py │ │ ├── 0011_auto_20180802_1238.py │ │ ├── 0012_remove_legacy_shipping_methods.py │ │ ├── 0013_auto_20180822_0721.py │ │ ├── 0014_auto_20180920_0956.py │ │ ├── 0015_auto_20190305_0640.py │ │ ├── 0016_shippingmethod_meta.py │ │ ├── 0017_django_price_2.py │ │ ├── 0018_default_zones_countries.py │ │ ├── 0019_remove_shippingmethod_meta.py │ │ ├── 0020_auto_20200902_1249.py │ │ ├── 0021_auto_20201021_2158.py │ │ ├── 0022_shipping_method_channel_listing.py │ │ ├── 0023_shippingmethod_excluded_products.py │ │ ├── 0024_shippingmethodzipcoderule.py │ │ ├── 0025_auto_20201130_1122.py │ │ ├── 0026_shippingzone_description.py │ │ ├── 0027_auto_20210120_2201.py │ │ ├── 0028_auto_20210308_1135.py │ │ ├── 0029_shippingzone_channels.py │ │ ├── 0030_auto_20210415_1001.py │ │ ├── 0031_alter_shippingmethodtranslation_language_code.py │ │ └── __init__.py │ ├── models.py │ ├── postal_codes.py │ ├── tasks.py │ ├── tests │ │ ├── __init__.py │ │ ├── test_postal_codes.py │ │ ├── test_shipping.py │ │ ├── test_tasks.py │ │ └── test_translation.py │ └── utils.py ├── site │ ├── __init__.py │ ├── context_processors.py │ ├── error_codes.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_add_default_data.py │ │ ├── 0003_sitesettings_description.py │ │ ├── 0004_auto_20170221_0426.py │ │ ├── 0005_auto_20170906_0556.py │ │ ├── 0006_auto_20171025_0454.py │ │ ├── 0007_auto_20171027_0856.py │ │ ├── 0008_auto_20171027_0856.py │ │ ├── 0009_auto_20171109_0849.py │ │ ├── 0010_auto_20171113_0958.py │ │ ├── 0011_auto_20180108_0814.py │ │ ├── 0012_auto_20180405_0757.py │ │ ├── 0013_assign_default_menus.py │ │ ├── 0014_handle_taxes.py │ │ ├── 0015_sitesettings_handle_stock_by_default.py │ │ ├── 0016_auto_20180719_0520.py │ │ ├── 0017_auto_20180803_0528.py │ │ ├── 0018_sitesettings_homepage_collection.py │ │ ├── 0019_sitesettings_default_weight_unit.py │ │ ├── 0020_auto_20190301_0336.py │ │ ├── 0021_auto_20190326_0521.py │ │ ├── 0022_sitesettings_company_address.py │ │ ├── 0023_auto_20191007_0835.py │ │ ├── 0024_sitesettings_customer_set_password_url.py │ │ ├── 0025_auto_20191024_0552.py │ │ ├── 0026_remove_sitesettings_homepage_collection.py │ │ ├── 0027_sitesettings_automatically_confirm_all_new_orders.py │ │ ├── 0028_delete_authorizationkey.py │ │ ├── 0029_auto_20210120_0934.py │ │ ├── 0030_alter_sitesettingstranslation_language_code.py │ │ ├── 0030_auto_20210722_1141.py │ │ ├── 0031_merge_20210820_1454.py │ │ ├── 0032_gift_card_settings.py │ │ └── __init__.py │ ├── models.py │ ├── patch_sites.py │ └── tests │ │ ├── __init__.py │ │ └── test_site_settings.py ├── static │ ├── images │ │ ├── logo-light.svg │ │ ├── placeholder1080x1080.png │ │ ├── placeholder120x120.png │ │ ├── placeholder255x255.png │ │ ├── placeholder540x540.png │ │ └── placeholder60x60.png │ ├── placeholders │ │ ├── products-list │ │ │ ├── accessories.jpg │ │ │ ├── apparel.jpg │ │ │ ├── clothing.jpg │ │ │ ├── groceries.jpg │ │ │ └── summer.jpg │ │ ├── saleor-digital-03_1.png │ │ ├── saleor-digital-03_2.png │ │ ├── saleor-digital-03_3.png │ │ ├── saleor-digital-03_4.png │ │ ├── saleor-digital-03_5.png │ │ ├── saleor-digital-03_6.png │ │ ├── saleordemoproduct_beer-01_1.png │ │ ├── saleordemoproduct_beer-01_2.png │ │ ├── saleordemoproduct_beer-02_1.png │ │ ├── saleordemoproduct_beer-02_2.png │ │ ├── saleordemoproduct_cl_bogo01_1.png │ │ ├── saleordemoproduct_cl_bogo02_1.png │ │ ├── saleordemoproduct_cl_bogo03_1.png │ │ ├── saleordemoproduct_cl_bogo04_1.png │ │ ├── saleordemoproduct_cl_bogo04_2.png │ │ ├── saleordemoproduct_cl_boot01_1.png │ │ ├── saleordemoproduct_cl_boot01_2.png │ │ ├── saleordemoproduct_cl_boot01_3.png │ │ ├── saleordemoproduct_cl_boot03_1.png │ │ ├── saleordemoproduct_cl_boot03_2.png │ │ ├── saleordemoproduct_cl_boot06_1.png │ │ ├── saleordemoproduct_cl_boot06_2.png │ │ ├── saleordemoproduct_cl_boot07_1.png │ │ ├── saleordemoproduct_cl_boot07_2.png │ │ ├── saleordemoproduct_cl_polo01.png │ │ ├── saleordemoproduct_cl_polo02.png │ │ ├── saleordemoproduct_cl_polo03-woman.png │ │ ├── saleordemoproduct_cl_polo04-woman.png │ │ ├── saleordemoproduct_cuschion01.png │ │ ├── saleordemoproduct_cuschion02.png │ │ ├── saleordemoproduct_fd_juice_01.png │ │ ├── saleordemoproduct_fd_juice_02.png │ │ ├── saleordemoproduct_fd_juice_03.png │ │ ├── saleordemoproduct_fd_juice_04.png │ │ ├── saleordemoproduct_fd_juice_05.png │ │ ├── saleordemoproduct_fd_juice_06.png │ │ ├── saleordemoproduct_paints_01.png │ │ ├── saleordemoproduct_paints_02.png │ │ ├── saleordemoproduct_paints_03.png │ │ ├── saleordemoproduct_paints_04.png │ │ ├── saleordemoproduct_paints_05.png │ │ ├── saleordemoproduct_sneakers_01_1.png │ │ ├── saleordemoproduct_sneakers_01_2.png │ │ ├── saleordemoproduct_sneakers_01_3.png │ │ ├── saleordemoproduct_sneakers_01_4.png │ │ ├── saleordemoproduct_sneakers_02_1.png │ │ ├── saleordemoproduct_sneakers_02_2.png │ │ ├── saleordemoproduct_sneakers_02_3.png │ │ ├── saleordemoproduct_sneakers_02_4.png │ │ ├── saleordemoproduct_wine-red.png │ │ └── saleordemoproduct_wine-white.png │ └── populatedb_data.json ├── tests │ ├── __init__.py │ ├── dummy_password_hasher.py │ ├── fixtures.py │ ├── models.py │ ├── runner.py │ ├── settings.py │ └── utils.py ├── urls.py ├── vendor │ ├── __init__.py │ ├── apps.py │ ├── error_codes.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_auto_20210811_0947.py │ │ ├── 0003_vendor_slug.py │ │ └── __init__.py │ └── models.py ├── warehouse │ ├── __init__.py │ ├── availability.py │ ├── error_codes.py │ ├── management.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_auto_20200123_0036.py │ │ ├── 0003_warehouse_slug.py │ │ ├── 0004_auto_20200129_0717.py │ │ ├── 0005_auto_20200204_0722.py │ │ ├── 0006_auto_20200228_0519.py │ │ ├── 0007_auto_20200406_0341.py │ │ ├── 0008_auto_20200430_0239.py │ │ ├── 0009_remove_invalid_allocation.py │ │ ├── 0010_auto_20200709_1102.py │ │ ├── 0011_auto_20200714_0539.py │ │ ├── 0012_auto_20210115_1307.py │ │ ├── 0013_auto_20210308_1135.py │ │ ├── 0014_remove_warehouse_company_name.py │ │ ├── 0015_alter_stock_quantity.py │ │ ├── 0015_auto_20210713_0904.py │ │ ├── 0016_merge_20210921_1036.py │ │ ├── 0017_preorderallocation.py │ │ └── __init__.py │ ├── models.py │ ├── tasks.py │ ├── tests │ │ ├── __init__.py │ │ ├── test_preorder_availability.py │ │ ├── test_preorder_complete.py │ │ ├── test_stock.py │ │ ├── test_stock_availability.py │ │ ├── test_stock_management.py │ │ ├── test_warehouse.py │ │ └── utils.py │ └── validation.py ├── webhook │ ├── __init__.py │ ├── error_codes.py │ ├── event_types.py │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_webhook_name.py │ │ ├── 0003_unmount_service_account.py │ │ ├── 0004_mount_app.py │ │ ├── 0005_drop_manage_webhooks_permission.py │ │ ├── 0006_auto_20200731_1440.py │ │ ├── 0007_auto_20210319_0945.py │ │ └── __init__.py │ ├── models.py │ ├── payload_serializers.py │ ├── payloads.py │ ├── serializers.py │ └── tests │ │ ├── __init__.py │ │ ├── test_webhook_payload_serializers.py │ │ ├── test_webhook_payloads.py │ │ ├── test_webhook_sample_payloads.py │ │ └── test_webhook_serializers.py ├── wishlist │ ├── __init__.py │ ├── error_codes.py │ ├── migrations │ │ ├── 0001_initial.py │ │ └── __init__.py │ ├── models.py │ └── tests │ │ ├── __init__.py │ │ └── test_wishlist.py └── wsgi │ ├── __init__.py │ ├── health_check.py │ └── uwsgi.ini ├── scripts └── push_static.sh ├── setup.cfg ├── templates ├── formatted_address.html ├── graphql │ └── playground.html ├── home │ ├── images │ │ ├── dashboard.svg │ │ ├── logo.svg │ │ ├── playground.svg │ │ ├── splash.svg │ │ └── storefront.svg │ └── index.html ├── invoices │ ├── inter.ttf │ ├── invoice.html │ ├── invoice_products_table.html │ └── invoice_summary_table.html └── price.html └── tox.ini /.dockerignore: -------------------------------------------------------------------------------- 1 | .* 2 | **/*.pyc 3 | *.sqlite 4 | media 5 | node_modules 6 | static 7 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: 💬 Spectrum 4 | url: https://spectrum.chat/saleor 5 | about: If you have a support question or need help getting Saleor to work, please use our Spectrum. 6 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: Feature request 6 | assignees: '' 7 | 8 | --- 9 | 10 | ### What I'm trying to achieve 11 | … 12 | 13 | ### Describe a proposed solution 14 | ... 15 | 16 | ### Other solutions I've tried and won't work 17 | … 18 | 19 | ### Screenshots or mockups 20 | 21 | -------------------------------------------------------------------------------- /.github/graphql-inspector.yaml: -------------------------------------------------------------------------------- 1 | branch: "master" 2 | schema: "saleor/graphql/schema.graphql" 3 | diff: 4 | # Pull Request annotations 5 | annotations: true 6 | # Merge Pull Request's branch with the target branch to get the schema 7 | experimental_merge: true 8 | # Label to mark Pull Request introducing breaking changes as safe and expected 9 | approveLabel: 'approved-breaking-change' 10 | # Limit a list of changes in summary 11 | summaryLimit: 200 12 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 10.15.2 2 | -------------------------------------------------------------------------------- /.pylintrc: -------------------------------------------------------------------------------- 1 | [MASTER] 2 | load-plugins=pylint.extensions.bad_builtin, pylint.extensions.mccabe, pylint_celery, pylint_django 3 | django-settings-module=saleor.settings 4 | 5 | [MESSAGES CONTROL] 6 | disable=C0103, C0111, C0330, C0412, C1001, E1004, E1101, I0011, R0903, W0232, W0621 7 | 8 | [DESIGN] 9 | max-complexity=5 10 | max-line-length = 88 11 | 12 | [SIMILARITIES] 13 | ignore-imports=yes 14 | min-similarity-lines=8 15 | -------------------------------------------------------------------------------- /.tx/config: -------------------------------------------------------------------------------- 1 | [main] 2 | host = https://www.transifex.com 3 | 4 | [saleor-1.storefrontpo] 5 | file_filter = locale//LC_MESSAGES/django.po 6 | minimum_perc = 1 7 | source_file = locale/en/LC_MESSAGES/django.po 8 | source_lang = en 9 | trans.zh-Hans = locale/zh_Hans/LC_MESSAGES/django.po 10 | trans.zh-Hant = locale/zh_Hant/LC_MESSAGES/django.po 11 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | release: python manage.py migrate --no-input 2 | web: gunicorn --bind :$PORT --workers 4 --worker-class uvicorn.workers.UvicornWorker saleor.asgi:application 3 | celeryworker: celery -A saleor --app=saleor.celeryconf:app worker --loglevel=info -E 4 | -------------------------------------------------------------------------------- /conftest.py: -------------------------------------------------------------------------------- 1 | pytest_plugins = [ 2 | "saleor.tests.fixtures", 3 | "saleor.plugins.tests.fixtures", 4 | "saleor.graphql.tests.fixtures", 5 | "saleor.graphql.channel.tests.fixtures", 6 | "saleor.graphql.account.tests.benchmark.fixtures", 7 | "saleor.graphql.order.tests.benchmark.fixtures", 8 | "saleor.graphql.giftcard.tests.benchmark.fixtures", 9 | ] 10 | -------------------------------------------------------------------------------- /deployment/elasticbeanstalk/Dockerrun.aws.json: -------------------------------------------------------------------------------- 1 | { 2 | "AWSEBDockerrunVersion": "1", 3 | "Image": { 4 | "Name": "mirumee/saleor:latest", 5 | "Update": "true" 6 | }, 7 | "Ports": [ 8 | { 9 | "ContainerPort": "8000" 10 | } 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /locale/ar/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/ar/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/az/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/az/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/bg/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/bg/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/bn/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/bn/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/ca/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/ca/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/cs/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/cs/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/da/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/da/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/de/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/de/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/el/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/el/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/en/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/en/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/es/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/es/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/es_CO/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/es_CO/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/et/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/et/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/fa/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/fa/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/fi/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/fi/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/fr/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/fr/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/hi/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/hi/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/hu/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/hu/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/hy/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/hy/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/id/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/id/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/is/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/is/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/it/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/it/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/ja/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/ja/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/ka/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/ka/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/km/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/km/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/ko/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/ko/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/lt/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/lt/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/mn/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/mn/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/my/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/my/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/nb/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/nb/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/nl/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/nl/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/pl/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/pl/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/pt/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/pt/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/pt_BR/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/pt_BR/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/ro/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/ro/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/ru/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/ru/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/si/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/si/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/sk/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/sk/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/sl/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/sl/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/sq/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/sq/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/sr/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/sr/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/sv/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/sv/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/sw/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/sw/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/ta/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/ta/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/th/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/th/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/tr/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/tr/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/uk/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/uk/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/vi/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/vi/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/zh_Hans/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/zh_Hans/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /locale/zh_Hant/LC_MESSAGES/django.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/locale/zh_Hant/LC_MESSAGES/django.mo -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import os 3 | import sys 4 | 5 | if __name__ == "__main__": 6 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "saleor.settings") 7 | 8 | from django.core.management import execute_from_command_line 9 | 10 | execute_from_command_line(sys.argv) 11 | -------------------------------------------------------------------------------- /runtime.txt: -------------------------------------------------------------------------------- 1 | python-3.9.0 2 | -------------------------------------------------------------------------------- /saleor/account/app.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | from django.db.models.signals import post_delete 3 | 4 | 5 | class AccountAppConfig(AppConfig): 6 | name = "saleor.account" 7 | 8 | def ready(self): 9 | from .models import User 10 | from .signals import delete_avatar 11 | 12 | post_delete.connect( 13 | delete_avatar, 14 | sender=User, 15 | dispatch_uid="delete_user_avatar", 16 | ) 17 | -------------------------------------------------------------------------------- /saleor/account/management/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/account/management/__init__.py -------------------------------------------------------------------------------- /saleor/account/management/commands/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/account/management/commands/__init__.py -------------------------------------------------------------------------------- /saleor/account/management/commands/changepassword.py: -------------------------------------------------------------------------------- 1 | from django.contrib.auth.management.commands.changepassword import Command 2 | 3 | __all__ = ["Command"] 4 | -------------------------------------------------------------------------------- /saleor/account/management/commands/createsuperuser.py: -------------------------------------------------------------------------------- 1 | from django.contrib.auth.management.commands.createsuperuser import Command 2 | 3 | __all__ = ["Command"] 4 | -------------------------------------------------------------------------------- /saleor/account/migrations/0017_auto_20180206_0957.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.0.2 on 2018-02-06 15:57 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("account", "0016_auto_20180108_0814")] 9 | 10 | operations = [ 11 | migrations.AlterModelTable(name="address", table=None), 12 | migrations.AlterModelTable(name="user", table=None), 13 | ] 14 | -------------------------------------------------------------------------------- /saleor/account/migrations/0025_auto_20190314_0550.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.7 on 2019-03-14 10:50 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("account", "0024_auto_20181011_0737")] 9 | 10 | operations = [ 11 | migrations.AlterModelOptions(name="address", options={"ordering": ("pk",)}) 12 | ] 13 | -------------------------------------------------------------------------------- /saleor/account/migrations/0032_remove_user_token.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.4 on 2019-08-22 12:39 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("account", "0031_auto_20190719_0745")] 9 | 10 | operations = [migrations.RemoveField(model_name="user", name="token")] 11 | -------------------------------------------------------------------------------- /saleor/account/migrations/0041_merge_20200421_0529.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.5 on 2020-04-21 10:29 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("account", "0040_auto_20200225_0237"), 10 | ("account", "0040_auto_20200415_0443"), 11 | ] 12 | 13 | operations = [] 14 | -------------------------------------------------------------------------------- /saleor/account/migrations/0042_merge_20200422_0555.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.5 on 2020-04-22 10:55 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("account", "0041_permissions_to_groups"), 10 | ("account", "0041_merge_20200421_0529"), 11 | ] 12 | 13 | operations = [] 14 | -------------------------------------------------------------------------------- /saleor/account/migrations/0056_merge_20210903_0640.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.6 on 2021-09-03 06:40 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("account", "0055_alter_user_language_code"), 10 | ("account", "0055_alter_user_options"), 11 | ] 12 | 13 | operations = [] 14 | -------------------------------------------------------------------------------- /saleor/account/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/account/migrations/__init__.py -------------------------------------------------------------------------------- /saleor/account/signals.py: -------------------------------------------------------------------------------- 1 | from ..core.utils import delete_versatile_image 2 | 3 | 4 | def delete_avatar(sender, instance, **kwargs): 5 | if avatar := instance.avatar: 6 | delete_versatile_image(avatar) 7 | -------------------------------------------------------------------------------- /saleor/account/templatetags/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/account/templatetags/__init__.py -------------------------------------------------------------------------------- /saleor/account/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/account/tests/__init__.py -------------------------------------------------------------------------------- /saleor/account/thumbnails.py: -------------------------------------------------------------------------------- 1 | from ..celeryconf import app 2 | from ..core.utils import create_thumbnails 3 | from .models import User 4 | 5 | 6 | @app.task 7 | def create_user_avatar_thumbnails(user_id): 8 | """Create thumbnails for user avatar.""" 9 | create_thumbnails( 10 | pk=user_id, model=User, size_set="user_avatars", image_attr="avatar" 11 | ) 12 | -------------------------------------------------------------------------------- /saleor/account/widgets.py: -------------------------------------------------------------------------------- 1 | from django.forms import Select 2 | 3 | 4 | class DatalistTextWidget(Select): 5 | input_type = "text" 6 | 7 | def get_context(self, *args): 8 | context = super(DatalistTextWidget, self).get_context(*args) 9 | context["widget"]["type"] = self.input_type 10 | return context 11 | 12 | def format_value(self, value): 13 | value = super(DatalistTextWidget, self).format_value(value) 14 | return value[0] 15 | -------------------------------------------------------------------------------- /saleor/app/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/app/__init__.py -------------------------------------------------------------------------------- /saleor/app/management/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/app/management/__init__.py -------------------------------------------------------------------------------- /saleor/app/management/commands/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/app/management/commands/__init__.py -------------------------------------------------------------------------------- /saleor/app/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/app/migrations/__init__.py -------------------------------------------------------------------------------- /saleor/app/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/app/tests/__init__.py -------------------------------------------------------------------------------- /saleor/app/tests/test_validators.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | from django.core.exceptions import ValidationError 3 | 4 | from ...app.validators import AppURLValidator 5 | 6 | 7 | def test_validate_url(): 8 | url_validator = AppURLValidator() 9 | url = "http://otherapp:3000" 10 | assert url_validator(url) is None 11 | 12 | 13 | def test_validate_invalid_url(): 14 | url_validator = AppURLValidator() 15 | url = "otherapp:3000" 16 | with pytest.raises(ValidationError): 17 | url_validator(url) 18 | -------------------------------------------------------------------------------- /saleor/attribute/app.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | from django.db.models.signals import post_delete 3 | 4 | 5 | class AttributeAppConfig(AppConfig): 6 | name = "saleor.attribute" 7 | 8 | def ready(self): 9 | from .models import AttributeValue 10 | from .signals import delete_attribute_value_file 11 | 12 | post_delete.connect( 13 | delete_attribute_value_file, 14 | sender=AttributeValue, 15 | dispatch_uid="delete_attribute_value_file", 16 | ) 17 | -------------------------------------------------------------------------------- /saleor/attribute/error_codes.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | 4 | class AttributeErrorCode(Enum): 5 | ALREADY_EXISTS = "already_exists" 6 | GRAPHQL_ERROR = "graphql_error" 7 | INVALID = "invalid" 8 | NOT_FOUND = "not_found" 9 | REQUIRED = "required" 10 | UNIQUE = "unique" 11 | -------------------------------------------------------------------------------- /saleor/attribute/management/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/attribute/management/__init__.py -------------------------------------------------------------------------------- /saleor/attribute/management/commands/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/attribute/management/commands/__init__.py -------------------------------------------------------------------------------- /saleor/attribute/migrations/0012_merge_20210608_1034.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.2 on 2021-06-08 10:34 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("attribute", "0011_attributevalue_attribute_a_name_9f3448_gin"), 10 | ("attribute", "0011_update_values_file_urls"), 11 | ] 12 | 13 | operations = [] 14 | -------------------------------------------------------------------------------- /saleor/attribute/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/attribute/migrations/__init__.py -------------------------------------------------------------------------------- /saleor/attribute/signals.py: -------------------------------------------------------------------------------- 1 | from ..core.tasks import delete_from_storage_task 2 | 3 | 4 | def delete_attribute_value_file(sender, instance, **kwargs): 5 | if file_url := instance.file_url: 6 | delete_from_storage_task.delay(file_url) 7 | -------------------------------------------------------------------------------- /saleor/attribute/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/attribute/tests/__init__.py -------------------------------------------------------------------------------- /saleor/channel/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/channel/__init__.py -------------------------------------------------------------------------------- /saleor/channel/error_codes.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | 4 | class ChannelErrorCode(Enum): 5 | ALREADY_EXISTS = "already_exists" 6 | GRAPHQL_ERROR = "graphql_error" 7 | INVALID = "invalid" 8 | NOT_FOUND = "not_found" 9 | REQUIRED = "required" 10 | UNIQUE = "unique" 11 | CHANNELS_CURRENCY_MUST_BE_THE_SAME = "channels_currency_must_be_the_same" 12 | CHANNEL_WITH_ORDERS = "channel_with_orders" 13 | DUPLICATED_INPUT_ITEM = "duplicated_input_item" 14 | -------------------------------------------------------------------------------- /saleor/channel/exceptions.py: -------------------------------------------------------------------------------- 1 | class ChannelNotDefined(Exception): 2 | def __init__(self, msg=None): 3 | if msg is None: 4 | msg = "More than one channel exists. Specify which channel to use." 5 | super().__init__(msg) 6 | 7 | 8 | class NoDefaultChannel(Exception): 9 | def __init__(self, msg=None): 10 | if msg is None: 11 | msg = "A default channel does not exist." 12 | super().__init__(msg) 13 | -------------------------------------------------------------------------------- /saleor/channel/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/channel/migrations/__init__.py -------------------------------------------------------------------------------- /saleor/channel/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/channel/tests/__init__.py -------------------------------------------------------------------------------- /saleor/checkout/__init__.py: -------------------------------------------------------------------------------- 1 | import logging 2 | 3 | logger = logging.getLogger(__name__) 4 | 5 | 6 | class AddressType: 7 | BILLING = "billing" 8 | SHIPPING = "shipping" 9 | 10 | CHOICES = [ 11 | (BILLING, "Billing"), 12 | (SHIPPING, "Shipping"), 13 | ] 14 | -------------------------------------------------------------------------------- /saleor/checkout/migrations/0008_rename_tables.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.0.3 on 2018-05-29 08:20 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("checkout", "0007_merge_cart_with_checkout")] 9 | 10 | operations = [ 11 | migrations.AlterModelTable(name="cart", table=None), 12 | migrations.AlterModelTable(name="cartline", table=None), 13 | ] 14 | -------------------------------------------------------------------------------- /saleor/checkout/migrations/0009_cart_translated_discount_name.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.0.3 on 2018-08-03 10:28 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("checkout", "0008_rename_tables")] 9 | 10 | operations = [ 11 | migrations.AddField( 12 | model_name="cart", 13 | name="translated_discount_name", 14 | field=models.CharField(blank=True, max_length=255, null=True), 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/checkout/migrations/0012_remove_cartline_data.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.0.8 on 2018-09-13 13:39 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("checkout", "0011_auto_20180913_0817")] 9 | 10 | operations = [migrations.RemoveField(model_name="cartline", name="data")] 11 | -------------------------------------------------------------------------------- /saleor/checkout/migrations/0015_auto_20181017_1346.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.2 on 2018-10-17 18:46 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("checkout", "0014_auto_20180921_0751")] 9 | 10 | operations = [ 11 | migrations.AlterField( 12 | model_name="cart", 13 | name="discount_amount", 14 | field=models.DecimalField(decimal_places=2, default=0, max_digits=12), 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/checkout/migrations/0016_auto_20190112_0506.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.4 on 2019-01-12 11:06 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("checkout", "0015_auto_20181017_1346")] 9 | 10 | operations = [ 11 | migrations.AlterModelOptions(name="cartline", options={"ordering": ("id",)}) 12 | ] 13 | -------------------------------------------------------------------------------- /saleor/checkout/migrations/0017_auto_20190130_0207.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.5 on 2019-01-30 08:07 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("checkout", "0016_auto_20190112_0506")] 9 | 10 | operations = [ 11 | migrations.AlterField( 12 | model_name="cart", name="email", field=models.EmailField(max_length=254) 13 | ) 14 | ] 15 | -------------------------------------------------------------------------------- /saleor/checkout/migrations/0024_auto_20200120_0154.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.9 on 2020-01-20 07:54 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("checkout", "0023_checkout_country"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name="checkout", 15 | name="last_change", 16 | field=models.DateTimeField(auto_now=True), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /saleor/checkout/migrations/0034_remove_checkout_quantity.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.7 on 2021-04-28 07:01 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("checkout", "0033_checkout_language_code"), 10 | ] 11 | 12 | operations = [ 13 | migrations.RemoveField( 14 | model_name="checkout", 15 | name="quantity", 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /saleor/checkout/migrations/0036_merge_20210824_1103.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.6 on 2021-08-24 11:03 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("checkout", "0035_alter_checkout_language_code"), 10 | ("checkout", "0035_checkout_collection_point"), 11 | ] 12 | 13 | operations = [] 14 | -------------------------------------------------------------------------------- /saleor/checkout/migrations/0037_merge_20210903_1013.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.6 on 2021-09-03 10:13 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("checkout", "0036_alter_checkout_language_code"), 10 | ("checkout", "0036_merge_20210824_1103"), 11 | ] 12 | 13 | operations = [] 14 | -------------------------------------------------------------------------------- /saleor/checkout/migrations/0038_merge_20210903_1048.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.6 on 2021-09-03 10:48 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("checkout", "0037_merge_20210903_1013"), 10 | ("checkout", "0037_remove_empty_lines"), 11 | ] 12 | 13 | operations = [] 14 | -------------------------------------------------------------------------------- /saleor/checkout/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/checkout/migrations/__init__.py -------------------------------------------------------------------------------- /saleor/checkout/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/checkout/tests/__init__.py -------------------------------------------------------------------------------- /saleor/core/app.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | from django.conf import settings 3 | from django.db.models import Field 4 | 5 | from .db.filters import PostgresILike 6 | 7 | 8 | class CoreAppConfig(AppConfig): 9 | name = "saleor.core" 10 | 11 | def ready(self): 12 | Field.register_lookup(PostgresILike) 13 | 14 | if settings.SENTRY_DSN: 15 | settings.SENTRY_INIT(settings.SENTRY_DSN, settings.SENTRY_OPTS) 16 | -------------------------------------------------------------------------------- /saleor/core/db/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/core/db/__init__.py -------------------------------------------------------------------------------- /saleor/core/db/filters.py: -------------------------------------------------------------------------------- 1 | from django.db.models.lookups import IContains 2 | 3 | 4 | class PostgresILike(IContains): 5 | lookup_name = "ilike" 6 | 7 | def as_postgresql(self, compiler, connection): 8 | lhs, lhs_params = self.process_lhs(compiler, connection) 9 | rhs, rhs_params = self.process_rhs(compiler, connection) 10 | params = lhs_params + rhs_params 11 | return "%s ILIKE %s" % (lhs, rhs), params 12 | -------------------------------------------------------------------------------- /saleor/core/management/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/core/management/__init__.py -------------------------------------------------------------------------------- /saleor/core/management/commands/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/core/management/commands/__init__.py -------------------------------------------------------------------------------- /saleor/core/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/core/migrations/__init__.py -------------------------------------------------------------------------------- /saleor/core/notification/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/core/notification/__init__.py -------------------------------------------------------------------------------- /saleor/core/notification/utils.py: -------------------------------------------------------------------------------- 1 | from django.contrib.sites.models import Site 2 | 3 | 4 | def get_site_context(): 5 | site: Site = Site.objects.get_current() 6 | site_context = { 7 | "domain": site.domain, 8 | "site_name": site.name, 9 | } 10 | return site_context 11 | -------------------------------------------------------------------------------- /saleor/core/tasks.py: -------------------------------------------------------------------------------- 1 | from django.core.files.storage import default_storage 2 | 3 | from ..celeryconf import app 4 | 5 | 6 | @app.task 7 | def delete_from_storage_task(path): 8 | default_storage.delete(path) 9 | -------------------------------------------------------------------------------- /saleor/core/templatetags/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/core/templatetags/__init__.py -------------------------------------------------------------------------------- /saleor/core/templatetags/placeholder.py: -------------------------------------------------------------------------------- 1 | from django.template import Library 2 | from django.templatetags.static import static 3 | 4 | register = Library() 5 | 6 | 7 | @register.simple_tag 8 | def placeholder(size): 9 | return static("images/placeholder{size}x{size}.png".format(size=size)) 10 | -------------------------------------------------------------------------------- /saleor/core/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/core/tests/__init__.py -------------------------------------------------------------------------------- /saleor/core/tests/test_url.py: -------------------------------------------------------------------------------- 1 | from urllib.parse import urlencode 2 | 3 | from ..utils.url import prepare_url 4 | 5 | 6 | def test_prepare_url(): 7 | redirect_url = "https://www.example.com" 8 | params = urlencode({"param1": "abc", "param2": "xyz"}) 9 | result = prepare_url(params, redirect_url) 10 | assert result == f"{redirect_url}?param1=abc¶m2=xyz" 11 | -------------------------------------------------------------------------------- /saleor/core/utils/draftjs.py: -------------------------------------------------------------------------------- 1 | from typing import Dict 2 | 3 | 4 | def json_content_to_raw_text(content: Dict[str, dict], sep: str = "\n") -> str: 5 | """Convert DraftJS JSON content to plain text.""" 6 | 7 | if not isinstance(content, dict) or "blocks" not in content: 8 | return "" 9 | 10 | blocks = [] 11 | for block in content["blocks"]: 12 | block_text = block.get("text", None).strip() 13 | if block_text is not None: 14 | blocks.append(block_text) 15 | 16 | return sep.join(blocks) 17 | -------------------------------------------------------------------------------- /saleor/core/views.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | from django.template.response import TemplateResponse 4 | 5 | 6 | def home(request): 7 | storefront_url = os.environ.get("STOREFRONT_URL", "") 8 | dashboard_url = os.environ.get("DASHBOARD_URL", "") 9 | return TemplateResponse( 10 | request, 11 | "home/index.html", 12 | {"storefront_url": storefront_url, "dashboard_url": dashboard_url}, 13 | ) 14 | -------------------------------------------------------------------------------- /saleor/csv/error_codes.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | 4 | class ExportErrorCode(Enum): 5 | GRAPHQL_ERROR = "graphql_error" 6 | INVALID = "invalid" 7 | NOT_FOUND = "not_found" 8 | REQUIRED = "required" 9 | -------------------------------------------------------------------------------- /saleor/csv/migrations/0002_exportfile_message.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.6 on 2020-07-10 11:07 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("csv", "0001_initial"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name="exportfile", 15 | name="message", 16 | field=models.CharField(blank=True, max_length=255, null=True), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /saleor/csv/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/csv/migrations/__init__.py -------------------------------------------------------------------------------- /saleor/csv/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/csv/tests/__init__.py -------------------------------------------------------------------------------- /saleor/csv/tests/export/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/csv/tests/export/__init__.py -------------------------------------------------------------------------------- /saleor/csv/tests/export/products_data/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/csv/tests/export/products_data/__init__.py -------------------------------------------------------------------------------- /saleor/demo/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/demo/__init__.py -------------------------------------------------------------------------------- /saleor/demo/management/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/demo/management/__init__.py -------------------------------------------------------------------------------- /saleor/demo/management/commands/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/demo/management/commands/__init__.py -------------------------------------------------------------------------------- /saleor/demo/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path 2 | from django.views.decorators.csrf import csrf_exempt 3 | 4 | from ..graphql.api import schema 5 | from ..urls import urlpatterns as core_urlpatterns 6 | from .views import DemoGraphQLView 7 | 8 | urlpatterns = [ 9 | path("graphql/", csrf_exempt(DemoGraphQLView.as_view(schema=schema)), name="api"), 10 | ] 11 | 12 | urlpatterns += core_urlpatterns 13 | -------------------------------------------------------------------------------- /saleor/discount/error_codes.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | 4 | class DiscountErrorCode(Enum): 5 | ALREADY_EXISTS = "already_exists" 6 | GRAPHQL_ERROR = "graphql_error" 7 | INVALID = "invalid" 8 | NOT_FOUND = "not_found" 9 | REQUIRED = "required" 10 | UNIQUE = "unique" 11 | CANNOT_MANAGE_PRODUCT_WITHOUT_VARIANT = "cannot_manage_product_without_variant" 12 | DUPLICATED_INPUT_ITEM = "duplicated_input_item" 13 | -------------------------------------------------------------------------------- /saleor/discount/migrations/0015_voucher_min_quantity_of_products.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.3 on 2019-07-04 08:40 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("discount", "0014_auto_20190701_0402")] 9 | 10 | operations = [ 11 | migrations.AddField( 12 | model_name="voucher", 13 | name="min_checkout_items_quantity", 14 | field=models.PositiveIntegerField(blank=True, null=True), 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/discount/migrations/0026_voucher_only_for_staff.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.2 on 2021-06-17 16:50 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("discount", "0025_auto_20210506_0831"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name="voucher", 15 | name="only_for_staff", 16 | field=models.BooleanField(default=False), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /saleor/discount/migrations/0028_alter_voucher_code.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.5 on 2021-07-30 10:26 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("discount", "0027_auto_20210719_2155"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name="voucher", 15 | name="code", 16 | field=models.CharField(db_index=True, max_length=16, unique=True), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /saleor/discount/migrations/0029_merge_0028_alter_voucher_code_0028_auto_20210817_1015.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.6 on 2021-08-20 09:37 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("discount", "0028_alter_voucher_code"), 10 | ("discount", "0028_auto_20210817_1015"), 11 | ] 12 | 13 | operations = [] 14 | -------------------------------------------------------------------------------- /saleor/discount/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/discount/migrations/__init__.py -------------------------------------------------------------------------------- /saleor/discount/templatetags/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/discount/templatetags/__init__.py -------------------------------------------------------------------------------- /saleor/discount/templatetags/voucher.py: -------------------------------------------------------------------------------- 1 | from django import template 2 | from django_prices.templatetags import prices 3 | from prices import Money 4 | 5 | register = template.Library() 6 | 7 | 8 | @register.simple_tag 9 | def discount_as_negative(discount, html=False): 10 | zero = Money(0, discount.currency) 11 | return prices.amount(zero - discount, "html" if html else "text") 12 | -------------------------------------------------------------------------------- /saleor/discount/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/discount/tests/__init__.py -------------------------------------------------------------------------------- /saleor/giftcard/error_codes.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | 4 | class GiftCardErrorCode(Enum): 5 | ALREADY_EXISTS = "already_exists" 6 | GRAPHQL_ERROR = "graphql_error" 7 | INVALID = "invalid" 8 | NOT_FOUND = "not_found" 9 | REQUIRED = "required" 10 | UNIQUE = "unique" 11 | -------------------------------------------------------------------------------- /saleor/giftcard/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/giftcard/migrations/__init__.py -------------------------------------------------------------------------------- /saleor/giftcard/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/giftcard/tests/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/account/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/account/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/account/mutations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/account/mutations/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/account/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/account/tests/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/account/tests/benchmark/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/account/tests/benchmark/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/account/tests/mutations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/account/tests/mutations/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/account/tests/utils.py: -------------------------------------------------------------------------------- 1 | from ...core.utils import snake_to_camel_case 2 | 3 | 4 | def convert_dict_keys_to_camel_case(d): 5 | """Changes dict fields from d[field_name] to d[fieldName]. 6 | 7 | Useful when dealing with dict data such as address that need to be parsed 8 | into graphql input. 9 | """ 10 | data = {} 11 | for k, v in d.items(): 12 | new_key = snake_to_camel_case(k) 13 | data[new_key] = d[k] 14 | return data 15 | -------------------------------------------------------------------------------- /saleor/graphql/app/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/app/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/app/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/app/tests/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/app/tests/benchmarks/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/app/tests/benchmarks/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/app/tests/mutations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/app/tests/mutations/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/app/tests/queries/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/app/tests/queries/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/attribute/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/attribute/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/attribute/enums.py: -------------------------------------------------------------------------------- 1 | from ...attribute import AttributeEntityType, AttributeInputType, AttributeType 2 | from ..core.enums import to_enum 3 | 4 | AttributeInputTypeEnum = to_enum(AttributeInputType) 5 | AttributeTypeEnum = to_enum(AttributeType) 6 | AttributeEntityTypeEnum = to_enum(AttributeEntityType) 7 | -------------------------------------------------------------------------------- /saleor/graphql/attribute/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/attribute/tests/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/attribute/tests/benchmark/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/attribute/tests/benchmark/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/attribute/tests/deprecated/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/attribute/tests/deprecated/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/attribute/tests/mutations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/attribute/tests/mutations/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/attribute/tests/queries/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/attribute/tests/queries/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/channel/__init__.py: -------------------------------------------------------------------------------- 1 | from dataclasses import dataclass 2 | from typing import Generic, Optional, TypeVar 3 | 4 | from django.db.models import QuerySet 5 | 6 | N = TypeVar("N") 7 | 8 | 9 | @dataclass 10 | class ChannelContext(Generic[N]): 11 | node: N 12 | channel_slug: Optional[str] 13 | 14 | 15 | @dataclass 16 | class ChannelQsContext: 17 | qs: QuerySet 18 | channel_slug: Optional[str] 19 | -------------------------------------------------------------------------------- /saleor/graphql/channel/filters.py: -------------------------------------------------------------------------------- 1 | from typing import Dict 2 | 3 | 4 | def get_channel_slug_from_filter_data(filter_data: Dict): 5 | channel = filter_data.get("channel") 6 | return str(channel) if channel else None 7 | -------------------------------------------------------------------------------- /saleor/graphql/channel/resolvers.py: -------------------------------------------------------------------------------- 1 | from ...channel import models 2 | 3 | 4 | def resolve_channel(id): 5 | return models.Channel.objects.filter(id=id).first() 6 | 7 | 8 | def resolve_channels(): 9 | return models.Channel.objects.all() 10 | -------------------------------------------------------------------------------- /saleor/graphql/channel/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/channel/tests/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/checkout/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/checkout/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/checkout/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/checkout/tests/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/checkout/tests/benchmark/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/checkout/tests/benchmark/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/checkout/tests/deprecated/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/checkout/tests/deprecated/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/core/__init__.py: -------------------------------------------------------------------------------- 1 | from . import fields # noqa 2 | -------------------------------------------------------------------------------- /saleor/graphql/core/descriptions.py: -------------------------------------------------------------------------------- 1 | # Deprecation message for queries, object fields and mutations. Use it, when 2 | # `deprecation_reason` argument is supported. 3 | DEPRECATED_IN_3X_FIELD = "This field will be removed in Saleor 4.0." 4 | 5 | # Deprecation message for input fields and query arguments. Use it, when 6 | # deprecation message needs to be included in the field description. 7 | DEPRECATED_IN_3X_INPUT = "\n\nDEPRECATED: this field will be removed in Saleor 4.0." 8 | 9 | 10 | ADDED_IN_31 = "New in Saleor 3.1." 11 | -------------------------------------------------------------------------------- /saleor/graphql/core/inputs.py: -------------------------------------------------------------------------------- 1 | import graphene 2 | 3 | 4 | class ReorderInput(graphene.InputObjectType): 5 | id = graphene.ID(required=True, description="The ID of the item to move.") 6 | sort_order = graphene.Int( 7 | description=( 8 | "The new relative sorting position of the item (from -inf to +inf). " 9 | "1 moves the item one position forward, -1 moves the item one position " 10 | "backward, 0 leaves the item unchanged." 11 | ) 12 | ) 13 | -------------------------------------------------------------------------------- /saleor/graphql/core/tests/__init__.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | import graphene 4 | 5 | from ..types.common import Error 6 | 7 | 8 | class ErrorCodeTest(Enum): 9 | INVALID = "invalid" 10 | 11 | 12 | ErrorCodeTest = graphene.Enum.from_enum(ErrorCodeTest) 13 | 14 | 15 | class ErrorTest(Error): 16 | code = ErrorCodeTest() 17 | -------------------------------------------------------------------------------- /saleor/graphql/core/types/__init__.py: -------------------------------------------------------------------------------- 1 | # flake8: noqa 2 | from .common import ( 3 | CountryDisplay, 4 | Error, 5 | File, 6 | Image, 7 | LanguageDisplay, 8 | Permission, 9 | SeoInput, 10 | TaxType, 11 | Weight, 12 | ) 13 | from .filter_input import ChannelFilterInputObjectType, FilterInputObjectType 14 | from .money import VAT, Money, MoneyRange, ReducedRate, TaxedMoney, TaxedMoneyRange 15 | from .sort_input import ChannelSortInputObjectType, SortInputObjectType 16 | from .upload import Upload 17 | -------------------------------------------------------------------------------- /saleor/graphql/csv/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/csv/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/csv/resolvers.py: -------------------------------------------------------------------------------- 1 | from ...csv import models 2 | 3 | 4 | def resolve_export_file(id): 5 | return models.ExportFile.objects.filter(id=id).first() 6 | 7 | 8 | def resolve_export_files(): 9 | return models.ExportFile.objects.all() 10 | -------------------------------------------------------------------------------- /saleor/graphql/csv/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/csv/tests/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/csv/tests/mutations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/csv/tests/mutations/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/csv/tests/queries/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/csv/tests/queries/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/discount/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/discount/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/discount/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/discount/tests/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/discount/tests/benchmark/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/discount/tests/benchmark/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/discount/tests/deprecated/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/discount/tests/deprecated/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/giftcard/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/giftcard/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/giftcard/enums.py: -------------------------------------------------------------------------------- 1 | from ...giftcard import GiftCardEvents 2 | from ..core.enums import to_enum 3 | 4 | GiftCardEventsEnum = to_enum(GiftCardEvents) 5 | -------------------------------------------------------------------------------- /saleor/graphql/giftcard/resolvers.py: -------------------------------------------------------------------------------- 1 | from ...giftcard import models 2 | 3 | 4 | def resolve_gift_card(id): 5 | return models.GiftCard.objects.filter(pk=id).first() 6 | 7 | 8 | def resolve_gift_cards(): 9 | return models.GiftCard.objects.all() 10 | -------------------------------------------------------------------------------- /saleor/graphql/giftcard/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/giftcard/tests/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/giftcard/tests/benchmark/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/giftcard/tests/benchmark/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/giftcard/tests/deprecated/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/giftcard/tests/deprecated/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/giftcard/tests/mutations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/giftcard/tests/mutations/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/giftcard/tests/queries/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/giftcard/tests/queries/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/invoice/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/invoice/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/invoice/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/invoice/tests/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/management/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/management/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/management/commands/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/management/commands/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/management/commands/get_graphql_schema.py: -------------------------------------------------------------------------------- 1 | from django.core.management.base import BaseCommand 2 | 3 | from ...api import schema 4 | 5 | 6 | class Command(BaseCommand): 7 | help = "Writes SDL for GraphQL API schema to stdout" 8 | 9 | def handle(self, *args, **options): 10 | self.stdout.write(str(schema)) 11 | -------------------------------------------------------------------------------- /saleor/graphql/menu/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/menu/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/menu/enums.py: -------------------------------------------------------------------------------- 1 | import graphene 2 | 3 | 4 | class NavigationType(graphene.Enum): 5 | MAIN = "main" 6 | SECONDARY = "secondary" 7 | 8 | @property 9 | def description(self): 10 | if self == NavigationType.MAIN: 11 | return "Main storefront navigation." 12 | if self == NavigationType.SECONDARY: 13 | return "Secondary storefront navigation." 14 | raise ValueError("Unsupported enum value: %s" % self.value) 15 | -------------------------------------------------------------------------------- /saleor/graphql/menu/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/menu/tests/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/menu/tests/deprecated/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/menu/tests/deprecated/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/meta/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/meta/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/meta/schema.py: -------------------------------------------------------------------------------- 1 | import graphene 2 | 3 | from .mutations import ( 4 | DeleteMetadata, 5 | DeletePrivateMetadata, 6 | UpdateMetadata, 7 | UpdatePrivateMetadata, 8 | ) 9 | 10 | 11 | class MetaMutations(graphene.ObjectType): 12 | delete_metadata = DeleteMetadata.Field() 13 | delete_private_metadata = DeletePrivateMetadata.Field() 14 | update_metadata = UpdateMetadata.Field() 15 | update_private_metadata = UpdatePrivateMetadata.Field() 16 | -------------------------------------------------------------------------------- /saleor/graphql/meta/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/meta/tests/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/notifications/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/notifications/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/notifications/error_codes.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | 4 | class ExternalNotificationErrorCodes(Enum): 5 | REQUIRED = "required" 6 | INVALID_MODEL_TYPE = "invalid_model_type" 7 | NOT_FOUND = "not_found" 8 | CHANNEL_INACTIVE = "channel_inactive" 9 | -------------------------------------------------------------------------------- /saleor/graphql/notifications/mutations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/notifications/mutations/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/notifications/schema.py: -------------------------------------------------------------------------------- 1 | import graphene 2 | 3 | from .mutations.external_notification_trigger import ExternalNotificationTrigger 4 | 5 | 6 | class ExternalNotificationMutations(graphene.ObjectType): 7 | external_notification_trigger = ExternalNotificationTrigger.Field() 8 | -------------------------------------------------------------------------------- /saleor/graphql/notifications/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/notifications/tests/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/order/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/order/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/order/bulk_mutations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/order/bulk_mutations/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/order/mutations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/order/mutations/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/order/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/order/tests/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/order/tests/benchmark/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/order/tests/benchmark/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/order/tests/deprecated/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/order/tests/deprecated/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/order/tests/utils.py: -------------------------------------------------------------------------------- 1 | import graphene 2 | 3 | 4 | def assert_order_and_payment_ids(content, payment): 5 | data = content["data"]["orderByToken"] 6 | expected_order_id = graphene.Node.to_global_id("Order", payment.order.pk) 7 | assert data["id"] == expected_order_id 8 | 9 | expected_payment_id = graphene.Node.to_global_id("Payment", payment.pk) 10 | assert data["payments"][0]["id"] == expected_payment_id 11 | -------------------------------------------------------------------------------- /saleor/graphql/page/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/page/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/page/mutations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/page/mutations/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/page/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/page/tests/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/page/tests/benchmark/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/page/tests/benchmark/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/payment/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/payment/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/payment/resolvers.py: -------------------------------------------------------------------------------- 1 | from ...payment import models 2 | 3 | 4 | def resolve_payment_by_id(id): 5 | return models.Payment.objects.filter(id=id).first() 6 | 7 | 8 | def resolve_payments(info): 9 | return models.Payment.objects.all() 10 | -------------------------------------------------------------------------------- /saleor/graphql/payment/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/payment/tests/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/payment/tests/deprecated/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/payment/tests/deprecated/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/payment/utils.py: -------------------------------------------------------------------------------- 1 | from typing import List 2 | 3 | 4 | def metadata_contains_empty_key(metadata_list: List[dict]) -> bool: 5 | return not all([data["key"].strip() for data in metadata_list]) 6 | -------------------------------------------------------------------------------- /saleor/graphql/plugins/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/plugins/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/plugins/enums.py: -------------------------------------------------------------------------------- 1 | import graphene 2 | 3 | from ...graphql.core.enums import to_enum 4 | from ...plugins.base_plugin import ConfigurationTypeField 5 | 6 | ConfigurationTypeFieldEnum = to_enum(ConfigurationTypeField) 7 | 8 | 9 | class PluginConfigurationType(graphene.Enum): 10 | PER_CHANNEL = "per_channel" 11 | GLOBAL = "global" 12 | -------------------------------------------------------------------------------- /saleor/graphql/plugins/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/plugins/tests/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/plugins/tests/conftest.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | 3 | 4 | @pytest.fixture 5 | def staff_api_client_can_manage_plugins(staff_api_client, permission_manage_plugins): 6 | staff_api_client.user.user_permissions.add(permission_manage_plugins) 7 | return staff_api_client 8 | -------------------------------------------------------------------------------- /saleor/graphql/plugins/tests/queries/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/plugins/tests/queries/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/product/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/product/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/product/bulk_mutations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/product/bulk_mutations/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/product/mutations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/product/mutations/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/product/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/product/tests/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/product/tests/app/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/product/tests/app/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/product/tests/benchmark/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/product/tests/benchmark/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/product/tests/deprecated/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/product/tests/deprecated/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/product/types/__init__.py: -------------------------------------------------------------------------------- 1 | # flake8: noqa 2 | from .digital_contents import DigitalContent, DigitalContentUrl 3 | from .products import ( 4 | Category, 5 | Collection, 6 | Product, 7 | ProductMedia, 8 | ProductType, 9 | ProductVariant, 10 | ) 11 | -------------------------------------------------------------------------------- /saleor/graphql/shipping/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/shipping/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/shipping/enums.py: -------------------------------------------------------------------------------- 1 | from ...graphql.core.enums import to_enum 2 | from ...shipping import PostalCodeRuleInclusionType, ShippingMethodType 3 | 4 | ShippingMethodTypeEnum = to_enum(ShippingMethodType, type_name="ShippingMethodTypeEnum") 5 | PostalCodeRuleInclusionTypeEnum = to_enum( 6 | PostalCodeRuleInclusionType, type_name="PostalCodeRuleInclusionTypeEnum" 7 | ) 8 | -------------------------------------------------------------------------------- /saleor/graphql/shipping/mutations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/shipping/mutations/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/shipping/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/shipping/tests/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/shipping/tests/benchmark/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/shipping/tests/benchmark/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/shop/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/shop/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/shop/enums.py: -------------------------------------------------------------------------------- 1 | from ...site import GiftCardSettingsExpiryType 2 | from ..core.enums import to_enum 3 | 4 | GiftCardSettingsExpiryTypeEnum = to_enum(GiftCardSettingsExpiryType) 5 | -------------------------------------------------------------------------------- /saleor/graphql/shop/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/shop/tests/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/shop/tests/benchmark/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/shop/tests/benchmark/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/tests/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/translations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/translations/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/translations/descriptions.py: -------------------------------------------------------------------------------- 1 | class TranslationDescriptions: 2 | LANGUAGE_CODE = "A language code to return the translation for {type_name}." 3 | DESCRIPTION = "Returns translated {type_name} fields for the given language code." 4 | -------------------------------------------------------------------------------- /saleor/graphql/translations/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/translations/tests/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/translations/tests/deprecated/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/translations/tests/deprecated/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/vendor/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/vendor/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/vendor/resolvers.py: -------------------------------------------------------------------------------- 1 | from ...vendor import models 2 | 3 | 4 | def resolve_vendor(id): 5 | return models.Vendor.objects.filter(id=id).first() 6 | 7 | 8 | def resolve_vendors(): 9 | return models.Vendor.objects.all() 10 | 11 | 12 | def resolve_vendor_warehouse(id): 13 | return models.VendorWarehouse.objects.filter(id=id).first() 14 | 15 | 16 | def resolve_vendor_warehouses(): 17 | return models.VendorWarehouse.objects.all() 18 | -------------------------------------------------------------------------------- /saleor/graphql/warehouse/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/warehouse/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/warehouse/enums.py: -------------------------------------------------------------------------------- 1 | from ...graphql.core.enums import to_enum 2 | from ...warehouse import WarehouseClickAndCollectOption 3 | 4 | WarehouseClickAndCollectOptionEnum = to_enum( 5 | WarehouseClickAndCollectOption, type_name="WarehouseClickAndCollectOptionEnum" 6 | ) 7 | -------------------------------------------------------------------------------- /saleor/graphql/warehouse/resolvers.py: -------------------------------------------------------------------------------- 1 | from ...warehouse import models 2 | 3 | 4 | def resolve_stock(id): 5 | return models.Stock.objects.filter(id=id).first() 6 | 7 | 8 | def resolve_stocks(): 9 | return models.Stock.objects.all() 10 | 11 | 12 | def resolve_warehouse(id): 13 | return models.Warehouse.objects.filter(id=id).first() 14 | 15 | 16 | def resolve_warehouses(): 17 | return models.Warehouse.objects.all() 18 | -------------------------------------------------------------------------------- /saleor/graphql/warehouse/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/warehouse/tests/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/webhook/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/webhook/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/webhook/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/webhook/tests/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/wishlist/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/wishlist/__init__.py -------------------------------------------------------------------------------- /saleor/graphql/wishlist/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/graphql/wishlist/tests/__init__.py -------------------------------------------------------------------------------- /saleor/invoice/__init__.py: -------------------------------------------------------------------------------- 1 | class InvoiceEvents: 2 | REQUESTED = "requested" 3 | REQUESTED_DELETION = "requested_deletion" 4 | CREATED = "created" 5 | DELETED = "deleted" 6 | SENT = "sent" 7 | 8 | CHOICES = [ 9 | (REQUESTED, "The invoice was requested"), 10 | (REQUESTED_DELETION, "The invoice was requested for deletion"), 11 | (CREATED, "The invoice was created"), 12 | (DELETED, "The invoice was deleted"), 13 | (SENT, "The invoice has been sent"), 14 | ] 15 | -------------------------------------------------------------------------------- /saleor/invoice/error_codes.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | 4 | class InvoiceErrorCode(Enum): 5 | REQUIRED = "required" 6 | NOT_READY = "not_ready" 7 | URL_NOT_SET = "url_not_set" 8 | EMAIL_NOT_SET = "email_not_set" 9 | NUMBER_NOT_SET = "number_not_set" 10 | NOT_FOUND = "not_found" 11 | INVALID_STATUS = "invalid_status" 12 | -------------------------------------------------------------------------------- /saleor/invoice/migrations/0002_invoice_message.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.6 on 2020-07-10 11:07 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("invoice", "0001_initial"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name="invoice", 15 | name="message", 16 | field=models.CharField(blank=True, max_length=255, null=True), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /saleor/invoice/migrations/0003_auto_20200713_1311.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.6 on 2020-07-13 13:11 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("invoice", "0002_invoice_message"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterModelOptions( 14 | name="invoiceevent", 15 | options={"ordering": ("date", "pk")}, 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /saleor/invoice/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/invoice/migrations/__init__.py -------------------------------------------------------------------------------- /saleor/invoice/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/invoice/tests/__init__.py -------------------------------------------------------------------------------- /saleor/invoice/tests/test_notifications.py: -------------------------------------------------------------------------------- 1 | from ..models import Invoice 2 | from ..notifications import get_invoice_payload 3 | 4 | 5 | def test_collect_invoice_data_for_email(order): 6 | number = "01/12/2020/TEST" 7 | url = "http://www.example.com" 8 | invoice = Invoice.objects.create(number=number, url=url, order=order) 9 | payload = get_invoice_payload(invoice) 10 | assert payload["id"] == invoice.id 11 | assert payload["number"] == number 12 | assert payload["download_url"] == url 13 | -------------------------------------------------------------------------------- /saleor/menu/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/menu/__init__.py -------------------------------------------------------------------------------- /saleor/menu/error_codes.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | 4 | class MenuErrorCode(Enum): 5 | CANNOT_ASSIGN_NODE = "cannot_assign_node" 6 | GRAPHQL_ERROR = "graphql_error" 7 | INVALID = "invalid" 8 | INVALID_MENU_ITEM = "invalid_menu_item" 9 | NO_MENU_ITEM_PROVIDED = "no_item_provided" 10 | NOT_FOUND = "not_found" 11 | REQUIRED = "required" 12 | TOO_MANY_MENU_ITEMS = "too_many_items" 13 | UNIQUE = "unique" 14 | -------------------------------------------------------------------------------- /saleor/menu/migrations/0004_sort_order_index.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.0.3 on 2018-05-09 08:33 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("menu", "0003_auto_20180405_0854")] 9 | 10 | operations = [ 11 | migrations.AlterField( 12 | model_name="menuitem", 13 | name="sort_order", 14 | field=models.PositiveIntegerField(db_index=True, editable=False), 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/menu/migrations/0005_auto_20180719_0520.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.0.3 on 2018-07-19 10:20 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("menu", "0004_sort_order_index")] 9 | 10 | operations = [ 11 | migrations.AlterModelOptions( 12 | name="menu", 13 | options={"permissions": (("manage_menus", "Manage navigation."),)}, 14 | ) 15 | ] 16 | -------------------------------------------------------------------------------- /saleor/menu/migrations/0009_remove_menu_json_content.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.0.8 on 2018-09-13 13:38 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("menu", "0008_menu_json_content_new")] 9 | 10 | operations = [migrations.RemoveField(model_name="menu", name="json_content")] 11 | -------------------------------------------------------------------------------- /saleor/menu/migrations/0010_auto_20180913_0841.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.0.8 on 2018-09-13 13:41 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("menu", "0009_remove_menu_json_content")] 9 | 10 | operations = [ 11 | migrations.RenameField( 12 | model_name="menu", old_name="json_content_new", new_name="json_content" 13 | ) 14 | ] 15 | -------------------------------------------------------------------------------- /saleor/menu/migrations/0011_auto_20181204_0004.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.3 on 2018-12-04 06:04 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("menu", "0010_auto_20180913_0841")] 9 | 10 | operations = [ 11 | migrations.AlterModelOptions( 12 | name="menu", 13 | options={ 14 | "ordering": ["pk"], 15 | "permissions": (("manage_menus", "Manage navigation."),), 16 | }, 17 | ) 18 | ] 19 | -------------------------------------------------------------------------------- /saleor/menu/migrations/0012_auto_20190104_0443.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.4 on 2019-01-04 10:43 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("menu", "0011_auto_20181204_0004")] 9 | 10 | operations = [ 11 | migrations.AlterModelOptions( 12 | name="menu", 13 | options={ 14 | "ordering": ("pk",), 15 | "permissions": (("manage_menus", "Manage navigation."),), 16 | }, 17 | ) 18 | ] 19 | -------------------------------------------------------------------------------- /saleor/menu/migrations/0014_auto_20190523_0759.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.1 on 2019-05-23 12:59 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("menu", "0013_auto_20190507_0309")] 9 | 10 | operations = [ 11 | migrations.AlterField( 12 | model_name="menuitem", 13 | name="sort_order", 14 | field=models.PositiveIntegerField(db_index=True, editable=False, null=True), 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/menu/migrations/0015_auto_20190725_0811.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.3 on 2019-07-25 13:11 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("menu", "0014_auto_20190523_0759")] 9 | 10 | operations = [ 11 | migrations.AlterField( 12 | model_name="menuitem", 13 | name="sort_order", 14 | field=models.IntegerField(db_index=True, editable=False, null=True), 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/menu/migrations/0016_auto_20200217_0350.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.10 on 2020-02-17 09:50 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("menu", "0015_auto_20190725_0811"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterModelOptions( 14 | name="menuitemtranslation", 15 | options={"ordering": ("language_code", "menu_item")}, 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /saleor/menu/migrations/0017_remove_menu_json_content.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.6 on 2020-06-10 10:11 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("menu", "0016_auto_20200217_0350"), 10 | ] 11 | 12 | operations = [ 13 | migrations.RemoveField( 14 | model_name="menu", 15 | name="json_content", 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /saleor/menu/migrations/0022_alter_menuitemtranslation_language_code.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.6 on 2021-08-17 10:15 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("menu", "0021_auto_20210308_1135"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name="menuitemtranslation", 15 | name="language_code", 16 | field=models.CharField(max_length=35), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /saleor/menu/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/menu/migrations/__init__.py -------------------------------------------------------------------------------- /saleor/menu/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/menu/tests/__init__.py -------------------------------------------------------------------------------- /saleor/order/migrations/0002_auto_20150820_1955.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | 4 | from django.db import migrations 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [("order", "0001_initial")] 10 | 11 | operations = [ 12 | migrations.AlterModelOptions(name="payment", options={"ordering": ("-pk",)}) 13 | ] 14 | -------------------------------------------------------------------------------- /saleor/order/migrations/0005_deliverygroup_last_updated.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [("order", "0004_order_total")] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="deliverygroup", 14 | name="last_updated", 15 | field=models.DateTimeField(auto_now=True, null=True), 16 | ) 17 | ] 18 | -------------------------------------------------------------------------------- /saleor/order/migrations/0014_auto_20161028_0955.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.1 on 2016-10-28 14:55 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [("order", "0013_auto_20160906_0741")] 11 | 12 | operations = [ 13 | migrations.RenameField( 14 | model_name="order", old_name="anonymous_user_email", new_name="user_email" 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/order/migrations/0020_auto_20171123_0609.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.11.5 on 2017-11-23 12:09 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [("order", "0019_auto_20171109_1423")] 11 | 12 | operations = [migrations.RenameModel(old_name="OrderedItem", new_name="OrderLine")] 13 | -------------------------------------------------------------------------------- /saleor/order/migrations/0024_remove_order_status.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.11.5 on 2017-12-14 11:06 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [("order", "0023_auto_20171206_0506")] 11 | 12 | operations = [migrations.RemoveField(model_name="order", name="status")] 13 | -------------------------------------------------------------------------------- /saleor/order/migrations/0036_remove_order_total_tax.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.0.2 on 2018-02-21 17:04 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("order", "0035_auto_20180221_1057")] 9 | 10 | operations = [migrations.RemoveField(model_name="order", name="total_tax")] 11 | -------------------------------------------------------------------------------- /saleor/order/migrations/0047_order_line_name_length.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.0.3 on 2018-04-26 09:11 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("order", "0046_order_line_taxes")] 9 | 10 | operations = [ 11 | migrations.AlterField( 12 | model_name="orderline", 13 | name="product_name", 14 | field=models.CharField(max_length=386), 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/order/migrations/0051_merge_20180807_0704.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.0.3 on 2018-08-07 12:04 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("order", "0050_auto_20180803_0337"), 10 | ("order", "0050_auto_20180803_0528"), 11 | ] 12 | 13 | operations = [] 14 | -------------------------------------------------------------------------------- /saleor/order/migrations/0058_remove_orderevent_parameters.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.0.8 on 2018-09-13 13:37 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("order", "0057_orderevent_parameters_new")] 9 | 10 | operations = [migrations.RemoveField(model_name="orderevent", name="parameters")] 11 | -------------------------------------------------------------------------------- /saleor/order/migrations/0059_auto_20180913_0841.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.0.8 on 2018-09-13 13:41 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("order", "0058_remove_orderevent_parameters")] 9 | 10 | operations = [ 11 | migrations.RenameField( 12 | model_name="orderevent", old_name="parameters_new", new_name="parameters" 13 | ) 14 | ] 15 | -------------------------------------------------------------------------------- /saleor/order/migrations/0060_auto_20180919_0731.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.0.8 on 2018-09-19 12:31 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("order", "0059_auto_20180913_0841")] 9 | 10 | operations = [ 11 | migrations.AlterField( 12 | model_name="orderline", 13 | name="translated_product_name", 14 | field=models.CharField(blank=True, default="", max_length=386), 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/order/migrations/0067_auto_20181102_1054.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.2 on 2018-11-02 15:54 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("order", "0066_auto_20181023_0319")] 9 | 10 | operations = [ 11 | migrations.AlterModelOptions(name="orderline", options={"ordering": ("pk",)}) 12 | ] 13 | -------------------------------------------------------------------------------- /saleor/order/migrations/0068_order_checkout_token.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.5 on 2019-02-11 16:30 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("order", "0067_auto_20181102_1054")] 9 | 10 | operations = [ 11 | migrations.AddField( 12 | model_name="order", 13 | name="checkout_token", 14 | field=models.CharField(blank=True, max_length=36), 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/order/migrations/0069_auto_20190225_2305.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.4 on 2019-02-26 05:05 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("order", "0068_order_checkout_token")] 9 | 10 | operations = [ 11 | migrations.AlterField( 12 | model_name="fulfillmentline", 13 | name="quantity", 14 | field=models.PositiveIntegerField(), 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/order/migrations/0075_auto_20191006_1433.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.5 on 2019-10-06 19:33 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("order", "0074_auto_20190930_0731")] 9 | 10 | operations = [ 11 | migrations.AlterField( 12 | model_name="orderline", 13 | name="product_sku", 14 | field=models.CharField(max_length=255), 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/order/migrations/0079_auto_20200225_0237.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.10 on 2020-02-25 08:37 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("order", "0078_auto_20200221_0257"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterModelOptions( 14 | name="fulfillment", 15 | options={"ordering": ("pk",)}, 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /saleor/order/migrations/0081_merge_20200309_0952.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.10 on 2020-03-09 14:52 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("order", "0080_invoice"), 10 | ("order", "0079_auto_20200225_0237"), 11 | ] 12 | 13 | operations = [] 14 | -------------------------------------------------------------------------------- /saleor/order/migrations/0083_merge_20200421_0529.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.5 on 2020-04-21 10:29 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("order", "0082_fulfillmentline_stock"), 10 | ("order", "0081_merge_20200309_0952"), 11 | ] 12 | 13 | operations = [] 14 | -------------------------------------------------------------------------------- /saleor/order/migrations/0085_delete_invoice.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.6 on 2020-06-22 10:24 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("order", "0084_auto_20200522_0522"), 10 | ] 11 | 12 | operations = [ 13 | migrations.DeleteModel( 14 | name="Invoice", 15 | ), 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/order/migrations/0091_order_redirect_url.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.2 on 2020-11-18 09:33 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("order", "0090_order_channel_listing"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name="order", 15 | name="redirect_url", 16 | field=models.URLField(blank=True, null=True), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /saleor/order/migrations/0115_merge_20210820_1454.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.6 on 2021-08-20 14:54 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("order", "0114_alter_order_language_code"), 10 | ("order", "0114_auto_20210722_1146"), 11 | ] 12 | 13 | operations = [] 14 | -------------------------------------------------------------------------------- /saleor/order/migrations/0116_merge_20210824_1103.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.6 on 2021-08-24 11:03 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("order", "0114_auto_20210726_1116"), 10 | ("order", "0115_merge_20210820_1454"), 11 | ] 12 | 13 | operations = [] 14 | -------------------------------------------------------------------------------- /saleor/order/migrations/0117_merge_20210903_1013.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.6 on 2021-09-03 10:13 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("order", "0115_alter_order_language_code"), 10 | ("order", "0116_merge_20210824_1103"), 11 | ] 12 | 13 | operations = [] 14 | -------------------------------------------------------------------------------- /saleor/order/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/order/migrations/__init__.py -------------------------------------------------------------------------------- /saleor/order/tasks.py: -------------------------------------------------------------------------------- 1 | from typing import List 2 | 3 | from ..celeryconf import app 4 | from .models import Order 5 | from .utils import recalculate_order 6 | 7 | 8 | @app.task 9 | def recalculate_orders_task(order_ids: List[int]): 10 | orders = Order.objects.filter(id__in=order_ids) 11 | for order in orders: 12 | recalculate_order(order) 13 | -------------------------------------------------------------------------------- /saleor/order/templatetags/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/order/templatetags/__init__.py -------------------------------------------------------------------------------- /saleor/order/templatetags/order_lines.py: -------------------------------------------------------------------------------- 1 | from django import template 2 | 3 | from ..models import OrderLine 4 | 5 | register = template.Library() 6 | 7 | 8 | @register.simple_tag() 9 | def display_translated_order_line_name(order_line: OrderLine): 10 | product_name = order_line.translated_product_name or order_line.product_name 11 | variant_name = order_line.translated_variant_name or order_line.variant_name 12 | return f"{product_name} ({variant_name})" if variant_name else product_name 13 | -------------------------------------------------------------------------------- /saleor/order/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/order/tests/__init__.py -------------------------------------------------------------------------------- /saleor/page/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/page/__init__.py -------------------------------------------------------------------------------- /saleor/page/error_codes.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | 4 | class PageErrorCode(Enum): 5 | GRAPHQL_ERROR = "graphql_error" 6 | INVALID = "invalid" 7 | NOT_FOUND = "not_found" 8 | REQUIRED = "required" 9 | UNIQUE = "unique" 10 | DUPLICATED_INPUT_ITEM = "duplicated_input_item" 11 | ATTRIBUTE_ALREADY_ASSIGNED = "attribute_already_assigned" 12 | -------------------------------------------------------------------------------- /saleor/page/migrations/0003_auto_20180719_0520.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.0.3 on 2018-07-19 10:20 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("page", "0002_auto_20180321_0417")] 9 | 10 | operations = [ 11 | migrations.AlterModelOptions( 12 | name="page", 13 | options={ 14 | "ordering": ("slug",), 15 | "permissions": (("manage_pages", "Manage pages."),), 16 | }, 17 | ) 18 | ] 19 | -------------------------------------------------------------------------------- /saleor/page/migrations/0006_auto_20190220_1928.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.4 on 2019-02-21 01:28 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("page", "0005_auto_20190208_0456")] 9 | 10 | operations = [ 11 | migrations.AlterField( 12 | model_name="page", 13 | name="is_published", 14 | field=models.BooleanField(default=True), 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/page/migrations/0009_auto_20191108_0402.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.6 on 2019-11-08 10:02 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("page", "0008_raw_html_to_json")] 9 | 10 | operations = [ 11 | migrations.AlterField( 12 | model_name="page", 13 | name="is_published", 14 | field=models.BooleanField(default=False), 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/page/migrations/0011_auto_20200217_0350.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.10 on 2020-02-17 09:50 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("page", "0010_auto_20200129_0717"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterModelOptions( 14 | name="pagetranslation", 15 | options={"ordering": ("language_code", "page")}, 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /saleor/page/migrations/0012_auto_20200709_1102.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.6 on 2020-07-09 11:02 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("page", "0011_auto_20200217_0350"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterModelOptions( 14 | name="pagetranslation", 15 | options={"ordering": ("language_code", "page", "pk")}, 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /saleor/page/migrations/0022_alter_pagetranslation_title.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.2 on 2021-05-18 09:24 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("page", "0021_auto_20210308_1135"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name="pagetranslation", 15 | name="title", 16 | field=models.CharField(blank=True, max_length=255, null=True), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /saleor/page/migrations/0024_alter_pagetranslation_language_code.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.6 on 2021-08-17 10:15 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("page", "0023_auto_20210526_0835"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name="pagetranslation", 15 | name="language_code", 16 | field=models.CharField(max_length=35), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /saleor/page/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/page/migrations/__init__.py -------------------------------------------------------------------------------- /saleor/payment/gateways/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/payment/gateways/__init__.py -------------------------------------------------------------------------------- /saleor/payment/gateways/adyen/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/payment/gateways/adyen/__init__.py -------------------------------------------------------------------------------- /saleor/payment/gateways/adyen/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/payment/gateways/adyen/tests/__init__.py -------------------------------------------------------------------------------- /saleor/payment/gateways/adyen/tests/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/payment/gateways/adyen/tests/utils/__init__.py -------------------------------------------------------------------------------- /saleor/payment/gateways/adyen/tests/webhooks/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/payment/gateways/adyen/tests/webhooks/__init__.py -------------------------------------------------------------------------------- /saleor/payment/gateways/adyen/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/payment/gateways/adyen/utils/__init__.py -------------------------------------------------------------------------------- /saleor/payment/gateways/authorize_net/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/payment/gateways/authorize_net/tests/__init__.py -------------------------------------------------------------------------------- /saleor/payment/gateways/braintree/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/payment/gateways/braintree/tests/__init__.py -------------------------------------------------------------------------------- /saleor/payment/gateways/dummy/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/payment/gateways/dummy/tests/__init__.py -------------------------------------------------------------------------------- /saleor/payment/gateways/dummy_credit_card/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/payment/gateways/dummy_credit_card/tests/__init__.py -------------------------------------------------------------------------------- /saleor/payment/gateways/razorpay/errors.py: -------------------------------------------------------------------------------- 1 | ORDER_NOT_CHARGED = "Order was not charged." 2 | INVALID_REQUEST = "The payment data was invalid." 3 | SERVER_ERROR = "The order couldn't be proceeded." 4 | UNSUPPORTED_CURRENCY = "The %(currency)s currency is not supported." 5 | -------------------------------------------------------------------------------- /saleor/payment/gateways/razorpay/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/payment/gateways/razorpay/tests/__init__.py -------------------------------------------------------------------------------- /saleor/payment/gateways/stripe/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/payment/gateways/stripe/__init__.py -------------------------------------------------------------------------------- /saleor/payment/gateways/stripe/deprecated/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/payment/gateways/stripe/deprecated/tests/__init__.py -------------------------------------------------------------------------------- /saleor/payment/gateways/stripe/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/payment/gateways/stripe/tests/__init__.py -------------------------------------------------------------------------------- /saleor/payment/migrations/0004_auto_20181206_0031.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.3 on 2018-12-06 06:31 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("payment", "0003_rename_payment_method_to_payment")] 9 | 10 | operations = [ 11 | migrations.AlterModelOptions(name="payment", options={"ordering": ["pk"]}) 12 | ] 13 | -------------------------------------------------------------------------------- /saleor/payment/migrations/0005_auto_20190104_0443.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.4 on 2019-01-04 10:43 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("payment", "0004_auto_20181206_0031")] 9 | 10 | operations = [ 11 | migrations.AlterModelOptions(name="payment", options={"ordering": ("pk",)}) 12 | ] 13 | -------------------------------------------------------------------------------- /saleor/payment/migrations/0007_auto_20190206_0938.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.5 on 2019-02-06 15:38 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("payment", "0006_auto_20190109_0358")] 9 | 10 | operations = [ 11 | migrations.AlterModelOptions(name="transaction", options={"ordering": ("pk",)}) 12 | ] 13 | -------------------------------------------------------------------------------- /saleor/payment/migrations/0008_merge_20190214_0447.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.4 on 2019-02-14 10:47 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("payment", "0007_auto_20190206_0938"), 10 | ("payment", "0007_auto_20190125_0242"), 11 | ] 12 | 13 | operations = [] 14 | -------------------------------------------------------------------------------- /saleor/payment/migrations/0012_transaction_customer_id.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.2 on 2019-06-28 12:24 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("payment", "0011_auto_20190516_0901")] 9 | 10 | operations = [ 11 | migrations.AddField( 12 | model_name="transaction", 13 | name="customer_id", 14 | field=models.CharField(max_length=256, null=True), 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/payment/migrations/0017_payment_payment_method_type.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.6 on 2020-08-06 09:13 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("payment", "0016_auto_20200423_0314"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name="payment", 15 | name="payment_method_type", 16 | field=models.CharField(blank=True, max_length=256), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /saleor/payment/migrations/0024_auto_20210326_0837.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.7 on 2021-03-26 08:37 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("payment", "0023_auto_20201110_0834"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name="transaction", 15 | name="error", 16 | field=models.CharField(max_length=256, null=True), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /saleor/payment/migrations/0028_drop_searchable_key.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.2 on 2021-05-14 12:08 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("payment", "0027_assign_psp_reference_values"), 10 | ] 11 | 12 | operations = [ 13 | migrations.RemoveField( 14 | model_name="transaction", 15 | name="searchable_key", 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /saleor/payment/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/payment/migrations/__init__.py -------------------------------------------------------------------------------- /saleor/payment/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/payment/tests/__init__.py -------------------------------------------------------------------------------- /saleor/plugins/admin_email/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/plugins/admin_email/__init__.py -------------------------------------------------------------------------------- /saleor/plugins/admin_email/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/plugins/admin_email/tests/__init__.py -------------------------------------------------------------------------------- /saleor/plugins/anonymize/__init__.py: -------------------------------------------------------------------------------- 1 | from ...core.anonymize import obfuscate_address, obfuscate_email 2 | 3 | 4 | def obfuscate_order(order): 5 | order.user_email = obfuscate_email(order.user_email) 6 | if order.shipping_address: 7 | order.shipping_address = obfuscate_address(order.shipping_address) 8 | order.shipping_address.save() 9 | if order.billing_address: 10 | order.billing_address = obfuscate_address(order.billing_address) 11 | order.billing_address.save() 12 | return order 13 | -------------------------------------------------------------------------------- /saleor/plugins/avatax/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/plugins/avatax/tests/__init__.py -------------------------------------------------------------------------------- /saleor/plugins/error_codes.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | 4 | class PluginErrorCode(Enum): 5 | GRAPHQL_ERROR = "graphql_error" 6 | INVALID = "invalid" 7 | PLUGIN_MISCONFIGURED = "plugin-misconfigured" 8 | NOT_FOUND = "not_found" 9 | REQUIRED = "required" 10 | UNIQUE = "unique" 11 | -------------------------------------------------------------------------------- /saleor/plugins/invoicing/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/plugins/invoicing/__init__.py -------------------------------------------------------------------------------- /saleor/plugins/invoicing/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/plugins/invoicing/tests/__init__.py -------------------------------------------------------------------------------- /saleor/plugins/migrations/0006_auto_20200909_1253.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1 on 2020-09-09 12:53 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("plugins", "0005_auto_20200810_1415"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name="pluginconfiguration", 15 | name="active", 16 | field=models.BooleanField(default=False), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /saleor/plugins/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/plugins/migrations/__init__.py -------------------------------------------------------------------------------- /saleor/plugins/sendgrid/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/plugins/sendgrid/tests/__init__.py -------------------------------------------------------------------------------- /saleor/plugins/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/plugins/tests/__init__.py -------------------------------------------------------------------------------- /saleor/plugins/tests/test_plugin_config_checks.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | 3 | from ..apps import PluginConfig 4 | 5 | 6 | def test_empty_plugin_path(): 7 | plugin_path = "" 8 | with pytest.raises(ImportError): 9 | PluginConfig.load_and_check_plugin(None, plugin_path) 10 | 11 | 12 | def test_invalid_plugin_path(): 13 | plugin_path = "saleor.core.plugins.wrong_path.Plugin" 14 | with pytest.raises(ImportError): 15 | PluginConfig.load_and_check_plugin(None, plugin_path) 16 | -------------------------------------------------------------------------------- /saleor/plugins/tests/utils.py: -------------------------------------------------------------------------------- 1 | from typing import Dict, List, Union 2 | 3 | 4 | def get_config_value( 5 | field_name: str, configuration: List[Dict[str, Union[str, bool]]] 6 | ) -> Union[str, bool, None]: 7 | for elem in configuration: 8 | if elem["name"] == field_name: 9 | return elem["value"] 10 | return None 11 | -------------------------------------------------------------------------------- /saleor/plugins/user_email/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/plugins/user_email/__init__.py -------------------------------------------------------------------------------- /saleor/plugins/user_email/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/plugins/user_email/tests/__init__.py -------------------------------------------------------------------------------- /saleor/plugins/vatlayer/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/plugins/vatlayer/tests/__init__.py -------------------------------------------------------------------------------- /saleor/plugins/webhook/__init__.py: -------------------------------------------------------------------------------- 1 | import hashlib 2 | import hmac 3 | 4 | 5 | def signature_for_payload(body: bytes, secret_key): 6 | if not secret_key: 7 | return "" 8 | hash = hmac.new(bytes(secret_key, "utf-8"), body, hashlib.sha256) 9 | return hash.hexdigest() 10 | -------------------------------------------------------------------------------- /saleor/plugins/webhook/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/plugins/webhook/tests/__init__.py -------------------------------------------------------------------------------- /saleor/product/management/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/product/management/__init__.py -------------------------------------------------------------------------------- /saleor/product/management/commands/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/product/management/commands/__init__.py -------------------------------------------------------------------------------- /saleor/product/migrations/0002_auto_20150722_0545.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [("product", "0001_initial")] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="product", 14 | name="description", 15 | field=models.TextField(default="", verbose_name="description", blank=True), 16 | ) 17 | ] 18 | -------------------------------------------------------------------------------- /saleor/product/migrations/0003_auto_20150820_1955.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [("product", "0002_auto_20150722_0545")] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="product", 14 | name="description", 15 | field=models.TextField(verbose_name="description"), 16 | ) 17 | ] 18 | -------------------------------------------------------------------------------- /saleor/product/migrations/0004_merge.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | 4 | from django.db import migrations 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ("product", "0003_auto_20150820_1955"), 11 | ("product", "0003_auto_20150820_2016"), 12 | ] 13 | 14 | operations = [] 15 | -------------------------------------------------------------------------------- /saleor/product/migrations/0007_auto_20160112_1025.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.9.1 on 2016-01-12 16:25 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [("product", "0006_product_updated_at")] 11 | 12 | operations = [migrations.RenameModel("FixedProductDiscount", "Discount")] 13 | -------------------------------------------------------------------------------- /saleor/product/migrations/0013_auto_20161130_0608.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.3 on 2016-11-30 12:08 3 | from __future__ import unicode_literals 4 | 5 | from django.contrib.postgres.operations import HStoreExtension 6 | from django.db import migrations 7 | 8 | 9 | class Migration(migrations.Migration): 10 | 11 | dependencies = [("product", "0012_auto_20160218_0812")] 12 | 13 | operations = [HStoreExtension()] 14 | -------------------------------------------------------------------------------- /saleor/product/migrations/0014_remove_productvariant_attributes.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.3 on 2016-11-30 12:22 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [("product", "0013_auto_20161130_0608")] 11 | 12 | operations = [ 13 | migrations.RemoveField(model_name="productvariant", name="attributes") 14 | ] 15 | -------------------------------------------------------------------------------- /saleor/product/migrations/0016_auto_20161207_0843.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.3 on 2016-12-07 14:43 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [("product", "0015_transfer_locations")] 11 | 12 | operations = [ 13 | migrations.AlterUniqueTogether( 14 | name="stock", unique_together=set([("variant", "location_link")]) 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/product/migrations/0017_remove_stock_location.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.3 on 2016-12-07 14:43 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [("product", "0016_auto_20161207_0843")] 11 | 12 | operations = [migrations.RemoveField(model_name="stock", name="location")] 13 | -------------------------------------------------------------------------------- /saleor/product/migrations/0021_add_hstore_extension.py: -------------------------------------------------------------------------------- 1 | from __future__ import unicode_literals 2 | 3 | from django.contrib.postgres.operations import HStoreExtension 4 | from django.db import migrations 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [("product", "0020_attribute_data_to_class")] 10 | 11 | operations = [HStoreExtension()] 12 | -------------------------------------------------------------------------------- /saleor/product/migrations/0025_auto_20161219_0517.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.3 on 2016-12-19 11:17 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [("product", "0024_migrate_json_data")] 11 | 12 | operations = [ 13 | migrations.RemoveField(model_name="attributechoicevalue", name="image") 14 | ] 15 | -------------------------------------------------------------------------------- /saleor/product/migrations/0026_merge_20161221_0845.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.3 on 2016-12-21 14:45 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ("product", "0025_auto_20161219_0517"), 12 | ("product", "0018_auto_20161212_0725"), 13 | ] 14 | 15 | operations = [] 16 | -------------------------------------------------------------------------------- /saleor/product/migrations/0028_merge_20170116_1016.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.3 on 2017-01-16 16:16 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ("product", "0026_merge_20161221_0845"), 12 | ("product", "0027_auto_20170113_0435"), 13 | ] 14 | 15 | operations = [] 16 | -------------------------------------------------------------------------------- /saleor/product/migrations/0031_auto_20170206_0601.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.5 on 2017-02-06 12:01 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [("product", "0030_auto_20170206_0407")] 11 | 12 | operations = [ 13 | migrations.RemoveField(model_name="product", name="weight"), 14 | migrations.RemoveField(model_name="productvariant", name="weight_override"), 15 | ] 16 | -------------------------------------------------------------------------------- /saleor/product/migrations/0032_auto_20170216_0438.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.10.5 on 2017-02-16 10:38 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [("product", "0031_auto_20170206_0601")] 11 | 12 | operations = [ 13 | migrations.AlterUniqueTogether( 14 | name="attributechoicevalue", unique_together=set([("display", "attribute")]) 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/product/migrations/0037_auto_20171124_0847.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.11.5 on 2017-11-24 14:47 3 | from __future__ import unicode_literals 4 | 5 | from django.contrib.postgres.operations import TrigramExtension 6 | from django.db import migrations 7 | 8 | 9 | class Migration(migrations.Migration): 10 | 11 | dependencies = [("product", "0036_auto_20171115_0608")] 12 | 13 | operations = [TrigramExtension()] 14 | -------------------------------------------------------------------------------- /saleor/product/migrations/0038_auto_20171129_0616.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.11.5 on 2017-11-29 12:16 3 | from __future__ import unicode_literals 4 | 5 | from django.contrib.postgres.operations import BtreeGinExtension 6 | from django.db import migrations 7 | 8 | 9 | class Migration(migrations.Migration): 10 | 11 | dependencies = [("product", "0037_auto_20171124_0847")] 12 | 13 | operations = [BtreeGinExtension()] 14 | -------------------------------------------------------------------------------- /saleor/product/migrations/0039_merge_20171130_0727.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.11.5 on 2017-11-30 13:27 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ("product", "0038_auto_20171129_0616"), 12 | ("product", "0037_auto_20171129_1004"), 13 | ] 14 | 15 | operations = [] 16 | -------------------------------------------------------------------------------- /saleor/product/migrations/0041_auto_20171205_0546.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.11.5 on 2017-12-05 11:46 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [("product", "0040_auto_20171205_0428")] 11 | 12 | operations = [ 13 | migrations.RenameField( 14 | model_name="category", old_name="hidden", new_name="is_hidden" 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/product/migrations/0043_auto_20171207_0839.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.11.5 on 2017-12-07 14:39 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [("product", "0042_auto_20171206_0501")] 11 | 12 | operations = [ 13 | migrations.RemoveIndex(model_name="product", name="product_pro_name_5bb6fa_gin") 14 | ] 15 | -------------------------------------------------------------------------------- /saleor/product/migrations/0050_auto_20180131_0746.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.11.5 on 2018-01-31 13:46 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [("product", "0049_collection")] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name="collection", name="slug", field=models.SlugField(max_length=255) 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/product/migrations/0051_auto_20180202_1106.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Generated by Django 1.11 on 2018-02-02 17:06 3 | from __future__ import unicode_literals 4 | 5 | from django.db import migrations 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [("product", "0050_auto_20180131_0746")] 11 | 12 | operations = [ 13 | migrations.AlterModelOptions(name="collection", options={"ordering": ["pk"]}) 14 | ] 15 | -------------------------------------------------------------------------------- /saleor/product/migrations/0054_merge_20180320_1108.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.0.3 on 2018-03-20 16:08 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("product", "0053_product_seo_description"), 10 | ("product", "0053_auto_20180305_1002"), 11 | ] 12 | 13 | operations = [] 14 | -------------------------------------------------------------------------------- /saleor/product/migrations/0057_auto_20180403_0852.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.0.3 on 2018-04-03 13:52 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("product", "0056_auto_20180330_0321")] 9 | 10 | operations = [ 11 | migrations.AlterField( 12 | model_name="productvariant", 13 | name="name", 14 | field=models.CharField(blank=True, max_length=255), 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/product/migrations/0060_collection_is_published.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.0.3 on 2018-04-21 00:13 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("product", "0059_generate_variant_name_from_attrs")] 9 | 10 | operations = [ 11 | migrations.AddField( 12 | model_name="collection", 13 | name="is_published", 14 | field=models.BooleanField(default=False), 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/product/migrations/0063_required_attr_value_order.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.0.3 on 2018-05-08 16:34 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("product", "0062_sortable_models")] 9 | 10 | operations = [ 11 | migrations.AlterField( 12 | model_name="attributechoicevalue", 13 | name="sort_order", 14 | field=models.PositiveIntegerField(db_index=True, editable=False), 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/product/migrations/0064_productvariant_handle_stock.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.0.3 on 2018-06-03 11:52 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("product", "0063_required_attr_value_order")] 9 | 10 | operations = [ 11 | migrations.AddField( 12 | model_name="productvariant", 13 | name="track_inventory", 14 | field=models.BooleanField(default=True), 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/product/migrations/0067_remove_product_is_featured.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.0.3 on 2018-08-08 09:51 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("product", "0066_auto_20180803_0528"), 10 | ("site", "0018_sitesettings_homepage_collection"), 11 | ] 12 | 13 | operations = [migrations.RemoveField(model_name="product", name="is_featured")] 14 | -------------------------------------------------------------------------------- /saleor/product/migrations/0071_attributechoicevalue_value.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.0.8 on 2018-09-14 09:45 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("product", "0070_auto_20180912_0329")] 9 | 10 | operations = [ 11 | migrations.AddField( 12 | model_name="attributechoicevalue", 13 | name="value", 14 | field=models.CharField(default="", max_length=100), 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/product/migrations/0076_auto_20181012_1146.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.2 on 2018-10-12 16:46 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("product", "0075_auto_20181010_0842")] 9 | 10 | operations = [ 11 | migrations.AlterField( 12 | model_name="attributevalue", 13 | name="value", 14 | field=models.CharField(blank=True, default="", max_length=100), 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/product/migrations/0077_generate_versatile_background_images.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.2 on 2018-11-11 16:08 2 | from django.db import migrations 3 | 4 | 5 | class Migration(migrations.Migration): 6 | # there was 'thumbnail generation' which already exists ad management command 7 | # because this migration is depended on, it cannot be removed 8 | dependencies = [("product", "0076_auto_20181012_1146")] 9 | 10 | operations = [] 11 | -------------------------------------------------------------------------------- /saleor/product/migrations/0080_collection_published_date.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.3 on 2018-12-03 20:52 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("product", "0079_default_tax_rate_instead_of_empty_field")] 9 | 10 | operations = [ 11 | migrations.AddField( 12 | model_name="collection", 13 | name="published_date", 14 | field=models.DateField(blank=True, null=True), 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/product/migrations/0081_merge_20181215_1659.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.3 on 2018-12-15 22:59 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("product", "0080_collection_published_date"), 10 | ("product", "0080_auto_20181214_0440"), 11 | ] 12 | 13 | operations = [] 14 | -------------------------------------------------------------------------------- /saleor/product/migrations/0082_merge_20181219_1440.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.3 on 2018-12-19 20:40 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("product", "0081_auto_20181218_0024"), 10 | ("product", "0081_merge_20181215_1659"), 11 | ] 12 | 13 | operations = [] 14 | -------------------------------------------------------------------------------- /saleor/product/migrations/0085_auto_20190125_0025.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.4 on 2019-01-25 06:25 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("product", "0084_auto_20190122_0113")] 9 | 10 | operations = [ 11 | migrations.AlterField( 12 | model_name="producttype", 13 | name="is_shipping_required", 14 | field=models.BooleanField(default=True), 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/product/migrations/0086_product_publication_date.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.5 on 2019-02-05 11:31 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("product", "0085_auto_20190125_0025")] 9 | 10 | operations = [ 11 | migrations.RenameField( 12 | model_name="product", old_name="available_on", new_name="publication_date" 13 | ) 14 | ] 15 | -------------------------------------------------------------------------------- /saleor/product/migrations/0087_auto_20190208_0326.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.5 on 2019-02-08 09:26 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("product", "0086_product_publication_date")] 9 | 10 | operations = [ 11 | migrations.RenameField( 12 | model_name="collection", 13 | old_name="published_date", 14 | new_name="publication_date", 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/product/migrations/0088_auto_20190220_1928.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.4 on 2019-02-21 01:28 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("product", "0087_auto_20190208_0326")] 9 | 10 | operations = [ 11 | migrations.AlterField( 12 | model_name="collection", 13 | name="is_published", 14 | field=models.BooleanField(default=True), 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/product/migrations/0100_merge_20190719_0803.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.3 on 2019-07-19 13:03 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("product", "0096_raw_html_to_json"), 10 | ("product", "0099_auto_20190719_0745"), 11 | ] 12 | 13 | operations = [] 14 | -------------------------------------------------------------------------------- /saleor/product/migrations/0109_auto_20191006_1433.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.5 on 2019-10-06 19:33 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("product", "0108_auto_20191003_0422")] 9 | 10 | operations = [ 11 | migrations.AlterField( 12 | model_name="productvariant", 13 | name="sku", 14 | field=models.CharField(max_length=255, unique=True), 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/product/migrations/0111_auto_20191209_0437.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.7 on 2019-12-09 10:37 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("product", "0110_auto_20191108_0340"), 10 | ("warehouse", "0001_initial"), 11 | ] 12 | 13 | operations = [ 14 | migrations.RemoveField(model_name="productvariant", name="quantity"), 15 | migrations.RemoveField(model_name="productvariant", name="quantity_allocated"), 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/product/migrations/0117_auto_20200423_0737.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.5 on 2020-04-23 12:37 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("product", "0116_auto_20200225_0237"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name="producttranslation", 15 | name="name", 16 | field=models.CharField(max_length=250), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /saleor/product/migrations/0132_product_rating.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.2 on 2020-10-19 09:52 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("product", "0131_auto_20201112_0904"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name="product", 15 | name="rating", 16 | field=models.FloatField(blank=True, null=True), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /saleor/product/migrations/0139_description_vector_search.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.5 on 2021-02-12 09:20 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("product", "0138_migrate_description_json_into_description"), 10 | ] 11 | operations = [] 12 | -------------------------------------------------------------------------------- /saleor/product/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/product/migrations/__init__.py -------------------------------------------------------------------------------- /saleor/product/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/product/tests/__init__.py -------------------------------------------------------------------------------- /saleor/seo/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/seo/__init__.py -------------------------------------------------------------------------------- /saleor/seo/schema/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/seo/schema/__init__.py -------------------------------------------------------------------------------- /saleor/seo/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/seo/tests/__init__.py -------------------------------------------------------------------------------- /saleor/shipping/__init__.py: -------------------------------------------------------------------------------- 1 | class ShippingMethodType: 2 | PRICE_BASED = "price" 3 | WEIGHT_BASED = "weight" 4 | 5 | CHOICES = [ 6 | (PRICE_BASED, "Price based shipping"), 7 | (WEIGHT_BASED, "Weight based shipping"), 8 | ] 9 | 10 | 11 | class PostalCodeRuleInclusionType: 12 | INCLUDE = "include" 13 | EXCLUDE = "exclude" 14 | 15 | CHOICES = [ 16 | (INCLUDE, "Shipping method should include postal code rule"), 17 | (EXCLUDE, "Shipping method should exclude postal code rule"), 18 | ] 19 | -------------------------------------------------------------------------------- /saleor/shipping/error_codes.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | 4 | class ShippingErrorCode(Enum): 5 | ALREADY_EXISTS = "already_exists" 6 | GRAPHQL_ERROR = "graphql_error" 7 | INVALID = "invalid" 8 | MAX_LESS_THAN_MIN = "max_less_than_min" 9 | NOT_FOUND = "not_found" 10 | REQUIRED = "required" 11 | UNIQUE = "unique" 12 | DUPLICATED_INPUT_ITEM = "duplicated_input_item" 13 | -------------------------------------------------------------------------------- /saleor/shipping/migrations/0010_auto_20180719_0520.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.0.3 on 2018-07-19 10:20 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("shipping", "0009_auto_20180629_1055")] 9 | 10 | operations = [ 11 | migrations.AlterModelOptions( 12 | name="shippingmethod", 13 | options={"permissions": (("manage_shipping", "Manage shipping."),)}, 14 | ) 15 | ] 16 | -------------------------------------------------------------------------------- /saleor/shipping/migrations/0015_auto_20190305_0640.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.5 on 2019-03-05 12:40 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("shipping", "0014_auto_20180920_0956")] 9 | 10 | operations = [ 11 | migrations.AlterModelOptions( 12 | name="shippingmethod", options={"ordering": ("pk",)} 13 | ) 14 | ] 15 | -------------------------------------------------------------------------------- /saleor/shipping/migrations/0019_remove_shippingmethod_meta.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1 on 2020-08-10 14:15 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("shipping", "0018_default_zones_countries"), 10 | ] 11 | 12 | operations = [ 13 | migrations.RemoveField( 14 | model_name="shippingmethod", 15 | name="meta", 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /saleor/shipping/migrations/0026_shippingzone_description.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.4 on 2020-12-29 12:49 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("shipping", "0025_auto_20201130_1122"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name="shippingzone", 15 | name="description", 16 | field=models.TextField(blank=True), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /saleor/shipping/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/shipping/migrations/__init__.py -------------------------------------------------------------------------------- /saleor/shipping/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/shipping/tests/__init__.py -------------------------------------------------------------------------------- /saleor/site/__init__.py: -------------------------------------------------------------------------------- 1 | class GiftCardSettingsExpiryType: 2 | NEVER_EXPIRE = "never_expire" 3 | EXPIRY_PERIOD = "expiry_period" 4 | 5 | CHOICES = [ 6 | (NEVER_EXPIRE, "Never expire"), 7 | (EXPIRY_PERIOD, "Expiry period"), 8 | ] 9 | -------------------------------------------------------------------------------- /saleor/site/error_codes.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | 4 | class SiteErrorCode(Enum): 5 | FORBIDDEN_CHARACTER = "forbidden_character" 6 | GRAPHQL_ERROR = "graphql_error" 7 | 8 | 9 | class OrderSettingsErrorCode(Enum): 10 | INVALID = "invalid" 11 | 12 | 13 | class GiftCardSettingsErrorCode(Enum): 14 | INVALID = "invalid" 15 | REQUIRED = "required" 16 | GRAPHQL_ERROR = "graphql_error" 17 | -------------------------------------------------------------------------------- /saleor/site/migrations/0015_sitesettings_handle_stock_by_default.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.0.3 on 2018-06-03 11:52 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("site", "0014_handle_taxes")] 9 | 10 | operations = [ 11 | migrations.AddField( 12 | model_name="sitesettings", 13 | name="track_inventory_by_default", 14 | field=models.BooleanField(default=True), 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/site/migrations/0016_auto_20180719_0520.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.0.3 on 2018-07-19 10:20 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("site", "0015_sitesettings_handle_stock_by_default")] 9 | 10 | operations = [ 11 | migrations.AlterModelOptions( 12 | name="sitesettings", 13 | options={"permissions": (("manage_settings", "Manage settings."),)}, 14 | ) 15 | ] 16 | -------------------------------------------------------------------------------- /saleor/site/migrations/0024_sitesettings_customer_set_password_url.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.6 on 2019-10-21 11:40 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("site", "0023_auto_20191007_0835")] 9 | 10 | operations = [ 11 | migrations.AddField( 12 | model_name="sitesettings", 13 | name="customer_set_password_url", 14 | field=models.CharField(blank=True, max_length=255, null=True), 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/site/migrations/0026_remove_sitesettings_homepage_collection.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1 on 2020-10-14 10:07 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("site", "0025_auto_20191024_0552"), 10 | ] 11 | 12 | operations = [ 13 | migrations.RemoveField( 14 | model_name="sitesettings", 15 | name="homepage_collection", 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /saleor/site/migrations/0028_delete_authorizationkey.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.3 on 2020-12-17 12:36 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("site", "0027_sitesettings_automatically_confirm_all_new_orders"), 10 | ] 11 | 12 | operations = [ 13 | migrations.DeleteModel( 14 | name="AuthorizationKey", 15 | ), 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/site/migrations/0031_merge_20210820_1454.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.6 on 2021-08-20 14:54 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("site", "0030_alter_sitesettingstranslation_language_code"), 10 | ("site", "0030_auto_20210722_1141"), 11 | ] 12 | 13 | operations = [] 14 | -------------------------------------------------------------------------------- /saleor/site/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/site/migrations/__init__.py -------------------------------------------------------------------------------- /saleor/site/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/site/tests/__init__.py -------------------------------------------------------------------------------- /saleor/site/tests/test_site_settings.py: -------------------------------------------------------------------------------- 1 | from django.contrib.sites.models import Site 2 | 3 | from ..models import SiteSettings 4 | 5 | 6 | def test_new_get_current(): 7 | result = Site.objects.get_current() 8 | assert result.name == "mirumee.com" 9 | assert result.domain == "mirumee.com" 10 | assert type(result.settings) == SiteSettings 11 | assert str(result.settings) == "mirumee.com" 12 | -------------------------------------------------------------------------------- /saleor/static/images/placeholder1080x1080.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/images/placeholder1080x1080.png -------------------------------------------------------------------------------- /saleor/static/images/placeholder120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/images/placeholder120x120.png -------------------------------------------------------------------------------- /saleor/static/images/placeholder255x255.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/images/placeholder255x255.png -------------------------------------------------------------------------------- /saleor/static/images/placeholder540x540.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/images/placeholder540x540.png -------------------------------------------------------------------------------- /saleor/static/images/placeholder60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/images/placeholder60x60.png -------------------------------------------------------------------------------- /saleor/static/placeholders/products-list/accessories.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/products-list/accessories.jpg -------------------------------------------------------------------------------- /saleor/static/placeholders/products-list/apparel.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/products-list/apparel.jpg -------------------------------------------------------------------------------- /saleor/static/placeholders/products-list/clothing.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/products-list/clothing.jpg -------------------------------------------------------------------------------- /saleor/static/placeholders/products-list/groceries.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/products-list/groceries.jpg -------------------------------------------------------------------------------- /saleor/static/placeholders/products-list/summer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/products-list/summer.jpg -------------------------------------------------------------------------------- /saleor/static/placeholders/saleor-digital-03_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleor-digital-03_1.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleor-digital-03_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleor-digital-03_2.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleor-digital-03_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleor-digital-03_3.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleor-digital-03_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleor-digital-03_4.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleor-digital-03_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleor-digital-03_5.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleor-digital-03_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleor-digital-03_6.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_beer-01_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_beer-01_1.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_beer-01_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_beer-01_2.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_beer-02_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_beer-02_1.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_beer-02_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_beer-02_2.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_cl_bogo01_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_cl_bogo01_1.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_cl_bogo02_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_cl_bogo02_1.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_cl_bogo03_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_cl_bogo03_1.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_cl_bogo04_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_cl_bogo04_1.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_cl_bogo04_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_cl_bogo04_2.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_cl_boot01_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_cl_boot01_1.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_cl_boot01_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_cl_boot01_2.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_cl_boot01_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_cl_boot01_3.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_cl_boot03_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_cl_boot03_1.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_cl_boot03_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_cl_boot03_2.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_cl_boot06_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_cl_boot06_1.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_cl_boot06_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_cl_boot06_2.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_cl_boot07_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_cl_boot07_1.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_cl_boot07_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_cl_boot07_2.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_cl_polo01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_cl_polo01.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_cl_polo02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_cl_polo02.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_cl_polo03-woman.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_cl_polo03-woman.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_cl_polo04-woman.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_cl_polo04-woman.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_cuschion01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_cuschion01.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_cuschion02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_cuschion02.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_fd_juice_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_fd_juice_01.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_fd_juice_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_fd_juice_02.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_fd_juice_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_fd_juice_03.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_fd_juice_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_fd_juice_04.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_fd_juice_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_fd_juice_05.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_fd_juice_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_fd_juice_06.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_paints_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_paints_01.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_paints_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_paints_02.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_paints_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_paints_03.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_paints_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_paints_04.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_paints_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_paints_05.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_sneakers_01_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_sneakers_01_1.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_sneakers_01_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_sneakers_01_2.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_sneakers_01_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_sneakers_01_3.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_sneakers_01_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_sneakers_01_4.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_sneakers_02_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_sneakers_02_1.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_sneakers_02_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_sneakers_02_2.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_sneakers_02_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_sneakers_02_3.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_sneakers_02_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_sneakers_02_4.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_wine-red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_wine-red.png -------------------------------------------------------------------------------- /saleor/static/placeholders/saleordemoproduct_wine-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/static/placeholders/saleordemoproduct_wine-white.png -------------------------------------------------------------------------------- /saleor/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/tests/__init__.py -------------------------------------------------------------------------------- /saleor/tests/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | 4 | class Book(models.Model): 5 | name = models.CharField(max_length=30) 6 | -------------------------------------------------------------------------------- /saleor/vendor/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/vendor/__init__.py -------------------------------------------------------------------------------- /saleor/vendor/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class VendorConfig(AppConfig): 5 | name = "saleor.vendor" 6 | -------------------------------------------------------------------------------- /saleor/vendor/error_codes.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | # error handle using the enum 4 | class VendorErrorCode(Enum): 5 | GRAPHQL_ERROR = "graphql_error" 6 | INVALID = "invalid" 7 | NOT_FOUND = "not_found" 8 | REQUIRED = "required" 9 | UNIQUE = "unique" 10 | -------------------------------------------------------------------------------- /saleor/vendor/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/vendor/migrations/__init__.py -------------------------------------------------------------------------------- /saleor/warehouse/__init__.py: -------------------------------------------------------------------------------- 1 | class WarehouseClickAndCollectOption: 2 | DISABLED = "disabled" 3 | LOCAL_STOCK = "local" 4 | ALL_WAREHOUSES = "all" 5 | 6 | CHOICES = [ 7 | (DISABLED, "Disabled"), 8 | (LOCAL_STOCK, "Local stock only"), 9 | (ALL_WAREHOUSES, "All warehouses"), 10 | ] 11 | -------------------------------------------------------------------------------- /saleor/warehouse/migrations/0004_auto_20200129_0717.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.9 on 2020-01-29 13:17 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("warehouse", "0003_warehouse_slug"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name="warehouse", 15 | name="name", 16 | field=models.CharField(max_length=250), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /saleor/warehouse/migrations/0010_auto_20200709_1102.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.6 on 2020-07-09 11:02 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("warehouse", "0009_remove_invalid_allocation"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterModelOptions( 14 | name="warehouse", 15 | options={"ordering": ("-slug",)}, 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /saleor/warehouse/migrations/0015_alter_stock_quantity.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.7 on 2021-09-16 10:47 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("warehouse", "0014_remove_warehouse_company_name"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name="stock", 15 | name="quantity", 16 | field=models.IntegerField(default=0), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /saleor/warehouse/migrations/0016_merge_20210921_1036.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.2.7 on 2021-09-21 10:36 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("warehouse", "0015_alter_stock_quantity"), 10 | ("warehouse", "0015_auto_20210713_0904"), 11 | ] 12 | 13 | operations = [] 14 | -------------------------------------------------------------------------------- /saleor/warehouse/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/warehouse/migrations/__init__.py -------------------------------------------------------------------------------- /saleor/warehouse/tasks.py: -------------------------------------------------------------------------------- 1 | from celery.utils.log import get_task_logger 2 | 3 | from ..celeryconf import app 4 | from .models import Allocation 5 | 6 | task_logger = get_task_logger(__name__) 7 | 8 | 9 | @app.task 10 | def delete_empty_allocations_task(): 11 | count, _ = Allocation.objects.filter(quantity_allocated=0).delete() 12 | if count: 13 | task_logger.debug("Removed %s allocations", count) 14 | -------------------------------------------------------------------------------- /saleor/warehouse/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/warehouse/tests/__init__.py -------------------------------------------------------------------------------- /saleor/webhook/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/webhook/__init__.py -------------------------------------------------------------------------------- /saleor/webhook/error_codes.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | 4 | class WebhookErrorCode(Enum): 5 | GRAPHQL_ERROR = "graphql_error" 6 | INVALID = "invalid" 7 | NOT_FOUND = "not_found" 8 | REQUIRED = "required" 9 | UNIQUE = "unique" 10 | -------------------------------------------------------------------------------- /saleor/webhook/migrations/0002_webhook_name.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.4 on 2019-10-02 06:52 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [("webhook", "0001_initial")] 9 | 10 | operations = [ 11 | migrations.AddField( 12 | model_name="webhook", 13 | name="name", 14 | field=models.CharField(blank=True, max_length=255, null=True), 15 | ) 16 | ] 17 | -------------------------------------------------------------------------------- /saleor/webhook/migrations/0007_auto_20210319_0945.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.7 on 2021-03-19 09:45 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ("webhook", "0006_auto_20200731_1440"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterModelOptions( 14 | name="webhook", 15 | options={"ordering": ("pk",)}, 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /saleor/webhook/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/webhook/migrations/__init__.py -------------------------------------------------------------------------------- /saleor/webhook/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/webhook/tests/__init__.py -------------------------------------------------------------------------------- /saleor/wishlist/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/wishlist/__init__.py -------------------------------------------------------------------------------- /saleor/wishlist/error_codes.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | 4 | class WishlistErrorCode(str, Enum): 5 | GRAPHQL_ERROR = "graphql_error" 6 | INVALID = "invalid" 7 | NOT_FOUND = "not_found" 8 | REQUIRED = "required" 9 | UNIQUE = "unique" 10 | CANNOT_MANAGE_PRODUCT_WITHOUT_VARIANT = "CANNOT_MANAGE_PRODUCT_WITHOUT_VARIANT" 11 | -------------------------------------------------------------------------------- /saleor/wishlist/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/wishlist/migrations/__init__.py -------------------------------------------------------------------------------- /saleor/wishlist/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/saleor/wishlist/tests/__init__.py -------------------------------------------------------------------------------- /saleor/wsgi/health_check.py: -------------------------------------------------------------------------------- 1 | def health_check(application, health_url): 2 | def health_check_wrapper(environ, start_response): 3 | if environ.get("PATH_INFO") == health_url: 4 | start_response("200 OK", [("Content-Type", "text/plain")]) 5 | return [] 6 | return application(environ, start_response) 7 | 8 | return health_check_wrapper 9 | -------------------------------------------------------------------------------- /saleor/wsgi/uwsgi.ini: -------------------------------------------------------------------------------- 1 | [uwsgi] 2 | die-on-term = true 3 | enable-threads = true 4 | http = :$(PORT) 5 | log-format = UWSGI uwsgi "%(method) %(uri) %(proto)" %(status) %(size) %(msecs)ms [PID:%(pid):Worker-%(wid)] [RSS:%(rssM)MB] 6 | master = true 7 | max-requests = 100 8 | memory-report = true 9 | module = saleor.wsgi:application 10 | processes = 4 11 | static-map = /static=/app/static 12 | mimefile = /etc/mime.types 13 | ignore-sigpipe = true 14 | ignore-write-errors = true 15 | disable-write-exception=true 16 | -------------------------------------------------------------------------------- /scripts/push_static.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Push static to AWS S3 4 | 5 | docker run --rm \ 6 | -e SECRET_KEY=dummy \ 7 | -e AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} \ 8 | -e AWS_LOCATION=${AWS_LOCATION} \ 9 | -e AWS_MEDIA_BUCKET_NAME=${AWS_MEDIA_BUCKET_NAME} \ 10 | -e AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} \ 11 | -e AWS_STORAGE_BUCKET_NAME=${AWS_STORAGE_BUCKET_NAME} \ 12 | -e STATIC_URL=${STATIC_URL} \ 13 | ${IMAGE_NAME} \ 14 | python3 manage.py collectstatic --no-input 15 | -------------------------------------------------------------------------------- /templates/formatted_address.html: -------------------------------------------------------------------------------- 1 |
2 | {% if inline %}{{ address_lines|join:', ' }}{% else %}{{ address_lines|join:'
' }}{% endif %} 3 |
4 | -------------------------------------------------------------------------------- /templates/invoices/inter.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Saleor-Multi-Vendor/saleor-multi-vendor/813933e802765922e2427ce0d31157c01008bc6f/templates/invoices/inter.ttf --------------------------------------------------------------------------------