diff options
| author | CoprDistGit <infra@openeuler.org> | 2023-05-05 13:54:29 +0000 |
|---|---|---|
| committer | CoprDistGit <infra@openeuler.org> | 2023-05-05 13:54:29 +0000 |
| commit | c7bda11e6b58d987fe26170bcac57d2a309e6674 (patch) | |
| tree | d567f1166a6c0e74c1bf82a840bd503c049a58a4 | |
| parent | e561f76b96c38643490ba3e1f76a1ea335593270 (diff) | |
automatic import of python-flask-seederopeneuler20.03
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | python-flask-seeder.spec | 523 | ||||
| -rw-r--r-- | sources | 1 |
3 files changed, 525 insertions, 0 deletions
@@ -0,0 +1 @@ +/Flask-Seeder-1.2.0.tar.gz diff --git a/python-flask-seeder.spec b/python-flask-seeder.spec new file mode 100644 index 0000000..4513601 --- /dev/null +++ b/python-flask-seeder.spec @@ -0,0 +1,523 @@ +%global _empty_manifest_terminate_build 0 +Name: python-Flask-Seeder +Version: 1.2.0 +Release: 1 +Summary: Flask extension to seed database through scripts +License: MIT +URL: https://github.com/diddi-/flask-seeder +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/1b/cf/d6167af60d6222d2898dca238a787ce47ce22a8afce41e5f1cf1023a31c3/Flask-Seeder-1.2.0.tar.gz +BuildArch: noarch + +Requires: python3-Flask + +%description +# Flask-Seeder +[](https://travis-ci.org/diddi-/flask-seeder) +[](https://coveralls.io/github/diddi-/flask-seeder?branch=master) + +Flask-Seeder is a Flask extension to help with seeding database with initial data, for example when deploying an application for the first time. + +This extensions primary focus is to help populating data once, for example in a demo application where the database might get wiped over and over but you still want users to have some basic data to play around with. + + +# Installation + +``` +pip install Flask-Seeder +``` +This will install the Flask-Seeder extension and add a `flask seed` subcommand, check it out to see what arguments are supported! + +# Seeders +Flask-Seeder provides a base class `Seeder` that holds a database handle. +By subclassing `Seeder` and implementing a `run()` method you get access to the database handle object and can start seeding the database with data. + +All seeders must be somewhere in the `seeds/` directory and inherit from `Seeder` or else they won't be detected. + +When all seeders have completed (successfully or not), Flask-Seeder will by default commit all changes to the database. This behaviour can be overridden with `--no-commit` or setting environment variable `FLASK_SEEDER_AUTOCOMMIT=0`. + +## Run Order + +When splitting seeders across multiple classes and files, order of operations is determined by two factors. +First the seeders are grouped by `priority` (lower priority will be run first), all seeders with the same priority +are then ordered by class name. + +See example below for setting priority on a seeder. + +```python +from flask_seeder import Seeder + +class DemoSeeder(Seeder): + def __init__(self, db=None): + super().__init__(db=db) + self.priority = 10 + + def run(self): + ... +``` + +# Faker and Generators +Flask-Seeder provides a `Faker` class that controls the creation of fake objects, based on real models. By telling `Faker` how to create the objects, you can easily create many different unique objects to help when seeding the database. + +There are different generators that help generate values for the fake objects. +Currently supported generators are: + +* Integer: Create a random integer between two values +* UUID: Create a random UUID +* Sequence: Create integers in sequence if called multiple times +* Name: Create a random name from a list `data/names/names.txt` +* Email: Create a random email, a combination of the random name generator and a domain from `data/domains/domains.txt` +* String: String generation from a pattern + +Feel free to roll your own generator by subclassing `Generator` and implement a `generate()` method that return the generated value. + +## String generator pattern +The `String` generator takes a pattern and produces a string that matches the pattern. +Currently the generator pattern is very simple and supports only a handful of operations. + +| Pattern | Produces | Description | Example | +| --| -- | -- | -- | +| [abc] | String character | Randomly select one of the provided characters | `b` | +| [a-k] | String character | Randomly select one character from a range | `i` | +| \c | String character | Randomly select any alpha character (a-z, A-Z) | `B` | +| (one\|two) | String group | Like `[abc]` but works for strings, not just single characters | `one` | +| \d | Digit | Randomly select a single digit (0-9) | `8` | +| {x} | Repeater | Repeat the previous pattern `x` times | `\d{5}` | +| {m,n} | Repeater | Repeat the previous pattern `x` times where `x` is anywhere between `m` and `n` | `[0-9]{2,8}` | +| abc | String literal | No processing, returned as is | `abc` | + +Patterns can also be combined to produce more complex strings. +``` +# Produces something like: abc5586oz +abc[5-9]{4}\c[xyz] +``` + +# Example usage +Examples show only relevant snippets of code + +**app.py:** +```python +from flask import Flask +from flask_sqlalchemy import SQLAlchemy +from flask_seeder import FlaskSeeder + +def create_app(): + app = Flask(__name__) + + db = SQLAlchemy() + db.init_app(app) + + seeder = FlaskSeeder() + seeder.init_app(app, db) + + return app +``` + +**seeds/demo.py:** +```python +from flask_seeder import Seeder, Faker, generator + +# SQLAlchemy database model +class User(Base): + def __init__(self, id_num=None, name=None, age=None): + self.id_num = id_num + self.name = name + self.age = age + + def __str__(self): + return "ID=%d, Name=%s, Age=%d" % (self.id_num, self.name, self.age) + +# All seeders inherit from Seeder +class DemoSeeder(Seeder): + + # run() will be called by Flask-Seeder + def run(self): + # Create a new Faker and tell it how to create User objects + faker = Faker( + cls=User, + init={ + "id_num": generator.Sequence(), + "name": generator.Name(), + "age": generator.Integer(start=20, end=100) + } + ) + + # Create 5 users + for user in faker.create(5): + print("Adding user: %s" % user) + self.db.session.add(user) +``` + +***Shell*** +```bash +$ flask seed run +Running database seeders +Adding user: ID=1, Name=Fancie, Age=76 +Adding user: ID=2, Name=Shela, Age=22 +Adding user: ID=3, Name=Jo, Age=33 +Adding user: ID=4, Name=Laureen, Age=54 +Adding user: ID=5, Name=Tandy, Age=66 +DemoSeeder... [OK] +Committing to database! +``` + + + + +%package -n python3-Flask-Seeder +Summary: Flask extension to seed database through scripts +Provides: python-Flask-Seeder +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-Flask-Seeder +# Flask-Seeder +[](https://travis-ci.org/diddi-/flask-seeder) +[](https://coveralls.io/github/diddi-/flask-seeder?branch=master) + +Flask-Seeder is a Flask extension to help with seeding database with initial data, for example when deploying an application for the first time. + +This extensions primary focus is to help populating data once, for example in a demo application where the database might get wiped over and over but you still want users to have some basic data to play around with. + + +# Installation + +``` +pip install Flask-Seeder +``` +This will install the Flask-Seeder extension and add a `flask seed` subcommand, check it out to see what arguments are supported! + +# Seeders +Flask-Seeder provides a base class `Seeder` that holds a database handle. +By subclassing `Seeder` and implementing a `run()` method you get access to the database handle object and can start seeding the database with data. + +All seeders must be somewhere in the `seeds/` directory and inherit from `Seeder` or else they won't be detected. + +When all seeders have completed (successfully or not), Flask-Seeder will by default commit all changes to the database. This behaviour can be overridden with `--no-commit` or setting environment variable `FLASK_SEEDER_AUTOCOMMIT=0`. + +## Run Order + +When splitting seeders across multiple classes and files, order of operations is determined by two factors. +First the seeders are grouped by `priority` (lower priority will be run first), all seeders with the same priority +are then ordered by class name. + +See example below for setting priority on a seeder. + +```python +from flask_seeder import Seeder + +class DemoSeeder(Seeder): + def __init__(self, db=None): + super().__init__(db=db) + self.priority = 10 + + def run(self): + ... +``` + +# Faker and Generators +Flask-Seeder provides a `Faker` class that controls the creation of fake objects, based on real models. By telling `Faker` how to create the objects, you can easily create many different unique objects to help when seeding the database. + +There are different generators that help generate values for the fake objects. +Currently supported generators are: + +* Integer: Create a random integer between two values +* UUID: Create a random UUID +* Sequence: Create integers in sequence if called multiple times +* Name: Create a random name from a list `data/names/names.txt` +* Email: Create a random email, a combination of the random name generator and a domain from `data/domains/domains.txt` +* String: String generation from a pattern + +Feel free to roll your own generator by subclassing `Generator` and implement a `generate()` method that return the generated value. + +## String generator pattern +The `String` generator takes a pattern and produces a string that matches the pattern. +Currently the generator pattern is very simple and supports only a handful of operations. + +| Pattern | Produces | Description | Example | +| --| -- | -- | -- | +| [abc] | String character | Randomly select one of the provided characters | `b` | +| [a-k] | String character | Randomly select one character from a range | `i` | +| \c | String character | Randomly select any alpha character (a-z, A-Z) | `B` | +| (one\|two) | String group | Like `[abc]` but works for strings, not just single characters | `one` | +| \d | Digit | Randomly select a single digit (0-9) | `8` | +| {x} | Repeater | Repeat the previous pattern `x` times | `\d{5}` | +| {m,n} | Repeater | Repeat the previous pattern `x` times where `x` is anywhere between `m` and `n` | `[0-9]{2,8}` | +| abc | String literal | No processing, returned as is | `abc` | + +Patterns can also be combined to produce more complex strings. +``` +# Produces something like: abc5586oz +abc[5-9]{4}\c[xyz] +``` + +# Example usage +Examples show only relevant snippets of code + +**app.py:** +```python +from flask import Flask +from flask_sqlalchemy import SQLAlchemy +from flask_seeder import FlaskSeeder + +def create_app(): + app = Flask(__name__) + + db = SQLAlchemy() + db.init_app(app) + + seeder = FlaskSeeder() + seeder.init_app(app, db) + + return app +``` + +**seeds/demo.py:** +```python +from flask_seeder import Seeder, Faker, generator + +# SQLAlchemy database model +class User(Base): + def __init__(self, id_num=None, name=None, age=None): + self.id_num = id_num + self.name = name + self.age = age + + def __str__(self): + return "ID=%d, Name=%s, Age=%d" % (self.id_num, self.name, self.age) + +# All seeders inherit from Seeder +class DemoSeeder(Seeder): + + # run() will be called by Flask-Seeder + def run(self): + # Create a new Faker and tell it how to create User objects + faker = Faker( + cls=User, + init={ + "id_num": generator.Sequence(), + "name": generator.Name(), + "age": generator.Integer(start=20, end=100) + } + ) + + # Create 5 users + for user in faker.create(5): + print("Adding user: %s" % user) + self.db.session.add(user) +``` + +***Shell*** +```bash +$ flask seed run +Running database seeders +Adding user: ID=1, Name=Fancie, Age=76 +Adding user: ID=2, Name=Shela, Age=22 +Adding user: ID=3, Name=Jo, Age=33 +Adding user: ID=4, Name=Laureen, Age=54 +Adding user: ID=5, Name=Tandy, Age=66 +DemoSeeder... [OK] +Committing to database! +``` + + + + +%package help +Summary: Development documents and examples for Flask-Seeder +Provides: python3-Flask-Seeder-doc +%description help +# Flask-Seeder +[](https://travis-ci.org/diddi-/flask-seeder) +[](https://coveralls.io/github/diddi-/flask-seeder?branch=master) + +Flask-Seeder is a Flask extension to help with seeding database with initial data, for example when deploying an application for the first time. + +This extensions primary focus is to help populating data once, for example in a demo application where the database might get wiped over and over but you still want users to have some basic data to play around with. + + +# Installation + +``` +pip install Flask-Seeder +``` +This will install the Flask-Seeder extension and add a `flask seed` subcommand, check it out to see what arguments are supported! + +# Seeders +Flask-Seeder provides a base class `Seeder` that holds a database handle. +By subclassing `Seeder` and implementing a `run()` method you get access to the database handle object and can start seeding the database with data. + +All seeders must be somewhere in the `seeds/` directory and inherit from `Seeder` or else they won't be detected. + +When all seeders have completed (successfully or not), Flask-Seeder will by default commit all changes to the database. This behaviour can be overridden with `--no-commit` or setting environment variable `FLASK_SEEDER_AUTOCOMMIT=0`. + +## Run Order + +When splitting seeders across multiple classes and files, order of operations is determined by two factors. +First the seeders are grouped by `priority` (lower priority will be run first), all seeders with the same priority +are then ordered by class name. + +See example below for setting priority on a seeder. + +```python +from flask_seeder import Seeder + +class DemoSeeder(Seeder): + def __init__(self, db=None): + super().__init__(db=db) + self.priority = 10 + + def run(self): + ... +``` + +# Faker and Generators +Flask-Seeder provides a `Faker` class that controls the creation of fake objects, based on real models. By telling `Faker` how to create the objects, you can easily create many different unique objects to help when seeding the database. + +There are different generators that help generate values for the fake objects. +Currently supported generators are: + +* Integer: Create a random integer between two values +* UUID: Create a random UUID +* Sequence: Create integers in sequence if called multiple times +* Name: Create a random name from a list `data/names/names.txt` +* Email: Create a random email, a combination of the random name generator and a domain from `data/domains/domains.txt` +* String: String generation from a pattern + +Feel free to roll your own generator by subclassing `Generator` and implement a `generate()` method that return the generated value. + +## String generator pattern +The `String` generator takes a pattern and produces a string that matches the pattern. +Currently the generator pattern is very simple and supports only a handful of operations. + +| Pattern | Produces | Description | Example | +| --| -- | -- | -- | +| [abc] | String character | Randomly select one of the provided characters | `b` | +| [a-k] | String character | Randomly select one character from a range | `i` | +| \c | String character | Randomly select any alpha character (a-z, A-Z) | `B` | +| (one\|two) | String group | Like `[abc]` but works for strings, not just single characters | `one` | +| \d | Digit | Randomly select a single digit (0-9) | `8` | +| {x} | Repeater | Repeat the previous pattern `x` times | `\d{5}` | +| {m,n} | Repeater | Repeat the previous pattern `x` times where `x` is anywhere between `m` and `n` | `[0-9]{2,8}` | +| abc | String literal | No processing, returned as is | `abc` | + +Patterns can also be combined to produce more complex strings. +``` +# Produces something like: abc5586oz +abc[5-9]{4}\c[xyz] +``` + +# Example usage +Examples show only relevant snippets of code + +**app.py:** +```python +from flask import Flask +from flask_sqlalchemy import SQLAlchemy +from flask_seeder import FlaskSeeder + +def create_app(): + app = Flask(__name__) + + db = SQLAlchemy() + db.init_app(app) + + seeder = FlaskSeeder() + seeder.init_app(app, db) + + return app +``` + +**seeds/demo.py:** +```python +from flask_seeder import Seeder, Faker, generator + +# SQLAlchemy database model +class User(Base): + def __init__(self, id_num=None, name=None, age=None): + self.id_num = id_num + self.name = name + self.age = age + + def __str__(self): + return "ID=%d, Name=%s, Age=%d" % (self.id_num, self.name, self.age) + +# All seeders inherit from Seeder +class DemoSeeder(Seeder): + + # run() will be called by Flask-Seeder + def run(self): + # Create a new Faker and tell it how to create User objects + faker = Faker( + cls=User, + init={ + "id_num": generator.Sequence(), + "name": generator.Name(), + "age": generator.Integer(start=20, end=100) + } + ) + + # Create 5 users + for user in faker.create(5): + print("Adding user: %s" % user) + self.db.session.add(user) +``` + +***Shell*** +```bash +$ flask seed run +Running database seeders +Adding user: ID=1, Name=Fancie, Age=76 +Adding user: ID=2, Name=Shela, Age=22 +Adding user: ID=3, Name=Jo, Age=33 +Adding user: ID=4, Name=Laureen, Age=54 +Adding user: ID=5, Name=Tandy, Age=66 +DemoSeeder... [OK] +Committing to database! +``` + + + + +%prep +%autosetup -n Flask-Seeder-1.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-Flask-Seeder -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Fri May 05 2023 Python_Bot <Python_Bot@openeuler.org> - 1.2.0-1 +- Package Spec generated @@ -0,0 +1 @@ +bd61c11560f5c618b88ca01ebda504f6 Flask-Seeder-1.2.0.tar.gz |
