Commit graph

520 commits

Author SHA1 Message Date
59df12a23f
Simplify worms.get_tables with select_column. 2022-03-19 19:51:25 -07:00
6867fb3011
Remove normalize_db_row, just use row_factory = Row. 2022-03-15 18:17:23 -07:00
ac647a37a8
Let comma_space_split return empty list if string is all blank. 2022-03-15 13:37:57 -07:00
5f5f41885e
Move get_tables into alphabetical order. 2022-03-15 13:37:28 -07:00
05b009a7c6
Escape backslashes when stringifying. 2022-03-15 13:29:14 -07:00
ee4914fa63
Add self.last_commit_id to help application know state of the world.
This allows caching layers to make better decisions about when to
reload data.
2022-03-14 15:37:46 -07:00
9b2ad4d027
Let delete, insert, update return the self.execute return value. 2022-03-14 15:35:51 -07:00
512f1591ef
Add select_one_value. 2022-03-14 15:34:41 -07:00
38f9d8046c
Add worms.raise_without_rollback. 2022-03-14 15:32:11 -07:00
0fd09984bc
Let object tokens repr themselves in the diagram. 2022-03-14 15:30:46 -07:00
ed952ffdda
Use getrandbits instead of passwordy strings for savepoint ids.
Better perf, why not.
2022-03-10 11:55:07 -08:00
d17a79c128
Store into cache using instance.id instead of requested id.
This helps ensure that the keys of the cache are the true and correct
data type and not just whatever the user provided. SQLite coerces
strings and ints.
2022-03-10 11:24:52 -08:00
c7f4d1dbf9
Respect the user's NO_COLOR environment variable. 2022-03-10 11:19:36 -08:00
2a6bc2a306
Include digits by default. 2022-03-10 11:18:21 -08:00
9530d0383a
Updates to downloady.
- Use new progressbars.
- Let the user pass a file handle to download bytes into.
- Use dynamic chunk sizing to get more regular progress bar updates.
2022-02-21 14:33:22 -08:00
232398eff0
Big updates to betterhelp.
Instead of handwriting the help text, which was time consuming and
prone to errors, I'm finally using the help parameter in
parser.add_argument. betterhelp will render and colorize this for
some good-looking automatic help text.

The make_helptext function is still extremely long and would be nice
to refactor, but I've been sitting on this commit for a few weeks now
and I want to get my git repositories back in sync.
2022-02-21 14:33:22 -08:00
c1cba4f287
Add replace_color. 2022-02-12 20:09:14 -08:00
797b4efd89
Let pipeable.output be a public function. 2022-02-12 20:09:14 -08:00
e34f3e6c32
Add progressbars.py.
I've been tweaking this file for weeks and I just want to publish
it now even though the code is still kind of ugly. I think the
interface is done.
2022-02-12 20:09:13 -08:00
ecd663b7e9
Some improvements to ratemeter.
threading.lock to ensure consistency
time.monotonic instead of time.time
Docstring wrapping
Remove math.ceil and round, not sure why I did that
2022-02-12 20:09:13 -08:00
f550c03c15
Replace constants IN_PIPE, OUT_PIPE with functions.
Since it's possible to monkeypatch over sys.stdout etc., it works
better to have functions instead of constants from the beginning
of runtime.
2022-02-12 20:09:12 -08:00
72efaec70c
Add niceprints.ASCII_BOX boxchars. 2022-01-19 20:57:37 -08:00
053a25cc58
Add DotDict.__iter__, yields key value pairs. 2022-01-19 20:57:04 -08:00
83a3bee53d
Update passwordy docstring formatting. 2022-01-19 20:56:40 -08:00
3a5235c636
Add --prefix, --suffix. 2022-01-19 20:29:58 -08:00
8d258241e7
Let pathclass.glob('.') return cwd.
This brings it more in line with regular glob for which glob('.') = ['.'].
2022-01-19 20:23:05 -08:00
9a0be7eda9
space message 2022-01-19 19:52:46 -08:00
bcab9b34d6
Add Path.assert_disk_space. 2022-01-19 19:23:11 -08:00
77769aa2ef
Alphabetize exceptions. 2022-01-19 18:38:05 -08:00
7fddee51df
Use sentinels for mode instead of strings. 2022-01-19 18:37:49 -08:00
0be376551f
Typecheck the numeric parameters to Ratelimiter. 2022-01-19 18:31:49 -08:00
206e29d4bd
Fix hms command line use. 2022-01-11 19:39:55 -08:00
8b4202fe87
Always use urandom in all functions. Remove --urandom option. 2022-01-09 17:05:03 -08:00
d34103917f
Re-add the normalize_sep function, but more conservative.
Formerly I was normalizing backslash to forwardslash on unix, which is
bad. Then I removed the function because I thought normpath was the
right tool for the job. Now I'm finding a few situations I just want to
norm the sep again.
2022-01-09 16:59:09 -08:00
4b8ae01786
Add starting_balance parameter, and by default make it nonzero. 2022-01-09 16:55:53 -08:00
e5114ecf2c
Alphabetize docstring. 2022-01-09 16:55:15 -08:00
c914d4236e
Make only_shrink a keyword-only argument. 2022-01-09 16:54:15 -08:00
c1886ba536
Add OVERWRITE_ sentinels for different overwrite techniques. 2022-01-04 13:07:16 -08:00
31156aa67c
Sort scandir entries.
In spinal.walk sorting is optional because there I prioritize
configurability and speed, but for pathclass.walk I think it
makes sense to prioritize comfort and just-works results.
2022-01-04 12:47:17 -08:00
d3d5bd1fa2
Add base mutable class. 2021-12-27 22:33:18 -08:00
10a312b996
Add return value written_files. 2021-12-27 17:08:54 -08:00
373d8dd36d
Improve operatornotify betterhelp epilogue. 2021-12-23 17:07:36 -08:00
90a7c4b76a
Add "or" to the title_capitalize lowercase list. 2021-12-23 17:07:22 -08:00
597705fc57
Add hms_letters functions to make 00h00m00s outputs. 2021-12-21 17:09:40 -08:00
9381c2c9c7
Also log commits without user-given messages. 2021-12-21 17:02:26 -08:00
28b4c8626b
Fix ratelimiter reject mode always subtracting balance. 2021-12-21 17:02:08 -08:00
0a0bbae88c
Use unicode_width instead of len, improve in_box. 2021-12-20 16:45:47 -08:00
ca4b78c654
Add stringtools.unicode_width. 2021-12-20 16:44:10 -08:00
a73263f27d
Log absolute_path instead of the Path object. 2021-12-20 16:43:14 -08:00
359c255817
Make pathclass globs faster by checking scandir for stat first. 2021-12-16 21:14:35 -08:00
c2dae46c99
Update interactive.py. 2021-12-14 20:37:40 -08:00
90f14e04f8
Improve a few uses of pathclass. 2021-12-07 12:41:58 -08:00
f2190b9bfb
Add Path.walk_directories, walk_files. 2021-12-07 12:41:35 -08:00
23fe4d1d1e
Call path.assert_is_directory before walking. 2021-12-02 19:32:39 -08:00
19afbc2105
Enforce with_child basename is str. 2021-12-02 19:32:25 -08:00
e2fd04ccf1
Remove .absolute_path thanks to fspath. 2021-12-02 19:32:08 -08:00
b288cca519
Rewrite a lot of pathclass, spinal.walk using tuple-based Path.
I was inspired by the idea of "making impossible states impossible"
and using a data model that accurately represents what we intend for
it to represent. Instead of storing the path as a string where "it's
a string but actually you're supposed to know that the parts between
os.seps are different parts and the first one is special and...", we
can use a data model that directly says that. Storing the path as a
tuple of (Drive, Part, Part) helps me focus on the semantics of the
Path as a collection of parts joined by the os.sep.

Furthermore, storing the path as a string made some operations slow.
Every time we call one of the os.path functions with a string, it
has to do a lot of normalization and edge-case handling even when we
know it wouldn't be needed. By storing the path as a tuple, we can
instantly get the drive name, parent dir name, and basename without
asking os.path to split it for us every single time. It also makes
relative path / common ancestor checks a lot easier to understand.
Fewer operations need to go into the slow functions.
2021-11-30 21:16:47 -08:00
7a48a7b69c
Let wait_for_internet take a backoff class to control sleeps. 2021-11-24 15:14:18 -08:00
bef06dac75
Add Pool.done, indicates all threads have completely finished. 2021-11-20 19:50:18 -08:00
9b8dd35658
Let Pool._threads be a set instead of list. 2021-11-20 19:48:12 -08:00
305c6bfdf4
Add lock around running_count increment, decrement.
I thought these assignments were atomic for int but they're not.
2021-11-20 19:48:12 -08:00
cca488bc7a
Move code to own function Pool.close. 2021-11-20 19:48:12 -08:00
87392b31a3
Add some type annotations. 2021-11-20 19:48:11 -08:00
dcd4d20b07
Rename PooledThread.start -> mainloop. 2021-11-20 19:20:39 -08:00
f1aea14646
Move the sleep out of the locked portion. 2021-11-20 18:53:56 -08:00
8f8a39eaca
Add Ratelimiter.__repr__. 2021-11-20 18:52:00 -08:00
6d8a406ceb
Use time.monotonic. 2021-11-20 18:51:46 -08:00
edeff079f7
Use vlogging. 2021-11-20 18:49:31 -08:00
8317e7c7b7
Add some docstrings. 2021-11-20 18:48:58 -08:00
6d9300aa9d
Remove task_done since we never call queue.join. 2021-11-20 18:48:40 -08:00
039ac45e17
Let Job.join accept a timeout. 2021-11-20 18:48:05 -08:00
f7250f8157
Let downloady take ratemeters to assist caller's reporting. 2021-11-20 18:46:20 -08:00
2fbe24b272
Add argument --operatornotify-subject to override subject line. 2021-11-18 19:53:54 -08:00
1c1bb49cb8
Add ----- between epilogues. 2021-11-18 17:06:00 -08:00
e995bd502d
Use os.path.normpath instead of normalize_sep. 2021-11-18 17:02:32 -08:00
f1b88b49fe
Raise typeerror if not Path or str, and dedent by early return. 2021-11-14 22:18:03 -08:00
3049a62bc0
Use httperrors. 2021-11-13 01:21:32 -08:00
ef546886c9
Use sock.settimeout instead of module setdefaulttimeout. 2021-11-13 01:20:42 -08:00
1bbb8bedee
Use voussoirkit.httperrors. 2021-11-13 01:20:26 -08:00
e8a0b0a050
Let get_external_ip take a timeout. 2021-11-13 01:20:13 -08:00
53756662ad
Disambiguate kwargs. 2021-11-11 18:17:42 -08:00
8838d2ffee
Fix capitalization in epilogue. 2021-11-10 23:41:50 -08:00
1c96931f85
Add argument thousands_separator. 2021-11-10 23:02:38 -08:00
729d3e5cf3
Improve bytestring docstring. 2021-11-10 23:02:22 -08:00
691b293939
Add argument raise_for_missing. 2021-11-10 23:01:55 -08:00
5a33c9369e
Add global _did_earlybird to allow main_decorator to coexist.
This way you don't get duplicate handlers.
2021-11-08 23:35:00 -08:00
b1849ccefa
Add alias copy_dir = copy_directory. 2021-11-08 18:31:05 -08:00
9e507fd61b
Significantly speed up bdecode by always indexing into original data. 2021-11-07 19:31:55 -08:00
41ec819a35
Remove spinal.copy, just let the caller do it. 2021-11-07 19:28:32 -08:00
7c205522ce
Alphabetize some arguments. 2021-11-07 19:28:03 -08:00
fa1df6f49c
Make naming of "verify_hash" feature more consistent. 2021-11-07 19:27:49 -08:00
8cb50d8cac
Add betterhelp epilogue feature, flatten some logic. 2021-11-07 19:25:37 -08:00
40410496fc
Alphabetize functions. 2021-11-07 18:59:32 -08:00
6c063fd187
Add listdir_files, listdir_directories. 2021-11-07 18:59:02 -08:00
e737e60862
Revert files/directories argument to glob, use separate functions.
I thought it was clever at first, but now I'm feeling that having
mutually exclusive arguments to a single function in this case is
better served by just having two functions. Which also saves us
from ever having to deal with the exception case.
2021-11-07 18:58:35 -08:00
125681da18
Let pathclass.join take spawn_kwargs. 2021-11-07 18:55:28 -08:00
154f02f5bb
Use r-string for re.match windows drive letter. 2021-11-07 18:54:17 -08:00
281e95f184
Make force_sep a kw-only argument. 2021-11-07 18:53:57 -08:00
71830845d4
Add note that get_objects_by_id does not raise. 2021-11-07 18:52:50 -08:00
fbe2a664e5
Move decorate_and_route to flasktools. 2021-10-31 15:11:53 -07:00