summaryrefslogtreecommitdiff
path: root/python-zoomfoundry.spec
blob: b2854755164f438656039043b718169cc02f16df (plain)
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
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
%global _empty_manifest_terminate_build 0
Name:		python-ZoomFoundry
Version:	6.21.0
Release:	1
Summary:	A dynamic Web Framework that promotes modularity and rapid prototyping
License:	MIT License
URL:		https://github.com/ZoomFoundry/ZoomFoundry
Source0:	https://mirrors.nju.edu.cn/pypi/web/packages/00/f0/dc8fc40e5abc8932725a9166163b6e262e5628fddadf2f9cb7b84ba8c531/ZoomFoundry-6.21.0.tar.gz
BuildArch:	noarch

Requires:	python3-PyMySQL
Requires:	python3-bcrypt
Requires:	python3-passlib
Requires:	python3-markdown
Requires:	python3-Pillow
Requires:	python3-faker
Requires:	python3-docopt
Requires:	python3-werkzeug
Requires:	python3-croniter
Requires:	python3-pypugjs
Requires:	python3-libsass
Requires:	python3-pytz
Requires:	python3-pytzdata
Requires:	python3-requests

%description
# README

[![Build Status](https://travis-ci.org/dsilabs/zoom.svg?branch=master)](https://travis-ci.org/dsilabs/zoom)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

ZoomFoundry is a dynamic Python Web framework written specifically for Python 3 that
promotes modularity and rapid prototyping for building and maintaining useful
web sites quickly and easily.


## Requirements
ZoomFoundry requires Python 3 and MySQL to run, along with a host of other
3rd party library requirements listed in the requirements.txt file.  It is
currently tested and used on various flavours of GNU/Linux, Mac and Windows.


## Getting started with ZoomFoundry
The best way to get started with ZoomFoundry is to try it.  By following along with
this guide step by step you'll create a simple blog ZoomFoundry app.  Before you can
start building the app, you need to make sure that you have ZoomFoundry installed.


### Installing ZoomFoundry
Open up a terminal window and follow along with the following steps.  The
dollar sign $ in the following examples is the command prompt.

ZoomFoundry is a Python 3 framework so you'll need to have Python 3 installed to run it.  We
recommend the latest version which you can download from [python.org](https://www.python.org/downloads/).

All set?  Okay, here we go!

1. Install ZoomFoundry
    ```shell
    $ pip install ZoomFoundry
    ```

    This will install a new Python package and corresponding CLI command; `zoom`.

1. Once you have ZoomFoundry installed, you'll first want to create and populate a
    ZoomFoundry *instance directory*.<br><br> ZoomFoundry is multi-tenant, meaning
    it can serve multiple sites at the same time; an instance directory contains a
    set of ZoomFoundry *sites* and resources shared between them. Run:
    ```shell
    $ zoom init ~/my-zoom-instance
    ```

    This will walk you through setting up your instance, including creating a
    default site and database.

    *Don't like wizards?* Every option zoom commands prompt you with have a
    corresponding command line option: see the help with `zoom -h`.

1. Serve the created instance. <br><br>
    Run the following to start the built-in server, pointed at the instance you just
    created.
    ```shell
    $ zoom serve ~/my-zoom-instance
    ```

### Creating the Blog App
To create a new app with ZoomFoundry, just run:
```shell
zoom new app blog ~/my-zoom-instance
```

*Don't mind a `cd`?* ZoomFoundry commands only require you to specify the path to an instance
directory if you aren't already inside one. You could replace the above with:
```shell
cd ~/my-zoom-instance && zoom new app blog
```

You've just created an app called `blog` at `~/my-zoom-instance/apps/blog`. Take a second to check it out.
To see the app in action, check out `http://localhost/blog` after running:
```shell
zoom serve ~/my-zoom-instance
```

This is the most basic app, which basically takes a request object as the sole parameter and returns a response, in this case, a page response.

To do a more advanced app, ZoomFoundry provides an App class that handles basic routing, other services, and calls other parts of your app.  To use it just create an instance of it in your `app.py` file, like this:

```python
"""
    zoom app v 0.2
"""

import zoom

app = zoom.App()
```

Now when you run your app you should get a "Page Not Found" status 404 page.  This is happening because we haven't provided any pages for the app.  To do that create an `index.py` file to provided the app content.

With our blog app, we're going to use a ZoomFoundry collection.  A ZoomFoundry collection is a quick way of creating an app to manager any type of field related data that you would like to store.  It provides all the things you would typically expect of a basic data collection app including browsing records, searching, editing and displaying information.

In our case, we'd like to store blog posts.  For this example, for each blog entry we'll store a name, a description, the blog post body, and a published date.

We start by defining a function that returns the fields we want to use in our app.  We then pass that function to the Collection class which will use the fields to create a collection.

```python
"""
    blog index v 0.1
"""

import zoom
import zoom.fields as f

def blog_fields():
    return f.Fields(
        f.TextField('Name'),
        f.MemoField('Description'),
        f.EditField('Body'),
        f.DateField('Date Published'),
    )

main = zoom.collect.Collection(
    blog_fields,
    url=zoom.get_app().url,
)
```

Now, when you run your app.  You should see a list where you can create blog entries.

Now, let's say, you realized you would like to add an Author field.  Just add the field to the list and re-run your app.  Like this:

```python
"""
    blog index v 0.1
"""

import zoom
import zoom.fields as f

def blog_fields():
    return f.Fields(
        f.TextField('Name'),
        f.TextField('Author'),
        f.MemoField('Description'),
        f.EditField('Body'),
        f.DateField('Date Published'),
    )

main = zoom.collect.Collection(
    blog_fields,
    url=zoom.get_app().url,
)
```

Now, run it and try adding some data.

What, what?!  Where's the data model step?  How do I create my tables?!  Where is my data stored?  What about migrations?

For now, ZoomFoundry will handle all of this for you.  Rest assured, your data is being stored in the MySQL database, but it's being stored in an entity store with a dynamic schema so you can add and remove fields from your collection at will and ZoomFoundry will just take care of it.

ZoomFoundry can use traditional tables as well, of course, but for prototyping and many other types of work a dynamic schema works very well.

That's as far as we'll go with the app right now.  In the future we'll provide more of the features people have come to expect from a blog app.


## Contributing
To contribute your own code to ZoomFoundry you'll need to setup a development environment.

### Setting Up The Easy way
The simplest way to hack on ZoomFoundry is to use one of our
[Vagrant boxes](https://github.com/dsilabs/vagrant-zoom) or
[Docker containers](https://github.com/dsilabs/docker-zoom-tiny).

### Setting Up The Hard Way
If you can't use the prepared boxes then the best way to do that is to look
at the Dockerfile or Vagrantfile of the boxes and see how those are set up.

### Testing
Once your box is setup you can run the tests by switching to the zoom directory
and running nosetests.
```shell
$ nosetests
```

This will run the unittests, doctests and webtests.  If your box is not
setup for [selenium](https://selenium-python.readthedocs.io/installation.html) (which uses webdriver, and various other libraries) you
can skip them by specifying only the other directories for tests.
```shell
$ nosetests zoom tests/unittests
```


%package -n python3-ZoomFoundry
Summary:	A dynamic Web Framework that promotes modularity and rapid prototyping
Provides:	python-ZoomFoundry
BuildRequires:	python3-devel
BuildRequires:	python3-setuptools
BuildRequires:	python3-pip
%description -n python3-ZoomFoundry
# README

[![Build Status](https://travis-ci.org/dsilabs/zoom.svg?branch=master)](https://travis-ci.org/dsilabs/zoom)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

ZoomFoundry is a dynamic Python Web framework written specifically for Python 3 that
promotes modularity and rapid prototyping for building and maintaining useful
web sites quickly and easily.


## Requirements
ZoomFoundry requires Python 3 and MySQL to run, along with a host of other
3rd party library requirements listed in the requirements.txt file.  It is
currently tested and used on various flavours of GNU/Linux, Mac and Windows.


## Getting started with ZoomFoundry
The best way to get started with ZoomFoundry is to try it.  By following along with
this guide step by step you'll create a simple blog ZoomFoundry app.  Before you can
start building the app, you need to make sure that you have ZoomFoundry installed.


### Installing ZoomFoundry
Open up a terminal window and follow along with the following steps.  The
dollar sign $ in the following examples is the command prompt.

ZoomFoundry is a Python 3 framework so you'll need to have Python 3 installed to run it.  We
recommend the latest version which you can download from [python.org](https://www.python.org/downloads/).

All set?  Okay, here we go!

1. Install ZoomFoundry
    ```shell
    $ pip install ZoomFoundry
    ```

    This will install a new Python package and corresponding CLI command; `zoom`.

1. Once you have ZoomFoundry installed, you'll first want to create and populate a
    ZoomFoundry *instance directory*.<br><br> ZoomFoundry is multi-tenant, meaning
    it can serve multiple sites at the same time; an instance directory contains a
    set of ZoomFoundry *sites* and resources shared between them. Run:
    ```shell
    $ zoom init ~/my-zoom-instance
    ```

    This will walk you through setting up your instance, including creating a
    default site and database.

    *Don't like wizards?* Every option zoom commands prompt you with have a
    corresponding command line option: see the help with `zoom -h`.

1. Serve the created instance. <br><br>
    Run the following to start the built-in server, pointed at the instance you just
    created.
    ```shell
    $ zoom serve ~/my-zoom-instance
    ```

### Creating the Blog App
To create a new app with ZoomFoundry, just run:
```shell
zoom new app blog ~/my-zoom-instance
```

*Don't mind a `cd`?* ZoomFoundry commands only require you to specify the path to an instance
directory if you aren't already inside one. You could replace the above with:
```shell
cd ~/my-zoom-instance && zoom new app blog
```

You've just created an app called `blog` at `~/my-zoom-instance/apps/blog`. Take a second to check it out.
To see the app in action, check out `http://localhost/blog` after running:
```shell
zoom serve ~/my-zoom-instance
```

This is the most basic app, which basically takes a request object as the sole parameter and returns a response, in this case, a page response.

To do a more advanced app, ZoomFoundry provides an App class that handles basic routing, other services, and calls other parts of your app.  To use it just create an instance of it in your `app.py` file, like this:

```python
"""
    zoom app v 0.2
"""

import zoom

app = zoom.App()
```

Now when you run your app you should get a "Page Not Found" status 404 page.  This is happening because we haven't provided any pages for the app.  To do that create an `index.py` file to provided the app content.

With our blog app, we're going to use a ZoomFoundry collection.  A ZoomFoundry collection is a quick way of creating an app to manager any type of field related data that you would like to store.  It provides all the things you would typically expect of a basic data collection app including browsing records, searching, editing and displaying information.

In our case, we'd like to store blog posts.  For this example, for each blog entry we'll store a name, a description, the blog post body, and a published date.

We start by defining a function that returns the fields we want to use in our app.  We then pass that function to the Collection class which will use the fields to create a collection.

```python
"""
    blog index v 0.1
"""

import zoom
import zoom.fields as f

def blog_fields():
    return f.Fields(
        f.TextField('Name'),
        f.MemoField('Description'),
        f.EditField('Body'),
        f.DateField('Date Published'),
    )

main = zoom.collect.Collection(
    blog_fields,
    url=zoom.get_app().url,
)
```

Now, when you run your app.  You should see a list where you can create blog entries.

Now, let's say, you realized you would like to add an Author field.  Just add the field to the list and re-run your app.  Like this:

```python
"""
    blog index v 0.1
"""

import zoom
import zoom.fields as f

def blog_fields():
    return f.Fields(
        f.TextField('Name'),
        f.TextField('Author'),
        f.MemoField('Description'),
        f.EditField('Body'),
        f.DateField('Date Published'),
    )

main = zoom.collect.Collection(
    blog_fields,
    url=zoom.get_app().url,
)
```

Now, run it and try adding some data.

What, what?!  Where's the data model step?  How do I create my tables?!  Where is my data stored?  What about migrations?

For now, ZoomFoundry will handle all of this for you.  Rest assured, your data is being stored in the MySQL database, but it's being stored in an entity store with a dynamic schema so you can add and remove fields from your collection at will and ZoomFoundry will just take care of it.

ZoomFoundry can use traditional tables as well, of course, but for prototyping and many other types of work a dynamic schema works very well.

That's as far as we'll go with the app right now.  In the future we'll provide more of the features people have come to expect from a blog app.


## Contributing
To contribute your own code to ZoomFoundry you'll need to setup a development environment.

### Setting Up The Easy way
The simplest way to hack on ZoomFoundry is to use one of our
[Vagrant boxes](https://github.com/dsilabs/vagrant-zoom) or
[Docker containers](https://github.com/dsilabs/docker-zoom-tiny).

### Setting Up The Hard Way
If you can't use the prepared boxes then the best way to do that is to look
at the Dockerfile or Vagrantfile of the boxes and see how those are set up.

### Testing
Once your box is setup you can run the tests by switching to the zoom directory
and running nosetests.
```shell
$ nosetests
```

This will run the unittests, doctests and webtests.  If your box is not
setup for [selenium](https://selenium-python.readthedocs.io/installation.html) (which uses webdriver, and various other libraries) you
can skip them by specifying only the other directories for tests.
```shell
$ nosetests zoom tests/unittests
```


%package help
Summary:	Development documents and examples for ZoomFoundry
Provides:	python3-ZoomFoundry-doc
%description help
# README

[![Build Status](https://travis-ci.org/dsilabs/zoom.svg?branch=master)](https://travis-ci.org/dsilabs/zoom)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

ZoomFoundry is a dynamic Python Web framework written specifically for Python 3 that
promotes modularity and rapid prototyping for building and maintaining useful
web sites quickly and easily.


## Requirements
ZoomFoundry requires Python 3 and MySQL to run, along with a host of other
3rd party library requirements listed in the requirements.txt file.  It is
currently tested and used on various flavours of GNU/Linux, Mac and Windows.


## Getting started with ZoomFoundry
The best way to get started with ZoomFoundry is to try it.  By following along with
this guide step by step you'll create a simple blog ZoomFoundry app.  Before you can
start building the app, you need to make sure that you have ZoomFoundry installed.


### Installing ZoomFoundry
Open up a terminal window and follow along with the following steps.  The
dollar sign $ in the following examples is the command prompt.

ZoomFoundry is a Python 3 framework so you'll need to have Python 3 installed to run it.  We
recommend the latest version which you can download from [python.org](https://www.python.org/downloads/).

All set?  Okay, here we go!

1. Install ZoomFoundry
    ```shell
    $ pip install ZoomFoundry
    ```

    This will install a new Python package and corresponding CLI command; `zoom`.

1. Once you have ZoomFoundry installed, you'll first want to create and populate a
    ZoomFoundry *instance directory*.<br><br> ZoomFoundry is multi-tenant, meaning
    it can serve multiple sites at the same time; an instance directory contains a
    set of ZoomFoundry *sites* and resources shared between them. Run:
    ```shell
    $ zoom init ~/my-zoom-instance
    ```

    This will walk you through setting up your instance, including creating a
    default site and database.

    *Don't like wizards?* Every option zoom commands prompt you with have a
    corresponding command line option: see the help with `zoom -h`.

1. Serve the created instance. <br><br>
    Run the following to start the built-in server, pointed at the instance you just
    created.
    ```shell
    $ zoom serve ~/my-zoom-instance
    ```

### Creating the Blog App
To create a new app with ZoomFoundry, just run:
```shell
zoom new app blog ~/my-zoom-instance
```

*Don't mind a `cd`?* ZoomFoundry commands only require you to specify the path to an instance
directory if you aren't already inside one. You could replace the above with:
```shell
cd ~/my-zoom-instance && zoom new app blog
```

You've just created an app called `blog` at `~/my-zoom-instance/apps/blog`. Take a second to check it out.
To see the app in action, check out `http://localhost/blog` after running:
```shell
zoom serve ~/my-zoom-instance
```

This is the most basic app, which basically takes a request object as the sole parameter and returns a response, in this case, a page response.

To do a more advanced app, ZoomFoundry provides an App class that handles basic routing, other services, and calls other parts of your app.  To use it just create an instance of it in your `app.py` file, like this:

```python
"""
    zoom app v 0.2
"""

import zoom

app = zoom.App()
```

Now when you run your app you should get a "Page Not Found" status 404 page.  This is happening because we haven't provided any pages for the app.  To do that create an `index.py` file to provided the app content.

With our blog app, we're going to use a ZoomFoundry collection.  A ZoomFoundry collection is a quick way of creating an app to manager any type of field related data that you would like to store.  It provides all the things you would typically expect of a basic data collection app including browsing records, searching, editing and displaying information.

In our case, we'd like to store blog posts.  For this example, for each blog entry we'll store a name, a description, the blog post body, and a published date.

We start by defining a function that returns the fields we want to use in our app.  We then pass that function to the Collection class which will use the fields to create a collection.

```python
"""
    blog index v 0.1
"""

import zoom
import zoom.fields as f

def blog_fields():
    return f.Fields(
        f.TextField('Name'),
        f.MemoField('Description'),
        f.EditField('Body'),
        f.DateField('Date Published'),
    )

main = zoom.collect.Collection(
    blog_fields,
    url=zoom.get_app().url,
)
```

Now, when you run your app.  You should see a list where you can create blog entries.

Now, let's say, you realized you would like to add an Author field.  Just add the field to the list and re-run your app.  Like this:

```python
"""
    blog index v 0.1
"""

import zoom
import zoom.fields as f

def blog_fields():
    return f.Fields(
        f.TextField('Name'),
        f.TextField('Author'),
        f.MemoField('Description'),
        f.EditField('Body'),
        f.DateField('Date Published'),
    )

main = zoom.collect.Collection(
    blog_fields,
    url=zoom.get_app().url,
)
```

Now, run it and try adding some data.

What, what?!  Where's the data model step?  How do I create my tables?!  Where is my data stored?  What about migrations?

For now, ZoomFoundry will handle all of this for you.  Rest assured, your data is being stored in the MySQL database, but it's being stored in an entity store with a dynamic schema so you can add and remove fields from your collection at will and ZoomFoundry will just take care of it.

ZoomFoundry can use traditional tables as well, of course, but for prototyping and many other types of work a dynamic schema works very well.

That's as far as we'll go with the app right now.  In the future we'll provide more of the features people have come to expect from a blog app.


## Contributing
To contribute your own code to ZoomFoundry you'll need to setup a development environment.

### Setting Up The Easy way
The simplest way to hack on ZoomFoundry is to use one of our
[Vagrant boxes](https://github.com/dsilabs/vagrant-zoom) or
[Docker containers](https://github.com/dsilabs/docker-zoom-tiny).

### Setting Up The Hard Way
If you can't use the prepared boxes then the best way to do that is to look
at the Dockerfile or Vagrantfile of the boxes and see how those are set up.

### Testing
Once your box is setup you can run the tests by switching to the zoom directory
and running nosetests.
```shell
$ nosetests
```

This will run the unittests, doctests and webtests.  If your box is not
setup for [selenium](https://selenium-python.readthedocs.io/installation.html) (which uses webdriver, and various other libraries) you
can skip them by specifying only the other directories for tests.
```shell
$ nosetests zoom tests/unittests
```


%prep
%autosetup -n ZoomFoundry-6.21.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-ZoomFoundry -f filelist.lst
%dir %{python3_sitelib}/*

%files help -f doclist.lst
%{_docdir}/*

%changelog
* Tue May 30 2023 Python_Bot <Python_Bot@openeuler.org> - 6.21.0-1
- Package Spec generated