%global _empty_manifest_terminate_build 0
Name: python-django-friendship
Version: 1.9.6
Release: 1
Summary: django-friendship provides an easy extensible interface for following and friendship
License: BSD-3-Clause
URL: https://github.com/revsys/django-friendship/
Source0: https://mirrors.nju.edu.cn/pypi/web/packages/2d/af/2b58320c47e1cc99d45b73915c818206cb669e55a8bc4de3d1ff73a74a3d/django_friendship-1.9.6.tar.gz
BuildArch: noarch
Requires: python3-black
Requires: python3-pytest
Requires: python3-pytest-django
Requires: python3-pytest-cov
Requires: python3-pytest-pythonpath
Requires: python3-factory-boy
%description
# django-friendship
[![CI](https://github.com/revsys/django-friendship/actions/workflows/actions.yml/badge.svg)](https://github.com/revsys/django-friendship/actions/workflows/actions.yml)
This application enables you to create and manage follows, blocks and bi-directional friendships between users. It features:
- Friendship request objects that can be accepted, rejected, canceled, or marked as viewed.
- Hooks to easily list all friend requests sent or received by a given user, filtered by the status of the request.
- A blocklist for each user of users they've blocked.
- Tags to include information about friendships, blocks and follows in your templates.
- Integration with `AUTH_USER_MODEL`.
- Validation to prevent common mistakes.
- Faster server response time through caching
## Requirements
** Django 3.2 since v1.9.1 **
Previously: **Django 1.11+** since v1.7.0 (latest release supporting **Django 1.10** is v1.6.0)
## Installation
1. `pip install django-friendship`
2. add `"friendship"` to `INSTALLED_APPS` and run `python manage.py migrate`.
3. Use the friendship manager in your own views, or wire up the URLconf to include the builtin views:
```python
urlpatterns = [
...
path('friendship/', include('friendship.urls'))
...
]
```
Note: If you are migrating from django-friendship `v1.6.x`, you'll need to rollback your migrations and fake
migration `0002`
```shell
$ ./manage.py migrate friendship 0001
$ ./manage.py migrate friendship 0002 --fake
```
If you're migrating from `v1.7.x`, you'll likely have to fake `0003` as well:
```shell
$ ./manage.py migrate friendship 0003 --fake
```
## Usage
`django-friendship` provides a free API that gives you several ways to create and manage friendship requests or follows in your views. Add the following at the top of your `views.py`:
```python
from django.contrib.auth.models import User
from friendship.models import Friend, Follow, Block
```
### Getting Data about Friendships
- List all of a user's friends: `Friend.objects.friends(request.user)`
- List all unread friendship requests: `Friend.objects.unread_requests(user=request.user)`
- List all unrejected friendship requests: `Friend.objects.unrejected_requests(user=request.user)`
- Count of all unrejected friendship requests: `Friend.objects.unrejected_request_count(user=request.user)`
- List all rejected friendship requests: `Friend.objects.rejected_requests(user=request.user)`
- Count of all rejected friendship requests: `Friend.objects.rejected_request_count(user=request.user)`
- List of all sent friendship requests: `Friend.objects.sent_requests(user=request.user)`
- Test if two users are friends: `Friend.objects.are_friends(request.user, other_user) == True`
### Getting Data about Follows
- List of a user's followers: `Follow.objects.followers(request.user)`
- List of who a user is following: `Follow.objects.following(request.user)`
### Getting Data about Blocks
- List of a user's blockers: `Block.objects.blocked(request.user)`
- List of who a user is blocking: `Block.objects.blocking(request.user)`
- Test if a user is blocked: `Block.objects.is_blocked(request.user, other_user) == True`
### Managing Friendships and Follows
#### Create a friendship request:
```python
other_user = User.objects.get(pk=1)
Friend.objects.add_friend(
request.user, # The sender
other_user, # The recipient
message='Hi! I would like to add you') # This message is optional
```
#### Let the user who received the request respond:
```python
from friendship.models import FriendshipRequest
friend_request = FriendshipRequest.objects.get(from_user=request.user, to_user=other_user)
friend_request.accept()
# or friend_request.reject()
```
#### To remove the friendship relationship between `request.user` and `other_user`, do the following:
```python
Friend.objects.remove_friend(request.user, other_user)
```
#### Make request.user a follower of other_user:
```python
Follow.objects.add_follower(request.user, other_user)
```
#### Make request.user block other_user:
```python
Block.objects.add_block(request.user, other_user)
```
#### Make request.user unblock other_user:
```python
Block.objects.remove_block(request.user, other_user)
```
### Templates
You can use `django-friendship` tags in your templates. First enter:
```django
{% load friendshiptags %}
```
Then use any of the following:
```django
{% friends request.user %}
{% followers request.user %}
{% following request.user %}
{% friend_requests request.user %}
{% blockers request.user %}
{% blocking request.user %}
```
### Signals
`django-friendship` emits the following signals:
- friendship_request_created
- friendship_request_rejected
- friendship_request_canceled
- friendship_request_accepted
- friendship_removed
- follower_created
- following_created
- follower_removed
- following_removed
- block_created
- block_removed
### Contributing
Development [takes place on GitHub](https://github.com/revsys/django-friendship). Bug reports, patches, and fixes are always welcome!
# Need help?
[REVSYS](http://www.revsys.com?utm_medium=github&utm_source=django-test-plus) can help with your Python, Django, and infrastructure projects. If you have a question about this project, please open a GitHub issue. If you love us and want to keep track of our goings-on, here's where you can find us online:
%package -n python3-django-friendship
Summary: django-friendship provides an easy extensible interface for following and friendship
Provides: python-django-friendship
BuildRequires: python3-devel
BuildRequires: python3-setuptools
BuildRequires: python3-pip
%description -n python3-django-friendship
# django-friendship
[![CI](https://github.com/revsys/django-friendship/actions/workflows/actions.yml/badge.svg)](https://github.com/revsys/django-friendship/actions/workflows/actions.yml)
This application enables you to create and manage follows, blocks and bi-directional friendships between users. It features:
- Friendship request objects that can be accepted, rejected, canceled, or marked as viewed.
- Hooks to easily list all friend requests sent or received by a given user, filtered by the status of the request.
- A blocklist for each user of users they've blocked.
- Tags to include information about friendships, blocks and follows in your templates.
- Integration with `AUTH_USER_MODEL`.
- Validation to prevent common mistakes.
- Faster server response time through caching
## Requirements
** Django 3.2 since v1.9.1 **
Previously: **Django 1.11+** since v1.7.0 (latest release supporting **Django 1.10** is v1.6.0)
## Installation
1. `pip install django-friendship`
2. add `"friendship"` to `INSTALLED_APPS` and run `python manage.py migrate`.
3. Use the friendship manager in your own views, or wire up the URLconf to include the builtin views:
```python
urlpatterns = [
...
path('friendship/', include('friendship.urls'))
...
]
```
Note: If you are migrating from django-friendship `v1.6.x`, you'll need to rollback your migrations and fake
migration `0002`
```shell
$ ./manage.py migrate friendship 0001
$ ./manage.py migrate friendship 0002 --fake
```
If you're migrating from `v1.7.x`, you'll likely have to fake `0003` as well:
```shell
$ ./manage.py migrate friendship 0003 --fake
```
## Usage
`django-friendship` provides a free API that gives you several ways to create and manage friendship requests or follows in your views. Add the following at the top of your `views.py`:
```python
from django.contrib.auth.models import User
from friendship.models import Friend, Follow, Block
```
### Getting Data about Friendships
- List all of a user's friends: `Friend.objects.friends(request.user)`
- List all unread friendship requests: `Friend.objects.unread_requests(user=request.user)`
- List all unrejected friendship requests: `Friend.objects.unrejected_requests(user=request.user)`
- Count of all unrejected friendship requests: `Friend.objects.unrejected_request_count(user=request.user)`
- List all rejected friendship requests: `Friend.objects.rejected_requests(user=request.user)`
- Count of all rejected friendship requests: `Friend.objects.rejected_request_count(user=request.user)`
- List of all sent friendship requests: `Friend.objects.sent_requests(user=request.user)`
- Test if two users are friends: `Friend.objects.are_friends(request.user, other_user) == True`
### Getting Data about Follows
- List of a user's followers: `Follow.objects.followers(request.user)`
- List of who a user is following: `Follow.objects.following(request.user)`
### Getting Data about Blocks
- List of a user's blockers: `Block.objects.blocked(request.user)`
- List of who a user is blocking: `Block.objects.blocking(request.user)`
- Test if a user is blocked: `Block.objects.is_blocked(request.user, other_user) == True`
### Managing Friendships and Follows
#### Create a friendship request:
```python
other_user = User.objects.get(pk=1)
Friend.objects.add_friend(
request.user, # The sender
other_user, # The recipient
message='Hi! I would like to add you') # This message is optional
```
#### Let the user who received the request respond:
```python
from friendship.models import FriendshipRequest
friend_request = FriendshipRequest.objects.get(from_user=request.user, to_user=other_user)
friend_request.accept()
# or friend_request.reject()
```
#### To remove the friendship relationship between `request.user` and `other_user`, do the following:
```python
Friend.objects.remove_friend(request.user, other_user)
```
#### Make request.user a follower of other_user:
```python
Follow.objects.add_follower(request.user, other_user)
```
#### Make request.user block other_user:
```python
Block.objects.add_block(request.user, other_user)
```
#### Make request.user unblock other_user:
```python
Block.objects.remove_block(request.user, other_user)
```
### Templates
You can use `django-friendship` tags in your templates. First enter:
```django
{% load friendshiptags %}
```
Then use any of the following:
```django
{% friends request.user %}
{% followers request.user %}
{% following request.user %}
{% friend_requests request.user %}
{% blockers request.user %}
{% blocking request.user %}
```
### Signals
`django-friendship` emits the following signals:
- friendship_request_created
- friendship_request_rejected
- friendship_request_canceled
- friendship_request_accepted
- friendship_removed
- follower_created
- following_created
- follower_removed
- following_removed
- block_created
- block_removed
### Contributing
Development [takes place on GitHub](https://github.com/revsys/django-friendship). Bug reports, patches, and fixes are always welcome!
# Need help?
[REVSYS](http://www.revsys.com?utm_medium=github&utm_source=django-test-plus) can help with your Python, Django, and infrastructure projects. If you have a question about this project, please open a GitHub issue. If you love us and want to keep track of our goings-on, here's where you can find us online:
%package help
Summary: Development documents and examples for django-friendship
Provides: python3-django-friendship-doc
%description help
# django-friendship
[![CI](https://github.com/revsys/django-friendship/actions/workflows/actions.yml/badge.svg)](https://github.com/revsys/django-friendship/actions/workflows/actions.yml)
This application enables you to create and manage follows, blocks and bi-directional friendships between users. It features:
- Friendship request objects that can be accepted, rejected, canceled, or marked as viewed.
- Hooks to easily list all friend requests sent or received by a given user, filtered by the status of the request.
- A blocklist for each user of users they've blocked.
- Tags to include information about friendships, blocks and follows in your templates.
- Integration with `AUTH_USER_MODEL`.
- Validation to prevent common mistakes.
- Faster server response time through caching
## Requirements
** Django 3.2 since v1.9.1 **
Previously: **Django 1.11+** since v1.7.0 (latest release supporting **Django 1.10** is v1.6.0)
## Installation
1. `pip install django-friendship`
2. add `"friendship"` to `INSTALLED_APPS` and run `python manage.py migrate`.
3. Use the friendship manager in your own views, or wire up the URLconf to include the builtin views:
```python
urlpatterns = [
...
path('friendship/', include('friendship.urls'))
...
]
```
Note: If you are migrating from django-friendship `v1.6.x`, you'll need to rollback your migrations and fake
migration `0002`
```shell
$ ./manage.py migrate friendship 0001
$ ./manage.py migrate friendship 0002 --fake
```
If you're migrating from `v1.7.x`, you'll likely have to fake `0003` as well:
```shell
$ ./manage.py migrate friendship 0003 --fake
```
## Usage
`django-friendship` provides a free API that gives you several ways to create and manage friendship requests or follows in your views. Add the following at the top of your `views.py`:
```python
from django.contrib.auth.models import User
from friendship.models import Friend, Follow, Block
```
### Getting Data about Friendships
- List all of a user's friends: `Friend.objects.friends(request.user)`
- List all unread friendship requests: `Friend.objects.unread_requests(user=request.user)`
- List all unrejected friendship requests: `Friend.objects.unrejected_requests(user=request.user)`
- Count of all unrejected friendship requests: `Friend.objects.unrejected_request_count(user=request.user)`
- List all rejected friendship requests: `Friend.objects.rejected_requests(user=request.user)`
- Count of all rejected friendship requests: `Friend.objects.rejected_request_count(user=request.user)`
- List of all sent friendship requests: `Friend.objects.sent_requests(user=request.user)`
- Test if two users are friends: `Friend.objects.are_friends(request.user, other_user) == True`
### Getting Data about Follows
- List of a user's followers: `Follow.objects.followers(request.user)`
- List of who a user is following: `Follow.objects.following(request.user)`
### Getting Data about Blocks
- List of a user's blockers: `Block.objects.blocked(request.user)`
- List of who a user is blocking: `Block.objects.blocking(request.user)`
- Test if a user is blocked: `Block.objects.is_blocked(request.user, other_user) == True`
### Managing Friendships and Follows
#### Create a friendship request:
```python
other_user = User.objects.get(pk=1)
Friend.objects.add_friend(
request.user, # The sender
other_user, # The recipient
message='Hi! I would like to add you') # This message is optional
```
#### Let the user who received the request respond:
```python
from friendship.models import FriendshipRequest
friend_request = FriendshipRequest.objects.get(from_user=request.user, to_user=other_user)
friend_request.accept()
# or friend_request.reject()
```
#### To remove the friendship relationship between `request.user` and `other_user`, do the following:
```python
Friend.objects.remove_friend(request.user, other_user)
```
#### Make request.user a follower of other_user:
```python
Follow.objects.add_follower(request.user, other_user)
```
#### Make request.user block other_user:
```python
Block.objects.add_block(request.user, other_user)
```
#### Make request.user unblock other_user:
```python
Block.objects.remove_block(request.user, other_user)
```
### Templates
You can use `django-friendship` tags in your templates. First enter:
```django
{% load friendshiptags %}
```
Then use any of the following:
```django
{% friends request.user %}
{% followers request.user %}
{% following request.user %}
{% friend_requests request.user %}
{% blockers request.user %}
{% blocking request.user %}
```
### Signals
`django-friendship` emits the following signals:
- friendship_request_created
- friendship_request_rejected
- friendship_request_canceled
- friendship_request_accepted
- friendship_removed
- follower_created
- following_created
- follower_removed
- following_removed
- block_created
- block_removed
### Contributing
Development [takes place on GitHub](https://github.com/revsys/django-friendship). Bug reports, patches, and fixes are always welcome!
# Need help?
[REVSYS](http://www.revsys.com?utm_medium=github&utm_source=django-test-plus) can help with your Python, Django, and infrastructure projects. If you have a question about this project, please open a GitHub issue. If you love us and want to keep track of our goings-on, here's where you can find us online:
%prep
%autosetup -n django-friendship-1.9.6
%build
%py3_build
%install
%py3_install
install -d -m755 %{buildroot}/%{_pkgdocdir}
if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
pushd %{buildroot}
if [ -d usr/lib ]; then
find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
fi
if [ -d usr/lib64 ]; then
find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
fi
if [ -d usr/bin ]; then
find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
fi
if [ -d usr/sbin ]; then
find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
fi
touch doclist.lst
if [ -d usr/share/man ]; then
find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
fi
popd
mv %{buildroot}/filelist.lst .
mv %{buildroot}/doclist.lst .
%files -n python3-django-friendship -f filelist.lst
%dir %{python3_sitelib}/*
%files help -f doclist.lst
%{_docdir}/*
%changelog
* Tue May 30 2023 Python_Bot - 1.9.6-1
- Package Spec generated