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
|
%global _empty_manifest_terminate_build 0
Name: python-pulsar-odm
Version: 0.7.0
Release: 1
Summary: please add a summary manually as the author left a blank one
License: BSD
URL: https://github.com/quantmind/pulsar-odm
Source0: https://mirrors.nju.edu.cn/pypi/web/packages/c9/a2/77781f094fa4fac04526e7d6f673b4b8d5e3b7b5f0ce544f15deb0c7ca06/pulsar-odm-0.7.0.tar.gz
BuildArch: noarch
%description
To be able to use the object data mapper within standard blocking code,
one needs to use pulsar GreenPool_ as the following snippet highlights:
from datetime import datetime
from sqlalchemy import Integer, Column, String, DateTime, Boolean
from pulsar.apps.greenio import GreenPool
import odm
class Task(odm.Model):
id = Column(Integer, primary_key=True)
subject = Column(String(250))
done = Column(Boolean, default=False)
created = Column(DateTime, default=datetime.utcnow)
def __str__(self):
return '%d: %s' % (self.id, self.subject)
def example(mp):
# Make sure table is available
mp.table_create()
# Insert a new Task in the table
with mp.begin() as session:
task = mp.task(subject='my task')
session.add(task)
return task
if __name__ == '__main__':
pool = GreenPool()
mp = odm.Mapper('postgresql+green://odm:odmtest@127.0.0.1:5432/odmtests')
mp.register(Task)
task = pool._loop.run_until_complete(pool.submit(example, mp))
print(task)
The ``example`` function is executed in a greenlet other than the main one. This is important otherwise the call fails:
>> example(mp)
>> Traceback (most recent call last):
RuntimeError: acquire in main greenlet
Running the function on the greenlet pool guarantees the correct asynchronous execution. When psycopg2_
executes a command against the database on a child greenlet, it switches control to the parent (main) greenlet, which is controlled by the asyncio eventloop so that other asynchronous operations can be carried out.
Once the result of the execution is ready, the execution switches back to the original child greenlet so that the ``example`` function can continue.
%package -n python3-pulsar-odm
Summary: please add a summary manually as the author left a blank one
Provides: python-pulsar-odm
BuildRequires: python3-devel
BuildRequires: python3-setuptools
BuildRequires: python3-pip
%description -n python3-pulsar-odm
To be able to use the object data mapper within standard blocking code,
one needs to use pulsar GreenPool_ as the following snippet highlights:
from datetime import datetime
from sqlalchemy import Integer, Column, String, DateTime, Boolean
from pulsar.apps.greenio import GreenPool
import odm
class Task(odm.Model):
id = Column(Integer, primary_key=True)
subject = Column(String(250))
done = Column(Boolean, default=False)
created = Column(DateTime, default=datetime.utcnow)
def __str__(self):
return '%d: %s' % (self.id, self.subject)
def example(mp):
# Make sure table is available
mp.table_create()
# Insert a new Task in the table
with mp.begin() as session:
task = mp.task(subject='my task')
session.add(task)
return task
if __name__ == '__main__':
pool = GreenPool()
mp = odm.Mapper('postgresql+green://odm:odmtest@127.0.0.1:5432/odmtests')
mp.register(Task)
task = pool._loop.run_until_complete(pool.submit(example, mp))
print(task)
The ``example`` function is executed in a greenlet other than the main one. This is important otherwise the call fails:
>> example(mp)
>> Traceback (most recent call last):
RuntimeError: acquire in main greenlet
Running the function on the greenlet pool guarantees the correct asynchronous execution. When psycopg2_
executes a command against the database on a child greenlet, it switches control to the parent (main) greenlet, which is controlled by the asyncio eventloop so that other asynchronous operations can be carried out.
Once the result of the execution is ready, the execution switches back to the original child greenlet so that the ``example`` function can continue.
%package help
Summary: Development documents and examples for pulsar-odm
Provides: python3-pulsar-odm-doc
%description help
To be able to use the object data mapper within standard blocking code,
one needs to use pulsar GreenPool_ as the following snippet highlights:
from datetime import datetime
from sqlalchemy import Integer, Column, String, DateTime, Boolean
from pulsar.apps.greenio import GreenPool
import odm
class Task(odm.Model):
id = Column(Integer, primary_key=True)
subject = Column(String(250))
done = Column(Boolean, default=False)
created = Column(DateTime, default=datetime.utcnow)
def __str__(self):
return '%d: %s' % (self.id, self.subject)
def example(mp):
# Make sure table is available
mp.table_create()
# Insert a new Task in the table
with mp.begin() as session:
task = mp.task(subject='my task')
session.add(task)
return task
if __name__ == '__main__':
pool = GreenPool()
mp = odm.Mapper('postgresql+green://odm:odmtest@127.0.0.1:5432/odmtests')
mp.register(Task)
task = pool._loop.run_until_complete(pool.submit(example, mp))
print(task)
The ``example`` function is executed in a greenlet other than the main one. This is important otherwise the call fails:
>> example(mp)
>> Traceback (most recent call last):
RuntimeError: acquire in main greenlet
Running the function on the greenlet pool guarantees the correct asynchronous execution. When psycopg2_
executes a command against the database on a child greenlet, it switches control to the parent (main) greenlet, which is controlled by the asyncio eventloop so that other asynchronous operations can be carried out.
Once the result of the execution is ready, the execution switches back to the original child greenlet so that the ``example`` function can continue.
%prep
%autosetup -n pulsar-odm-0.7.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-pulsar-odm -f filelist.lst
%dir %{python3_sitelib}/*
%files help -f doclist.lst
%{_docdir}/*
%changelog
* Tue Apr 11 2023 Python_Bot <Python_Bot@openeuler.org> - 0.7.0-1
- Package Spec generated
|