Source code for IGitt.Jira

"""
This package contains the JIRA implementations of the interfaces in
server.git.Interfaces.
"""
from urllib.parse import urljoin
import logging
import os

from oauthlib.oauth1 import SIGNATURE_RSA
from requests_oauthlib import OAuth1

from IGitt.Interfaces import get
from IGitt.Interfaces import Token
from IGitt.Utils import CachedDataMixin
from tests import PRIVATE_KEY


JIRA_INSTANCE_URL = os.environ.get('JIRA_INSTANCE_URL',
                                   'https://jira.atlassian.com')
BASE_URL = urljoin(JIRA_INSTANCE_URL, '/rest/api/2')
JIRA_RSA_PRIVATE_KEY_PATH = os.environ.get('JIRA_RSA_PRIVATE_KEY_PATH')
JIRA_RSA_PRIVATE_KEY = PRIVATE_KEY
try:
    JIRA_RSA_PRIVATE_KEY = open(JIRA_RSA_PRIVATE_KEY_PATH, 'r').read().strip()
except (FileNotFoundError, TypeError):
    logging.warning('JIRA REST APIs work only with key signing, please '
                    'include the correct path to your registered RSA private '
                    'key.')


[docs]class JiraMixin(CachedDataMixin): """ Base object for all things on Jira. """ def _get_data(self): return get(self._token, self.url)
[docs] @staticmethod def absolute_url(url): """ Builds an absolute URL from the base URL and specified url. """ return BASE_URL + url
@property def hoster(self): """ Returns `jira`. """ return 'jira' @property def url(self): """ Returns JIRA API url. """ return self.absolute_url(self._url) @property def web_url(self): """ Returns the web link for the corresponding JIRA object. """ raise NotImplementedError def __repr__(self): # dont cover return '<{} object(url={}) at {}>'.format(self.__class__.__name__, self.url, hex(id(self)))
[docs]class JiraOAuth1Token(Token): """ Object representation of JIRA OAuth v1.0 token. """ def __init__(self, client_key, key, secret): self.client_key = client_key self.key = key self.secret = secret @property def headers(self): return {} @property def parameter(self): return {} @property def value(self): return {'client_key': self.client_key, 'oauth_token': self.key, 'oauth_token_secret': self.secret} @property def auth(self): return OAuth1(self.client_key, rsa_key=JIRA_RSA_PRIVATE_KEY, resource_owner_key=self.key, resource_owner_secret=self.secret, signature_method=SIGNATURE_RSA, signature_type='auth_header')