Skip to content

Commit fb46eeb

Browse files
get_default_session
1 parent 1f101a7 commit fb46eeb

5 files changed

Lines changed: 31 additions & 20 deletions

File tree

coreapi/__init__.py

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
from coreapi.document import Array, Document, Link, Object, Error, required
44
from coreapi.document import dotted_path_to_list
55
from coreapi.exceptions import ParseError, TransportError, ErrorMessage
6-
from coreapi.sessions import DefaultSession
6+
from coreapi.sessions import Session
7+
from coreapi.transport import HTTPTransport
78

89

910
__version__ = '1.1.0'
@@ -14,33 +15,43 @@
1415
'dotted_path_to_list',
1516
'ParseError', 'NotAcceptable', 'TransportError', 'ErrorMessage',
1617
'HTTPTransport',
17-
'load', 'dump', 'get'
18+
'load', 'dump', 'get', 'get_default_session'
1819
]
1920

2021

22+
_default_session = Session(
23+
codecs=[CoreJSONCodec(), HTMLCodec()],
24+
transports=[HTTPTransport()]
25+
)
26+
27+
28+
def get_default_session():
29+
return _default_session
30+
31+
2132
def negotiate_encoder(accept=None):
22-
session = DefaultSession()
33+
session = _default_session
2334
return session.negotiate_encoder(accept)
2435

2536

2637
def negotiate_decoder(content_type=None):
27-
session = DefaultSession()
38+
session = _default_session
2839
return session.negotiate_decoder(content_type)
2940

3041

3142
def get(url):
32-
session = DefaultSession()
43+
session = _default_session
3344
return session.transition(url, 'get')
3445

3546

3647
def load(bytestring, content_type=None):
37-
session = DefaultSession()
48+
session = _default_session
3849
codec = session.negotiate_decoder(content_type)
3950
return codec.load(bytestring)
4051

4152

4253
def dump(document, accept=None, **kwargs):
43-
session = DefaultSession()
54+
session = _default_session
4455
codec = session.negotiate_encoder(accept)
4556
content = codec.dump(document, **kwargs)
4657
return codec.media_type, content

coreapi/document.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ def _default_link_func(document, link, **parameters):
2020
When calling a link the default behavior is to call through
2121
to the HTTP transport layer.
2222
"""
23-
from coreapi.sessions import DefaultSession
24-
session = DefaultSession()
23+
from coreapi import get_default_session
24+
session = get_default_session()
2525
return session.transition(link.url, link.action, parameters=parameters)
2626

2727

coreapi/sessions.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
from coreapi.codecs import CoreJSONCodec, HTMLCodec
21
from coreapi.compat import urlparse
3-
from coreapi.transport import HTTPTransport
42
from coreapi.exceptions import NotAcceptable, ParseError, TransportError
3+
import itypes
54

65

7-
class DefaultSession(object):
8-
codecs = [CoreJSONCodec(), HTMLCodec()]
9-
transports = [HTTPTransport()]
6+
class Session(object):
7+
def __init__(self, codecs, transports):
8+
self.codecs = itypes.List(codecs)
9+
self.transports = itypes.List(transports)
1010

1111
def get_accept_header(self):
1212
"""

coreapi/transport.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ class HTTPTransport(object):
88
schemes = ['http', 'https']
99

1010
def transition(self, url, action=None, parameters=None):
11-
from coreapi.sessions import DefaultSession
12-
session = DefaultSession()
11+
from coreapi import get_default_session
12+
session = get_default_session()
1313

1414
method = 'GET' if (action is None) else action.upper()
1515
accept = session.get_accept_header()

tests/test_transport.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# coding: utf-8
2+
from coreapi import get_default_session
23
from coreapi.exceptions import TransportError
3-
from coreapi.sessions import DefaultSession
44
from coreapi.transport import HTTPTransport
55
import pytest
66
import requests
@@ -20,19 +20,19 @@ def __init__(self, content):
2020
# Test transport errors.
2121

2222
def test_unknown_scheme():
23-
session = DefaultSession()
23+
session = get_default_session()
2424
with pytest.raises(TransportError):
2525
session.transition('ftp://example.org')
2626

2727

2828
def test_missing_scheme():
29-
session = DefaultSession()
29+
session = get_default_session()
3030
with pytest.raises(TransportError):
3131
session.transition('example.org')
3232

3333

3434
def test_missing_hostname():
35-
session = DefaultSession()
35+
session = get_default_session()
3636
with pytest.raises(TransportError):
3737
session.transition('http://')
3838

0 commit comments

Comments
 (0)