Skip to content

Commit 58ce220

Browse files
committed
add python3 support
1 parent 9c472af commit 58ce220

10 files changed

Lines changed: 30 additions & 23 deletions

File tree

setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
classifiers = [
1818
"Programming Language :: Python",
1919
"Programming Language :: Python :: 2",
20+
"Programming Language :: Python :: 3",
2021
"License :: OSI Approved :: BSD License",
2122
"Development Status :: 4 - Beta",
2223
"Intended Audience :: Developers",

sifter/comparators/ascii_casemap.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
11
import string
2+
try:
3+
# Python 3
4+
maketrans = str.maketrans
5+
except AttributeError:
6+
# Python 2
7+
maketrans = string.maketrans
28

39
from sifter.comparators.octet import ComparatorOctet
410

@@ -10,7 +16,6 @@ class ComparatorASCIICasemap(ComparatorOctet):
1016

1117
@classmethod
1218
def sort_key(cls, s):
13-
return s.translate(string.maketrans(string.ascii_lowercase,
14-
string.ascii_uppercase))
19+
return s.upper()
1520

1621
ComparatorASCIICasemap.register()

sifter/extensions/builtin.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
import sifter.comparators.octet
2121

2222
import sifter.extension
23-
map(sifter.extension.register,
23+
list(map(sifter.extension.register,
2424
('fileinto',
2525
'comparator-i;ascii-casemap',
2626
'comparator-i;octet',
27-
))
27+
)))

sifter/grammar/command.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import sifter.grammar
2-
import rule
2+
from . import rule
33
import sifter.utils
44

55
__all__ = ('Command',)

sifter/grammar/rule.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,9 @@ def validate_arguments(self, tagged_args=None, positional_args=None):
5151
if not isinstance(self.arguments[i], sifter.grammar.Tag):
5252
break
5353
num_valid_args = 0
54-
for arg_name, arg_validator in tagged_args.iteritems():
54+
for arg_name, arg_validator in tagged_args.items():
5555
num_valid_args = arg_validator.validate(self.arguments, i)
56-
if num_valid_args > 0:
56+
if num_valid_args is not None and num_valid_args > 0:
5757
if arg_name in seen_args:
5858
raise RuleSyntaxError(
5959
"%s argument to %s was already seen earlier: %s"

sifter/grammar/test.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import rule
1+
from . import rule
22

33
__all__ = ('Test',)
44

sifter/t/test_evaluation.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import email
22
import os.path
33
import unittest
4+
import codecs
45

56
import sifter.parser
67

@@ -21,12 +22,12 @@ def setUp(self):
2122
self.messages = {}
2223
self.rules = {}
2324
for result in self.EVAL_RESULTS:
24-
msg_fh = open(os.path.join(os.path.dirname(__file__), result[0]))
25-
self.messages.setdefault(result[0], email.message_from_file(msg_fh))
26-
msg_fh.close()
27-
rule_fh = open(os.path.join(os.path.dirname(__file__), result[1]))
28-
self.rules.setdefault(result[1], sifter.parser.parse_file(rule_fh))
29-
rule_fh.close()
25+
with codecs.open(os.path.join(os.path.dirname(__file__), result[0]),
26+
encoding='utf-8') as msg_fh:
27+
self.messages.setdefault(result[0], email.message_from_file(msg_fh))
28+
with codecs.open(os.path.join(os.path.dirname(__file__), result[1]),
29+
encoding='utf-8') as rule_fh:
30+
self.rules.setdefault(result[1], sifter.parser.parse_file(rule_fh))
3031

3132
def test_msg_rule_cross_product(self):
3233
for result in self.EVAL_RESULTS:

sifter/t/test_parser.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
import os.path
22
import unittest
3+
import codecs
34

45
import sifter.parser
56

67
class TestParseFile(unittest.TestCase):
78

89
def test_files(self):
910
for in_filename, golden_filename in (("parser_1.in", "parser_1.out"),):
10-
in_fh = open(os.path.join(os.path.dirname(__file__), in_filename))
11-
test_output = str(sifter.parser.parse_file(in_fh))
12-
in_fh.close()
13-
golden_fh = open(os.path.join(os.path.dirname(__file__),
14-
golden_filename))
15-
golden_output = golden_fh.read()
16-
golden_fh.close()
11+
with codecs.open(os.path.join(os.path.dirname(__file__), in_filename),
12+
encoding='utf-8') as in_fh:
13+
test_output = str(sifter.parser.parse_file(in_fh))
14+
with codecs.open(os.path.join(os.path.dirname(__file__), golden_filename),
15+
encoding='utf-8') as golden_fh:
16+
golden_output = golden_fh.read()
1717
self.assertEqual(test_output, golden_output)
1818

1919
if __name__ == '__main__':

sifter/validators/stringlist.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def validate(self, arg_list, starting_index):
1414
arg = arg_list[starting_index]
1515

1616
if not (isinstance(arg, list)
17-
and all(isinstance(list_member, basestring)
17+
and all(isinstance(list_member, (str, bytes))
1818
for list_member in arg)):
1919
return 0
2020
if self.length is not None and len(arg) != self.length:

sifter/validators/tag.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ class Tag(sifter.grammar.Validator):
88

99
def __init__(self, allowed_tags=None, tag_arg_validators=None):
1010
super(Tag, self).__init__()
11-
if isinstance(allowed_tags, basestring):
11+
if isinstance(allowed_tags, (str, bytes)):
1212
self.allowed_tags = [ allowed_tags ]
1313
else:
1414
self.allowed_tags = allowed_tags

0 commit comments

Comments
 (0)