Skip to content

Commit aea74af

Browse files
committed
WIP: centralized logging, removed LoggerMixin for surf
1 parent 1caf4da commit aea74af

File tree

22 files changed

+216
-269
lines changed

22 files changed

+216
-269
lines changed

examples/dbpedia.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import surf
22

3-
store = surf.Store(reader = 'sparql_protocol',
4-
endpoint = 'http://dbpedia.org/sparql',
5-
default_graph = 'http://dbpedia.org')
3+
store = surf.Store(reader='sparql_protocol',
4+
endpoint='http://dbpedia.org/sparql',
5+
default_graph='http://dbpedia.org')
66

77
print 'Create the session'
88
session = surf.Session(store, {})
9-
session.enable_logging = False
9+
# session.log_level = False
1010

1111
PhilCollinsAlbums = session.get_class(surf.ns.YAGO['PhilCollinsAlbums'])
1212

@@ -24,5 +24,5 @@
2424
if a.dbpedia_name and a.dbpedia_cover:
2525
# Resource attributes are list-like, with convenience
2626
# properties "first" and "one".
27-
print '\tCover %s for "%s"' % (a.dbpedia_cover.first,
27+
print '\tCover %s for "%s"' % (a.dbpedia_cover.first,
2828
a.dbpedia_name.first)

examples/rdflib_example.py

+9-4
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
import surf
2+
from surf.log import setup_logger, set_logger_level
3+
import logging
24

3-
store = surf.Store(reader = "rdflib",
4-
writer = "rdflib",
5-
rdflib_store = "IOMemory")
5+
setup_logger()
6+
set_logger_level(logging.DEBUG)
7+
8+
store = surf.Store(reader="rdflib",
9+
writer="rdflib",
10+
rdflib_store="IOMemory")
611

712
session = surf.Session(store)
813

914
print "Load RDF data"
10-
store.load_triples(source = "http://www.w3.org/People/Berners-Lee/card.rdf")
15+
store.load_triples(source="http://www.w3.org/People/Berners-Lee/card.rdf")
1116

1217
Person = session.get_class(surf.ns.FOAF["Person"])
1318

plugins/surf.allegro_franz/allegro_franz/reader.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
# -*- coding: utf-8 -*-
3636
__author__ = 'Cosmin Basca'
3737

38+
from surf.log import *
3839
from surf.plugin.query_reader import RDFQueryReader
3940
from allegro_franz.util import toRdfLib
4041
from surf.rdf import URIRef
@@ -102,18 +103,18 @@ def _execute(self, query):
102103
return self.__execute_ask(unicode(query))
103104

104105
def __execute_ask(self, q_string):
105-
self.log.debug(q_string)
106+
debug(q_string)
106107
boolQuery = self.__con.prepareBooleanQuery(QueryLanguage.SPARQL, q_string)
107108
return boolQuery.evaluate()
108109

109110
def __execute_select(self, q_string):
110-
self.log.debug(q_string)
111+
debug(q_string)
111112
tupleQuery = self.__con.prepareTupleQuery(QueryLanguage.SPARQL, q_string)
112113
tupleQuery.setIncludeInferred(self.inference)
113114
return tupleQuery.evaluate()
114115

115116
def execute_sparql(self, q_string, format = 'JSON'):
116-
self.log.debug(q_string)
117+
debug(q_string)
117118
tupleQuery = self.__con.prepareQuery(QueryLanguage.SPARQL, q_string)
118119
tupleQuery.setIncludeInferred(self.inference)
119120
# Do some magic as Franz's API doesn't provide a unified API for

plugins/surf.allegro_franz/allegro_franz/writer.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
__author__ = 'Cosmin Basca'
3737

3838

39+
from surf.log import *
3940
from surf.plugin.writer import RDFWriter
4041

4142
from allegro_franz.reader import ReaderPlugin
@@ -125,11 +126,11 @@ def _remove_triple(self, s = None, p = None, o = None, context = None):
125126

126127
# used by the sesame api
127128
def __add(self, s = None, p = None, o = None, context = None):
128-
self.log.info('ADD TRIPLE: %s, %s, %s, %s' % (s, p, o, context))
129+
info('ADD TRIPLE: %s, %s, %s, %s' % (s, p, o, context))
129130
self.__con.addTriple(toSesame(s, self.__f), toSesame(p, self.__f), toSesame(o, self.__f), contexts = toSesame(context, self.__f))
130131

131132
def __remove(self, s = None, p = None, o = None, context = None):
132-
self.log.info('REM TRIPLE: %s, %s, %s, %s' % (s, p, o, context))
133+
info('REM TRIPLE: %s, %s, %s, %s' % (s, p, o, context))
133134
self.__con.removeTriples(toSesame(s, self.__f), toSesame(p, self.__f), toSesame(o, self.__f), contexts = toSesame(context, self.__f))
134135

135136
def index_triples(self, **kwargs):

plugins/surf.sesame2/sesame2/reader.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,13 @@
3333
# OF THE POSSIBILITY OF SUCH DAMAGE.
3434

3535
# -*- coding: utf-8 -*-
36-
__author__ = 'Cosmin Basca'
37-
38-
36+
from surf.log import *
3937
from surf.util import json_to_rdflib
4038
from surf.plugin.query_reader import RDFQueryReader
4139
from allegro import Allegro
4240

41+
__author__ = 'Cosmin Basca'
42+
4343

4444
class ReaderPlugin(RDFQueryReader):
4545
def __init__(self, *args, **kwargs):
@@ -51,7 +51,7 @@ def __init__(self, *args, **kwargs):
5151
self.__repository = kwargs['repository'] if 'repository' in kwargs else None
5252
self.__use_allegro_extensions = kwargs['use_allegro_extensions'] if 'use_allegro_extensions' in kwargs else False
5353

54-
self.log.info('INIT: %s, %s, %s, %s' % (self.server,
54+
info('INIT: %s, %s, %s, %s' % (self.server,
5555
self.port,
5656
self.root_path,
5757
self.repository_path))
@@ -61,7 +61,7 @@ def __init__(self, *args, **kwargs):
6161

6262
if self.__use_allegro_extensions:
6363
opened = self.get_allegro().open_repository(self.repository)
64-
self.log.info('ALLEGRO repository opened: %s' % opened)
64+
info('ALLEGRO repository opened: %s' % opened)
6565

6666
server = property(lambda self: self.__server)
6767
port = property(lambda self: self.__port)
@@ -106,7 +106,7 @@ def _execute(self, query):
106106

107107
def execute_sparql(self, query, format='JSON'):
108108
try:
109-
self.log.debug(query)
109+
debug(query)
110110
result = self.get_allegro().sparql_query(self.repository,
111111
query,
112112
infer = self.inference,
@@ -118,7 +118,7 @@ def execute_sparql(self, query, format='JSON'):
118118
return result
119119

120120
except Exception, e:
121-
self.log.exception("Exception on query")
121+
error("Exception on query")
122122

123123
def close(self):
124124
pass

plugins/surf.sesame2/sesame2/writer.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,15 @@
3333
# OF THE POSSIBILITY OF SUCH DAMAGE.
3434

3535
# -*- coding: utf-8 -*-
36-
__author__ = 'Cosmin Basca'
37-
38-
36+
from surf.log import *
3937
from surf.plugin.writer import RDFWriter
4038
from allegro import Allegro
4139

4240
from surf.rdf import BNode, Literal, URIRef
4341
from reader import ReaderPlugin
4442

43+
__author__ = 'Cosmin Basca'
44+
4545

4646
class WriterPlugin(RDFWriter):
4747
def __init__(self, reader, *args, **kwargs):
@@ -62,7 +62,7 @@ def __init__(self, reader, *args, **kwargs):
6262
self.__repository = kwargs['repository'] if 'repository' in kwargs else None
6363
self.__use_allegro_extensions = kwargs['use_allegro_extensions'] if 'use_allegro_extensions' in kwargs else False
6464

65-
self.log.info('INIT: %s, %s, %s, %s' % (self.server,
65+
info('INIT: %s, %s, %s, %s' % (self.server,
6666
self.port,
6767
self.root_path,
6868
self.repository_path))
@@ -72,7 +72,7 @@ def __init__(self, reader, *args, **kwargs):
7272

7373
if self.__use_allegro_extensions:
7474
opened = self.get_allegro().open_repository(self.repository)
75-
self.log.info('ALLEGRO repository opened: ' + unicode(opened))
75+
info('ALLEGRO repository opened: ' + unicode(opened))
7676

7777
server = property(lambda self: self.__server)
7878
port = property(lambda self: self.__port)

surf/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,5 +49,5 @@
4949
NoResultFound
5050
from surf import namespace as ns
5151
from surf.__version__ import str_version, version
52-
from surf.log import deprecation, disable_root_logger, enable_root_logger, set_loglevel, surf_logger
52+
from surf.log import *
5353
from surf.plugin.manager import get_writer, get_reader

surf/log.py

+90-52
Original file line numberDiff line numberDiff line change
@@ -30,57 +30,95 @@
3030
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
3131
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
3232
# OF THE POSSIBILITY OF SUCH DAMAGE.
33-
import warnings
34-
import logging
35-
3633
__author__ = 'Cosmin Basca'
3734

38-
# TODO: create a global surf logger
39-
40-
__levels__ = {
41-
'debug' :logging.DEBUG,
42-
'info' :logging.INFO,
43-
'warning' :logging.WARNING,
44-
'error' :logging.ERROR,
45-
'critical' :logging.CRITICAL,
46-
}
47-
48-
surf_logger = logging.getLogger('surf')
49-
surf_logger.addHandler(logging.StreamHandler())
50-
surf_logger.setLevel(logging.INFO)
51-
52-
# enable deprecation warnings to show up
53-
#TODO: turn off when no more deprecated functions are in use!
54-
warnings.simplefilter('always')
55-
56-
def set_loglevel(level='info'):
57-
global surf_logger
58-
if isinstance(level, basestring):
59-
surf_logger.setLevel(__levels__.get(level, 'info'))
60-
else:
61-
surf_logger.setLevel(level)
62-
63-
def enable_root_logger():
64-
logging.root.disabled = False
65-
66-
def disable_root_logger():
67-
logging.root.disabled = True
68-
69-
def deprecation(message):
70-
warnings.warn(message, DeprecationWarning, stacklevel=2)
71-
72-
def deprecated(func):
73-
"""This is a decorator which can be used to mark functions
74-
as deprecated. It will result in a warning being emmitted
75-
when the function is used.
76-
77-
the function is included *as is* from:
78-
http://code.activestate.com/recipes/391367/"""
79-
def newFunc(*args, **kwargs):
80-
warnings.warn("Call to deprecated function %s." % func.__name__,
81-
category=DeprecationWarning)
82-
return func(*args, **kwargs)
83-
newFunc.__name__ = func.__name__
84-
newFunc.__doc__ = func.__doc__
85-
newFunc.__dict__.update(func.__dict__)
86-
return newFunc
35+
LOGGER_NAME = 'surf'
36+
37+
_logger = None
38+
39+
DISABLED = 100
40+
CRITICAL = 50
41+
ERROR = 40
42+
WARNING = 30
43+
INFO = 20
44+
DEBUG = 10
45+
NOTSET = 0
46+
47+
48+
def debug(msg, *args):
49+
if __debug__:
50+
if _logger:
51+
_logger.log(DEBUG, msg, *args)
52+
53+
54+
def info(msg, *args):
55+
if _logger:
56+
_logger.log(INFO, msg, *args)
57+
58+
59+
def warn(msg, *args):
60+
if _logger:
61+
_logger.log(WARNING, msg, *args)
62+
63+
64+
def error(msg, *args):
65+
if _logger:
66+
_logger.log(ERROR, msg, *args)
67+
68+
69+
def get_logger(name=LOGGER_NAME, handler=None):
70+
import logging
71+
72+
LOG_FORMAT = '%(asctime)s %(levelname)-8s %(name)-15s %(message)s'
73+
logging._acquireLock()
74+
try:
75+
# general setup
76+
formatter = logging.Formatter(LOG_FORMAT)
77+
78+
if not handler:
79+
handler = [logging.StreamHandler()]
80+
elif not isinstance(handler, (list, tuple)):
81+
handler = [handler]
82+
83+
logger = logging.getLogger(name)
84+
logger.propagate = 0
85+
for hndlr in handler:
86+
hndlr.setFormatter(formatter)
87+
logger.addHandler(hndlr)
88+
finally:
89+
logging._releaseLock()
90+
91+
return logger
92+
93+
94+
def setup_logger(name=LOGGER_NAME, handler=None):
95+
global _logger
96+
_logger = get_logger(name=name, handler=handler)
97+
98+
99+
def uninstall_logger():
100+
global _logger
101+
_logger = None
102+
103+
104+
def set_logger(logger):
105+
global _logger
106+
if logger:
107+
_logger = logger
108+
109+
110+
def set_logger_level(level, name=None):
111+
import logging
112+
113+
logging._acquireLock()
114+
try:
115+
logger = logging.getLogger(name) if name else logging.root
116+
if isinstance(level, basestring):
117+
level = level.upper()
118+
logger.setLevel(level)
119+
finally:
120+
logging._releaseLock()
121+
122+
123+
def disable_logger(name=None):
124+
set_logger_level(DISABLED, name=name)

surf/plugin/__init__.py

+1-4
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,10 @@
3636
from abc import ABCMeta
3737
import logging
3838

39-
from surf.util import LogMixin
40-
4139
__author__ = 'Cosmin Basca'
4240

4341

44-
class Plugin(LogMixin):
42+
class Plugin(object):
4543
"""
4644
Super class for all SuRF plugins, provides basic instantiation and `logging`.
4745
"""
@@ -50,7 +48,6 @@ class Plugin(LogMixin):
5048

5149
def __init__(self, *args, **kwargs):
5250
super(Plugin, self).__init__()
53-
self.log_level = logging.NOTSET
5451
self._inference = False
5552

5653
def close(self):

0 commit comments

Comments
 (0)