create account

QueryJane | Created periodic task to send notifications about new messages. by kit.andres

View this thread on: hive.blogpeakd.comecency.com
· @kit.andres · (edited)
$171.36
QueryJane | Created periodic task to send notifications about new messages.
QueryJane is a web application developed with Django that allows to connect with companies and experts in different sectors of the cannabis industry. Beta version is available [here](https://queryjane.net/).

<center>
![Screen Shot 2018-02-03 at 10.23.10 PM.png](https://res.cloudinary.com/hpiynhbhq/image/upload/v1517714734/buanjqlm7hnwn4zoy4rq.png)
</center>

Users can manage their email notifications settings in their account settings page. Among the options that they can configure, are the option to receive email notifications when they receive new messages from users, and the option to receive email notifications when the companies they manage receive new messages from users.

If these options are activated, then a user are receiving an email notification each time that he receive a new message from other user, and each time that a user sends a private message to a company managed by him. This procedure has two implications: **1.** A user can receive an email per each new received message, regardless of whether the messages are from the same user. **2.** A very high message range sent every month across the SMPT server. The SMPT integrated service is [mailgun](https://www.mailgun.com/), and it is not free.

I have created a periodic task, that will run every Monday, Wednesday and Friday, checking if there are new messages and sending email notifications with a resume of the new messages. In this way, users will not see an email notification per each new received message, but for a group of new messages.

### New Features

I have added a new boolean attribute to the User model called `has_new_messages`. This is used to check if the user has received new private messages since last email notification was sent. When a new message is sent, this attribute is set to `True`, and each time that the new periodic task send an email notification, this attributed is set to `False`.

This attribute has been added to the Company model to. In this way, we can check if the company has received new messages from users, and can notify to company administrators about new received messages via email. The goal here is that we are notifying about a group of new messages.

I have used [huey](http://huey.readthedocs.io/en/latest/getting-started.html), a tasks manager to create the new task called [new_received_messages](https://github.com/roadhousestudio/queryjane_app/blob/master/account/tasks.py), and that allows to check new messages for users and companies. If since last sent email a user has not received new messages and their messages are yet in status "new", he will not be notified.

Take a look to the received email when a user has new received messages:

<center>
![Screen Shot 2018-04-30 at 1.47.07 AM.png](https://steemitimages.com/DQmTbR2H1oov6TRuoStjUBVHV8uopbb5ayrFKoSKk7mhm5S/Screen%20Shot%202018-04-30%20at%201.47.07%20AM.png)
</center>

As you can see, messages are grouped by author, and a little portion of the messages are available on the email content. A link to visit inbox page is available at the bottom of the email.

Take a look to the received email when a company has received new messages:

<center>
![Screen Shot 2018-04-30 at 1.51.19 AM.png](https://steemitimages.com/DQmNPg52fkqjbThcYWLGPymRcgHNjaSV5Yex33LLFtuhW5S/Screen%20Shot%202018-04-30%20at%201.51.19%20AM.png)
</center>

This message will be sent to company administrators that have set "True" the email notification to be notified via email about new messages to companies they manage.
***
<center>
![Screen Shot 2018-02-03 at 10.23.10 PM.png](https://res.cloudinary.com/hpiynhbhq/image/upload/v1517714734/buanjqlm7hnwn4zoy4rq.png)
</center>
***

### How to contribute?
[QueryJane](https://queryjane.net/) has been developed using the [Django framework](https://www.djangoproject.com/). You can fork the project, and run it locally is very easy. Follow the steps described in the [open source repository](https://github.com/roadhousestudio/queryjane_app) installation guide. The project has been configured using Docker. you only need to install [Docker](http://docker.com/) and follow these steps.

### Future work.

Take a look to our [public trello board](https://trello.com/b/7fkft2vf/queryjane). This is the easiest way to know our roadmap.

* SEO optimization.
* Javascript files translation.

If you want to contribute, please join my [Discord](https://discord.gg/hAmBYg).
***
Have happy days ✌

<br /><hr/><em>Posted on <a href="https://utopian.io/utopian-io/@kit.andres/queryjane-or-created-periodic-task-to-send-notifications-about-new-messages">Utopian.io -  Rewarding Open Source Contributors</a></em><hr/>
👍  , , , , , , , , , , , , , , , ,
properties (23)
authorkit.andres
permlinkqueryjane-or-created-periodic-task-to-send-notifications-about-new-messages
categoryutopian-io
json_metadata"{"community":"utopian","app":"utopian/1.0.0","format":"markdown","repository":{"id":112967943,"name":"queryjane_app","full_name":"roadhousestudio/queryjane_app","html_url":"https://github.com/roadhousestudio/queryjane_app","fork":false,"owner":{"login":"roadhousestudio"}},"pullRequests":[{"url":"https://api.github.com/repos/roadhousestudio/queryjane_app/pulls/86","id":184882579,"html_url":"https://github.com/roadhousestudio/queryjane_app/pull/86","diff_url":"https://github.com/roadhousestudio/queryjane_app/pull/86.diff","patch_url":"https://github.com/roadhousestudio/queryjane_app/pull/86.patch","issue_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/issues/86","number":86,"state":"closed","locked":false,"title":"Periodic task to send received messages notifications.","user":{"login":"aaquirogal","id":1242329,"avatar_url":"https://avatars0.githubusercontent.com/u/1242329?v=4","gravatar_id":"","url":"https://api.github.com/users/aaquirogal","html_url":"https://github.com/aaquirogal","followers_url":"https://api.github.com/users/aaquirogal/followers","following_url":"https://api.github.com/users/aaquirogal/following{/other_user}","gists_url":"https://api.github.com/users/aaquirogal/gists{/gist_id}","starred_url":"https://api.github.com/users/aaquirogal/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aaquirogal/subscriptions","organizations_url":"https://api.github.com/users/aaquirogal/orgs","repos_url":"https://api.github.com/users/aaquirogal/repos","events_url":"https://api.github.com/users/aaquirogal/events{/privacy}","received_events_url":"https://api.github.com/users/aaquirogal/received_events","type":"User","site_admin":false},"body":"* Added **has_new_messages** attribute to the User model. It will allow to know if a user must be notified via email about new received messages.\r\n* Added **has_new_messages** attribute to the Company model. It will allow to know if company administrators must be notified via email about new received messages.\r\n\r\n* Created periodic task to manage email notifications about new messages to users and companies. This task will run every Monday, Wednesday and Friday. If since last sent email a user has not received new messages and their messages are yet in status \"new\", he will not be notified.","created_at":"2018-04-30T05:42:33Z","updated_at":"2018-04-30T05:42:45Z","closed_at":"2018-04-30T05:42:45Z","merged_at":"2018-04-30T05:42:45Z","merge_commit_sha":"e31d8fc441502a56b7bd559d1bfb0d5f6653e46f","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/pulls/86/commits","review_comments_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/pulls/86/comments","review_comment_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/pulls/comments{/number}","comments_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/issues/86/comments","statuses_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/statuses/9c7f520882bd936e2e6f54f111ba8a347261189f","head":{"label":"roadhousestudio:development","ref":"development","sha":"9c7f520882bd936e2e6f54f111ba8a347261189f","user":{"login":"roadhousestudio","id":34083364,"avatar_url":"https://avatars1.githubusercontent.com/u/34083364?v=4","gravatar_id":"","url":"https://api.github.com/users/roadhousestudio","html_url":"https://github.com/roadhousestudio","followers_url":"https://api.github.com/users/roadhousestudio/followers","following_url":"https://api.github.com/users/roadhousestudio/following{/other_user}","gists_url":"https://api.github.com/users/roadhousestudio/gists{/gist_id}","starred_url":"https://api.github.com/users/roadhousestudio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/roadhousestudio/subscriptions","organizations_url":"https://api.github.com/users/roadhousestudio/orgs","repos_url":"https://api.github.com/users/roadhousestudio/repos","events_url":"https://api.github.com/users/roadhousestudio/events{/privacy}","received_events_url":"https://api.github.com/users/roadhousestudio/received_events","type":"Organization","site_admin":false},"repo":{"id":112967943,"name":"queryjane_app","full_name":"roadhousestudio/queryjane_app","owner":{"login":"roadhousestudio","id":34083364,"avatar_url":"https://avatars1.githubusercontent.com/u/34083364?v=4","gravatar_id":"","url":"https://api.github.com/users/roadhousestudio","html_url":"https://github.com/roadhousestudio","followers_url":"https://api.github.com/users/roadhousestudio/followers","following_url":"https://api.github.com/users/roadhousestudio/following{/other_user}","gists_url":"https://api.github.com/users/roadhousestudio/gists{/gist_id}","starred_url":"https://api.github.com/users/roadhousestudio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/roadhousestudio/subscriptions","organizations_url":"https://api.github.com/users/roadhousestudio/orgs","repos_url":"https://api.github.com/users/roadhousestudio/repos","events_url":"https://api.github.com/users/roadhousestudio/events{/privacy}","received_events_url":"https://api.github.com/users/roadhousestudio/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/roadhousestudio/queryjane_app","description":"Social network for the cannabis industry.","fork":false,"url":"https://api.github.com/repos/roadhousestudio/queryjane_app","forks_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/forks","keys_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/keys{/key_id}","collaborators_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/teams","hooks_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/hooks","issue_events_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/issues/events{/number}","events_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/events","assignees_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/assignees{/user}","branches_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/branches{/branch}","tags_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/tags","blobs_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/git/refs{/sha}","trees_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/git/trees{/sha}","statuses_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/statuses/{sha}","languages_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/languages","stargazers_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/stargazers","contributors_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/contributors","subscribers_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/subscribers","subscription_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/subscription","commits_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/commits{/sha}","git_commits_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/git/commits{/sha}","comments_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/comments{/number}","issue_comment_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/issues/comments{/number}","contents_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/contents/{+path}","compare_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/compare/{base}...{head}","merges_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/merges","archive_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/downloads","issues_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/issues{/number}","pulls_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/pulls{/number}","milestones_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/milestones{/number}","notifications_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/labels{/name}","releases_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/releases{/id}","deployments_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/deployments","created_at":"2017-12-03T22:09:36Z","updated_at":"2018-04-30T05:42:47Z","pushed_at":"2018-04-30T05:42:45Z","git_url":"git://github.com/roadhousestudio/queryjane_app.git","ssh_url":"git@github.com:roadhousestudio/queryjane_app.git","clone_url":"https://github.com/roadhousestudio/queryjane_app.git","svn_url":"https://github.com/roadhousestudio/queryjane_app","homepage":null,"size":5570,"stargazers_count":1,"watchers_count":1,"language":"HTML","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":1,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"roadhousestudio:master","ref":"master","sha":"9a3c3e8b12cc46c651a51518d68f3b9fc4e56eac","user":{"login":"roadhousestudio","id":34083364,"avatar_url":"https://avatars1.githubusercontent.com/u/34083364?v=4","gravatar_id":"","url":"https://api.github.com/users/roadhousestudio","html_url":"https://github.com/roadhousestudio","followers_url":"https://api.github.com/users/roadhousestudio/followers","following_url":"https://api.github.com/users/roadhousestudio/following{/other_user}","gists_url":"https://api.github.com/users/roadhousestudio/gists{/gist_id}","starred_url":"https://api.github.com/users/roadhousestudio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/roadhousestudio/subscriptions","organizations_url":"https://api.github.com/users/roadhousestudio/orgs","repos_url":"https://api.github.com/users/roadhousestudio/repos","events_url":"https://api.github.com/users/roadhousestudio/events{/privacy}","received_events_url":"https://api.github.com/users/roadhousestudio/received_events","type":"Organization","site_admin":false},"repo":{"id":112967943,"name":"queryjane_app","full_name":"roadhousestudio/queryjane_app","owner":{"login":"roadhousestudio","id":34083364,"avatar_url":"https://avatars1.githubusercontent.com/u/34083364?v=4","gravatar_id":"","url":"https://api.github.com/users/roadhousestudio","html_url":"https://github.com/roadhousestudio","followers_url":"https://api.github.com/users/roadhousestudio/followers","following_url":"https://api.github.com/users/roadhousestudio/following{/other_user}","gists_url":"https://api.github.com/users/roadhousestudio/gists{/gist_id}","starred_url":"https://api.github.com/users/roadhousestudio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/roadhousestudio/subscriptions","organizations_url":"https://api.github.com/users/roadhousestudio/orgs","repos_url":"https://api.github.com/users/roadhousestudio/repos","events_url":"https://api.github.com/users/roadhousestudio/events{/privacy}","received_events_url":"https://api.github.com/users/roadhousestudio/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/roadhousestudio/queryjane_app","description":"Social network for the cannabis industry.","fork":false,"url":"https://api.github.com/repos/roadhousestudio/queryjane_app","forks_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/forks","keys_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/keys{/key_id}","collaborators_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/teams","hooks_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/hooks","issue_events_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/issues/events{/number}","events_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/events","assignees_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/assignees{/user}","branches_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/branches{/branch}","tags_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/tags","blobs_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/git/refs{/sha}","trees_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/git/trees{/sha}","statuses_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/statuses/{sha}","languages_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/languages","stargazers_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/stargazers","contributors_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/contributors","subscribers_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/subscribers","subscription_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/subscription","commits_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/commits{/sha}","git_commits_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/git/commits{/sha}","comments_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/comments{/number}","issue_comment_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/issues/comments{/number}","contents_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/contents/{+path}","compare_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/compare/{base}...{head}","merges_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/merges","archive_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/downloads","issues_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/issues{/number}","pulls_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/pulls{/number}","milestones_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/milestones{/number}","notifications_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/labels{/name}","releases_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/releases{/id}","deployments_url":"https://api.github.com/repos/roadhousestudio/queryjane_app/deployments","created_at":"2017-12-03T22:09:36Z","updated_at":"2018-04-30T05:42:47Z","pushed_at":"2018-04-30T05:42:45Z","git_url":"git://github.com/roadhousestudio/queryjane_app.git","ssh_url":"git@github.com:roadhousestudio/queryjane_app.git","clone_url":"https://github.com/roadhousestudio/queryjane_app.git","svn_url":"https://github.com/roadhousestudio/queryjane_app","homepage":null,"size":5570,"stargazers_count":1,"watchers_count":1,"language":"HTML","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":1,"open_issues":0,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/roadhousestudio/queryjane_app/pulls/86"},"html":{"href":"https://github.com/roadhousestudio/queryjane_app/pull/86"},"issue":{"href":"https://api.github.com/repos/roadhousestudio/queryjane_app/issues/86"},"comments":{"href":"https://api.github.com/repos/roadhousestudio/queryjane_app/issues/86/comments"},"review_comments":{"href":"https://api.github.com/repos/roadhousestudio/queryjane_app/pulls/86/comments"},"review_comment":{"href":"https://api.github.com/repos/roadhousestudio/queryjane_app/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/roadhousestudio/queryjane_app/pulls/86/commits"},"statuses":{"href":"https://api.github.com/repos/roadhousestudio/queryjane_app/statuses/9c7f520882bd936e2e6f54f111ba8a347261189f"}},"author_association":"CONTRIBUTOR"}],"platform":"github","type":"development","tags":["utopian-io","cannabis","industry","opensource"],"links":["https://queryjane.net/","https://res.cloudinary.com/hpiynhbhq/image/upload/v1517714734/buanjqlm7hnwn4zoy4rq.png","https://www.mailgun.com/","http://huey.readthedocs.io/en/latest/getting-started.html","https://github.com/roadhousestudio/queryjane_app/blob/master/account/tasks.py","https://steemitimages.com/DQmTbR2H1oov6TRuoStjUBVHV8uopbb5ayrFKoSKk7mhm5S/Screen%20Shot%202018-04-30%20at%201.47.07%20AM.png","https://steemitimages.com/DQmNPg52fkqjbThcYWLGPymRcgHNjaSV5Yex33LLFtuhW5S/Screen%20Shot%202018-04-30%20at%201.51.19%20AM.png","https://www.djangoproject.com/","https://github.com/roadhousestudio/queryjane_app","http://docker.com/","https://trello.com/b/7fkft2vf/queryjane","https://discord.gg/hAmBYg"],"image":["https://res.cloudinary.com/hpiynhbhq/image/upload/v1517714734/buanjqlm7hnwn4zoy4rq.png","https://steemitimages.com/DQmTbR2H1oov6TRuoStjUBVHV8uopbb5ayrFKoSKk7mhm5S/Screen%20Shot%202018-04-30%20at%201.47.07%20AM.png","https://steemitimages.com/DQmNPg52fkqjbThcYWLGPymRcgHNjaSV5Yex33LLFtuhW5S/Screen%20Shot%202018-04-30%20at%201.51.19%20AM.png"],"moderator":{"account":"amosbastian","time":"2018-05-02T13:12:36.897Z","pending":false,"reviewed":true,"flagged":false},"questions":{"voters":["amosbastian"],"answers":[{"question_id":"dev-1","answer_id":"dev-1-a-2","user":"amosbastian","influence":100},{"question_id":"dev-2","answer_id":"dev-2-a-3","user":"amosbastian","influence":100},{"question_id":"dev-3","answer_id":"dev-3-a-2","user":"amosbastian","influence":100},{"question_id":"dev-4","answer_id":"dev-4-a-1","user":"amosbastian","influence":100},{"question_id":"dev-5","answer_id":"dev-5-a-2","user":"amosbastian","influence":100},{"question_id":"dev-6","answer_id":"dev-6-a-1","user":"amosbastian","influence":100},{"question_id":"dev-7","answer_id":"dev-7-a-1","user":"amosbastian","influence":100}],"total_influence":0,"most_rated":[{"question_id":"dev-1","answer_id":"dev-1-a-2","influence":100,"voters":["amosbastian"]},{"question_id":"dev-2","answer_id":"dev-2-a-3","influence":100,"voters":["amosbastian"]},{"question_id":"dev-3","answer_id":"dev-3-a-2","influence":100,"voters":["amosbastian"]},{"question_id":"dev-4","answer_id":"dev-4-a-1","influence":100,"voters":["amosbastian"]},{"question_id":"dev-5","answer_id":"dev-5-a-2","influence":100,"voters":["amosbastian"]},{"question_id":"dev-6","answer_id":"dev-6-a-1","influence":100,"voters":["amosbastian"]},{"question_id":"dev-7","answer_id":"dev-7-a-1","influence":100,"voters":["amosbastian"]}]},"score":66.25,"total_influence":100,"staff_pick":null,"staff_pick_by":null,"config":{"questions":[{"question":"How would you describe the formatting, language and overall presentation of the post?","question_id":"dev-1","answers":[{"answer":"The post is of very high quality.","answer_id":"dev-1-a-1","value":10},{"answer":"The post is of decent quality, but not spectacular in any way.","answer_id":"dev-1-a-2","value":7},{"answer":"The post is poorly written and/or formatted, but readable.","answer_id":"dev-1-a-3","value":3},{"answer":"The post is really hard to read and the content is barely understandable.","answer_id":"dev-1-a-4","value":0}]},{"question":"How would you rate the impact and significance of the contribution to the project and/or open source ecosystem in terms of uniqueness, usefulness and potential future applications?","question_id":"dev-2","answers":[{"answer":"This contribution adds high value and holds great significance for the project and/or open source ecosystem.","answer_id":"dev-2-a-1","value":35},{"answer":"This contribution adds significant value to the project and/or open source ecosystem. ","answer_id":"dev-2-a-2","value":23},{"answer":"This contribution adds some value to the project and/or open source ecosystem.","answer_id":"dev-2-a-3","value":12.5},{"answer":"This contribution hold no value and is insignificant in impact. ","answer_id":"dev-2-a-4","value":0}]},{"question":"How would you rate the total volume of work invested into this contribution?","question_id":"dev-3","answers":[{"answer":"This contribution appears to have demanded a lot of intensive work.","answer_id":"dev-3-a-1","value":20},{"answer":"This contribution appears to have required an average volume of work.","answer_id":"dev-3-a-2","value":14},{"answer":"This contribution shows some work done.","answer_id":"dev-3-a-3","value":6},{"answer":"This contribution shows no work done.","answer_id":"dev-3-a-4","value":0}]},{"question":"How would you rate the quality of the code submitted?","question_id":"dev-4","answers":[{"answer":"High - it follows all best practices. ","answer_id":"dev-4-a-1","value":20},{"answer":"Average - it follows most best practices.","answer_id":"dev-4-a-2","value":14},{"answer":"Low - it follows some best practices.","answer_id":"dev-4-a-3","value":6},{"answer":"Very low - it doesn't follow any best practices. ","answer_id":"dev-4-a-4","value":0}]},{"question":"How would you rate the knowledge and expertise necessary to fix the bug / implement the added feature(s)?","question_id":"dev-5","answers":[{"answer":"High - a lot of research and specific knowledge was required.","answer_id":"dev-5-a-1","value":7.5},{"answer":"Average - some research and knowledge was required.","answer_id":"dev-5-a-2","value":5.25},{"answer":"Low - not much knowledge or skill were required.","answer_id":"dev-5-a-3","value":2.25},{"answer":"Insignificant - no knowledge or skills were necessary.","answer_id":"dev-5-a-4","value":0}]},{"question":"How would you rate the accuracy and readability of the commit messages?","question_id":"dev-6","answers":[{"answer":"High - they are concise, descriptive and consistent. ","answer_id":"dev-6-a-1","value":2.5},{"answer":"Average - they are mostly concise, descriptive and consistent. ","answer_id":"dev-6-a-2","value":2},{"answer":"Low - they could be more concise, descriptive or consistent.","answer_id":"dev-6-a-3","value":0.75},{"answer":"Very low - they aren't concise, descriptive or consistent at all.","answer_id":"dev-6-a-4","value":0}]},{"question":"How do you rate the quality of the comments in the code?","question_id":"dev-7","answers":[{"answer":"High - everything is well-commented and adds to the readability of the code. ","answer_id":"dev-7-a-1","value":5},{"answer":"Average - most of the code is commented and most if it adds to the readability of the code.","answer_id":"dev-7-a-2","value":3},{"answer":"Low - little of the code is commented, but it still adds to the readability.","answer_id":"dev-7-a-3","value":1.5},{"answer":"Very low - the added comments provide no value or are not present at all.","answer_id":"dev-7-a-4","value":0}]}]}}"
created2018-04-30 06:56:06
last_update2018-05-02 13:12:36
depth0
children4
last_payout2018-05-07 06:56:06
cashout_time1969-12-31 23:59:59
total_payout_value123.688 HBD
curator_payout_value47.671 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length4,635
author_reputation31,454,326,251,184
root_title"QueryJane | Created periodic task to send notifications about new messages."
beneficiaries
0.
accountutopian.pay
weight1,500
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id52,976,490
net_rshares31,141,011,021,249
author_curate_reward""
vote details (17)
@a-0-0 ·
I will upvote and resteem your last blog post to my 36,000+ followers for free if you reply to this comment. Follow @a-0-0
properties (22)
authora-0-0
permlinkre-kitandres-queryjane-or-created-periodic-task-to-send-notifications-about-new-messages-20180430t065612362z
categoryutopian-io
json_metadata{"tags":["utopian-io"],"users":["a-0-0"],"app":"steemit/0.1"}
created2018-04-30 06:56:12
last_update2018-04-30 06:56:12
depth1
children0
last_payout2018-05-07 06:56:12
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length122
author_reputation-4,863,186,238,920
root_title"QueryJane | Created periodic task to send notifications about new messages."
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id52,976,517
net_rshares0
@amosbastian ·
$0.05
Thanks for the contribution. It has been approved.

That huey decorator seems really cool, never knew that was a thing! I will definitely have to do some more research about it.

----------------------------------------------------------------------
Need help? Write a ticket on https://support.utopian.io.
Chat with us on [Discord](https://discord.gg/uTyJkNm).

**[[utopian-moderator]](https://utopian.io/moderators)**
👍  
properties (23)
authoramosbastian
permlinkre-kitandres-queryjane-or-created-periodic-task-to-send-notifications-about-new-messages-20180502t131443874z
categoryutopian-io
json_metadata{"tags":["utopian-io"],"community":"utopian","app":"utopian/1.0.0"}
created2018-05-02 13:14:45
last_update2018-05-02 13:14:45
depth1
children1
last_payout2018-05-09 13:14:45
cashout_time1969-12-31 23:59:59
total_payout_value0.052 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length419
author_reputation174,473,586,900,705
root_title"QueryJane | Created periodic task to send notifications about new messages."
beneficiaries
0.
accountutopian.pay
weight1,500
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id53,439,691
net_rshares13,988,359,467
author_curate_reward""
vote details (1)
@kit.andres ·
Thank you so much!!! Yes, I think Huey is a great library to manage asynchronous tasks, I prefer it over Celery, it's very easy to setup and use.
properties (22)
authorkit.andres
permlinkre-amosbastian-re-kitandres-queryjane-or-created-periodic-task-to-send-notifications-about-new-messages-20180503t205908197z
categoryutopian-io
json_metadata{"tags":["utopian-io"],"app":"steemit/0.1"}
created2018-05-03 20:59:09
last_update2018-05-03 20:59:09
depth2
children0
last_payout2018-05-10 20:59:09
cashout_time1969-12-31 23:59:59
total_payout_value0.000 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length145
author_reputation31,454,326,251,184
root_title"QueryJane | Created periodic task to send notifications about new messages."
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id53,710,012
net_rshares0
@utopian-io ·
$4.18
#### Hey @kit.andres
We're already looking forward to your next contribution!
##### Decentralised Rewards
Share your expertise and knowledge by rating contributions made by others on Utopian.io to help us reward the best contributions together.
##### Utopian Witness!
<a href="https://v2.steemconnect.com/sign/account-witness-vote?witness=utopian-io&approve=1">Vote for Utopian Witness!</a> We are made of developers, system administrators, entrepreneurs, artists, content creators, thinkers. We embrace every nationality, mindset and belief.

**Want to chat? Join us on Discord https://discord.me/utopian-io**
👍  
properties (23)
authorutopian-io
permlinkre-kitandres-queryjane-or-created-periodic-task-to-send-notifications-about-new-messages-20180502t140049109z
categoryutopian-io
json_metadata{"tags":["utopian-io"],"community":"utopian","app":"utopian/1.0.0"}
created2018-05-02 14:00:51
last_update2018-05-02 14:00:51
depth1
children0
last_payout2018-05-09 14:00:51
cashout_time1969-12-31 23:59:59
total_payout_value4.178 HBD
curator_payout_value0.000 HBD
pending_payout_value0.000 HBD
promoted0.000 HBD
body_length610
author_reputation152,955,367,999,756
root_title"QueryJane | Created periodic task to send notifications about new messages."
beneficiaries[]
max_accepted_payout1,000,000.000 HBD
percent_hbd10,000
post_id53,447,609
net_rshares739,480,614,985
author_curate_reward""
vote details (1)