resource-retriever: backport python3 compatibility patch
The added patch makes resource-retriever compatible with python3. Also drop python-urlgrabber which resource-retriever used to depend on. Signed-off-by: Dmitry Rozhkov <dmitry.rozhkov@linux.intel.com>
This commit is contained in:
parent
b4c015b4ea
commit
88ec37531a
|
@ -1,15 +0,0 @@
|
|||
DESCRIPTION = "A high-level cross-protocol url-grabber"
|
||||
SECTION = "devel/python"
|
||||
LICENSE = "LGPL-2.1"
|
||||
LIC_FILES_CHKSUM = "file://LICENSE;md5=68ad62c64cc6c620126241fd429e68fe"
|
||||
SRCNAME = "urlgrabber"
|
||||
|
||||
DEPENDS = "python-pycurl-native python-pycurl"
|
||||
|
||||
SRC_URI = "https://pypi.python.org/packages/source/u/${SRCNAME}/${SRCNAME}-${PV}.tar.gz"
|
||||
SRC_URI[md5sum] = "00c8359bf71062d0946bacea521f80b4"
|
||||
SRC_URI[sha256sum] = "4437076c8708e5754ea04540e46c7f4f233734ee3590bb8a96389264fb0650d0"
|
||||
|
||||
S = "${WORKDIR}/${SRCNAME}-${PV}"
|
||||
|
||||
inherit distutils
|
|
@ -0,0 +1,141 @@
|
|||
From 2105ad5c201bacd9860ad21fa3b4de96eed0e124 Mon Sep 17 00:00:00 2001
|
||||
From: Ruben Smits <ruben.smits@intermodalics.eu>
|
||||
Date: Mon, 13 Feb 2017 18:02:23 +0100
|
||||
Subject: [PATCH] Python3 compatibility (#10)
|
||||
|
||||
* Replace urlgrabber with urllib[2]
|
||||
|
||||
As urlgrabber is not supported for Python 3 replace it with either the built-in urllib (Python 2) or urllib2 (Python 3)
|
||||
|
||||
* Use rospkg instead of system call for rospack
|
||||
|
||||
* Add test for python functionality
|
||||
|
||||
* Fix rospkg dependency definition
|
||||
|
||||
Upstream-Status: Backported
|
||||
---
|
||||
package.xml | 2 +-
|
||||
src/resource_retriever/__init__.py | 26 ++++++++++++++------------
|
||||
test/CMakeLists.txt | 2 ++
|
||||
test/test.py | 36 ++++++++++++++++++++++++++++++++++++
|
||||
4 files changed, 53 insertions(+), 13 deletions(-)
|
||||
create mode 100644 test/test.py
|
||||
|
||||
diff --git a/package.xml b/package.xml
|
||||
index fc1d789..4b447dc 100644
|
||||
--- a/package.xml
|
||||
+++ b/package.xml
|
||||
@@ -28,6 +28,6 @@
|
||||
<run_depend>curl</run_depend>
|
||||
<run_depend>rosconsole</run_depend>
|
||||
<run_depend>roslib</run_depend>
|
||||
- <run_depend>python-urlgrabber</run_depend>
|
||||
+ <run_depend>python-rospkg</run_depend>
|
||||
|
||||
</package>
|
||||
diff --git a/src/resource_retriever/__init__.py b/src/resource_retriever/__init__.py
|
||||
index d92baca..747a63f 100644
|
||||
--- a/src/resource_retriever/__init__.py
|
||||
+++ b/src/resource_retriever/__init__.py
|
||||
@@ -33,17 +33,16 @@
|
||||
|
||||
import roslib; roslib.load_manifest('resource_retriever')
|
||||
import subprocess
|
||||
-import urlgrabber, string
|
||||
+import rospkg
|
||||
+try:
|
||||
+ from urllib.request import urlopen
|
||||
+ from urllib.error import URLError
|
||||
+except ImportError:
|
||||
+ from urllib2 import urlopen
|
||||
+ from urllib2 import URLError
|
||||
|
||||
PACKAGE_PREFIX = 'package://'
|
||||
-
|
||||
-def rospack_find(package):
|
||||
- process = subprocess.Popen(['rospack', 'find', package], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
- (stdout, stderr) = process.communicate()
|
||||
- if len(stderr) > 0:
|
||||
- raise Exception(stderr)
|
||||
- else:
|
||||
- return string.strip(stdout)
|
||||
+r = rospkg.RosPack()
|
||||
|
||||
def get_filename(url, use_protocol=True ):
|
||||
mod_url = url
|
||||
@@ -55,7 +54,7 @@ def get_filename(url, use_protocol=True ):
|
||||
|
||||
package = mod_url[0:pos]
|
||||
mod_url = mod_url[pos:]
|
||||
- package_path = rospack_find(package)
|
||||
+ package_path = r.get_path(package)
|
||||
|
||||
if use_protocol:
|
||||
protocol = "file://"
|
||||
@@ -65,5 +64,8 @@ def get_filename(url, use_protocol=True ):
|
||||
return mod_url
|
||||
|
||||
def get(url):
|
||||
- return urlgrabber.urlopen(get_filename(url))
|
||||
-
|
||||
+ filename = get_filename(url)
|
||||
+ try:
|
||||
+ return urlopen(filename).read()
|
||||
+ except URLError:
|
||||
+ raise Exception("Invalid URL: {}".format(filename))
|
||||
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
|
||||
index f133bf6..e311f59 100644
|
||||
--- a/test/CMakeLists.txt
|
||||
+++ b/test/CMakeLists.txt
|
||||
@@ -2,3 +2,5 @@ set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR})
|
||||
|
||||
catkin_add_gtest(${PROJECT_NAME}_utest test.cpp)
|
||||
target_link_libraries(${PROJECT_NAME}_utest ${PROJECT_NAME})
|
||||
+
|
||||
+catkin_add_nosetests(test.py)
|
||||
diff --git a/test/test.py b/test/test.py
|
||||
new file mode 100644
|
||||
index 0000000..ce1843f
|
||||
--- /dev/null
|
||||
+++ b/test/test.py
|
||||
@@ -0,0 +1,36 @@
|
||||
+import resource_retriever as r
|
||||
+
|
||||
+import os
|
||||
+import rospkg
|
||||
+from nose.tools import raises
|
||||
+
|
||||
+rospack = rospkg.RosPack()
|
||||
+
|
||||
+def test_get_by_package():
|
||||
+ res = r.get("package://resource_retriever/test/test.txt")
|
||||
+ assert len(res) == 1
|
||||
+ assert res == 'A'.encode()
|
||||
+
|
||||
+def test_get_large_file():
|
||||
+ res_path = os.path.join(rospack.get_path("resource_retriever"), "test/large_file.dat")
|
||||
+ with open(res_path, 'w') as f:
|
||||
+ for _ in range(1024*1024*50):
|
||||
+ f.write('A')
|
||||
+ res = r.get("package://resource_retriever/test/large_file.dat")
|
||||
+ assert len(res) == 1024*1024*50
|
||||
+
|
||||
+def test_http():
|
||||
+ res = r.get("http://packages.ros.org/ros.key")
|
||||
+ assert len(res) > 0
|
||||
+
|
||||
+@raises(Exception)
|
||||
+def test_invalid_file():
|
||||
+ r.get("file://fail")
|
||||
+
|
||||
+@raises(Exception)
|
||||
+def test_no_file():
|
||||
+ r.get("package://roscpp")
|
||||
+
|
||||
+@raises(rospkg.common.ResourceNotFound)
|
||||
+def test_invalid_package():
|
||||
+ r.get("package://invalid_package_blah/test.xml")
|
||||
--
|
||||
2.9.3
|
||||
|
|
@ -6,7 +6,9 @@ LIC_FILES_CHKSUM = "file://package.xml;beginline=16;endline=16;md5=d566ef916e9de
|
|||
|
||||
DEPENDS = "curl rosconsole roslib"
|
||||
|
||||
SRC_URI = "https://github.com/ros/${ROS_SPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_SP}.tar.gz"
|
||||
SRC_URI = "https://github.com/ros/${ROS_SPN}/archive/${PV}.tar.gz;downloadfilename=${ROS_SP}.tar.gz \
|
||||
file://0001-Python3-compatibility-10.patch \
|
||||
"
|
||||
SRC_URI[md5sum] = "1dffd39475ebe70b14390889d3b4b3c4"
|
||||
SRC_URI[sha256sum] = "5f00e95c5a086973efa25e26da9cee8f4b10b446fbb5eb6694b32b2201539866"
|
||||
|
||||
|
@ -14,4 +16,4 @@ S = "${WORKDIR}/${ROS_SP}"
|
|||
|
||||
inherit catkin
|
||||
|
||||
RDEPENDS_${PN} = "python-urlgrabber"
|
||||
RDEPENDS_${PN} = "${PYTHON_PN}-rospkg"
|
||||
|
|
Loading…
Reference in New Issue