Compare commits
11 Commits
52d133835b
...
9887ae380b
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9887ae380b | ||
|
|
9c5a95aeb2 | ||
|
|
a0b9221b2e | ||
|
|
5a4f7d7521 | ||
|
|
0fc0501661 | ||
|
|
72ddc5070a | ||
|
|
92ede9f673 | ||
|
|
16cdf48ef7 | ||
|
|
6ef1508867 | ||
|
|
5034cba15c | ||
|
|
079e47c1af |
@ -0,0 +1,100 @@
|
|||||||
|
From d68fb04ee1fdf33c485b00fb40500406ac32d857 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Bert Blommers <bblommers@users.noreply.github.com>
|
||||||
|
Date: Tue, 3 Jan 2023 21:21:52 +0000
|
||||||
|
Subject: [PATCH] IOTData: Fix bug where publish() could only be called once
|
||||||
|
(#5812)
|
||||||
|
|
||||||
|
---
|
||||||
|
moto/iotdata/responses.py | 20 ++++++++------------
|
||||||
|
moto/iotdata/urls.py | 9 ---------
|
||||||
|
tests/test_iotdata/test_iotdata.py | 10 +++++++---
|
||||||
|
3 files changed, 15 insertions(+), 24 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/moto/iotdata/responses.py b/moto/iotdata/responses.py
|
||||||
|
index 6aa157327..ca31eb811 100644
|
||||||
|
--- a/moto/iotdata/responses.py
|
||||||
|
+++ b/moto/iotdata/responses.py
|
||||||
|
@@ -8,6 +8,12 @@ class IoTDataPlaneResponse(BaseResponse):
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__(service_name="iot-data")
|
||||||
|
|
||||||
|
+ def _get_action(self) -> str:
|
||||||
|
+ if self.path and self.path.startswith("/topics/"):
|
||||||
|
+ # Special usecase - there is no way identify this action, besides the URL
|
||||||
|
+ return "publish"
|
||||||
|
+ return super()._get_action()
|
||||||
|
+
|
||||||
|
@property
|
||||||
|
def iotdata_backend(self):
|
||||||
|
return iotdata_backends[self.current_account][self.region]
|
||||||
|
@@ -30,18 +36,8 @@ class IoTDataPlaneResponse(BaseResponse):
|
||||||
|
payload = self.iotdata_backend.delete_thing_shadow(thing_name=thing_name)
|
||||||
|
return json.dumps(payload.to_dict())
|
||||||
|
|
||||||
|
- def dispatch_publish(self, request, full_url, headers):
|
||||||
|
- # This endpoint requires specialized handling because it has
|
||||||
|
- # a uri parameter containing forward slashes that is not
|
||||||
|
- # correctly url encoded when we're running in server mode.
|
||||||
|
- # https://github.com/pallets/flask/issues/900
|
||||||
|
- self.setup_class(request, full_url, headers)
|
||||||
|
- self.querystring["Action"] = ["Publish"]
|
||||||
|
- topic = self.path.partition("/topics/")[-1]
|
||||||
|
- self.querystring["target"] = [unquote(topic)] if "%" in topic else [topic]
|
||||||
|
- return self.call_action()
|
||||||
|
-
|
||||||
|
def publish(self):
|
||||||
|
- topic = self._get_param("target")
|
||||||
|
+ topic = self.path.split("/topics/")[-1]
|
||||||
|
+ topic = unquote(topic) if "%" in topic else topic
|
||||||
|
self.iotdata_backend.publish(topic=topic, payload=self.body)
|
||||||
|
return json.dumps(dict())
|
||||||
|
diff --git a/moto/iotdata/urls.py b/moto/iotdata/urls.py
|
||||||
|
index 6e1adbbb9..44f9cffde 100644
|
||||||
|
--- a/moto/iotdata/urls.py
|
||||||
|
+++ b/moto/iotdata/urls.py
|
||||||
|
@@ -10,18 +10,9 @@ response = IoTDataPlaneResponse()
|
||||||
|
|
||||||
|
|
||||||
|
url_paths = {
|
||||||
|
- #
|
||||||
|
- # Paths for :class:`moto.core.models.MockAWS`
|
||||||
|
- #
|
||||||
|
- # This route requires special handling.
|
||||||
|
- "{0}/topics/(?P<topic>.*)$": response.dispatch_publish,
|
||||||
|
- # The remaining routes can be handled by the default dispatcher.
|
||||||
|
"{0}/.*$": response.dispatch,
|
||||||
|
#
|
||||||
|
# (Flask) Paths for :class:`moto.core.models.ServerModeMockAWS`
|
||||||
|
#
|
||||||
|
- # This route requires special handling.
|
||||||
|
- "{0}/topics/<path:topic>$": response.dispatch_publish,
|
||||||
|
- # The remaining routes can be handled by the default dispatcher.
|
||||||
|
"{0}/<path:route>$": response.dispatch,
|
||||||
|
}
|
||||||
|
diff --git a/tests/test_iotdata/test_iotdata.py b/tests/test_iotdata/test_iotdata.py
|
||||||
|
index 0a0b7a350..59df5c06d 100644
|
||||||
|
--- a/tests/test_iotdata/test_iotdata.py
|
||||||
|
+++ b/tests/test_iotdata/test_iotdata.py
|
||||||
|
@@ -110,12 +110,16 @@ def test_update():
|
||||||
|
def test_publish():
|
||||||
|
region_name = "ap-northeast-1"
|
||||||
|
client = boto3.client("iot-data", region_name=region_name)
|
||||||
|
- client.publish(topic="test/topic", qos=1, payload=b"pl")
|
||||||
|
+ client.publish(topic="test/topic1", qos=1, payload=b"pl1")
|
||||||
|
+ client.publish(topic="test/topic2", qos=1, payload=b"pl2")
|
||||||
|
+ client.publish(topic="test/topic3", qos=1, payload=b"pl3")
|
||||||
|
|
||||||
|
if not settings.TEST_SERVER_MODE:
|
||||||
|
mock_backend = moto.iotdata.models.iotdata_backends[ACCOUNT_ID][region_name]
|
||||||
|
- mock_backend.published_payloads.should.have.length_of(1)
|
||||||
|
- mock_backend.published_payloads.should.contain(("test/topic", "pl"))
|
||||||
|
+ mock_backend.published_payloads.should.have.length_of(3)
|
||||||
|
+ mock_backend.published_payloads.should.contain(("test/topic1", "pl1"))
|
||||||
|
+ mock_backend.published_payloads.should.contain(("test/topic2", "pl2"))
|
||||||
|
+ mock_backend.published_payloads.should.contain(("test/topic3", "pl3"))
|
||||||
|
|
||||||
|
|
||||||
|
@mock_iot
|
||||||
|
--
|
||||||
|
2.27.0
|
||||||
|
|
||||||
Binary file not shown.
BIN
moto-4.0.12.tar.gz
Normal file
BIN
moto-4.0.12.tar.gz
Normal file
Binary file not shown.
@ -1,41 +1,71 @@
|
|||||||
%global _empty_manifest_terminate_build 0
|
%global _empty_manifest_terminate_build 0
|
||||||
Name: python-moto
|
Name: python-moto
|
||||||
Version: 2.0.1
|
Version: 4.0.12
|
||||||
Release: 1
|
Release: 2
|
||||||
Summary: A library that allows your python tests to easily mock out the boto library
|
Summary: A library that allows your python tests to easily mock out the boto library
|
||||||
License: Apache-2.0
|
License: Apache-2.0
|
||||||
URL: https://github.com/spulec/moto
|
URL: https://github.com/spulec/moto
|
||||||
Source0: https://files.pythonhosted.org/packages/c3/0d/215683a822d25ffe684c71050d583d77f29db45404ede87bc94f468d4fe7/moto-2.0.1.tar.gz
|
Source0: https://files.pythonhosted.org/packages/51/36/0e2f4b73b638563ce1a342b6d32f9cace043e1bfc2f763a8b8a5a10d29a2/moto-4.0.12.tar.gz
|
||||||
BuildArch: noarch
|
Patch0: backport-IOTData-Fix-bug-where-publish-could-only-be-called-once.patch
|
||||||
|
BuildArch: noarch
|
||||||
|
|
||||||
%description
|
%description
|
||||||
Moto is a library that allows your tests to easily mock out AWS Services.
|
Moto is a library that allows your tests to easily mock out AWS Services.
|
||||||
|
|
||||||
%package -n python3-moto
|
%package -n python3-moto
|
||||||
Summary: A library that allows your python tests to easily mock out the boto library
|
Summary: A library that allows your python tests to easily mock out the boto library
|
||||||
Provides: python-moto
|
Provides: python-moto = %{version}-%{release}
|
||||||
BuildRequires: python3-devel
|
BuildRequires: python3-devel
|
||||||
BuildRequires: python3-setuptools
|
BuildRequires: python3-setuptools
|
||||||
BuildRequires: python3-pbr
|
BuildRequires: python3-pbr
|
||||||
BuildRequires: python3-pip
|
BuildRequires: python3-pip
|
||||||
BuildRequires: python3-wheel
|
BuildRequires: python3-wheel
|
||||||
BuildRequires: python3-boto3
|
BuildRequires: python3-boto3
|
||||||
Requires: python3-boto3
|
BuildRequires: python3-botocore
|
||||||
|
BuildRequires: python3-cryptography
|
||||||
|
BuildRequires: python3-dateutil
|
||||||
|
BuildRequires: python3-docker
|
||||||
|
BuildRequires: python3-flask
|
||||||
|
BuildRequires: python3-idna
|
||||||
|
BuildRequires: python3-jinja2
|
||||||
|
BuildRequires: python3-markupsafe
|
||||||
|
BuildRequires: python3-mock
|
||||||
|
BuildRequires: python3-more-itertools
|
||||||
|
BuildRequires: python3-pytz
|
||||||
|
BuildRequires: python3-pyyaml
|
||||||
|
BuildRequires: python3-requests
|
||||||
|
BuildRequires: python3-responses
|
||||||
|
BuildRequires: python3-rsa
|
||||||
|
BuildRequires: python3-six
|
||||||
|
BuildRequires: python3-werkzeug
|
||||||
|
BuildRequires: python3-xmltodict
|
||||||
|
BuildRequires: python3-zipp
|
||||||
|
Requires: python3-boto3
|
||||||
|
Requires: python3-botocore
|
||||||
|
Requires: python3-cryptography
|
||||||
|
Requires: python3-requests
|
||||||
|
Requires: python3-xmltodict
|
||||||
|
Requires: python3-werkzeug
|
||||||
|
Requires: python3-dateutil
|
||||||
|
Requires: python3-responses
|
||||||
|
Requires: python3-markupsafe
|
||||||
|
Requires: python3-jinja2
|
||||||
|
Requires: python3-importlib-metadata
|
||||||
%description -n python3-moto
|
%description -n python3-moto
|
||||||
Moto is a library that allows your tests to easily mock out AWS Services.
|
Moto is a library that allows your tests to easily mock out AWS Services.
|
||||||
|
|
||||||
%package help
|
%package help
|
||||||
Summary: A library that allows your python tests to easily mock out the boto library
|
Summary: Development documents and examples for moto
|
||||||
Provides: python3-moto-doc
|
Provides: python3-moto-doc
|
||||||
%description help
|
%description help
|
||||||
Moto is a library that allows your tests to easily mock out AWS Services.
|
Moto is a library that allows your tests to easily mock out AWS Services.
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%autosetup -n moto-2.0.1
|
%autosetup -n moto-%{version} -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%py3_build
|
%py3_build
|
||||||
|
|
||||||
|
|
||||||
%install
|
%install
|
||||||
%py3_install
|
%py3_install
|
||||||
install -d -m755 %{buildroot}/%{_pkgdocdir}
|
install -d -m755 %{buildroot}/%{_pkgdocdir}
|
||||||
@ -43,22 +73,25 @@ if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
|
|||||||
if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
|
if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
|
||||||
if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
|
if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
|
||||||
if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
|
if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
|
||||||
|
if [ -f README.rst ]; then cp -af README.rst %{buildroot}/%{_pkgdocdir}; fi
|
||||||
|
if [ -f README.md ]; then cp -af README.md %{buildroot}/%{_pkgdocdir}; fi
|
||||||
|
if [ -f README.txt ]; then cp -af README.txt %{buildroot}/%{_pkgdocdir}; fi
|
||||||
pushd %{buildroot}
|
pushd %{buildroot}
|
||||||
if [ -d usr/lib ]; then
|
if [ -d usr/lib ]; then
|
||||||
find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
|
find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
|
||||||
fi
|
fi
|
||||||
if [ -d usr/lib64 ]; then
|
if [ -d usr/lib64 ]; then
|
||||||
find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
|
find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
|
||||||
fi
|
fi
|
||||||
if [ -d usr/bin ]; then
|
if [ -d usr/bin ]; then
|
||||||
find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
|
find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
|
||||||
fi
|
fi
|
||||||
if [ -d usr/sbin ]; then
|
if [ -d usr/sbin ]; then
|
||||||
find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
|
find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
|
||||||
fi
|
fi
|
||||||
touch doclist.lst
|
touch doclist.lst
|
||||||
if [ -d usr/share/man ]; then
|
if [ -d usr/share/man ]; then
|
||||||
find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
|
find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
|
||||||
fi
|
fi
|
||||||
popd
|
popd
|
||||||
mv %{buildroot}/filelist.lst .
|
mv %{buildroot}/filelist.lst .
|
||||||
@ -67,10 +100,21 @@ mv %{buildroot}/doclist.lst .
|
|||||||
%files -n python3-moto -f filelist.lst
|
%files -n python3-moto -f filelist.lst
|
||||||
%dir %{python3_sitelib}/*
|
%dir %{python3_sitelib}/*
|
||||||
|
|
||||||
|
|
||||||
%files help -f doclist.lst
|
%files help -f doclist.lst
|
||||||
%{_docdir}/*
|
%{_docdir}/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed May 22 2024 lilu <lilu@kylinos.cn> - 4.0.12-2
|
||||||
|
- IOTData: Fix bug where publish could only be called once
|
||||||
|
|
||||||
|
* Wed Dec 21 2022 wangjunqi <wangjunqi@kylinos.cn> - 4.0.12-1
|
||||||
|
- Update package to version 4.0.12
|
||||||
|
|
||||||
|
* Thu Jun 16 2022 OpenStack_SIG <openstack@openeuler.org> - 3.0.4-1
|
||||||
|
- Upgrade version for openstack yoga
|
||||||
|
|
||||||
|
* Thu Aug 12 2021 OpenStack_SIG <openstack@openeuler.org> - 2.0.1-1
|
||||||
|
- Add BuildRequires and Requires
|
||||||
|
|
||||||
* Mon Aug 09 2021 OpenStack_SIG <openstack@openeuler.org> - 2.0.1-1
|
* Mon Aug 09 2021 OpenStack_SIG <openstack@openeuler.org> - 2.0.1-1
|
||||||
- Package Spec generate
|
- Package Spec generate
|
||||||
|
|||||||
4
python-moto.yaml
Normal file
4
python-moto.yaml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
version_control: github
|
||||||
|
src_repo: spulec/moto
|
||||||
|
tag_prefix: "v"
|
||||||
|
separator: "."
|
||||||
Loading…
x
Reference in New Issue
Block a user