ckanext-comments


Nameckanext-comments JSON
Version 0.3.1.post1 PyPI version JSON
download
home_pageNone
SummaryNone
upload_time2024-10-17 14:32:01
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseAGPL
keywords ckan
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage
            [![Tests](https://github.com/DataShades/ckanext-comments/actions/workflows/test.yml/badge.svg)](https://github.com/DataShades/ckanext-comments/actions/workflows/test.yml)

# ckanext-comments

Add comment-trees to CKAN pages.

This plugins provides comment threads linked to any of the main CKAN entities:

* datasets
* resources
* groups
* organizations
* users.

All the features are API-first, so anything you can do via UI, can be done via API.

No changes to the WebUI are done by default. One have to include a snippet into
Jinja2 template in order to show the comments on a page.
```jinja2
{# subject_type := package | group | resource | user #}
{% snippet 'comments/snippets/thread.html', subject_id=pkg.id, subject_type='package' %}
```

:info: For the datasets it also can be achieved by enabling
`ckanext.comments.enable_default_dataset_comments` option.

## Requirements

* python >= 3.7
* CKAN >= 2.9

## Installation

To install ckanext-comments:

1. Install python package
  ```sh
  pip install ckanext-comments
  ```

1. Add `comments` to the `ckan.plugins` setting in your CKAN
   config file

1. Apply database migrations
  ```sh
  ckan db upgrade -p comments
  ```

1. Add `cooments/snippets/thread.html` to your `package/read.html` template, like this:
  ```jinja2
  {% ckan_extends %}

  {% block primary_content_inner %}
    {{ super() }}
    {% snippet 'comments/snippets/thread.html', subject_id=pkg.id, subject_type='package' %}
  {% endblock primary_content_inner %}
  ```

## Config settings
```ini

# Require comment approval in order to make it visible
# (optional, default: true).
ckanext.comments.require_approval = false

# Editor(admin) can edit draft comments
# (optional, default: true).
ckanext.comments.draft_edits = true

# Author can edit own draft comments
# (optional, default: true).
ckanext.comments.draft_edits_by_author = false

# Editor(admin) can edit approved comments
# (optional, default: false).
ckanext.comments.approved_edits = false

# Author can edit own approved comments
# (optional, default: false).
ckanext.comments.approved_edits_by_author = false

# Number of reply levels that are shown on mobile layout
# (optional, default: 3).
ckanext.comments.mobile_depth_threshold = 3

# Include default thread implementation on the dataset page
# (optional, default: false).
ckanext.comments.enable_default_dataset_comments = true

# Register custom getter for a subject by providing a path to a function
# ckanext.comments.subject.{self.subject_type}_getter = path
# The function must accept an ID and return a model object
ckanext.comments.subject.question_getter = ckanext.msf_ask_question.model.question_getter
```



## API

### `comments_thread_create`
Create a thread for the subject.

Args:
* subject_id(str): unique ID of the commented entity
* subject_type(str:package|resource|user|group): type of the commented entity

### `comments_thread_show`
Show the subject's thread.

Args:
* subject_id(str): unique ID of the commented entity
* subject_type(str:package|resource|user|group): type of the commented entity
* init_missing(bool, optional): return an empty thread instead of 404
* include_comments(bool, optional): show comments from the thread
* include_author(bool, optional): show authors of the comments
* combine_comments(bool, optional): combine comments into a tree-structure
* after_date(str:ISO date, optional): show comments only since the given date

### `comments_thread_delete`
Delete the thread.

Args:
* id(str): ID of the thread

### `comments_comment_create`
Add a comment to the thread.

Args:
* subject_id(str): unique ID of the commented entity
* subject_type(str:package|resource|user|group): type of the commented entity
* content(str): comment's message
* reply_to_id(str, optional): reply to the existing comment
* create_thread(bool, optional): create a new thread if it doesn't exist yet

### `comments_comment_show`
Show the details of the comment

Args:
* id(str): ID of the comment

### `comments_comment_approve`
Approve draft comment

Args:
* id(str): ID of the comment

### `comments_comment_delete`
Remove existing comment

Args:
* id(str): ID of the comment

### `comments_comment_update`
Update existing comment

Args:
* id(str): ID of the comment
* content(str): comment's message


## Tests

To run the tests, do:
```sh
pytest
```


## License

[AGPL](https://www.gnu.org/licenses/agpl-3.0.en.html)

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "ckanext-comments",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "DataShades <datashades@linkdigital.com.au>",
    "keywords": "CKAN",
    "author": null,
    "author_email": "DataShades <datashades@linkdigital.com.au>, Sergey Motornyuk <sergey.motornyuk@linkdigital.com.au>",
    "download_url": "https://files.pythonhosted.org/packages/d5/b0/dc7648a76ba744f5767d0a6853c493902d1a674f99ff9164d06999875048/ckanext_comments-0.3.1.post1.tar.gz",
    "platform": null,
    "description": "[![Tests](https://github.com/DataShades/ckanext-comments/actions/workflows/test.yml/badge.svg)](https://github.com/DataShades/ckanext-comments/actions/workflows/test.yml)\n\n# ckanext-comments\n\nAdd comment-trees to CKAN pages.\n\nThis plugins provides comment threads linked to any of the main CKAN entities:\n\n* datasets\n* resources\n* groups\n* organizations\n* users.\n\nAll the features are API-first, so anything you can do via UI, can be done via API.\n\nNo changes to the WebUI are done by default. One have to include a snippet into\nJinja2 template in order to show the comments on a page.\n```jinja2\n{# subject_type := package | group | resource | user #}\n{% snippet 'comments/snippets/thread.html', subject_id=pkg.id, subject_type='package' %}\n```\n\n:info: For the datasets it also can be achieved by enabling\n`ckanext.comments.enable_default_dataset_comments` option.\n\n## Requirements\n\n* python >= 3.7\n* CKAN >= 2.9\n\n## Installation\n\nTo install ckanext-comments:\n\n1. Install python package\n  ```sh\n  pip install ckanext-comments\n  ```\n\n1. Add `comments` to the `ckan.plugins` setting in your CKAN\n   config file\n\n1. Apply database migrations\n  ```sh\n  ckan db upgrade -p comments\n  ```\n\n1. Add `cooments/snippets/thread.html` to your `package/read.html` template, like this:\n  ```jinja2\n  {% ckan_extends %}\n\n  {% block primary_content_inner %}\n    {{ super() }}\n    {% snippet 'comments/snippets/thread.html', subject_id=pkg.id, subject_type='package' %}\n  {% endblock primary_content_inner %}\n  ```\n\n## Config settings\n```ini\n\n# Require comment approval in order to make it visible\n# (optional, default: true).\nckanext.comments.require_approval = false\n\n# Editor(admin) can edit draft comments\n# (optional, default: true).\nckanext.comments.draft_edits = true\n\n# Author can edit own draft comments\n# (optional, default: true).\nckanext.comments.draft_edits_by_author = false\n\n# Editor(admin) can edit approved comments\n# (optional, default: false).\nckanext.comments.approved_edits = false\n\n# Author can edit own approved comments\n# (optional, default: false).\nckanext.comments.approved_edits_by_author = false\n\n# Number of reply levels that are shown on mobile layout\n# (optional, default: 3).\nckanext.comments.mobile_depth_threshold = 3\n\n# Include default thread implementation on the dataset page\n# (optional, default: false).\nckanext.comments.enable_default_dataset_comments = true\n\n# Register custom getter for a subject by providing a path to a function\n# ckanext.comments.subject.{self.subject_type}_getter = path\n# The function must accept an ID and return a model object\nckanext.comments.subject.question_getter = ckanext.msf_ask_question.model.question_getter\n```\n\n\n\n## API\n\n### `comments_thread_create`\nCreate a thread for the subject.\n\nArgs:\n* subject_id(str): unique ID of the commented entity\n* subject_type(str:package|resource|user|group): type of the commented entity\n\n### `comments_thread_show`\nShow the subject's thread.\n\nArgs:\n* subject_id(str): unique ID of the commented entity\n* subject_type(str:package|resource|user|group): type of the commented entity\n* init_missing(bool, optional): return an empty thread instead of 404\n* include_comments(bool, optional): show comments from the thread\n* include_author(bool, optional): show authors of the comments\n* combine_comments(bool, optional): combine comments into a tree-structure\n* after_date(str:ISO date, optional): show comments only since the given date\n\n### `comments_thread_delete`\nDelete the thread.\n\nArgs:\n* id(str): ID of the thread\n\n### `comments_comment_create`\nAdd a comment to the thread.\n\nArgs:\n* subject_id(str): unique ID of the commented entity\n* subject_type(str:package|resource|user|group): type of the commented entity\n* content(str): comment's message\n* reply_to_id(str, optional): reply to the existing comment\n* create_thread(bool, optional): create a new thread if it doesn't exist yet\n\n### `comments_comment_show`\nShow the details of the comment\n\nArgs:\n* id(str): ID of the comment\n\n### `comments_comment_approve`\nApprove draft comment\n\nArgs:\n* id(str): ID of the comment\n\n### `comments_comment_delete`\nRemove existing comment\n\nArgs:\n* id(str): ID of the comment\n\n### `comments_comment_update`\nUpdate existing comment\n\nArgs:\n* id(str): ID of the comment\n* content(str): comment's message\n\n\n## Tests\n\nTo run the tests, do:\n```sh\npytest\n```\n\n\n## License\n\n[AGPL](https://www.gnu.org/licenses/agpl-3.0.en.html)\n",
    "bugtrack_url": null,
    "license": "AGPL",
    "summary": null,
    "version": "0.3.1.post1",
    "project_urls": {
        "Homepage": "https://github.com/DataShades/ckanext-comments"
    },
    "split_keywords": [
        "ckan"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2d9a931c4a2ea68e26565c392c0d889ce14e28dd2fbfeae977138d18462364f7",
                "md5": "a075d3468c0b697c4d799708ecb4f036",
                "sha256": "13cdd479cd950cf39b638a579ce91864ec1fbee5bec80b234f7664f3d95332eb"
            },
            "downloads": -1,
            "filename": "ckanext_comments-0.3.1.post1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "a075d3468c0b697c4d799708ecb4f036",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 47051,
            "upload_time": "2024-10-17T14:31:59",
            "upload_time_iso_8601": "2024-10-17T14:31:59.439059Z",
            "url": "https://files.pythonhosted.org/packages/2d/9a/931c4a2ea68e26565c392c0d889ce14e28dd2fbfeae977138d18462364f7/ckanext_comments-0.3.1.post1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d5b0dc7648a76ba744f5767d0a6853c493902d1a674f99ff9164d06999875048",
                "md5": "161106beee8213122c98273ad4c140ba",
                "sha256": "e52c022badc39613b7813590f5bbf339b0031c8260a0120baf70cedae0266fb7"
            },
            "downloads": -1,
            "filename": "ckanext_comments-0.3.1.post1.tar.gz",
            "has_sig": false,
            "md5_digest": "161106beee8213122c98273ad4c140ba",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 37695,
            "upload_time": "2024-10-17T14:32:01",
            "upload_time_iso_8601": "2024-10-17T14:32:01.653355Z",
            "url": "https://files.pythonhosted.org/packages/d5/b0/dc7648a76ba744f5767d0a6853c493902d1a674f99ff9164d06999875048/ckanext_comments-0.3.1.post1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-10-17 14:32:01",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "DataShades",
    "github_project": "ckanext-comments",
    "travis_ci": false,
    "coveralls": true,
    "github_actions": true,
    "requirements": [],
    "lcname": "ckanext-comments"
}
        
Elapsed time: 0.30095s