lib/integrations: Add stream_name attribute to Integration.

Instead of using the name of the integration as a recommended
stream name in its documentation, the Integration object now
has a dedicated attribute stream_name to explicitly specify a
recommended stream name for when it is different than the name
of the integration itself.
This commit is contained in:
Eeshan Garg
2017-06-12 18:55:30 -02:30
committed by Tim Abbott
parent b74cc576ae
commit db09913f38
2 changed files with 31 additions and 25 deletions

View File

@@ -32,8 +32,9 @@ class Integration(object):
DEFAULT_LOGO_STATIC_PATH_PNG = 'static/images/integrations/logos/{name}.png'
DEFAULT_LOGO_STATIC_PATH_SVG = 'static/images/integrations/logos/{name}.svg'
def __init__(self, name, client_name, logo=None, secondary_line_text=None, display_name=None, doc=None):
# type: (str, str, Optional[str], Optional[str], Optional[str], Optional[str]) -> None
def __init__(self, name, client_name, logo=None, secondary_line_text=None,
display_name=None, doc=None, stream_name=None):
# type: (str, str, Optional[str], Optional[str], Optional[str], Optional[str], Optional[str]) -> None
self.name = name
self.client_name = client_name
self.secondary_line_text = secondary_line_text
@@ -51,6 +52,10 @@ class Integration(object):
display_name = name.title()
self.display_name = display_name
if stream_name is None:
stream_name = self.name
self.stream_name = stream_name
def is_enabled(self):
# type: () -> bool
return True
@@ -82,11 +87,11 @@ class WebhookIntegration(Integration):
DEFAULT_DOC_PATH = '{name}/doc.{ext}'
def __init__(self, name, client_name=None, logo=None, secondary_line_text=None,
function=None, url=None, display_name=None, doc=None):
# type: (str, Optional[str], Optional[str], Optional[str], Optional[str], Optional[str], Optional[str], Optional[str]) -> None
function=None, url=None, display_name=None, doc=None, stream_name=None):
# type: (str, Optional[str], Optional[str], Optional[str], Optional[str], Optional[str], Optional[str], Optional[str], Optional[str]) -> None
if client_name is None:
client_name = self.DEFAULT_CLIENT_NAME.format(name=name.title())
super(WebhookIntegration, self).__init__(name, client_name, logo, secondary_line_text, display_name)
super(WebhookIntegration, self).__init__(name, client_name, logo, secondary_line_text, display_name, stream_name=stream_name)
if function is None:
function = self.DEFAULT_FUNCTION_PATH.format(name=name)
@@ -135,13 +140,13 @@ class GithubIntegration(WebhookIntegration):
We want to have one generic url with dispatch function for github service and github webhook.
"""
def __init__(self, name, client_name=None, logo=None, secondary_line_text=None,
function=None, url=None, display_name=None, doc=None):
# type: (str, Optional[str], Optional[str], Optional[str], Optional[str], Optional[str], Optional[str], Optional[str]) -> None
function=None, url=None, display_name=None, doc=None, stream_name=None):
# type: (str, Optional[str], Optional[str], Optional[str], Optional[str], Optional[str], Optional[str], Optional[str], Optional[str]) -> None
url = self.DEFAULT_URL.format(name='github')
super(GithubIntegration, self).__init__(
name, client_name, logo, secondary_line_text,
function, url, display_name, doc)
function, url, display_name, doc, stream_name)
@property
def url_object(self):
@@ -153,7 +158,12 @@ WEBHOOK_INTEGRATIONS = [
WebhookIntegration('appfollow', display_name='AppFollow'),
WebhookIntegration('beanstalk'),
WebhookIntegration('basecamp'),
WebhookIntegration('bitbucket2', logo='static/images/integrations/logos/bitbucket.svg', display_name='Bitbucket'),
WebhookIntegration(
'bitbucket2',
logo='static/images/integrations/logos/bitbucket.svg',
display_name='Bitbucket',
stream_name='bitbucket'
),
WebhookIntegration('bitbucket', display_name='Bitbucket', secondary_line_text='(Enterprise)'),
WebhookIntegration('circleci', display_name='CircleCI'),
WebhookIntegration('codeship'),

View File

@@ -1,4 +1,5 @@
from typing import Dict, Optional, Any
from os.path import basename, splitext
from django.conf import settings
from django.template import Library, loader, engines
@@ -82,25 +83,20 @@ def render_markdown_path(markdown_file_path, context=None):
if context is None:
context = {}
if markdown_file_path.endswith('.md'):
if context.get('integrations_dict') is not None:
integration_dir = None
if markdown_file_path.endswith('doc.md'):
integration_dir = markdown_file_path.split('/')[0]
elif 'integrations' in markdown_file_path.split('/'):
integration_dir = splitext(basename(markdown_file_path))[0]
integration = context['integrations_dict'][integration_dir]
if integration.name == 'bitbucket2':
context['integration_name'] = 'bitbucket'
else:
context['integration_name'] = integration.name
context['integration_display_name'] = integration.display_name
context['recommended_stream_name'] = integration.stream_name
if hasattr(integration, 'url'):
context['integration_url'] = integration.url[3:]
else:
integration_dir = markdown_file_path.split('/')[-1].split('.')[0]
try:
if integration_dir in list(context['integrations_dict'].keys()):
integration = context['integrations_dict'][integration_dir]
context['integration_name'] = integration.name
context['integration_display_name'] = integration.display_name
except KeyError:
pass
jinja = engines['Jinja2']
markdown_string = jinja.env.loader.get_source(jinja.env, markdown_file_path)[0]