This patch fixes a minor issue with the new send-message command
You now should use nargs to send the email command because it includes
a - as the start. click assumed that any -<foo> looks ike an argument.
So call aprsd with
aprsd send-command <callsign> -- -wb sendmap
This patch also adds -h as a help option for aprsd to make it simpler to
type.
This patch adds the VersionPlugin so you can remotely request the
version of aprsd that's running.
This commit adds the new send-message command for sending messages.
This also redoes the logging of sent/rx'd packets to a single method
which is syncrhonized, so we don't get intermixed log messages for
packets.
Also adds email address validation during startup, and
optionally disables the validation via a command line switch. without
email validation for production running aprsd, emails sent can turn up
garbage and cause issues when those emails are received by aprsd
message processing as invalid content.
This branch refactors the majority of main.py out into individual
modules to compartmentalize the code. Migrated all email related
features unti email.py, sending of messages into messaging.py
Also refactored all of the socket code to use aprslib for all APRS-IS
communication as well as message/packet processing.
Moved the email command into it's own Plugin.
This patch reworked the loading of plugins. Python2 is dead.
Previously was using the imp module to easily load the plugins from
a separate directory, which is a bit of a pita. Found a python3 lib
that takes care of the difference between py3.3, 3.4 and 3.5+ module
loading called "thesmuggler"
This patch adds the new APRSD Command Plugin architecture.
All Comand plugins must implement the same object API, which includes
plugin object is subclass of APRSDPluginBase
version attribute
command_regex attribute
command method
When an APRS command is detected, then the regex is run against
the command. If the command_regex matches, then the plugin's
command() method will be called. If the command() method returns
a string, then that string is sent as a reply to the APRS caller.
A new aprs.yml config section is added to support selecting
which plugins to enable.
If you want all plugins enabled, then omit "enabled_plugins" entirely
from the aprs section of the config.
To load custom plugins:
1) create a directory with an __init__.py file
2) Add a plugin.py file that contains your plugin
Look at the exmaples directory for an example plugin.
This patch includes lots of changes to tox environment for
automatically detecting pep8 failures, which can cause python2 vs
python3 failures after install.
The following tox commands have been added
tox -efmt-check - This checks the python syntax and formatting
tox -efmt - Automatically fixes python syntax formatting that
fmt-check complains about.
tox -etype-check - check on types
tox -elint - flake8 run
This patch also changes where the default config file is located.
The new location is ~/.config/aprsd/aprsd.yml
You can now also specify a custom config file on the command line
with the -c or --config option as well.
This patch adds support to read a ~/.aprsd/config.yml file.
If one doesn't exist, it puts out an example yaml string to stdout
that can be copied into a file and edited.
Since this patch adds a new external requirement (pyyaml) you need
to re-install the app for dev with
pip install -e .
This patch does some refactoring of the code and the directory
structure to conform to the needs of a pypi project.
The python code now lives in the aprsd directory so it acts like a real
python package that can be installed/included/used.
The aprsd.py is now aprds/main.py
This patch also adds support for using pbr, which enables a consistent
bin install that you can then call as 'aprsd' from the command line.
To use this as a developer you should create a virtualenv
virtualenv .venv
source .venv/bin/activate
pip install -e .
now you can edit the aprds/main.py and then test it by immediately
running aprsd from the command line.
The -e option for pip allows you to install the package as an editable
package in the .venv, so you can hack on it and not need to re-install
every time you make a change.