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_PNG = 'static/images/integrations/logos/{name}.png'
DEFAULT_LOGO_STATIC_PATH_SVG = 'static/images/integrations/logos/{name}.svg' 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): def __init__(self, name, client_name, logo=None, secondary_line_text=None,
# type: (str, str, Optional[str], Optional[str], Optional[str], Optional[str]) -> 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.name = name
self.client_name = client_name self.client_name = client_name
self.secondary_line_text = secondary_line_text self.secondary_line_text = secondary_line_text
@@ -51,6 +52,10 @@ class Integration(object):
display_name = name.title() display_name = name.title()
self.display_name = display_name self.display_name = display_name
if stream_name is None:
stream_name = self.name
self.stream_name = stream_name
def is_enabled(self): def is_enabled(self):
# type: () -> bool # type: () -> bool
return True return True
@@ -82,11 +87,11 @@ class WebhookIntegration(Integration):
DEFAULT_DOC_PATH = '{name}/doc.{ext}' DEFAULT_DOC_PATH = '{name}/doc.{ext}'
def __init__(self, name, client_name=None, logo=None, secondary_line_text=None, def __init__(self, name, client_name=None, logo=None, secondary_line_text=None,
function=None, url=None, display_name=None, doc=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]) -> 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: if client_name is None:
client_name = self.DEFAULT_CLIENT_NAME.format(name=name.title()) 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: if function is None:
function = self.DEFAULT_FUNCTION_PATH.format(name=name) 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. 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, def __init__(self, name, client_name=None, logo=None, secondary_line_text=None,
function=None, url=None, display_name=None, doc=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]) -> 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') url = self.DEFAULT_URL.format(name='github')
super(GithubIntegration, self).__init__( super(GithubIntegration, self).__init__(
name, client_name, logo, secondary_line_text, name, client_name, logo, secondary_line_text,
function, url, display_name, doc) function, url, display_name, doc, stream_name)
@property @property
def url_object(self): def url_object(self):
@@ -153,7 +158,12 @@ WEBHOOK_INTEGRATIONS = [
WebhookIntegration('appfollow', display_name='AppFollow'), WebhookIntegration('appfollow', display_name='AppFollow'),
WebhookIntegration('beanstalk'), WebhookIntegration('beanstalk'),
WebhookIntegration('basecamp'), 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('bitbucket', display_name='Bitbucket', secondary_line_text='(Enterprise)'),
WebhookIntegration('circleci', display_name='CircleCI'), WebhookIntegration('circleci', display_name='CircleCI'),
WebhookIntegration('codeship'), WebhookIntegration('codeship'),

View File

@@ -1,4 +1,5 @@
from typing import Dict, Optional, Any from typing import Dict, Optional, Any
from os.path import basename, splitext
from django.conf import settings from django.conf import settings
from django.template import Library, loader, engines from django.template import Library, loader, engines
@@ -82,25 +83,20 @@ def render_markdown_path(markdown_file_path, context=None):
if context is None: if context is None:
context = {} 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'): if markdown_file_path.endswith('doc.md'):
integration_dir = markdown_file_path.split('/')[0] integration_dir = markdown_file_path.split('/')[0]
integration = context['integrations_dict'][integration_dir] elif 'integrations' in markdown_file_path.split('/'):
if integration.name == 'bitbucket2': integration_dir = splitext(basename(markdown_file_path))[0]
context['integration_name'] = 'bitbucket'
else: integration = context['integrations_dict'][integration_dir]
context['integration_name'] = integration.name
context['integration_display_name'] = integration.display_name 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:] 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'] jinja = engines['Jinja2']
markdown_string = jinja.env.loader.get_source(jinja.env, markdown_file_path)[0] markdown_string = jinja.env.loader.get_source(jinja.env, markdown_file_path)[0]