Git Product home page Git Product logo

matterllo's Introduction

What is Matterllo ?

Simple integration between Trello and Mattermost: send Trello activity notifications to Mattermost channels

matterllo_logo

Quick Start

Common part

Here

Usage

via Docker

$ make help
$ make local

via Python

$ export TRELLO_APIKEY=<your_api_key>
$ virtualenv venv
$ source venv/bin/activate

$ (venv) pip install -r requirements.txt
$ (venv) python manage.py migrate
$ (venv) python manage.py loaddata admin
$ (venv) python manage.py runserver

More details here

matterllo's People

Contributors

aureliojargas avatar benok avatar dependabot[bot] avatar ghostlyrics avatar jayenashar avatar lujeni avatar peterdavehello avatar sonlexqt avatar tjird avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

matterllo's Issues

Static file not found when Debug = False

When I change matterllo/settings.py with Debug = False, a error occurred:

app_1  | Traceback (most recent call last):
app_1  |   File "/usr/local/lib/python2.7/wsgiref/handlers.py", line 85, in run
app_1  |     self.result = application(self.environ, self.start_response)
app_1  |   File "/usr/local/lib/python2.7/site-packages/whitenoise/base.py", line 66, in __call__
app_1  |     return self.application(environ, start_response)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 170, in __call__
app_1  |     response = self.get_response(request)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 124, in get_response
app_1  |     response = self._middleware_chain(request)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/core/handlers/exception.py", line 41, in inner
app_1  |     response = response_for_exception(request, exc)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/core/handlers/exception.py", line 86, in response_for_exception
app_1  |     response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info())
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/core/handlers/exception.py", line 135, in handle_uncaught_exception
app_1  |     return callback(request, **param_dict)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/utils/decorators.py", line 149, in _wrapped_view
app_1  |     response = view_func(request, *args, **kwargs)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/views/defaults.py", line 74, in server_error
app_1  |     return http.HttpResponseServerError(template.render())
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/template/backends/django.py", line 66, in render
app_1  |     return self.template.render(context)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/template/base.py", line 208, in render
app_1  |     return self._render(context)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/template/base.py", line 199, in _render
app_1  |     return self.nodelist.render(context)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/template/base.py", line 994, in render
app_1  |     bit = node.render_annotated(context)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/template/base.py", line 961, in render_annotated
app_1  |     return self.render(context)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/template/loader_tags.py", line 174, in render
app_1  |     return compiled_parent._render(context)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/template/base.py", line 199, in _render
app_1  |     return self.nodelist.render(context)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/template/base.py", line 994, in render
app_1  |     bit = node.render_annotated(context)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/template/base.py", line 961, in render_annotated
app_1  |     return self.render(context)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/templatetags/static.py", line 104, in render
app_1  |     url = self.url(context)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/templatetags/static.py", line 101, in url
app_1  |     return self.handle_simple(path)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/templatetags/static.py", line 114, in handle_simple
app_1  |     return staticfiles_storage.url(path)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/contrib/staticfiles/storage.py", line 132, in url
app_1  |     hashed_name = self.stored_name(clean_name)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/contrib/staticfiles/storage.py", line 292, in stored_name
app_1  |     cache_name = self.clean_name(self.hashed_name(name))
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/contrib/staticfiles/storage.py", line 95, in hashed_name
app_1  |     (clean_name, self))
app_1  | ValueError: The file 'core/img/favicon.ico' could not be found with <whitenoise.storage.CompressedManifestStaticFilesStorage object at 0x7fc508683250>.
app_1  | [11/May/2018 10:45:37] "GET /login/ HTTP/1.0" 500 59
app_1  | Traceback (most recent call last):
app_1  |   File "/usr/local/lib/python2.7/wsgiref/handlers.py", line 85, in run
app_1  |     self.result = application(self.environ, self.start_response)
app_1  |   File "/usr/local/lib/python2.7/site-packages/whitenoise/base.py", line 66, in __call__
app_1  |     return self.application(environ, start_response)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 170, in __call__
app_1  |     response = self.get_response(request)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 124, in get_response
app_1  |     response = self._middleware_chain(request)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/core/handlers/exception.py", line 41, in inner
app_1  |     response = response_for_exception(request, exc)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/core/handlers/exception.py", line 86, in response_for_exception
app_1  |     response = handle_uncaught_exception(request, get_resolver(get_urlconf()), sys.exc_info())
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/core/handlers/exception.py", line 135, in handle_uncaught_exception
app_1  |     return callback(request, **param_dict)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/utils/decorators.py", line 149, in _wrapped_view
app_1  |     response = view_func(request, *args, **kwargs)
  p_1  |   File "/usr/local/lib/python2.7/site-packages/django/views/defaults.py", line 74, in server_error
app_1  |     return http.HttpResponseServerError(template.render())
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/template/backends/django.py", line 66, in render
app_1  |     return self.template.render(context)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/template/base.py", line 208, in render
app_1  |     return self._render(context)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/template/base.py", line 199, in _render
app_1  |     return self.nodelist.render(context)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/template/base.py", line 994, in render
app_1  |     bit = node.render_annotated(context)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/template/base.py", line 961, in render_annotated
app_1  |     return self.render(context)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/template/loader_tags.py", line 174, in render
app_1  |     return compiled_parent._render(context)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/template/base.py", line 199, in _render
app_1  |     return self.nodelist.render(context)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/template/base.py", line 994, in render
app_1  |     bit = node.render_annotated(context)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/template/base.py", line 961, in render_annotated
app_1  |     return self.render(context)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/templatetags/static.py", line 104, in render
app_1  |     url = self.url(context)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/templatetags/static.py", line 101, in url
app_1  |     return self.handle_simple(path)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/templatetags/static.py", line 114, in handle_simple
app_1  |     return staticfiles_storage.url(path)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/contrib/staticfiles/storage.py", line 132, in url
app_1  |     hashed_name = self.stored_name(clean_name)
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/contrib/staticfiles/storage.py", line 292, in stored_name
app_1  |     cache_name = self.clean_name(self.hashed_name(name))
app_1  |   File "/usr/local/lib/python2.7/site-packages/django/contrib/staticfiles/storage.py", line 95, in hashed_name
app_1  |     (clean_name, self))
app_1  | ValueError: The file 'core/img/favicon.ico' could not be found with <whitenoise.storage.CompressedManifestStaticFilesStorage object at 0x7fc508683250>.
app_1  | [11/May/2018 10:46:54] "GET /login/ HTTP/1.0" 500 59

Basic event

Boards and lists

  • List created
  • List renamed
  • List moved to other board
  • List archived/unarchived

Cards

  • Card created
  • Card moved
  • Card renamed
  • Comment added to card
  • Attachment added to card
  • Description changed
  • Due date changed
  • Label changed
  • Member added to card
  • Card archived/unarchived

Checklists

  • Checklist added to card
  • Checklist Item created
  • Checklist Item marked complete/incomplete

Card unarchived called incorrectly

I have noticed following events are reflected to mattermost as "Card unarchived"

  • Add/remove due date completed checkbox
  • Add/remove the photo being a card cover

Label and member

Cannot get the add member action to fire even though I have it in the bridge. All other events i need work fine.

specify callback url

I don't know where is the configuration of the callback URL. If it does not exist, maybe is a good idea add this config option.

Invalid return_url

Hello,
I generated api token & token thanks that https://trello.com/app-key/
I followed this instruction

heroku config:set TRELLO_APIKEY=<your_api_key>
heroku config:set TRELLO_TOKEN=<your_token>

But when I click to login to trello I have a error

Invalid return_url

Unable to read boards

Hi,

I'm unable to read boards, I've carefully followed the instructions to make it work, but every time I wan to read my boards I receive the message:

"unable to display board :: 'X509' object has no attribute '_x509'"

Any ideas to solve it? I've been using the tool for a long time but I needed to migrate my server and the problem started.

Hope you can help me!

installation issue

Hi! I'm running a Mattermost instance in a Docker instance on Reclaim Cloud, and am running into trouble with the Matterllo startup process. I got through retrieving and creating the image fine, and after a good deal of trial and error, I got through the "run the container" step, which returned a long string that I take to be the container ID. But then I get stuck on the third step:

# apply the migration
$ docker exec matterllo python manage.py loaddata admin

-- the result of which is an error message saying that Container $longstring is not running. But when I attempt to re-run the run command, it tells me that /matterllo is already in use by container $longstring. So based on some searching around, I've figured out that I can start the container with sudo docker start $longstring and then run the command above, but when I do I get this error:

OCI runtime exec failed: exec failed: container_linux.go:349: starting container process caused "exec: \"python\": executable file not found in $PATH": unknown

I'm more or less blundering around in the dark at this point, so if you have any suggestions I'd be grateful...

Photo attachments

When a photo is added to trello card the update shows the long photo url and then the photo itself.

Making the photo clickable instead with the url not visible to user would be nicer

Different output for Copy feature when the title of the card remains the same?

Today, when a card is being copied, if the title is the same for the copied card, there's a duplication of the name of the card in the output.

I think it would be better to have a different output whether the name of the card is different or not.

Exemple for different name:

Card copied: "[Name of the card to be copied]" to "[Different name for the new card]" (To Dispatch list) by Someone

Exemple for same name:

Card copied: "[Name of the card to be copied]" copied in "[LIST NAME]" list) by Someone

What do you guys think about it?

Admin interface

Why ?

  • facilitate the matterllo integration.
  • automatically retrieve token and co using a trello connector.
  • matterllo could be paas for some use case.
  • trello connector
  • list accessible boards
  • form to create a new webhook
  • manage webhook (CRUD)

Wrong message while moving cards

When you move a card from one list to another list in the same board, Mattermost receives a message indicating that the card was unarchived, Which is wrong because it was just moved.
screen shot 2017-02-08 at 9 45 45 am

Custom payload

Add a simple system to override the default payload return by an event.
Maybe use directly a md file?

UnicodeEncodeError - Character "å" breaks Webhooks.

Server: Self-hosted Ubuntu 14.04 LTS
Created a webhook with "å" in the name. Can't create new or delete the broken webhook.

UnicodeEncodeError at /admin/core/webhook/
'ascii' codec can't encode character u'\xe5' in position 13: ordinal not in range(128)
Request Method:	POST
Request URL:	http://<mydomain>/admin/core/webhook/
Django Version:	1.10.3
Exception Type:	UnicodeEncodeError
Exception Value:	
'ascii' codec can't encode character u'\xe5' in position 13: ordinal not in range(128)
Exception Location:	/usr/local/lib/python2.7/dist-packages/django/utils/encoding.py in force_text, line 80
Python Executable:	/usr/bin/python
Python Version:	2.7.6
Python Path:	
['/opt/matterllo',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-x86_64-linux-gnu',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages']
Server time:	Mon, 6 Feb 2017 11:53:19 +0000
Environment:


Request Method: POST
Request URL: http://<mydomain>:8000/admin/core/webhook/

Django Version: 1.10.3
Python Version: 2.7.6
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'formtools',
 'matterllo.core',
 'crispy_forms']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/exception.py" in inner
  39.             response = get_response(request)

File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py" in wrapper
  544.                 return self.admin_site.admin_view(view)(*args, **kwargs)

File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapped_view
  149.                     response = view_func(request, *args, **kwargs)

File "/usr/local/lib/python2.7/dist-packages/django/views/decorators/cache.py" in _wrapped_view_func
  57.         response = view_func(request, *args, **kwargs)

File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/sites.py" in inner
  211.             return view(request, *args, **kwargs)

File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapper
  67.             return bound_func(*args, **kwargs)

File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _wrapped_view
  149.                     response = view_func(request, *args, **kwargs)

File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in bound_func
  63.                 return func.__get__(self, type(self))(*args2, **kwargs2)

File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py" in changelist_view
  1569.                 response = self.response_action(request, queryset=cl.get_queryset(request))

File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/options.py" in response_action
  1305.             response = func(self, request, queryset)

File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/actions.py" in delete_selected
  37.         queryset, opts, request.user, modeladmin.admin_site, using)

File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/utils.py" in get_deleted_objects
  163.     to_delete = collector.nested(format_callback)

File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/utils.py" in nested
  223.             roots.extend(self._nested(root, seen, format_callback))

File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/utils.py" in _nested
  209.             ret = [format_callback(obj)]

File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/utils.py" in format_callback
  136.                                    force_text(obj))

File "/usr/local/lib/python2.7/dist-packages/django/utils/encoding.py" in force_text
  80.                 s = six.text_type(bytes(s), encoding, errors)

Exception Type: UnicodeEncodeError at /admin/core/webhook/
Exception Value: 'ascii' codec can't encode character u'\xe5' in position 13: ordinal not in range(128)

In need of guidance

I'm trying to connect one of my Trello board to Mattermost to get notified when something happens. Matterllo seems to be the perfect fit. I followed the content of the README (for Linux servers) and I end up with Matterllo running but I don't know what to do from here :

φ python3 manage.py runserver -v 3
Performing system checks...

System check identified no issues (0 silenced).
January 02, 2020 - 13:55:17
Django version 2.0.13, using settings 'matterllo.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Any help and guidance would be appreciated. Thanks.

Smart parser

The trello API is smart and each parser actions are very similar.
Maybe use a metaclass to construct each Parser and DRY

class Parser(object):
    def update(self)
        pass

class CardParser(object):
    meta = Parser
    def updateCard(self):
         pass

Fresh install fails on Django-2.2.10

I get this error when installing Matterllo :

File "matterllo/matterllo/urls.py", line 7, in <module>
    url(r"^login/$", auth_views.login, name="login"),
AttributeError: module 'django.contrib.auth.views' has no attribute 'login'

After executing this : python manage.py migrate

If I rollback this commit 9c107d5, from pull-request #60, it works again !

Not working by unknown reason

Hello. It looks like the software can't stablish the callbacks on trello, but it is an assumption because i don't really know.

Using built docker image.

  File "/usr/local/lib/python2.7/SocketServer.py", line 596, in process_request_thread
matterllo_1         |     self.finish_request(request, client_address)
matterllo_1         |   File "/usr/local/lib/python2.7/SocketServer.py", line 331, in finish_request
matterllo_1         |     self.RequestHandlerClass(request, client_address, self)
matterllo_1         |   File "/usr/local/lib/python2.7/SocketServer.py", line 652, in __init__
matterllo_1         |     self.handle()
matterllo_1         |   File "/usr/local/lib/python2.7/site-packages/django/core/servers/basehttp.py", line 159, in handle
matterllo_1         |     self.raw_requestline = self.rfile.readline(65537)
matterllo_1         |   File "/usr/local/lib/python2.7/socket.py", line 480, in readline
matterllo_1         |     data = self._sock.recv(self._rbufsize)
matterllo_1         | error: [Errno 104] Connection reset by peer

Not Posting to MatterMost - Potential Configuration Issue

I think that I'm missing a step in the configuration somewhere. I have matterllo setup on a linux server and can log into matterllo and create bridges to trello (the wizard successfully pulls in all of my boards), but whenever I trigger an action on trello (eg comment on a card), nothing happens on mattermost.

Both mattermost and matterllo are on the same server and have their own nginx location entries where the entry proxies the requests. The proxy for matterllo looks like this:
location /matterllo { proxy_http_version 1.1; proxy_cache_bypass $http_upgrade; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; proxy_pass http://127.0.0.1:8000; }
In order to get the matterlo web interface to work, I did have to modify urls.py under matterllo/matterllo/.

Any thoughts as to what I'm doing wrong?

Cannot log in with Trello

I've gotten Matterllo installed and running, and I can get to the admin interface, but when I click "Log in with Trello" I get an Invalid return_url error. The URL that's loaded is:

https://trello.com/1/authorize?expiration=never&name=Matterllo&scope=read&callback_method=fragment&response_type=fragment&return_url=https://MY.MATTERLLO.SERVER/access_token&key=MY_API_KEY

I'm not sure how to proceed.

Trello Powerup

I think it could be quite useful if you could convert matterllo into a Trello Slack Powerup clone.

result=False when uWSGI & nginx

When I run the server manually, without nginx, the hooks are creating with success.

But, when I try to put the things on nginx..

delete trello hook :: result=[]
create trello hook :: callback=http://matterllo.x.com:8080/callback/1/ :: board=amazon-argila :: result=False
create trello hook :: callback=http://matterllo.x.com:com:8080/callback/2/ :: board=apiscrm :: result=False
create trello hook :: callback=http://matterllo.x.com:8080/callback/2/ :: board=apiscrm :: result=False

nginx config:

server {
    listen 8080;
    server_name matterllo.x.com;

   location / {
	include uwsgi_params;
        uwsgi_ignore_client_abort on;
	uwsgi_pass unix:/home/silviu/uwsgi/trello.sock;
   }
}

I'm stuck for few hours at this and I don't know what's the problem.
Thanks!

Extremely slow read for trello board list

Hi,

The matterllo is deployed using a docker on GCP (4 core / 8g ram) internally with Nginx/SSL as the proxy.

However, it takes around 50 seconds to load the board list (https://XXX/board) from Trello each time we plan to add the integration.

loading_board

Following is the config for nginx

location / {
client_max_body_size 50M;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffers 256 16k;
proxy_buffer_size 16k;
proxy_read_timeout 600s;
proxy_pass http://internal-ip:8000;
}

can't build docker image

kain@kain-osx-qemu matterllo-master % docker build -t matterllo .
Sending build context to Docker daemon  4.366MB
Step 1/9 : FROM python:2
2: Pulling from library/python
c7b7d16361e0: Already exists
b7a128769df1: Already exists
1128949d0793: Already exists
667692510b70: Already exists
bed4ecf88e6a: Already exists
d1794cae6bfb: Pull complete
a55cbf5e2c2f: Pull complete
9a05c0860203: Pull complete
29262c0637ff: Pull complete
Digest: sha256:a22ab298cab5cf2ab53c816b4a851ab30c574078d09bd9be384f455c5c46cdc2
Status: Downloaded newer image for python:2
 ---> abc2716d03e0
Step 2/9 : RUN mkdir -p /usr/src/app
 ---> Running in 30543de93a9c
Removing intermediate container 30543de93a9c
 ---> 5cdfde2f440c
Step 3/9 : WORKDIR /usr/src/app
 ---> Running in 738993eaac0b
Removing intermediate container 738993eaac0b
 ---> 395ba2d2ac6f
Step 4/9 : COPY requirements_base.txt /usr/src/app
 ---> bd42c74033df
Step 5/9 : RUN pip install --no-cache-dir -r requirements_base.txt
 ---> Running in e29b1bd36204
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
Collecting astroid==1.6.0
  Downloading https://files.pythonhosted.org/packages/20/df/b230d15af5eadddeda595a5ceac2d51273f3df21ad207e27e346dc384ce2/astroid-1.6.0-py2.py3-none-any.whl (288kB)
Collecting certifi==2019.3.9
  Downloading https://files.pythonhosted.org/packages/60/75/f692a584e85b7eaba0e03827b3d51f45f571c2e793dd731e598828d380aa/certifi-2019.3.9-py2.py3-none-any.whl (158kB)
Collecting chardet==3.0.4
  Downloading https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl (133kB)
ERROR: Could not find a version that satisfies the requirement Django==2.0.13 (from -r requirements_base.txt (line 4)) (from versions: 1.1.3, 1.1.4, 1.2, 1.2.1, 1.2.2, 1.2.3, 1.2.4, 1.2.5, 1.2.6, 1.2.7, 1.3, 1.3.1, 1.3.2, 1.3.3, 1.3.4, 1.3.5, 1.3.6, 1.3.7, 1.4, 1.4.1, 1.4.2, 1.4.3, 1.4.4, 1.4.5, 1.4.6, 1.4.7, 1.4.8, 1.4.9, 1.4.10, 1.4.11, 1.4.12, 1.4.13, 1.4.14, 1.4.15, 1.4.16, 1.4.17, 1.4.18, 1.4.19, 1.4.20, 1.4.21, 1.4.22, 1.5, 1.5.1, 1.5.2, 1.5.3, 1.5.4, 1.5.5, 1.5.6, 1.5.7, 1.5.8, 1.5.9, 1.5.10, 1.5.11, 1.5.12, 1.6, 1.6.1, 1.6.2, 1.6.3, 1.6.4, 1.6.5, 1.6.6, 1.6.7, 1.6.8, 1.6.9, 1.6.10, 1.6.11, 1.7, 1.7.1, 1.7.2, 1.7.3, 1.7.4, 1.7.5, 1.7.6, 1.7.7, 1.7.8, 1.7.9, 1.7.10, 1.7.11, 1.8a1, 1.8b1, 1.8b2, 1.8rc1, 1.8, 1.8.1, 1.8.2, 1.8.3, 1.8.4, 1.8.5, 1.8.6, 1.8.7, 1.8.8, 1.8.9, 1.8.10, 1.8.11, 1.8.12, 1.8.13, 1.8.14, 1.8.15, 1.8.16, 1.8.17, 1.8.18, 1.8.19, 1.9a1, 1.9b1, 1.9rc1, 1.9rc2, 1.9, 1.9.1, 1.9.2, 1.9.3, 1.9.4, 1.9.5, 1.9.6, 1.9.7, 1.9.8, 1.9.9, 1.9.10, 1.9.11, 1.9.12, 1.9.13, 1.10a1, 1.10b1, 1.10rc1, 1.10, 1.10.1, 1.10.2, 1.10.3, 1.10.4, 1.10.5, 1.10.6, 1.10.7, 1.10.8, 1.11a1, 1.11b1, 1.11rc1, 1.11, 1.11.1, 1.11.2, 1.11.3, 1.11.4, 1.11.5, 1.11.6, 1.11.7, 1.11.8, 1.11.9, 1.11.10, 1.11.11, 1.11.12, 1.11.13, 1.11.14, 1.11.15, 1.11.16, 1.11.17, 1.11.18, 1.11.20, 1.11.21, 1.11.22, 1.11.23, 1.11.24, 1.11.25, 1.11.26)
ERROR: No matching distribution found for Django==2.0.13 (from -r requirements_base.txt (line 4))
The command '/bin/sh -c pip install --no-cache-dir -r requirements_base.txt' returned a non-zero code: 1

Subscribe to event

Improve the way to subscribe to events.

# all events without the rename card event.
subscribe: '* -renameCard'

# all/wildcard event.
subscribe: *

# just the comment card event
subscribe: 'commentCard'

Doesn't Post to Mattermost

I installed Matterlo via Docker and used the interface to configure my board and integration with Mattermost webhook.

Also tested Mattermost URL via curl from within the container and it works well.

When I do an action in Trello I see something is being posted to Matterlo:

[03/Feb/2017 10:03:50] "POST /callback/5/ HTTP/1.1" 200 0

But it is not posting to Mattermost - any idea what I am doing wrong?

Heroku error

I am following the simple steps for heroku with ubuntu yet:

heroku run python manage.py migrate

fails with

...
  File "/app/matterllo/core/urls.py", line 4, in <module>
    from matterllo.core.views import (
  File "/app/matterllo/core/views/__init__.py", line 2, in <module>
    from board import *
ModuleNotFoundError: No module named 'board'

Due Date Format

Add an option to override the due date format:

  • May 13 (Today)
  • May 14 (Tomorrow)
  • May 12 (Yesterday)
  • May 21
  • June 03

Mattermost moving to API version 4

Hey @Lujeni !

First, hugely appreciate you sharing this project back with the world. Fantastic work!

I wanted to let you know about our plans moving to API v4:

To make the Mattermost API web service easier to use and to offer more powerful options for these integrations, Mattermost will be moving to a new API version soon. Highlights include:

  • Fully documented API endpoints
  • More in-depth access to server functionality
  • Wider use of established HTTP verbs
  • Consistent endpoint structures
  • A new and improved Go driver

We plan to release API version 4 on March 16th, with Mattermost server 3.7. While the current API version 3 will be supported until September 16th, we recommend you begin using API version 4 soon after its release.

Contributing

API version 4 is an active and on-going project. If you're interested in helping contribute, please join our Mattermost community instance and the APIv4 channel.

We've prepared a contribution process for APIv4 and a progress tracker for new APIv4 enpoints to help you get started.

We're also open for suggestions on adding new API endpoints to help with your integration.

Error while adding or removing Labels

Hello,

Following the Linux installation using pip on Debian Stretch, adding and removing labels does not work.

Here is the traceback :

[27/Dec/2017 11:06:11] "POST /callback/107/ HTTP/1.1" 500 101938
Internal Server Error: /callback/107/
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/exception.py", line 39, in inner
    response = get_response(request)
  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 187, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/usr/local/lib/python2.7/dist-packages/django/views/generic/base.py", line 68, in view
    return self.dispatch(request, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py", line 67, in _wrapper
    return bound_func(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
    return view_func(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py", line 63, in bound_func
    return func.__get__(self, type(self))(*args2, **kwargs2)
  File "/usr/local/lib/python2.7/dist-packages/django/views/generic/base.py", line 88, in dispatch
    return handler(request, *args, **kwargs)
  File "/opt/matterllo/core/views/callback.py", line 45, in post
    payload = action_parser(action=action)
  File "/opt/matterllo/core/hook/card.py", line 204, in addLabelToCard
    card = self.trello_client.get_card(data['card']['id'])
AttributeError: 'TrelloCallbacksView' object has no attribute 'trello_client'

Thank you.

Posting to Restyaboard?

Restyaboard team is having their own plugin for Mattermost. But do you
have any easy support for Restyaboard here? TIA

Typo in "Copy" output

Howdy,

There seems to be a typo in the copy feature: the last " should be after the name of the new card, not after the name of the person who copied it, isn't it?

Card copied: "[Name of the card to be copied]" to "[Name of the new card] (To Dispatch list) by Someone"

A dispo,

Flo

Trouble Following the Documentation

Without having an extensive knowledge of Mattermost and/or Flask, the documentation has been very hard to follow. The trouble starts on requirements.html. No information is provided about installing pip; not too big of a deal. The generating an incoming webhook was easy enough. Then in the next section, it is not very clear what I will be doing with the Trello key and token.

Under settings.html, I'm at a loss as to what the first step is. I understand I need to generate a config file, but it is not clear to me where this file should be located and what it should be named (later on I see that it should be named config.yaml, but why not have this in the same place as the rest of the config information?).

I looked through all of the output of pip install matterllo and I just cannot sort out which directory any of this is supposed to be happening in.

Any help making the documentation easier to understand would be truly appreciated.

Want to add the name of the creator of the action

Hi @Lujeni

Amazing project you have here, thanks a lot!

Do you think it would be possible to get the name of the user who did the action in the notification?

Ex : New card "Very important task" added to list "Super Urgent Stuff" by Florent DANCY

Cheers :)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.