Skip to content

Commit ca5f962

Browse files
committed
Swap out print statements for use of the logging library.
1 parent 8094a0b commit ca5f962

File tree

6 files changed

+68
-13
lines changed

6 files changed

+68
-13
lines changed

sc2reader/__init__.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
from __future__ import absolute_import
22

3-
from sc2reader import factories
3+
from sc2reader import factories, log_utils
4+
5+
# setup the library logging
6+
log_utils.setup()
47

58
# For backwards compatibility
69
SC2Reader = factories.SC2Factory

sc2reader/events.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22

33
from sc2reader.utils import Length, LITTLE_ENDIAN
44
from sc2reader.data.utils import DataObject
5+
from sc2reader import log_utils
56

67
class Event(object):
78
def __init__(self, frame, pid):
9+
self.logger = log_utils.get_logger(self.__class__)
810
self.pid = pid
911
self.frame = frame
1012
self.second = frame >> 4
@@ -125,11 +127,11 @@ def load_context(self, replay):
125127
if self.ability not in replay.datapack.abilities:
126128
if not getattr(replay, 'marked_error', None):
127129
replay.marked_error=True
128-
print replay.filename
129-
print "Release String: "+replay.release_string
130+
self.logger.error(replay.filename)
131+
self.logger.error("Release String: "+replay.release_string)
130132
for player in replay.players:
131-
print "\t"+str(player)
132-
print "[Error] {0}\t{1}\tMissing ability {2} from {3}".format(self.frame, self.player.name, hex(self.ability), replay.datapack.__class__.__name__)
133+
self.logger.error("\t"+str(player))
134+
self.logger.error("{0}\t{1}\tMissing ability {2} from {3}".format(self.frame, self.player.name, hex(self.ability), replay.datapack.__class__.__name__))
133135

134136
def __str__(self):
135137
if not self.ability:
@@ -153,7 +155,6 @@ def load_context(self, replay):
153155
self.target = replay.objects[(obj_id, obj_type)]
154156

155157
elif obj_id:
156-
#print "{0}:\t{1}\t{2}".format(self.frame << 2, self.player.name, hex(obj_type))
157158
if obj_type not in replay.datapack.types:
158159
self.target = DataObject(0x00)
159160
else:
@@ -221,8 +222,8 @@ def load_context(self, replay):
221222
data = replay.datapack
222223
for (obj_id, obj_type) in self.objects:
223224
if obj_type not in data.types:
224-
msg = "[Error] Unit Type {0} not found in {1}"
225-
print msg.format(hex(obj_type), data.__class__.__name__)
225+
msg = "Unit Type {0} not found in {1}"
226+
self.logger.error(msg.format(hex(obj_type), data.__class__.__name__))
226227
objects.append(DataObject(0x0))
227228

228229
else:

sc2reader/factories.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from sc2reader import data
1414
from sc2reader import exceptions
1515
from sc2reader import utils
16+
from sc2reader import log_utils
1617
from sc2reader.resources import Replay, Map
1718

1819
class SC2Factory(object):
@@ -82,6 +83,7 @@ class SC2Factory(object):
8283
def __init__(self, **options):
8384
self.reset()
8485
self.configure(**options)
86+
self.logger = log_utils.get_logger(self.__class__)
8587

8688
if self.options.get('register_defaults',None):
8789
self.register_defaults()
@@ -148,6 +150,7 @@ def load_resource(self, resource, options=None, **new_options):
148150

149151
if isinstance(resource, basestring):
150152
if re.match(r'https?://',resource):
153+
self.logger.info("Fetching remote resource: "+resource)
151154
contents = urllib2.urlopen(resource).read()
152155

153156
else:

sc2reader/log_utils.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import logging
2+
3+
LEVEL_MAP = dict(
4+
DEBUG=logging.DEBUG,
5+
INFO=logging.INFO,
6+
WARN=logging.WARN,
7+
ERROR=logging.ERROR,
8+
CRITICAL=logging.CRITICAL
9+
)
10+
11+
def setup():
12+
logging.getLogger('sc2reader').addHandler(logging.NullHandler())
13+
14+
def log_to_file(filename, level='WARN', format=None, datefmt=None, **options):
15+
add_log_handler(logging.FileHandler(filename, **options),level, format, datefmt)
16+
17+
def log_to_console(level='WARN', format=None, datefmt=None, **options):
18+
add_log_handler(logging.StreamHandler(**options),level, format, datefmt)
19+
20+
def add_log_handler(handler, level='WARN', format=None, datefmt=None):
21+
handler.setFormatter(logging.Formatter(format, datefmt))
22+
23+
if isinstance(level, basestring):
24+
level = LEVEL_MAP[level]
25+
26+
logger = logging.getLogger('sc2reader')
27+
logger.setLevel(level)
28+
logger.addHandler(handler)
29+
30+
def get_logger(entity):
31+
"""
32+
Retrieves loggers from the enties fully scoped name. Accepts strings,
33+
classes, and functions.
34+
35+
get_logger(Replay) -> sc2reader.replay.Replay
36+
get_logger(__name__) -> sc2reader.utils
37+
get_logger(get_logger) -> sc2reader.utils.get_logger
38+
39+
:param entity: The entity for which we want a logger.
40+
"""
41+
try:
42+
if isinstance(entity, basestring):
43+
return logging.getLogger(entity)
44+
else:
45+
return logging.getLogger(entity.__module__+'.'+entity.__name__)
46+
47+
except AttributeError as e:
48+
msg = "Cannot retrieve logger for {0}. Only strings, classes, and functions supported."
49+
raise TypeError(msg.format(entity))

sc2reader/objects.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,7 @@ class Team(object):
1919
"""
2020
The team object primarily a container object for organizing :class:`Player`
2121
objects with some metadata. As such, it implements iterable and can be
22-
looped over like a list::
23-
24-
for player in team:
25-
print player
22+
looped over like a list.
2623
2724
:param interger number: The team number as recorded in the replay
2825
"""

sc2reader/resources.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@
88
from mpyq import MPQArchive
99

1010
from sc2reader import utils
11+
from sc2reader import log_utils
1112
from sc2reader.objects import Player, Observer, Team
1213
from sc2reader.constants import REGIONS, LOCALIZED_RACES, GAME_SPEED_FACTOR
1314

1415

1516
class Resource(object):
1617
def __init__(self, file_object, filename=None, **options):
1718
self.opt = utils.AttributeDict(options)
19+
self.logger = log_utils.get_logger(self.__class__)
1820
self.filename = filename or getattr(file_object,'name','Unavailable')
1921

2022
file_object.seek(0)
@@ -152,7 +154,7 @@ def read_data(self, data_file, reader):
152154
elif self.opt.debug:
153155
raise ValueError("{0} not found in archive".format(data_file))
154156
else:
155-
print "[Error] {0} not found in archive".format(data_file)
157+
self.logger.error("{0} not found in archive".format(data_file))
156158

157159
def load_details(self):
158160
if 'replay.initData' in self.raw_data:

0 commit comments

Comments
 (0)