667c14f072
Add search argument within_directory.
2020-09-27 10:48:01 -07:00
da67740689
Move these print statements to log.debug.
2020-09-27 10:47:32 -07:00
51b2642be9
Let data_directory take an existing pathclass instance.
2020-09-27 10:45:58 -07:00
a2fc49b6e7
Let config.log_level None -> setLevel(NOTSET).
2020-09-27 10:45:07 -07:00
343ce508bf
Add search UI for yield_albums.
2020-09-24 14:26:51 -07:00
9a85714df7
Use pathclass.Path.makedirs.
2020-09-24 14:18:23 -07:00
28181428be
Synchronize Etiquette and YCDL.
2020-09-22 02:54:26 -07:00
18e1849fcf
Fix video_thumbnail not checking if probe failed before using it.
2020-09-20 18:31:55 -07:00
2accb5c961
Use pathclass.Path.open.
2020-09-20 18:31:31 -07:00
55e66c8656
Fix NameError during set_override_filename.
2020-09-20 13:43:02 -07:00
f8e03bed21
Replace usage of row[0] with (column,) tuple unpack.
2020-09-20 13:41:22 -07:00
fa57386908
Don't call p.get_tags until needed, and don't sort them.
2020-09-20 13:17:51 -07:00
f56da72881
Return more sets from backend, do sorting on frontend.
...
It's better semantically for these items coming out of the backend
to be sets. Sorted lists are only relevant to human consumption at the
frontend.
2020-09-20 13:16:52 -07:00
317fa3b51d
Call assert_not_deleted before every @transaction.
2020-09-20 12:46:52 -07:00
497abf26cd
Move circular dependency to end of file.
2020-09-20 12:46:38 -07:00
5c4c0a3034
Let jsonify.photo expect that tags are sets, not lists.
2020-09-20 12:06:10 -07:00
a8f5f858b7
Add abstractmethod to Groupable methods that write; dunder methods.
...
The read-only methods like get_* and has_* don't need to be overridden,
but for anything that writes I don't want to forget to override them
with feature decorators etc.
2020-09-20 12:04:49 -07:00
2a89cf33d3
Add has_tags=False suggestion to digest_directory docstring.
2020-09-20 11:43:18 -07:00
512470f73d
Add log statement for PDB.digest_directory.
2020-09-20 11:42:44 -07:00
1acd570467
Simplify log statement for Photo.rename_file.
2020-09-20 11:41:33 -07:00
718da6c5c3
Remove leftover attributes group_sql_index, group_getter.
2020-09-20 11:41:15 -07:00
b66464dc46
Add exceptions.DeletedObject and ObjectBase.assert_not_deleted.
2020-09-20 11:31:51 -07:00
85260144ef
Add attribute deleted to all objects, for held instances.
...
If an instance is being held in two places, and then one of them
calls delete(), the other can check deleted before doing anything with
the object.
2020-09-20 11:16:07 -07:00
7412ef5162
Let parse_unit_string try int before float.
2020-09-19 04:01:49 -07:00
865c3011e5
Some linting.
2020-09-19 03:59:37 -07:00
0df556da3f
Some more stricter type checks and exceptions.
2020-09-19 03:52:42 -07:00
2db1f12bfb
Add constants.USER_ID_CHARACTERS and show that when raising invalid.
2020-09-19 03:51:55 -07:00
b223691107
Add helpers.collapse_whitespace.
2020-09-19 03:50:55 -07:00
1013fb81c1
Call assert_no_such_user before assert_valid_password.
2020-09-19 03:35:26 -07:00
7b7015125e
Add period to all exception messages.
2020-09-19 03:32:16 -07:00
06c811d858
Move all get_user_id_or_none calls to "these might raise" portions.
2020-09-19 03:24:02 -07:00
adb1d0ef39
Replace all double blank lines with single, improve hash headers.
...
There was always some semblance that two blank lines has some kind of
meaning or structure that's different from single blank lines, but
in reality it was mostly arbitrary and I can't stand to look at it
any more.
2020-09-19 03:13:23 -07:00
a7cc6d2383
Rename all caught exception variables to "exc", not "e".
2020-09-19 03:08:45 -07:00
854f210a4f
Alphabetize Photo.set_searchhidden.
2020-09-18 13:11:56 -07:00
4b5a52abb4
Take advantage of the tag_exports cache for get_all_tag_names.
2020-09-17 21:22:54 -07:00
4bcfd9958a
Split get_user into _by_id, _by_username.
2020-09-17 21:11:42 -07:00
22d16693f3
Remove path parameter from get_album, remove get_album_by_id.
...
First of all, I realized the return statement was using the
outdated singular name of the method. But anyway, I don't like the
idea that this method would sometimes return a single album by id
or a list of albums by path. If you want to get by path, use
get_albums_by_path explicitly.
2020-09-17 21:09:10 -07:00
838982b6c3
Let login take username.
...
This cuts back on unnecessary sql selects.
2020-09-17 21:02:55 -07:00
40e458e713
Don't update self.attribute until sql_update goes through.
2020-09-17 20:44:33 -07:00
a093dc273c
Update self.real_path after relocating and renaming.
2020-09-17 20:43:17 -07:00
39b7f3cd98
Experiment: Remove character whitelist for tag names.
...
I have always felt bad about forbidding unicode in tag names,
but I want to make sure I have a grip on sanitization / preventing
abuse before allowing it. I think stripping control characters is
enough and any abuse can be handled manually.
Of course that's all fiction because there are no users except myself.
2020-09-17 18:52:06 -07:00
26b9371f26
When @transaction rolls back, log the name of the called method.
2020-09-17 18:33:56 -07:00
c99f6858df
Add Photo.normalize_override_filename.
2020-09-17 17:46:52 -07:00
c91888a738
Some linting.
2020-09-15 19:47:07 -07:00
d093843f28
Use sql_execute instead of sql.execute.
2020-09-15 14:58:05 -07:00
750d93673d
Add method purge_deleted_associated_directories.
2020-09-15 14:57:20 -07:00
37bff5c427
Look for renamed files (lost&found) during digest_directory.
2020-09-15 14:57:05 -07:00
9578dc4d67
Add column for photo's st_dev, st_ino to facilitate lost&found.
2020-09-15 14:56:45 -07:00
50ecc4c1c1
Let digest_directory act as a generator, yielding photos & albums.
2020-09-15 13:48:06 -07:00
37c784982a
Add PDB.clear_all_caches.
2020-09-15 13:44:49 -07:00
5bc3fdd08e
Move purge_empty_albums to PDBAlbumMixin.
2020-09-15 13:44:28 -07:00
5b4cc5bf9c
Log the exception before rolling back.
2020-09-14 20:25:24 -07:00
5d40622b76
Add log for Photo.relocate.
2020-09-14 19:38:29 -07:00
be0747fd8c
Use path.absolute_path when logging add_associated_directory.
2020-09-14 19:38:13 -07:00
8279a1871b
Return set instead of list from get_parents, get_tags.
2020-09-14 18:34:14 -07:00
a32caafb8b
Remove leftover print statements.
2020-09-14 16:56:55 -07:00
1f7ffbb283
Fix old reference to incorrect variable name tagname.
2020-09-14 05:50:10 -07:00
f3bceb4688
Remove get_cached_flat_dict, add get_cached_tag_export.
2020-09-14 05:49:24 -07:00
cf64c79809
When grouping tags, update tagged photos to prefer child.
...
I am also considering applying the opposite effect when ungrouping.
Should a photo with A.B get A when A and B are ungrouped? There are
some cases where the answer is yes, and others no, depending on the
reason you're ungrouping the tags. Whereas this change is non-
controversial and simply enforces the existing standard of adding
more specific tags to a photo.
2020-09-14 05:46:43 -07:00
f1d17350a7
Add Photo.remove_tags.
2020-09-14 05:38:20 -07:00
85f24dd1f5
Let Photo.remove_tag only remove exact tag, not children.
...
I wrote this because I felt it would be a useful shorthand, as a way
of nuking all tags of a subtree off a photo, but it's too easy
to cause collateral damage when composing remove_tag with other
functions. So, when you remove tags from a photo, you'll have to be
more specific.
2020-09-14 05:37:47 -07:00
54add8ad61
Add search parameter yield_albums.
...
The exact details of this feature are still experimental, but I think
the concept is sound enough to make it an official parameter.
2020-09-14 05:16:36 -07:00
188095c30b
Remove unnecessary intermediate variable syn_lines.
2020-09-12 17:33:45 -07:00
5dcccae646
Fix add_children all(bail) causing short-circuit.
2020-09-12 13:14:40 -07:00
d41bad63e7
Move reset of cached_tag_flat_dict out of GroupableMixin into Tag.
...
That should not have been there!
Needed to add the BAIL sentinel so that Tag methods would only
reset the cache if the internal method actually did made any changes.
2020-09-12 01:19:03 -07:00
74445d0a1f
Add internal _add_child so that plural doesn't call transacted.
...
add_children was calling add_child in a loop. Since this is a parent
class, that call would actually call the subclasses' add_child method,
which has a transaction decorator, and create unnecessary transactions.
2020-09-12 01:00:39 -07:00
21921dc8fc
Rename cached_frozen_children -> cached_tag_flat_dict.
2020-09-12 00:56:32 -07:00
b59c2700db
Update _lift_children docstring.
2020-09-12 00:53:12 -07:00
1a53af8821
Replace horrible flat_dict algorithm with actual recursion.
2020-09-12 00:21:37 -07:00
2a9b2cd095
Add methods PDB.get_thing_count for all thing types.
2020-09-11 23:51:57 -07:00
cfb48a8d11
Add disclaimer about yield order to get_things_by_id.
2020-09-11 22:13:30 -07:00
0cdd8c0d71
Add detailed doctstring to digest_directory.
2020-09-11 15:49:02 -07:00
4a3236babe
Update digest_directory to handle plural albums at every step.
2020-09-11 15:48:37 -07:00
dea746c45a
Alphabetize Album's methods.
2020-09-11 15:21:13 -07:00
1cc70616a5
Replace get_album_by_path with get_albums_by_path generator.
2020-09-11 15:15:12 -07:00
7705848714
Let new_album take multiple associated directories.
2020-09-11 15:02:33 -07:00
519bcf32e6
Add separate plural method Album.add_associated_directories.
2020-09-11 15:02:15 -07:00
8ed5f0be51
Fix tag_expression usage of frozen_children which was tag objects.
...
At some point, I changed tag_export.flat_dict from using strings as
keys to using actual Tag objects as keys. The tag expression handler
never got updated, so frozen_children[tagname] raised KeyError as
it was looking for a string.
I considered using tag_expression_tree.map to convert all the tree
tokens into tag objects, but when we render the tree back into text
it will say "Tag:name" instead of just "name" throughout the whole
expression, and I don't want to deal with converting those back.
2020-09-09 12:58:57 -07:00
30d7dbdb39
Fix tag_export.flat_dict which was not truthful about synonyms.
2020-09-09 12:53:51 -07:00
a79e14e120
Let search_kwargs[orderby] give back None instead of empty list.
2020-09-09 12:20:49 -07:00
7eb095e17c
Experiment: Use width*height instead of area column when searching.
...
Will see if this has any adverse effects, or if it goes well I can
remove the area and ratio columns.
2020-09-08 21:59:42 -07:00
a8fa621f01
Rewrite helpers.comma_space_split with a simple regex.
2020-09-04 17:00:01 -07:00
e774b5f101
Fix zip_photos attempting to add deleted files.
2020-08-30 18:48:08 -07:00
0b4542089b
Accommodate chunk_sequence which now always yields lists.
2020-08-28 17:57:15 -07:00
e40c91a7cf
Split reload_metadata into separate functions by mimetype.
2020-08-28 17:51:07 -07:00
45d8809971
Fix crash while trying to get size of deleted file.
...
Pathclass no longer returns None for missing files, as it did when
this was written.
2020-08-28 17:32:53 -07:00
fa8bbf92f9
Remove call to logging.basicconfig, let the frontend do it.
2020-08-12 12:23:51 -07:00
b15beb73eb
Rewrite chunk_sequence to work with generators.
2020-08-12 11:21:48 -07:00
b21e6a1206
Show data directory in DatabaseOutOfDate message, not db file.
2020-07-01 16:19:54 -07:00
363d0bac67
Move THING_CLASSES and thing-related methods to new mixin.
...
I realized there's no need to have that on the global scope when
it is only used for the thing-methods.
2020-04-15 16:33:16 -07:00
5dffe52830
Start _cached_sql_tables as None, and in the SQL mixin.
2020-04-15 16:31:47 -07:00
35895856e6
Use .clear() instead of reassigning to empty lists.
...
I cannot remember if there is a reason I chose to use empty lists.
If there is, I'll rediscover it and write a comment. Until then, it
makes sense to use clear as an explicit clearing of the list.
2020-04-15 16:31:09 -07:00
43a665fd91
Replace more %s with fstrings.
2020-04-15 16:29:56 -07:00
930960e22a
Move this config prep code into voussoirkit as configlayers.
2020-04-03 17:09:01 -07:00
9c96522cfc
Remove thing_map table, just use thing_map class.table.
2020-04-03 15:20:09 -07:00
545ea62818
Add some docstrings and comments near get_cached_instance.
2020-04-03 12:33:19 -07:00
5a16579fe3
Add a 'type' string to all etiquette jsonify outputs.
2020-04-02 22:43:20 -07:00
dd3d40de53
Experimental: Allow search results to include albums.
...
I've been thinking about this for a while but couldn't think of
the perfect way to implement it. I still haven't, so instead I'm
just starting with something and we'll see how to improve later.
At any rate, I can update the rest of the system to expect Albums
coming out of search so that if I ever have a better algorithm
everything else will already be ready for it.
For this first experiment, just any photos that are part of an album
will send that album out as a result. It doesn't even respect the
limit parameter, it's really just to see how it feels to use.
2020-04-02 22:36:40 -07:00
e94e35c98c
Add option to natural_sort filenames before digesting.
2020-04-02 21:57:54 -07:00
374763f990
Reduce log level of savepoints to 5.
...
So far I am satisfied with how they are working, and they clutter
the output so much I can't read anything else.
For reference, logging.DEBUG is 10.
2020-04-02 21:56:41 -07:00