-
Notifications
You must be signed in to change notification settings - Fork 37
Expand file tree
/
Copy pathpush.html
More file actions
205 lines (173 loc) · 16.2 KB
/
push.html
File metadata and controls
205 lines (173 loc) · 16.2 KB
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
<!DOCTYPE html>
<html class="writer-html5" lang="zh-CN" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>leancloud.push — LeanCloud-Python-SDK 2.6.1 文档</title>
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
<!--[if lt IE 9]>
<script src="../../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
<script src="../../_static/jquery.js"></script>
<script src="../../_static/underscore.js"></script>
<script src="../../_static/doctools.js"></script>
<script src="../../_static/translations.js"></script>
<script src="../../_static/js/theme.js"></script>
<link rel="index" title="索引" href="../../genindex.html" />
<link rel="search" title="搜索" href="../../search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../index.html" class="icon icon-home"> LeanCloud-Python-SDK
</a>
<div class="version">
2.6
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="在文档中搜索" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<!-- Local TOC -->
<div class="local-toc"></div>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../index.html">LeanCloud-Python-SDK</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../index.html" class="icon icon-home"></a> »</li>
<li><a href="../index.html">模块代码</a> »</li>
<li>leancloud.push</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1>leancloud.push 源代码</h1><div class="highlight"><pre>
<span></span><span class="c1"># coding: utf-8</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">absolute_import</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">division</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">unicode_literals</span>
<span class="kn">import</span> <span class="nn">arrow</span>
<span class="kn">import</span> <span class="nn">dateutil.tz</span> <span class="k">as</span> <span class="nn">tz</span>
<span class="kn">from</span> <span class="nn">leancloud.object_</span> <span class="kn">import</span> <span class="n">Object</span>
<span class="kn">from</span> <span class="nn">leancloud.errors</span> <span class="kn">import</span> <span class="n">LeanCloudError</span>
<span class="kn">from</span> <span class="nn">leancloud</span> <span class="kn">import</span> <span class="n">client</span>
<span class="n">__author__</span> <span class="o">=</span> <span class="s2">"asaka <[email protected]>"</span>
<div class="viewcode-block" id="Installation"><a class="viewcode-back" href="../../index.html#leancloud.push.Installation">[文档]</a><span class="k">class</span> <span class="nc">Installation</span><span class="p">(</span><span class="n">Object</span><span class="p">):</span>
<span class="k">pass</span></div>
<div class="viewcode-block" id="Notification"><a class="viewcode-back" href="../../index.html#leancloud.push.Notification">[文档]</a><span class="k">class</span> <span class="nc">Notification</span><span class="p">(</span><span class="n">Object</span><span class="p">):</span>
<div class="viewcode-block" id="Notification.fetch"><a class="viewcode-back" href="../../index.html#leancloud.push.Notification.fetch">[文档]</a> <span class="k">def</span> <span class="nf">fetch</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">"""同步服务器的 Notification 数据</span>
<span class="sd"> """</span>
<span class="n">response</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"/tables/Notifications/</span><span class="si">{0}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">id</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_update_data</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">json</span><span class="p">())</span></div>
<div class="viewcode-block" id="Notification.save"><a class="viewcode-back" href="../../index.html#leancloud.push.Notification.save">[文档]</a> <span class="k">def</span> <span class="nf">save</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="k">raise</span> <span class="n">LeanCloudError</span><span class="p">(</span><span class="n">code</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">error</span><span class="o">=</span><span class="s2">"Notification does not support modify"</span><span class="p">)</span></div></div>
<span class="k">def</span> <span class="nf">_encode_time</span><span class="p">(</span><span class="n">time</span><span class="p">):</span>
<span class="n">tzinfo</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">tzinfo</span>
<span class="k">if</span> <span class="n">tzinfo</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">tzinfo</span> <span class="o">=</span> <span class="n">tz</span><span class="o">.</span><span class="n">tzlocal</span><span class="p">()</span>
<span class="k">return</span> <span class="n">arrow</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">time</span><span class="p">,</span> <span class="n">tzinfo</span><span class="p">)</span><span class="o">.</span><span class="n">to</span><span class="p">(</span><span class="s2">"utc"</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">"YYYY-MM-DDTHH:mm:ss.SSS"</span><span class="p">)</span> <span class="o">+</span> <span class="s2">"Z"</span>
<div class="viewcode-block" id="send"><a class="viewcode-back" href="../../index.html#leancloud.push.send">[文档]</a><span class="k">def</span> <span class="nf">send</span><span class="p">(</span>
<span class="n">data</span><span class="p">,</span>
<span class="n">channels</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">push_time</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">expiration_time</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">expiration_interval</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">where</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">cql</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">flow_control</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">prod</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="p">):</span>
<span class="sd">"""</span>
<span class="sd"> 发送推送消息。返回结果为此条推送对应的 _Notification 表中的对象,但是如果需要使用其中的数据,需要调用 fetch() 方法将数据同步至本地。</span>
<span class="sd"> :param channels: 需要推送的频道</span>
<span class="sd"> :type channels: list or tuple</span>
<span class="sd"> :param push_time: 推送的时间</span>
<span class="sd"> :type push_time: datetime</span>
<span class="sd"> :param expiration_time: 消息过期的绝对日期时间</span>
<span class="sd"> :type expiration_time: datetime</span>
<span class="sd"> :param expiration_interval: 消息过期的相对时间,从调用 API 的时间开始算起,单位是秒</span>
<span class="sd"> :type expiration_interval: int</span>
<span class="sd"> :param where: 一个查询 _Installation 表的查询条件 leancloud.Query 对象</span>
<span class="sd"> :type where: leancloud.Query</span>
<span class="sd"> :param cql: 一个查询 _Installation 表的查询条件 CQL 语句</span>
<span class="sd"> :type cql: string_types</span>
<span class="sd"> :param data: 推送给设备的具体信息,详情查看 https://leancloud.cn/docs/push_guide.html#消息内容_Data</span>
<span class="sd"> :rtype: Notification</span>
<span class="sd"> :param flow_control: 不为 None 时开启平滑推送,值为每秒推送的目标终端用户数。开启时指定低于 1000 的值,按 1000 计。</span>
<span class="sd"> :type: flow_control: int</span>
<span class="sd"> :param prod: 仅对 iOS 推送有效,设置将推送发至 APNs 的开发环境(dev)还是生产环境(prod)。</span>
<span class="sd"> :type: prod: string</span>
<span class="sd"> """</span>
<span class="k">if</span> <span class="n">expiration_interval</span> <span class="ow">and</span> <span class="n">expiration_time</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s2">"Both expiration_time and expiration_interval can't be set"</span><span class="p">)</span>
<span class="n">params</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">"data"</span><span class="p">:</span> <span class="n">data</span><span class="p">,</span>
<span class="p">}</span>
<span class="k">if</span> <span class="n">prod</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">if</span> <span class="n">client</span><span class="o">.</span><span class="n">USE_PRODUCTION</span> <span class="o">==</span> <span class="s2">"0"</span><span class="p">:</span>
<span class="n">params</span><span class="p">[</span><span class="s2">"prod"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"dev"</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">params</span><span class="p">[</span><span class="s2">"prod"</span><span class="p">]</span> <span class="o">=</span> <span class="n">prod</span>
<span class="k">if</span> <span class="n">channels</span><span class="p">:</span>
<span class="n">params</span><span class="p">[</span><span class="s2">"channels"</span><span class="p">]</span> <span class="o">=</span> <span class="n">channels</span>
<span class="k">if</span> <span class="n">push_time</span><span class="p">:</span>
<span class="n">params</span><span class="p">[</span><span class="s2">"push_time"</span><span class="p">]</span> <span class="o">=</span> <span class="n">_encode_time</span><span class="p">(</span><span class="n">push_time</span><span class="p">)</span>
<span class="k">if</span> <span class="n">expiration_time</span><span class="p">:</span>
<span class="n">params</span><span class="p">[</span><span class="s2">"expiration_time"</span><span class="p">]</span> <span class="o">=</span> <span class="n">_encode_time</span><span class="p">(</span><span class="n">expiration_time</span><span class="p">)</span>
<span class="k">if</span> <span class="n">expiration_interval</span><span class="p">:</span>
<span class="n">params</span><span class="p">[</span><span class="s2">"expiration_interval"</span><span class="p">]</span> <span class="o">=</span> <span class="n">expiration_interval</span>
<span class="k">if</span> <span class="n">where</span><span class="p">:</span>
<span class="n">params</span><span class="p">[</span><span class="s2">"where"</span><span class="p">]</span> <span class="o">=</span> <span class="n">where</span><span class="o">.</span><span class="n">dump</span><span class="p">()</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"where"</span><span class="p">,</span> <span class="p">{})</span>
<span class="k">if</span> <span class="n">cql</span><span class="p">:</span>
<span class="n">params</span><span class="p">[</span><span class="s2">"cql"</span><span class="p">]</span> <span class="o">=</span> <span class="n">cql</span>
<span class="c1"># Do not change this to `if flow_control`, because 0 is falsy in Python,</span>
<span class="c1"># but `flow_control = 0` will enable smooth push,</span>
<span class="c1"># and it is in fact equivalent to `flow_control = 1000`.</span>
<span class="k">if</span> <span class="n">flow_control</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">params</span><span class="p">[</span><span class="s2">"flow_control"</span><span class="p">]</span> <span class="o">=</span> <span class="n">flow_control</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="s2">"/push"</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">)</span><span class="o">.</span><span class="n">json</span><span class="p">()</span>
<span class="n">notification</span> <span class="o">=</span> <span class="n">Notification</span><span class="o">.</span><span class="n">create_without_data</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="s2">"objectId"</span><span class="p">])</span>
<span class="k">return</span> <span class="n">notification</span></div>
</pre></div>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>© 版权所有 2015, asaka.</p>
</div>
利用 <a href="https://www.sphinx-doc.org/">Sphinx</a> 构建,使用了
<a href="https://github.com/readthedocs/sphinx_rtd_theme">主题</a>
由 <a href="https://readthedocs.org">Read the Docs</a>开发.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>