* Add test for presence of upper and lower bound on Python version
* [part 1/3] Test that this works, DO NOT MERGE
* [part 2/3] Test that this works, DO NOT MERGE
* [part 3/3] Revert unwanted changes, NOW YOU CAN MERGE!
* Fix creation of IdentifierData in config
Also adds some new tests regarding partial primary keys.
Resolves#3796.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
Co-authored-by: jack1142 <6032823+jack1142@users.noreply.github.com>
* Require custom group initialization before usage and write that data to disk
* Style
* add tests
* remove custom info update method from drivers
* clean up remnant
* Turn config objects into a singleton to deal with custom group identifiers
* Fix dumbassery
* Stupid stupid stupid
This is a step towards a more consistent front-end behaviour of Config, where errors are either circumvented or raised in the same way regardless of the driver being used.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Implements our required subset of PEP 440 in redbot.core.VersionInfo
* Added unit tests for version string parsing and comparisons
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
API changes:
- Cogs must now inherit from `commands.Cog` (see #2151 for discussion and more details)
- All functions which are not decorators in the `redbot.core.checks` module are now deprecated in favour of their counterparts in `redbot.core.utils.mod`. This is to make this module more consistent and end the confusing naming convention.
- `redbot.core.checks.check_overrides` function is now gone, overrideable checks can now be created with the `@commands.permissions_check` decorator
- Command, Group, Cog and Context have some new attributes and methods, but they are for internal use so shouldn't concern cog creators (unless they're making a permissions cog!).
- `__permissions_check_before` and `__permissions_check_after` have been replaced: A cog method named `__permissions_hook` will be evaluated as permissions hooks in the same way `__permissions_check_before` previously was. Permissions hooks can also be added/removed/verified through the new `*_permissions_hook()` methods on the bot object, and they will be verified even when permissions is unloaded.
- New utility method `redbot.core.utils.chat_formatting.humanize_list`
- New dependency [`schema`](https://github.com/keleshev/schema)
User-facing changes:
- When a `@bot_has_permissions` check fails, the bot will respond saying what permissions were actually missing.
- All YAML-related `[p]permissions` subcommands now reside under the `[p]permissions acl` sub-group (tbh I still think the whole cog has too many top-level commands)
- The YAML schema for these commands has been changed
- A rule cannot be set as allow and deny at the same time (previously this would just default to allow)
Documentation:
- New documentation for `redbot.core.commands.requires` and `redbot.core.checks` modules
- Renewed documentation for the permissions cog
- `sphinx.ext.doctest` is now enabled
Note: standard discord.py checks will still behave exactly the same way, in fact they are checked before `Requires` is looked at, so they are not overrideable.
Signed-off-by: Toby Harradine <tobyharradine@gmail.com>
* Make calling groups useful
This makes config.Group.__call__ effectively an alias for Group.all(),
with the added bonus of becoming a context manager.
get_raw has been updated as well to reflect the new behaviour of
__call__.
* Fix unintended side-effects of new behaviour
* Add tests
* Add test for get_raw mixing in defaults
* Another cleanup for relying on old behaviour internally
* Fix bank relying on old behaviour
* Reformat
* Handle missing cogs correctly, add some helpful algorithms
For cog loading, only show "cog not found" if the module in question was the one
that failed to import. ImportErrors within cogs will show an error as they should.
- deduplicator, benchmarked to be the fastest
- bounded gather and bounded async as_completed
- tests for all additions
* Requested changes + wrap as_completed instead
So I went source diving and realized as_completed works the way I want it to,
and I don't need to reinvent the wheel for cancelling tasks that remain
if the generator is `break`ed out of. So there's that.
* [V3 JSON] Return deepcopy in JSON driver
* Add a test
* foo not bar
* Add a test for setting and then mutating
* Resolve issue for setting and mutating as well
* Reformat
* Switch RPC libs for websockets support
* Implement RPC handling for core
* Black reformat
* Fix docs for build on travis
* Modify RPC to use a Cog base class
* Refactor rpc server reference as global
* Handle cogbase unload method
* Add an init call to handle mutable base attributes
* Move RPC server reference back to the bot object
* Remove unused import
* Add tests for rpc method add/removal
* Add tests for rpc method add/removal and cog base unloading
* Add one more test
* Black reformat
* Add RPC mixin...fix MRO
* Correct internal rpc method names
* Add rpc test html file for debugging/example purposes
* Add documentation
* Add get_method_info
* Update docs with an example RPC call specifying parameter formatting
* Make rpc methods UPPER
* Black reformat
* Fix doc example
* Modify this to match new method naming convention
* Add more tests
* Add the identifier as an initialization parameter
* Remove config object singleton and opt for a shared JSON datastore
* Fix bot unloading to deal with memory leaks
* Fix tests
* Fix clear all bug
* Added alternative to all_from_kind
* Returned dicts include default values
Also added docstrings
Also removed all_globals since it's kind of redundant and it wasn't working out for me
* Refactored clear_all
* Tests
* Tests again..
* Make all new methods coroutines
Ya'll are gonna hate me.
* Initial modifications
* Add initial setup.py
* working setup py help
* Modify setup file to package stuff
* Move a bunch of shit and fix imports
* Fix or skip tests
* Must add init files for find_packages to work
* Move main to scripts folder and rename
* Add shebangs
* Copy over translation files
* WORKING PIP INSTALL
* add dependency information
* Hardcoded version for now, will need to figure out a better way to do this
* OKAY ITS FINALLY FUCKING WORKING
* Add this guy
* Fix stuff
* Change readme to rst
* Remove double sentry opt in
* Oopsie
* Fix this thing
* Aaaand fix test
* Aaaand fix test
* Fix core cog importing and default cog install path
* Adjust readme
* change instance name from optional to required
* Ayyy let's do more dependency injection
* Initial commit
* Fix sentry
* Make cog manager install path work relative to the bot's dir
* Fix downloader to save data relative to the defined data folder
* Fix sentry test
* Fix downloader tests
* Change logfile location
* Add another line to codeowners
* Basic tests
* Fix versioning
* Add in FutureWarning for config file changes
* Add reference to issue
* WIP cog path manager
* Initial working state
* Get real reloading working
* Type error thingy
* And fix the tests
* Start UI shit
* path reordering
* Add install path getter/setter and fix config syntax
* Determine bot directory at runtime
* Add UI commands for install path
* Update downloader to use install path
* Add sane install path default
* Make evaluation of cog install path lazy
* Some typing fixes
* Add another line to codeowners
* Conditionally put install path in paths
* Always put install path first
* Dont allow people to add the installdir as an additional path, guarantee install dir isn't shown with paths command
* Make shit update loaded cogs
* Add tests
* Another one