1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
%global _empty_manifest_terminate_build 0
Name: python-asana
Version: 3.2.0
Release: 1
Summary: Asana API client
License: MIT
URL: http://github.com/asana/python-asana
Source0: https://mirrors.nju.edu.cn/pypi/web/packages/61/84/7dcdb78f3ddb1011f628812cab45a5616e572099f42e9279756e92ad7230/asana-3.2.0.tar.gz
BuildArch: noarch
Requires: python3-requests
Requires: python3-requests-oauthlib
%description
### Personal Access Token
Create a client using your Asana Personal Access Token:
client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
### OAuth 2
Asana supports OAuth 2. `asana` handles some of the details of the OAuth flow for you.
Create a client using your OAuth Client ID and secret:
client = asana.Client.oauth(
client_id='ASANA_CLIENT_ID',
client_secret='ASANA_CLIENT_SECRET',
redirect_uri='https://yourapp.com/auth/asana/callback'
)
Redirect the user to the authorization URL obtained from the client's `session` object:
(url, state) = client.session.authorization_url()
When the user is redirected back to your callback, check the `state` URL parameter matches, then pass the `code` parameter to obtain a bearer token:
if request.params['state'] == state:
token = client.session.fetch_token(code=request.params['code'])
# ...
else:
# error! possible CSRF attack
Note: if you're writing a non-browser-based application (e.x. a command line tool) you can use the special redirect URI `urn:ietf:wg:oauth:2.0:oob` to prompt the user to copy and paste the code into the application.
%package -n python3-asana
Summary: Asana API client
Provides: python-asana
BuildRequires: python3-devel
BuildRequires: python3-setuptools
BuildRequires: python3-pip
%description -n python3-asana
### Personal Access Token
Create a client using your Asana Personal Access Token:
client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
### OAuth 2
Asana supports OAuth 2. `asana` handles some of the details of the OAuth flow for you.
Create a client using your OAuth Client ID and secret:
client = asana.Client.oauth(
client_id='ASANA_CLIENT_ID',
client_secret='ASANA_CLIENT_SECRET',
redirect_uri='https://yourapp.com/auth/asana/callback'
)
Redirect the user to the authorization URL obtained from the client's `session` object:
(url, state) = client.session.authorization_url()
When the user is redirected back to your callback, check the `state` URL parameter matches, then pass the `code` parameter to obtain a bearer token:
if request.params['state'] == state:
token = client.session.fetch_token(code=request.params['code'])
# ...
else:
# error! possible CSRF attack
Note: if you're writing a non-browser-based application (e.x. a command line tool) you can use the special redirect URI `urn:ietf:wg:oauth:2.0:oob` to prompt the user to copy and paste the code into the application.
%package help
Summary: Development documents and examples for asana
Provides: python3-asana-doc
%description help
### Personal Access Token
Create a client using your Asana Personal Access Token:
client = asana.Client.access_token('PERSONAL_ACCESS_TOKEN')
### OAuth 2
Asana supports OAuth 2. `asana` handles some of the details of the OAuth flow for you.
Create a client using your OAuth Client ID and secret:
client = asana.Client.oauth(
client_id='ASANA_CLIENT_ID',
client_secret='ASANA_CLIENT_SECRET',
redirect_uri='https://yourapp.com/auth/asana/callback'
)
Redirect the user to the authorization URL obtained from the client's `session` object:
(url, state) = client.session.authorization_url()
When the user is redirected back to your callback, check the `state` URL parameter matches, then pass the `code` parameter to obtain a bearer token:
if request.params['state'] == state:
token = client.session.fetch_token(code=request.params['code'])
# ...
else:
# error! possible CSRF attack
Note: if you're writing a non-browser-based application (e.x. a command line tool) you can use the special redirect URI `urn:ietf:wg:oauth:2.0:oob` to prompt the user to copy and paste the code into the application.
%prep
%autosetup -n asana-3.2.0
%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-asana -f filelist.lst
%dir %{python3_sitelib}/*
%files help -f doclist.lst
%{_docdir}/*
%changelog
* Mon Apr 10 2023 Python_Bot <Python_Bot@openeuler.org> - 3.2.0-1
- Package Spec generated
|