diff options
-rw-r--r-- | github3/handlers/base.py | 32 | ||||
-rw-r--r-- | github3/handlers/users.py | 2 | ||||
-rw-r--r-- | github3/tests/handler_test.py | 24 |
3 files changed, 56 insertions, 2 deletions
diff --git a/github3/handlers/base.py b/github3/handlers/base.py index a85ce20..7bc55d2 100644 --- a/github3/handlers/base.py +++ b/github3/handlers/base.py @@ -4,6 +4,38 @@ from github3.core import Paginate from github3.converters import Modelizer + +class MimeTypeMixin(object): + + VERSION = 'beta' + + def __init__(self): + self.mimetypes = set() + + def _parse_mime_type(self, type): + return 'application/vnd.github.%s.%s+json' % ( + self.VERSION, type) + + def add_raw(self): + self.mimetypes.add(self._parse_mime_type('raw')) + return self + + def add_text(self): + self.mimetypes.add(self._parse_mime_type('text')) + return self + + def add_html(self): + self.mimetypes.add(self._parse_mime_type('html')) + return self + + def add_full(self): + self.mimetypes.add(self._parse_mime_type('full')) + return self + + def mime_header(self): + return {'Accept': ', '.join(self.mimetypes)} + + class Handler(object): """ Handler base. Requests to API and modelize responses """ diff --git a/github3/handlers/users.py b/github3/handlers/users.py index ec40f02..92eea6f 100644 --- a/github3/handlers/users.py +++ b/github3/handlers/users.py @@ -2,7 +2,7 @@ # -*- encoding: utf-8 -*- from .base import Handler -import github3.models as models +from github3 import models from github3.converters import Rawlizer from github3.exceptions import UserIsAnonymous diff --git a/github3/tests/handler_test.py b/github3/tests/handler_test.py index e691182..e95374b 100644 --- a/github3/tests/handler_test.py +++ b/github3/tests/handler_test.py @@ -4,7 +4,7 @@ from mock import Mock, patch from unittest import TestCase from github3 import api -from github3.handlers.base import Handler +from github3.handlers.base import Handler, MimeTypeMixin from github3.exceptions import * from github3.converters import * from github3.models.user import User @@ -13,6 +13,28 @@ import json import requests +class TestMimeTypeMixin(TestCase): + + def setUp(self): + self.mixin = MimeTypeMixin() + + def _parse_mime_type(self, type): + return 'application/vnd.github.%s.%s+json' % ( + MimeTypeMixin.VERSION, type) + + def test_add_mimetypes(self): + self.mixin.add_raw() + self.mixin.add_text() + self.mixin.add_html() + self.mixin.add_full() + self.assertEquals(sorted(self.mixin.mime_header()), sorted({ + 'Accept': '%s, %s, %s, %s' % ( + self._parse_mime_type('raw'), + self._parse_mime_type('text'), + self._parse_mime_type('html'), + self._parse_mime_type('full'))})) + + class TestHandler(TestCase): def setUp(self): |