Compare commits

..

32 commits
master ... v0.4

Author SHA1 Message Date
Lance Edgar
742924596d add initdb command 2012-12-26 16:27:16 -08:00
Lance Edgar
ba2b6db75d convenience commit 2012-12-26 10:08:11 -08:00
Lance Edgar
d2725c2fb3 fix filemon service 2012-12-18 09:26:20 -08:00
Lance Edgar
b0ac9bc7eb add config inheritance; update tests etc. 2012-12-18 08:40:36 -08:00
Lance Edgar
c91d98a609 more stuff from edbob 2012-12-15 10:06:37 -08:00
Lance Edgar
5bf93ef57c remove edbob dependency 2012-12-15 09:52:32 -08:00
Lance Edgar
594c58065c Merge branch '0.3a4'
Conflicts:
	CHANGES.txt
	rattail/_version.py
	rattail/db/extension/model.py
2012-12-15 08:32:42 -08:00
Lance Edgar
9c764ea240 add purge-batches command, etc. 2012-12-14 09:05:17 -08:00
Lance Edgar
1d238f3575 more batch stuff, and tests (savepoint) 2012-12-13 15:13:08 -08:00
Lance Edgar
9dd8e11a79 start of new batch framework, lots more tests (savepoint) 2012-12-13 13:39:08 -08:00
Lance Edgar
8168c06192 savepoint 2012-12-10 21:39:48 -08:00
Lance Edgar
3a21fa23bf overhaul commands, db.load (plus tests/docs) 2012-12-08 12:05:16 -08:00
Lance Edgar
2f63fed30a bump version 2012-12-08 08:13:43 -08:00
Lance Edgar
4e93f3b93a massive db commit (refactor/tests/docs) 2012-12-07 23:54:29 -08:00
Lance Edgar
8bf44f3ded add initialization mod/tests/docs 2012-12-06 21:12:42 -08:00
Lance Edgar
c4072c7ac0 add logging config 2012-12-06 15:21:31 -08:00
Lance Edgar
ade17c5f90 add modules mod/tests/docs 2012-12-06 14:13:56 -08:00
Lance Edgar
8007343b3a add db.types mod/tests/docs 2012-12-05 15:48:42 -08:00
Lance Edgar
405d78fb40 add sil.writer tests/docs 2012-12-05 14:17:22 -08:00
Lance Edgar
9624cb8fe4 add pricing tests/docs 2012-12-05 12:12:27 -08:00
Lance Edgar
c07438837e add sil.batches tests/docs 2012-12-05 11:40:00 -08:00
Lance Edgar
ff0eb3cf80 add configuration mod/tests/docs 2012-12-05 11:23:20 -08:00
Lance Edgar
0471180ee9 add sil.columns docs, tests 2012-12-03 10:46:32 -08:00
Lance Edgar
6e43e03b95 add gpc deprecation, tests 2012-12-03 08:47:55 -08:00
Lance Edgar
5eae6aa7ec add db.util 2012-12-02 16:57:28 -08:00
Lance Edgar
09ba2a7c3c add init tests (not very many/good though) 2012-12-02 07:35:21 -08:00
Lance Edgar
717496d58a add files module 2012-12-02 07:18:43 -08:00
Lance Edgar
f32bd6946c finish barcode tests 2012-12-01 14:19:27 -08:00
Lance Edgar
d1df2aa368 add initial tests 2012-12-01 12:28:07 -08:00
Lance Edgar
36ab26dfaf add initial docs 2012-12-01 12:18:37 -08:00
Lance Edgar
6be40fd4e3 refactor barcodes in prep for docs/tests 2012-12-01 12:05:10 -08:00
Lance Edgar
25096dc70d add Department.subdepartments relationship 2012-11-28 15:45:50 -08:00
1056 changed files with 13287 additions and 107421 deletions

4
.gitattributes vendored
View file

@ -1,4 +0,0 @@
# -*- mode: conf -*-
# Use DOS line endings for email message body templates.
rattail/templates/mail/*.mako eol=crlf

8
.gitignore vendored
View file

@ -1,7 +1 @@
*~
*.pyc
.tox/
build/
dist/
docs/_build/
rattail.egg-info/
rattail.egg-info

View file

@ -1,500 +0,0 @@
# Changelog
All notable changes to rattail will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
## v0.21.2 (2026-05-28)
### Fix
- remove reference to click package
## v0.21.1 (2025-10-19)
### Fix
- add Documentation link in pyproject.toml
## v0.21.0 (2025-10-19)
### Feat
- require latest wuttjamaican
## v0.20.6 (2025-10-04)
### Fix
- add dependency for SQLAlchemy-Utils
## v0.20.5 (2025-09-20)
### Fix
- fix config extension entry point
## v0.20.4 (2025-02-15)
### Fix
- add `rattail purge-reports` command
## v0.20.3 (2025-01-07)
### Fix
- *do* keep exit code for run-n-mail overnight luigi task
## v0.20.2 (2024-12-16)
### Fix
- force sorting of (sub)commands when displaying with `--help`
- do not keep exit code for run-n-mail overnight luigi task
## v0.20.1 (2024-12-10)
### Fix
- use simple string instead of UUID for special role getters
- move some logic to avoid error when no sqlalchemy
- add custom `make_uuid()` function, app handler method
- add custom `uuid_column()` and `uuid_fk_column()` functions
- cleanup some code for wutta project template
## v0.20.0 (2024-11-24)
### Feat
- add project generator for 'wutta'
### Fix
- tweak generated output for new python/rattail projects
- avoid error in product autocomplete for duplicated key
- add problem report for duplicated product keys
## v0.19.2 (2024-11-18)
### Fix
- remove enum for sqlalchemy-continuum operation types
- define `str()` behavior for ProductCost
- add convenience enum for sqlalchemy-continuum operation types
## v0.19.1 (2024-11-12)
### Fix
- make vendor optional, for Vendor Sample Files
## v0.19.0 (2024-10-22)
### Feat
- add support for new ordering batch from parsed file
### Fix
- fix method call signature
## v0.18.12 (2024-09-15)
### Fix
- update project links, kallithea -> forgejo
## v0.18.11 (2024-09-03)
### Fix
- move startup workaround for trainwreck query bug
## v0.18.10 (2024-09-03)
### Fix
- add startup workaround for trainwreck query bug
## v0.18.9 (2024-08-30)
### Fix
- change import for wuttjamaican base model
## v0.18.8 (2024-08-28)
### Fix
- move "record changes" global hook to startup()
- cleanup old code for "record changes" session feature
## v0.18.7 (2024-08-27)
### Fix
- hopefully fix startup continuum bug per 'active_history' models
## v0.18.6 (2024-08-26)
### Fix
- inherit from wuttjamaican for `EmailHandler`
## v0.18.5 (2024-08-26)
### Fix
- avoid legacy config methods within `make_config()`
- tweak how versioning is configured and confirmed
## v0.18.4 (2024-08-22)
### Fix
- use app.get_title() and app.get_node_title(); avoid deprecated calls
## v0.18.3 (2024-08-20)
### Fix
- suppress warning when checking for legacy `app_package` config
- partially restore previous logic for `app.get_version()`
## v0.18.2 (2024-08-20)
### Fix
- minor tweaks to modernize etc.
- deprecate more methods for config object
- deprecate `config.rattail_engines` in favor of `appdb_engines`
- fix wrong name in deprecation warning
## v0.18.1 (2024-08-15)
### Fix
- move `get_class_hierarchy()` util function to wuttjamaican
- improve logic/fallback for `str(person)`
## v0.18.0 (2024-08-15)
### Feat
- refactor config/extension, session logic per wuttjamaican
### Fix
- let wuttjamaican configure app db engines
- use `ModelBase` from wuttjamaican, as our model base class
- cascade deletions for Customer -> CustomerShopper
## v0.17.11 (2024-08-13)
### Fix
- grow column size for `MemberEquityPayment.amount`
- stop logging config files read
## v0.17.10 (2024-08-09)
### Fix
- add `rattail.util.render_duration()` function
- stop setting falafel theme in installer
## v0.17.9 (2024-08-08)
### Fix
- remove ref to missing variable
## v0.17.8 (2024-08-06)
### Fix
- move logic upstream for `save_setting()`, `delete_setting()`
## v0.17.7 (2024-08-05)
### Fix
- `AppHandler.get_version()` should use upstream logic
## v0.17.6 (2024-08-05)
### Fix
- method for `AuthHandler.user_is_admin()` moved upstream
- invoke wuttjamaican logic for `rattail.util.prettify()`
## v0.17.5 (2024-07-18)
### Fix
- require latest wuttjamaican
## v0.17.4 (2024-07-17)
### Fix
- rename auth handler; avoid app in provider constructor
## v0.17.3 (2024-07-16)
### Fix
- fix bugs in `OrgHandler.get_subdepartment()`
- avoid deprecated calls to `administrator_role()`
## v0.17.2 (2024-07-16)
### Fix
- avoid deprecated `self.model` for people handler
## v0.17.1 (2024-07-15)
### Fix
- avoid deprecated `self.model` within the auth handler
## v0.17.0 (2024-07-14)
### Feat
- move most of auth handler logic to wuttjamaican
### Fix
- rename some constraints per wutta model
## v0.16.1 (2024-07-12)
### Fix
- remove duplicate method for `AppHandler.load_object()`
- remove duplicate method for `RattailConfig.production()`
## v0.16.0 (2024-07-11)
### Feat
- move some app model logic to wuttjamaican
## v0.15.0 (2024-07-09)
### Feat
- drop python 3.6 support, use pyproject.toml (again)
## v0.14.8 (2024-07-05)
### Fix
- fix model reference in reporting handler
## v0.14.7 (2024-07-04)
### Fix
- add `get_cmd()` method for import handlers
- specify default list for rattail mail templates
- add `get_role()` method for auth handler
## v0.14.6 (2024-07-04)
### Fix
- refactor code so most things work without sqlalchemy
- avoid command line errors if sqlalchemy not installed
- bump version for wuttjamaican
## v0.14.5 (2024-07-04)
### Fix
- change how we override default app handler, engine maker
## v0.14.4 (2024-07-02)
### Fix
- avoid `pkg_resources` for `files.resource_path()`
## v0.14.3 (2024-07-02)
### Fix
- include importing subcommands for discovery
## v0.14.2 (2024-07-02)
### Fix
- delay imports from `wuttjamaican.db`
## v0.14.1 (2024-07-01)
### Fix
- remove references, dependency for `six` package
- remove some unused imports
- remove duplicated / unused code for `rattail.db.config`
- deprecate `parse_bool()` and `parse_list()` in `rattail.config`
## v0.14.0 (2024-07-01)
### Feat
- remove legacy command system
### Fix
- make pyproject.toml instead of setup.cfg for generated project
## v0.13.5 (2024-06-28)
### Fix
- read logs from journald by default, for postfix-summary
- allow config override of "problems" for postfix-summary
## v0.13.4 (2024-06-27)
### Fix
- fix missing module import
## v0.13.3 (2024-06-24)
### Fix
- merge associated shopper records when merging 2 people
- truncate invoice item description for receiving, if needed
## v0.13.2 (2024-06-14)
### Fix
- revert back to setup.py + setup.cfg
## v0.13.1 (2024-06-10)
### Fix
- move canonical app version to pyproject.toml
## v0.13.0 (2024-06-10)
### Feat
- switch from setup.cfg to pyproject.toml / hatchling
## v0.12.9 (2024-06-10)
### Feat
- add config snippet for new projects, to define static libcache
- define the `app_package` setting for new projects
- add `get_pkg_version()` convenience function
## v0.12.8 (2024-06-06)
### Feat
- project generator should make typer commands, not old-style
- remove old/unused project scaffold template
- add snippet for fanstatic/libcache when generating web project
### Fix
- fix missing import for `rattail make-config` command
- define the `-n` command flag as alias for `--no-init`
## v0.12.7 (2024-06-02)
### Fix
- fix datasync command args, per typer
## v0.12.6 (2024-06-01)
### Feat
- add setting to allow decimal quantities for ordering/receiving
### Fix
- fix `rattail datasync remove-settings` command line, per typer
- fix `--progress-socket` arg handling for typer commands
## v0.12.5 (2024-05-31)
### Fix
- fix args for `rattail populate-batch` command, per typer
## v0.12.4 (2024-05-31)
### Fix
- fix params for generic "run purge" command logic, per typer
## v0.12.3 (2024-05-31)
### Fix
- fix args for `rattail purge-batches` command, per typer
## v0.12.2 (2024-05-30)
### Feat
- log the `pflogsumm` command before running it
### Fix
- fix some commands/arguments, per typer
## v0.12.1 (2024-05-29)
### Feat
- include organic flag when normalizing product
## v0.12.0 (2024-05-29)
This release begins the migration to use `typer` for all commands,
instead of the "traditional" (now WuttJamaican-based) commands.
### Feat
- add `get_runas_user()` method for AppHandler
- move rich and prompt_toolkit things to separate module
- move `finalize_session()` function to `db.util` module
- move "install" command logic to separate handler/module
- move "import command runner" logic to separate handler
- add basic support for `typer` command system
- migrate all commands to use typer
- add command logic functions for running reports, purging things
### Fix
- fix subcommand runas user when caller provides username
## Older Releases
Please see `docs/OLDCHANGES.rst` for older release notes.

245
CHANGES.txt Normal file
View file

@ -0,0 +1,245 @@
0.3a24
------
- [feature] Added ``__eq__()`` and ``__ne__()`` methods to ``GPC`` class.
- [general] Moved ``GPCType`` SQLAlchemy type class to ``rattail.db`` module.
This was necessary to make the ``GPC`` class more generally available to
callers who don't want or need SQLAlchemy to be installed.
- [general] Moved enumerations from database extension to "core" ``enum``
module. This is mostly for convenience to callers.
- [bug] Fixed a few bugs with label batches. These existed mostly because this
feature hasn't been used in production...
- [feature] Added ``default_format`` attribute to ``LabelFormatter`` class.
Now when a label profile is edited, this default format is used if no format
is provided by the user.
- [feature] Changed ``LabelProfile.get_formatter()`` method so that it assigns
the formatter's ``format`` attribute using the value from the profile. The
formatter is free to use or ignore this value, at its discretion.
- [feature] Improved the database synchronizer so that it is *somewhat*
tolerant of database server restarts. This likely will need further
improvement as more testing is done. The current implementation wraps the
entire sync loop in a ``try/catch`` block and when a disconnect is detected,
will wait 5 seconds before re-entering the loop and trying again.
0.3a23
------
- [general] Fixed namespace packages, per ``setuptools`` documentation.
- [feature] Added connection timeout support to ``CommandNetworkPrinter``.
0.3a22
------
- [feature] Added ``LabelProfile.visible`` field.
- [feature] Added generic ``CommandNetworkPrinter`` label printer class. This
class sends textual commands directly to a networked printer.
0.3a21
------
- [feature] Refactored database synchronization logic into a proper class,
which can be overridden based on configuration.
0.3a20
------
- [feature] Tweaked the SIL writer so that it doesn't quote row values when
they're of data type ``float``.
- [bug] Fixed database sync to properly handle ``Vendor`` deletions. Now any
associated ``ProductCost`` records are also deleted, so no more foreign key
violations.
0.3a19
------
- [bug] Fixed "price toggle" bug in database sync. It was noticed that
whenever a product's regular price did not change, yet the product instance
itself *did* have a change, the regular price association was being removed
in one sync, then reestablished in the next sync (then removed, etc.). The
sync operation now ensures the relationship is removed only when it really
should be, and that it remains intact when that is appropriate.
0.3a18
------
- [bug] Added special delete logic to the database sync. Currently, only the
Department and Subdepartment classes are affected. When deletions of these
classes are to be synced between databases, some effort is made to ensure
that associations with any dependent objects (e.g. Product) are removed
before the primary instance (e.g. Department) is deleted.
0.3a17
------
- [bug] Added 'delete, delete-orphan' to cascade on ``Product.costs``
relationship. This was causing an error when syncing databases.
0.3a16
------
- [bug] Added 'delete, delete-orphan' to cascade on ``Product.prices``
relationship. This was causing an error when syncing databases.
0.3a15
------
- [bug] Fixed database sync logic to ensure ``Product`` changes are processed
before ``ProductPrice`` changes. Since the underlying tables are mutually
dependent, the ``dependency_sort()`` call can't *quite* take care of it. Now
a lexical sort is applied to the class names before the dependency sort
happens. This is somewhat of a hack, merely taking advantage of the fact
that "Product" comes before "ProductPrice" when lexically sorted. If other
mutually-dependent tables come about in the future, this approach may need to
be revised if their class names don't jive.
0.3a14
------
- [bug] Fixed database synchonization logic to properly handle merging
``Product`` instances between database sessions. Since ``Product`` is so
interdependent on ``ProductPrice``, a pretty custom merge hack is required.
0.3a13
------
- [bugfix] Fixed ``rattail.db.record_changes()`` so that it also ignores
``UserRole`` instance changes if configuration dictates that ``Role`` changes
are to be ignored.
0.3a12
------
- [bugfix] Fixed foreign key uuid handling in ``rattail.db.record_changes()``.
Some tables are meant to be used solely as providers of "association proxy"
fields, the ``uuid`` column is not only a primary key, but also a *foreign
key* to the "primary" entity table. In such cases, the uuid value was not
present at session flush time, so a new one was being generated.
Unfortunately this meant that the ``Change`` record would point to a
nonexistent entity record, so the sync would not work. Now uuid fields are
inspected to determine if a foreign key is present, in which case the
relationship is traversed and the true uuid value is used.
- [feature] Added "extra classes" configuration for the ``load-host-data``
command. This is necessary when initially populating a "store" (er,
"non-host") database instance if custom schema extensions are in use (and
need to be synchronized with the host).
0.3a11
------
- Add R49 SIL column.
- Add ``rattail.pricing`` module.
0.3a10
------
- Ignore batch data when recording changes.
0.3a9
-----
- Bump edbob dependency.
0.3a8
-----
- Tweak database sync.
- Tweak batch processing.
0.3a7
-----
- Add ``Vendor.special_discount``.
0.3a6
-----
- Bump edbob dependency.
0.3a5
-----
- Added ``Store`` and related models.
- Added ``Customer.email_preference`` field.
- Added ``load-host-data`` command.
- Added database changes/synchronization framework.
- Fixed batch table create/drop.
0.3a4r1
-------
- Added ``Product.cost``, ``Product.vendor``.
- Added basic one-up label printing support.
- Added initial batch support, with ``PrintLabels`` provider.
- Added GPC data type.
- Changed internal name of file monitor Windows service.
- Added progress support for label printing.
- Label profiles moved from config to database model.
- Removed ``rattail.db.init_database()`` function.
- Moved some enum values from db extension to core (``rattail.enum`` module).
- Improved SIL support: moved ``rattail.sil`` to subpackage, added ``Writer``
class etc.
- Fixed file monitor in Linux.
- Added ``delete-orphan`` to ``Vendor.contacts`` relationship cascade.
0.3a4
-----
- Update file monitor per changes in ``edbob``.
0.3a3
-----
- Move database extension to subdir (``rattail.db.extension``).
- Make database extension require ``auth`` extension.
- Fix ``rattail.db.init()``.
- Add lots of classes to database extension model.
- Add ``rattail.labels`` module.
- Add ``rattail.db.cache`` module.
- Add SIL output functions.
- Remove some batch code (for now?).
0.3a2
-----
- Added Windows file monitor service.
0.3a1
-----
- Refactored to rely on `edbob <http://edbob.org/>`_. (Most of Rattail's
"guts" now live there instead.)

View file

@ -1,5 +1,5 @@
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
@ -7,17 +7,15 @@
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
software for all its users.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
@ -26,44 +24,34 @@ them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.
The precise terms and conditions for copying, distribution and
modification follow.
@ -72,7 +60,7 @@ modification follow.
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"This License" refers to version 3 of the GNU Affero General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
@ -549,35 +537,45 @@ to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software. This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
the GNU Affero General Public License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
@ -635,40 +633,29 @@ the "copyright" line and a pointer to where the full notice is found.
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
GNU Affero General Public License for more details.
You should have received a copy of the GNU General Public License
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
For more information on this, and how to apply and follow the GNU AGPL, see
<http://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<http://www.gnu.org/philosophy/why-not-lgpl.html>.

View file

@ -1,20 +1,9 @@
# -*- mode: conf; -*-
include *.cfg
include *.txt
include *.rst
# TODO: remove this first line at some point..
recursive-include rattail/data *
recursive-include rattail/data/config *.conf
recursive-include rattail/data/sample *.csv
include rattail/db/alembic/README
recursive-include rattail/db/alembic *.mako
recursive-include rattail/db/alembic *.py
recursive-include rattail/templates *.mako
include rattail/trainwreck/db/alembic/README
recursive-include rattail/trainwreck/db/alembic *.mako
recursive-include rattail/trainwreck/db/alembic *.py
include docs/Makefile
include docs/make.bat
include docs/_static/.dummy
recursive-include docs *.rst
prune docs/_build

View file

@ -1,12 +0,0 @@
# Rattail
Rattail is a framework / tool kit for building custom apps. Originally
intended for use in retail environments, but useful in others also.
It is released under the GNU General Public License.
This is the core `rattail` package.
Please see the [Rattail Project](https://rattailproject.org/) for more
information.

27
README.txt Normal file
View file

@ -0,0 +1,27 @@
Rattail
=======
Rattail is a retail software framework based on `edbob <http://edbob.org/>`_,
and released under the GNU Affero General Public License.
This is the core ``rattail`` package.
Please see Rattail's `home page <http://rattail.edbob.org/>`_ for more
information.
Installation
------------
Install the software with::
$ pip install rattail
Usage
-----
Built-in help can be seen with::
$ rattail help

View file

@ -7,11 +7,6 @@ SPHINXBUILD = sphinx-build
PAPER =
BUILDDIR = _build
# User-friendly check for sphinx-build
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
endif
# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
@ -34,20 +29,17 @@ help:
@echo " epub to make an epub"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " latexpdf to make LaTeX files and run them through pdflatex"
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
@echo " text to make text files"
@echo " man to make manual pages"
@echo " texinfo to make Texinfo files"
@echo " info to make Texinfo files and run them through makeinfo"
@echo " gettext to make PO message catalogs"
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " xml to make Docutils-native XML files"
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
clean:
rm -rf $(BUILDDIR)/*
-rm -rf $(BUILDDIR)/*
html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@ -116,12 +108,6 @@ latexpdf:
$(MAKE) -C $(BUILDDIR)/latex all-pdf
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
latexpdfja:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo "Running LaTeX files through platex and dvipdfmx..."
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
text:
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
@echo
@ -165,13 +151,3 @@ doctest:
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
@echo "Testing of doctests in the sources finished, look at the " \
"results in $(BUILDDIR)/doctest/output.txt."
xml:
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
@echo
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
pseudoxml:
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
@echo
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."

File diff suppressed because it is too large Load diff

View file

@ -1,78 +0,0 @@
Package API
===========
This is the "raw" API documentation for the ``rattail`` package. It hopefully
contains all pertinent info regarding available functions, classes and their
attributes and method signatures etc.
.. toctree::
:maxdepth: 1
rattail
rattail/app
rattail/auth
rattail/autocomplete/base
rattail/autocomplete/customers
rattail/batch/custorder
rattail/batch/handheld
rattail/batch/handlers
rattail/batch/labels
rattail/batch/pricing
rattail/batch/product
rattail/batch/purchase
rattail/batch/vendorcatalog
rattail/board
rattail/bouncer/index
rattail/cleanup
rattail/clientele
rattail/commands.base
rattail/commands.batch
rattail/commands.make_appdir
rattail/commands.typer
rattail/config
rattail/core
rattail/csvutil
rattail/custorders
rattail/datasync/index
rattail/db/index
rattail/employment
rattail/enum
rattail/excel
rattail/exceptions
rattail/features/index
rattail/filemon/index
rattail/filemon/actions
rattail/filemon/config
rattail/filemon/linux
rattail/filemon/util
rattail/filemon/win32
rattail/files
rattail/gpc
rattail/importing/index
rattail/importing/handlers
rattail/importing/importers
rattail/importing/model
rattail/importing/postgresql
rattail/importing/rattail
rattail/importing/sqlalchemy
rattail/reporting/index
rattail/reporting/handlers
rattail/labels
rattail/logging
rattail/mail
rattail/membership
rattail/people
rattail/problems/index
rattail/products
rattail/progress
rattail/projects/index
rattail/tailbone
rattail/time
rattail/trainwreck/index
rattail/upgrades
rattail/util
rattail/vendors.catalogs
rattail/vendors.handler
rattail/vendors.orders
rattail/win32

View file

@ -1,5 +0,0 @@
``rattail``
===========
.. automodule:: rattail

View file

@ -1,6 +0,0 @@
``rattail.app``
===============
.. automodule:: rattail.app
:members:

View file

@ -1,6 +0,0 @@
``rattail.auth``
================
.. automodule:: rattail.auth
:members:

View file

@ -1,6 +0,0 @@
``rattail.autocomplete.base``
=============================
.. automodule:: rattail.autocomplete.base
:members:

View file

@ -1,6 +0,0 @@
``rattail.autocomplete.customers``
==================================
.. automodule:: rattail.autocomplete.customers
:members:

View file

@ -1,6 +0,0 @@
``rattail.batch.custorder``
===========================
.. automodule:: rattail.batch.custorder
:members:

View file

@ -1,6 +0,0 @@
``rattail.batch.handheld``
==========================
.. automodule:: rattail.batch.handheld
:members:

View file

@ -1,166 +0,0 @@
``rattail.batch.handlers``
==========================
.. automodule:: rattail.batch.handlers
.. autofunction:: get_batch_handler
.. autoclass:: BatchHandler
We'll try to list the various attributes and methods below, in an order
which somewhat follows the life cycle of a batch.
.. autoattribute:: batch_key
.. autoattribute:: batch_model_class
.. automethod:: consume_batch_id
.. automethod:: make_batch
.. automethod:: make_basic_batch
.. automethod:: init_batch
.. attribute:: populate_batches
Simple flag to indicate whether any/all batches will require initial
population from a relevant data source. Note that this flag should be
set to ``True`` if *any* batches may need population (its default value
is ``False``). Whether or not a given batch actually needs to be
populated, is ultimately determined by the :meth:`should_populate()`
method.
Default value is ``False`` which means no batches will be populated.
Set this to ``True`` and do *not* override :meth:`should_populate()` if
you need all batches to be populated.
Set this to ``True`` and *do* override :meth:`should_populate()` if you
need more fine-grained control, e.g. by inspecting the given batch.
.. automethod:: should_populate
.. attribute:: populate_with_versioning
This flag indicates whether it's okay for data versioning to be enabled
during initial batch population.
If set to ``True`` (the default), then versioning is allowed and
therefore the caller need take no special precautions when populating
the batch.
If set to ``False`` then versioning is *not* allowed; if versioning is
not enabled for the current process, the caller may populate the batch
with no special precautions. However if versioning *is* enabled, the
caller must launch a separate process with versioning disabled, in order
to populate the batch.
.. automethod:: setup_populate
.. automethod:: do_populate
.. automethod:: populate
.. automethod:: make_row
.. automethod:: add_row
.. automethod:: after_add_row
.. automethod:: teardown_populate
.. attribute:: repopulate_when_refresh
Flag to indicate that when a batch is refreshed, the first step of that
should be to delete all data rows for, and then re-populate the batch.
The flag is ``False`` by default, in which case the batch is *not*
repopulated, i.e. the refresh will work with existing batch rows.
.. automethod:: refreshable
.. attribute:: refresh_with_versioning
This flag indicates whether it's okay for data versioning to be enabled
during batch refresh.
If set to ``True`` (the default), then versioning is allowed and
therefore the caller need take no special precautions when populating the
batch.
If set to ``False`` then versioning is *not* allowed; if versioning is
not enabled for the current process, the caller may populate the batch
with no special precautions. However if versioning *is* enabled, the
caller must launch a separate process with versioning disabled, in order
to refresh the batch.
.. automethod:: setup_refresh
.. automethod:: do_refresh
.. automethod:: refresh
.. automethod:: refresh_many
.. automethod:: refresh_row
.. automethod:: locate_product_for_entry
.. automethod:: refresh_batch_status
.. automethod:: teardown_refresh
.. automethod:: do_remove_row
.. automethod:: remove_row
.. automethod:: get_effective_rows
.. automethod:: executable
.. automethod:: why_not_execute
.. automethod:: auto_executable
.. attribute:: execute_with_versioning
This flag indicates whether it's okay for data versioning to be enabled
during batch execution.
If set to ``True`` (the default), then versioning is allowed and
therefore the caller need take no special precautions when populating
the batch.
If set to ``False`` then versioning is *not* allowed; if versioning is
not enabled for the current process, the caller may populate the batch
with no special precautions. However if versioning *is* enabled, the
caller must launch a separate process with versioning disabled, in order
to execute the batch.
.. automethod:: do_execute
.. automethod:: execute
.. automethod:: execute_many
.. automethod:: setup_clone
.. automethod:: clone
.. automethod:: teardown_clone
.. automethod:: delete
.. automethod:: purge_batches
..
.. autoattribute:: root_datadir
.. automethod:: datadir
.. automethod:: make_datadir
.. automethod:: set_input_file
.. automethod:: clone

View file

@ -1,6 +0,0 @@
``rattail.batch.labels``
========================
.. automodule:: rattail.batch.labels
:members:

View file

@ -1,6 +0,0 @@
``rattail.batch.pricing``
=========================
.. automodule:: rattail.batch.pricing
:members:

View file

@ -1,6 +0,0 @@
``rattail.batch.product``
=========================
.. automodule:: rattail.batch.product
:members:

View file

@ -1,99 +0,0 @@
``rattail.batch.purchase``
==========================
.. automodule:: rattail.batch.purchase
.. autoclass:: PurchaseBatchHandler
Most of the interface can be seen in the documentation for the
:class:`~rattail.batch.handlers.BatchHandler` class. Additional or
overridden attributes and methods provided by this ``PurchaseBatchHandler``
class are listed below.
.. automethod:: after_add_row
.. automethod:: assign_purchase_order
.. automethod:: execute
.. automethod:: execute_truck_dump
.. automethod:: get_purchase_order
.. automethod:: init_batch
.. automethod:: make_purchase
.. automethod:: order_row
.. automethod:: populate
.. automethod:: receive_purchase
.. automethod:: receive_row
.. automethod:: receiving_find_best_child_row
.. automethod:: receiving_update_row_attrs
.. automethod:: receiving_update_row_child
.. automethod:: receiving_update_row_children
.. automethod:: receiving_update_row_credits
.. automethod:: refresh
.. automethod:: refresh_batch_status
.. automethod:: refresh_row
.. automethod:: remove_row
.. automethod:: should_populate
.. automethod:: update_order_counts
.. automethod:: update_row_cost
.. automethod:: update_row_quantity
.. automethod:: why_not_execute
..
.. automethod:: allow_cases
.. automethod:: allow_expired_credits
.. automethod:: get_eligible_purchases
.. automethod:: populate_from_truck_dump_invoice
.. automethod:: make_row_from_invoice
.. automethod:: quick_entry
.. automethod:: quick_locate_product
.. automethod:: quick_locate_rows
.. automethod:: locate_parent_row_for_child
.. automethod:: locate_product
.. automethod:: remove_row
.. automethod:: transform_pack_to_unit
.. automethod:: can_declare_credit
.. automethod:: declare_credit
.. automethod:: make_credits
.. automethod:: populate_credit
.. automethod:: calculate_pending
.. automethod:: auto_receive_all_items

View file

@ -1,6 +0,0 @@
``rattail.batch.vendorcatalog``
===============================
.. automodule:: rattail.batch.vendorcatalog
:members:

View file

@ -1,6 +0,0 @@
``rattail.board``
=================
.. automodule:: rattail.board
:members:

View file

@ -1,6 +0,0 @@
``rattail.bouncer.handler``
===========================
.. automodule:: rattail.bouncer.handler
:members:

View file

@ -1,11 +0,0 @@
``rattail.bouncer``
===================
.. automodule:: rattail.bouncer
:members:
.. toctree::
:maxdepth: 1
handler

View file

@ -1,6 +0,0 @@
``rattail.cleanup``
===================
.. automodule:: rattail.cleanup
:members:

View file

@ -1,6 +0,0 @@
``rattail.clientele``
=====================
.. automodule:: rattail.clientele
:members:

View file

@ -1,12 +0,0 @@
``rattail.commands.base``
=========================
.. automodule:: rattail.commands.base
.. data:: rattail_typer
This is a ``typer.Typer`` instance representing the top-level
``rattail`` command. See the `Typer docs`_ for more info.
.. _Typer docs: https://typer.tiangolo.com/

View file

@ -1,37 +0,0 @@
``rattail.commands.batch``
==========================
.. automodule:: rattail.commands.batch
**Helper Functions**
.. autofunction:: batch_action_command
.. autofunction:: batch_action_command_template
**Subcommands**
.. autofunction:: auto_receive
.. program-output:: rattail auto-receive --help
.. autofunction:: execute_batch
.. program-output:: rattail execute-batch --help
.. autofunction:: make_batch
.. program-output:: rattail make-batch --help
.. autofunction:: populate_batch
.. program-output:: rattail populate-batch --help
.. autofunction:: purge_batches
.. program-output:: rattail purge-batches --help
.. autofunction:: refresh_batch
.. program-output:: rattail refresh-batch --help

View file

@ -1,9 +0,0 @@
``rattail.commands.make_appdir``
================================
.. automodule:: rattail.commands.make_appdir
.. autofunction:: make_appdir
.. program-output:: rattail make-appdir --help

View file

@ -1,6 +0,0 @@
``rattail.commands.typer``
==========================
.. automodule:: rattail.commands.typer
:members:

View file

@ -1,6 +0,0 @@
``rattail.config``
==================
.. automodule:: rattail.config
:members:

View file

@ -1,6 +0,0 @@
``rattail.core``
================
.. automodule:: rattail.core
:members:

View file

@ -1,7 +0,0 @@
.. -*- coding: utf-8 -*-
``rattail.csvutil``
===================
.. automodule:: rattail.csvutil
:members:

View file

@ -1,6 +0,0 @@
``rattail.custorders``
======================
.. automodule:: rattail.custorders
:members:

View file

@ -1,6 +0,0 @@
``rattail.datasync.config``
===========================
.. automodule:: rattail.datasync.config
:members:

View file

@ -1,17 +0,0 @@
``rattail.datasync.consumers``
==============================
.. automodule:: rattail.datasync.consumers
.. autoclass:: DataSyncConsumer
:members:
.. autoclass:: DataSyncImportConsumer
:members:
.. autoclass:: FromRattailConsumer
.. autoclass:: NullTestConsumer
.. autoclass:: ErrorTestConsumer

View file

@ -1,6 +0,0 @@
``rattail.datasync.daemon``
===========================
.. automodule:: rattail.datasync.daemon
:members:

View file

@ -1,14 +0,0 @@
``rattail.datasync``
====================
.. automodule:: rattail.datasync
.. toctree::
:maxdepth: 1
config
consumers
daemon
rattail
watchers

View file

@ -1,6 +0,0 @@
``rattail.datasync.rattail``
============================
.. automodule:: rattail.datasync.rattail
:members:

View file

@ -1,6 +0,0 @@
``rattail.datasync.watchers``
=============================
.. automodule:: rattail.datasync.watchers
:members:

View file

@ -1,7 +0,0 @@
``rattail.db.cache``
====================
.. automodule:: rattail.db.cache
.. autofunction:: cache_model

View file

@ -1,7 +0,0 @@
.. -*- coding: utf-8 -*-
``rattail.db.changes``
======================
.. automodule:: rattail.db.changes
:members:

View file

@ -1,6 +0,0 @@
``rattail.db.config``
=====================
.. automodule:: rattail.db.config
:members:

View file

@ -1,35 +0,0 @@
``rattail.db``
==============
.. automodule:: rattail.db
.. toctree::
:maxdepth: 1
:caption: Contents:
cache
changes
config
model
model.batch
model.batch.handheld
model.batch.inventory
model.batch.labels
model.batch.pricing
model.batch.product
model.batch.purchase
model.batch.vendorcatalog
model.core
model.customers
model.datasync
model.labels
model.org
model.people
model.products
model.purchase
model.stores
model.users
model.vendors
sess
util

View file

@ -1,6 +0,0 @@
``rattail.db.model.batch.handheld``
===================================
.. automodule:: rattail.db.model.batch.handheld
:members:

View file

@ -1,6 +0,0 @@
``rattail.db.model.batch.inventory``
====================================
.. automodule:: rattail.db.model.batch.inventory
:members:

View file

@ -1,6 +0,0 @@
``rattail.db.model.batch.labels``
=================================
.. automodule:: rattail.db.model.batch.labels
:members:

View file

@ -1,6 +0,0 @@
``rattail.db.model.batch.pricing``
==================================
.. automodule:: rattail.db.model.batch.pricing
:members:

View file

@ -1,6 +0,0 @@
``rattail.db.model.batch.product``
==================================
.. automodule:: rattail.db.model.batch.product
:members:

View file

@ -1,6 +0,0 @@
``rattail.db.model.batch.purchase``
===================================
.. automodule:: rattail.db.model.batch.purchase
:members:

View file

@ -1,22 +0,0 @@
``rattail.db.model.batch``
==========================
.. .. automodule:: rattail.db.model.batch
.. automodule:: rattail.db.model.batch.core
.. autoclass:: BatchMixin
:members:
.. autoclass:: BaseFileBatchMixin
:members:
.. autoclass:: FileBatchMixin
:members:
.. autoclass:: BatchRowMixin
:members:
.. autoclass:: ProductBatchRowMixin
:members:

View file

@ -1,6 +0,0 @@
``rattail.db.model.batch.vendorcatalog``
========================================
.. automodule:: rattail.db.model.batch.vendorcatalog
:members:

View file

@ -1,33 +0,0 @@
``rattail.db.model.core``
=========================
.. automodule:: rattail.db.model.core
.. autoclass:: ModelBase
.. attribute:: model_title
Optionally set this to a "humanized" version of the model name, for
display in templates etc. Default value will be guessed from the model
class name, e.g. 'Product' => "Products" and 'CustomerOrder' => "Customer
Order".
.. attribute:: model_title_plural
Optionally set this to a "humanized" version of the *plural* model name,
for display in templates etc. Default value will be guessed from the
model class name, e.g. 'Product' => "Products" and 'CustomerOrder' =>
"Customer Orders".
.. autoclass:: Setting
:members:
.. autoclass:: Change
:members:
.. automodule:: rattail.db.model.contact
:members:
.. todo::
Geez a lot of work left here...

View file

@ -1,6 +0,0 @@
``rattail.db.model.customers``
==============================
.. automodule:: rattail.db.model.customers
:members:

View file

@ -1,6 +0,0 @@
``rattail.db.model.datasync``
=============================
.. automodule:: rattail.db.model.datasync
:members:

View file

@ -1,6 +0,0 @@
``rattail.db.model.labels``
===========================
.. automodule:: rattail.db.model.labels
:members:

View file

@ -1,6 +0,0 @@
``rattail.db.model.org``
========================
.. automodule:: rattail.db.model.org
:members:

View file

@ -1,6 +0,0 @@
``rattail.db.model.people``
===========================
.. automodule:: rattail.db.model.people
:members:

View file

@ -1,6 +0,0 @@
``rattail.db.model.products``
=============================
.. automodule:: rattail.db.model.products
:members:

View file

@ -1,6 +0,0 @@
``rattail.db.model.purchase``
=============================
.. automodule:: rattail.db.model.purchase
:members:

View file

@ -1,5 +0,0 @@
``rattail.db.model``
====================
.. automodule:: rattail.db.model

View file

@ -1,6 +0,0 @@
``rattail.db.model.stores``
===========================
.. automodule:: rattail.db.model.stores
:members:

View file

@ -1,6 +0,0 @@
``rattail.db.model.users``
==========================
.. automodule:: rattail.db.model.users
:members:

View file

@ -1,6 +0,0 @@
``rattail.db.model.vendors``
============================
.. automodule:: rattail.db.model.vendors
:members:

View file

@ -1,22 +0,0 @@
``rattail.db.sess``
===================
.. automodule:: rattail.db.sess
:members:
.. class:: Session
SQLAlchemy session class used for all (normal) :term:`app database`
connections.
This is a subclass of :class:`SessionBase`.
See the :class:`sqlalchemy:sqlalchemy.orm.Session` docs for more
info.
.. note::
WuttJamaican also provides a
:class:`~wuttjamaican:wuttjamaican.db.sess.Session` class,
however for now Rattail still must define/use its own.

View file

@ -1,6 +0,0 @@
``rattail.employment``
======================
.. automodule:: rattail.employment
:members:

View file

@ -1,5 +0,0 @@
``rattail.enum``
================
.. automodule:: rattail.enum

View file

@ -1,6 +0,0 @@
``rattail.excel``
=================
.. automodule:: rattail.excel
:members:

View file

@ -1,19 +0,0 @@
``rattail.exceptions``
======================
.. automodule:: rattail.exceptions
.. autoclass:: RattailError
.. .. autoclass:: LabelPrintingError
..
.. .. autoclass:: PalmError
..
.. .. autoclass:: PalmClassicDatabaseTypelibNotFound
..
.. .. autoclass:: PalmConduitManagerNotFound
..
.. .. autoclass:: PalmConduitAlreadyRegistered
..
.. .. autoclass:: PalmConduitNotRegistered

View file

@ -1,6 +0,0 @@
``rattail.features.handlers``
=============================
.. automodule:: rattail.features.handlers
:members:

View file

@ -1,11 +0,0 @@
``rattail.features``
====================
.. automodule:: rattail.features
:members:
.. toctree::
:maxdepth: 1
handlers

View file

@ -1,7 +0,0 @@
.. -*- coding: utf-8 -*-
``rattail.filemon.actions``
===========================
.. automodule:: rattail.filemon.actions
:members:

View file

@ -1,6 +0,0 @@
``rattail.filemon.config_``
===========================
.. automodule:: rattail.filemon.config_
:members:

View file

@ -1,8 +0,0 @@
.. -*- coding: utf-8 -*-
``rattail.filemon``
===================
.. automodule:: rattail.filemon
.. autoclass:: Action

View file

@ -1,7 +0,0 @@
.. -*- coding: utf-8 -*-
``rattail.filemon.linux``
=========================
.. automodule:: rattail.filemon.linux
:members:

View file

@ -1,7 +0,0 @@
.. -*- coding: utf-8 -*-
``rattail.filemon.util``
========================
.. automodule:: rattail.filemon.util
:members:

View file

@ -1,7 +0,0 @@
.. -*- coding: utf-8 -*-
``rattail.filemon.win32``
=========================
.. automodule:: rattail.filemon.win32
:members:

View file

@ -1,7 +0,0 @@
.. -*- coding: utf-8 -*-
``rattail.files``
=================
.. automodule:: rattail.files
:members:

View file

@ -1,6 +0,0 @@
``rattail.gpc``
===============
.. automodule:: rattail.gpc
:members:

View file

@ -1,17 +0,0 @@
``rattail.importing.handlers``
==============================
.. automodule:: rattail.importing.handlers
.. autoclass:: ImportHandler
:members:
.. autoclass:: BulkImportHandler
:members:
.. autoclass:: FromSQLAlchemyHandler
:members:
.. autoclass:: ToSQLAlchemyHandler
:members:

View file

@ -1,14 +0,0 @@
``rattail.importing.importers``
===============================
.. automodule:: rattail.importing.importers
.. autoclass:: Importer
:members:
.. autoclass:: FromQuery
:members:
.. autoclass:: BulkImporter
:members:

View file

@ -1,61 +0,0 @@
``rattail.importing``
=====================
.. automodule:: rattail.importing
There are a handful of importers and import handlers made available within this
namespace, i.e. not just the base classes but some variations thereof etc. You
may import each of these directly from this namespace, e.g.::
from rattail.importing import Importer
However it's more typical to do this instead::
from rattail import importing
That way you can reference ``importing.Importer`` as well as
``importing.model.ProductImporter`` etc. The full list of what's available in
this ``rattail.importing`` namespace follows.
Please also see :doc:`/narr/importers` for some of the general concepts
involved here.
Importers
---------
* :class:`rattail.importing.importers.Importer`
* :class:`rattail.importing.importers.FromQuery`
* :class:`rattail.importing.importers.BulkImporter`
* :class:`rattail.importing.sqlalchemy.FromSQLAlchemy`
* :class:`rattail.importing.sqlalchemy.ToSQLAlchemy`
* :class:`rattail.importing.postgresql.BulkToPostgreSQL`
Import Handlers
---------------
* :class:`rattail.importing.handlers.ImportHandler`
* :class:`rattail.importing.handlers.BulkImportHandler`
* :class:`rattail.importing.handlers.FromSQLAlchemyHandler`
* :class:`rattail.importing.handlers.ToSQLAlchemyHandler`
* :class:`rattail.importing.rattail.FromRattailHandler`
* :class:`rattail.importing.rattail.ToRattailHandler`
Rattail Model Importers
-----------------------
This is a little different but worth a mention. If you do::
from rattail import importing
then you will have access to the full set of Rattail data importers (i.e. the
"local" side of an import which targets a Rattail database) via
``importing.model`` - in other words you can then do this:
.. code-block:: python
class ProductImporter(importing.model.ProductImporter):
""" Custom product importer. """
Of course that's only helpful if you're importing data to Rattail. See
:mod:`rattail.importing.model` for what's available in that namespace.

View file

@ -1,6 +0,0 @@
``rattail.importing.model``
===========================
.. automodule:: rattail.importing.model
:members:

View file

@ -1,8 +0,0 @@
``rattail.importing.postgresql``
================================
.. automodule:: rattail.importing.postgresql
.. autoclass:: BulkToPostgreSQL
:members:

View file

@ -1,23 +0,0 @@
``rattail.importing.rattail``
=============================
.. automodule:: rattail.importing.rattail
.. autoclass:: FromRattailHandler
:members:
.. autoclass:: ToRattailHandler
:members:
.. autoclass:: FromRattailToRattailImport
:members:
.. autoclass:: FromRattailToRattailExport
:members:
.. autoclass:: RoleImporter
:members:
.. autoclass:: GlobalRoleImporter
:members:

View file

@ -1,11 +0,0 @@
``rattail.importing.sqlalchemy``
================================
.. automodule:: rattail.importing.sqlalchemy
.. autoclass:: FromSQLAlchemy
:members:
.. autoclass:: ToSQLAlchemy
:members:

View file

@ -1,6 +0,0 @@
``rattail.labels``
==================
.. automodule:: rattail.labels
:members:

View file

@ -1,6 +0,0 @@
``rattail.logging``
===================
.. automodule:: rattail.logging
:members:

View file

@ -1,20 +0,0 @@
``rattail.mail``
================
.. automodule:: rattail.mail
.. autoclass:: EmailHandler
:members:
.. autofunction:: send_email
.. class:: Email
Represents an email message, of a particular type. Various aspects of the
message may be defined by a subclass and/or configuration.
:attribute key:
Unique key for a particular type of email. This is used to determine
which template(s) will be used to generate the email body, as well as
the email sender and recipients (via config/settings), etc.

View file

@ -1,6 +0,0 @@
``rattail.membership``
======================
.. automodule:: rattail.membership
:members:

View file

@ -1,6 +0,0 @@
``rattail.people``
==================
.. automodule:: rattail.people
:members:

View file

@ -1,6 +0,0 @@
``rattail.problems.handlers``
=============================
.. automodule:: rattail.problems.handlers
:members:

View file

@ -1,11 +0,0 @@
``rattail.problems``
====================
.. automodule:: rattail.problems
:members:
.. toctree::
:maxdepth: 1
handlers

View file

@ -1,6 +0,0 @@
``rattail.products``
====================
.. automodule:: rattail.products
:members:

View file

@ -1,6 +0,0 @@
``rattail.progress``
====================
.. automodule:: rattail.progress
:members:

View file

@ -1,6 +0,0 @@
``rattail.projects.base``
=========================
.. automodule:: rattail.projects.base
:members:

View file

@ -1,6 +0,0 @@
``rattail.projects.handler``
============================
.. automodule:: rattail.projects.handler
:members:

Some files were not shown because too many files have changed in this diff Show more