Skip to content

Commit 5f5c8a0

Browse files
committed
Minor improvements for porting to Python 3
1 parent ae64628 commit 5f5c8a0

File tree

7 files changed

+33
-20
lines changed

7 files changed

+33
-20
lines changed

odml/__init__.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
1-
_property = property
21
import sys
32
from odml import doc
43
from odml import property
54
from odml import section
65
from odml import value
76
from odml.dtypes import DType
87

8+
# the original property-function is overwritten
9+
# so get it back!
10+
try:
11+
from builtins import property as _property
12+
except ImportError:
13+
from __builtin__ import property as _property
914

1015
class odml_implementation(object):
1116
name = None

odml/base.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,12 @@ def __ne__(self, obj):
5454
"""
5555
return not self == obj
5656

57+
def __hash__(self):
58+
'''
59+
Define a default hash function for all odML objects
60+
'''
61+
return id(self)
62+
5763
def clean(self):
5864
"""
5965
stub that doesn't do anything for this class

odml/dtypes.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -291,12 +291,12 @@ def calculate_crc32_checksum(data):
291291
}
292292

293293
# allow to use any available algorithm
294-
if sys.version_info > (3, 0):
295-
for algo in hashlib.algorithms_guaranteed:
296-
checksums[algo] = lambda data, func=getattr(hashlib, algo): func(data).hexdigest()
297-
elif not sys.version_info < (2, 7):
298-
for algo in hashlib.algorithms:
299-
checksums[algo] = lambda data, func=getattr(hashlib, algo): func(data).hexdigest()
294+
try:
295+
hash_algorithms = hashlib.algoritms
296+
except AttributeError:
297+
hash_algorithms = hashlib.algorithms_guaranteed
298+
for algo in hash_algorithms:
299+
checksums[algo] = lambda data, func=getattr(hashlib, algo): func(data).hexdigest()
300300

301301

302302
def valid_checksum_type(checksum_type):

odml/format.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def revmap(self, name):
1818
if self._rev_map is None:
1919
# create the reverse map only if requested
2020
self._rev_map = {}
21-
for k, v in self._map.iteritems():
21+
for k, v in self._map.items():
2222
self._rev_map[v] = k
2323
return self._rev_map.get(name, name)
2424

odml/terminology.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@
99
import odml.tools.xmlparser
1010
from hashlib import md5
1111
py3 = True
12+
1213
try:
13-
import urllib.request as urllib2
14+
from urllib.request import urlopen
1415
except ImportError:
15-
import urllib2
16-
py3 = False
16+
from urllib import urlopen
17+
1718
import threading
1819

1920
CACHE_AGE = datetime.timedelta(days=1)
@@ -24,7 +25,7 @@ def cache_load(url):
2425
load the url and store it in a temporary cache directory
2526
subsequent requests for this url will use the cached version
2627
"""
27-
filename = '.'.join([md5(url.encode()).hexdigest(), os.path.basename(url)])
28+
filename = md5(url.encode()).hexdigest() + os.path.basename(url)
2829
cache_dir = os.path.join(tempfile.gettempdir(), "odml.cache")
2930
if not os.path.exists(cache_dir):
3031
try:
@@ -37,16 +38,15 @@ def cache_load(url):
3738
or datetime.datetime.fromtimestamp(os.path.getmtime(cache_file)) < \
3839
datetime.datetime.now() - CACHE_AGE:
3940
try:
40-
data = urllib2.urlopen(url).read().decode("latin1")
41+
data = urlopen(url).read().decode("utf-8")
4142
except Exception as e:
42-
print("failed loading '%s': %s" % (url, e))
43+
print("Failed loading '%s': %s" % (url, e))
4344
return
45+
4446
fp = open(cache_file, "w")
45-
if py3:
46-
fp.write(data)
47-
else:
48-
fp.write(data.encode('latin1'))
47+
fp.write(data)
4948
fp.close()
49+
5050
return open(cache_file)
5151

5252

@@ -74,7 +74,7 @@ def _load(self, url):
7474
# if url.startswith("http"): return None
7575
fp = cache_load(url)
7676
if fp is None:
77-
print("did not successfully load '%s'" % url)
77+
print("Did not successfully load '%s'" % url)
7878
return
7979
try:
8080
term = odml.tools.xmlparser.XMLReader(filename=url, ignore_errors=True).fromFile(fp)

odml/tools/nodes.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ def next(self):
7878
except IndexError:
7979
return None
8080

81+
__next__ = next
82+
8183
@property
8284
def position(self):
8385
return self.parent.path_to(self)[-1]

odml/validation.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ def section_repository_should_be_present(sec):
124124
try:
125125
tsec = sec.get_terminology_equivalent()
126126
except Exception as e:
127-
yield ValidationError(sec, 'Could not load terminology: ' + e.message, 'warning')
127+
yield ValidationError(sec, 'Could not load terminology: ' + e, 'warning')
128128
return
129129

130130
if tsec is None:

0 commit comments

Comments
 (0)