Commit graph

620 commits

Author SHA1 Message Date
Saul Shanabrook
6023e9216a pass in upscale keyword to thumbnail template tag 2013-05-11 09:12:29 -03:00
Matthew Tretter
34739819aa Fix None checks
Files can be falsy
2013-05-10 04:43:01 -04:00
Matthew Tretter
c89b18aa95 Split before_access into two signals
Differentiating between when the generated file content is required and
when the generated file is just required to exist gives us more
flexibility with strategies.
2013-05-10 04:39:46 -04:00
Matthew Tretter
6db082bca2 Reset content pointer 2013-05-10 03:08:43 -04:00
Matthew Tretter
906fbbd463 Reduce calls to backend
Reading from an `ImageCacheFile`, will result in accessing its `file`
attribute repeatedly which would result in the `before_access` signal
being dispatched, which in turn would result in many unnecessary calls
to the image cache backend. With this change, we don't send
`before_access` if the file has already been created.

Similarly, we don't need to try to generate the image if we know for
certain that it's already been generated (because we have a reference
to it).
2013-05-10 02:56:44 -04:00
Matthew Tretter
bc49f9cf8b Store the file after we generate it
This means reading ImageCacheFiles won't result in an additional storage
operation.
2013-05-10 02:42:28 -04:00
Matthew Tretter
06dd238993 Store cachefile strategy on file; not generator
The file can appeal to the generator for the value, but it shouldn't
require it; it just does that as a convenience.
2013-05-10 00:51:47 -04:00
Matthew Tretter
d5d5fc0550 Add cachefile backend fallback
The generator shouldn't have to implement `cachefile_backend`
2013-05-10 00:26:46 -04:00
Matthew Tretter
4efa05099d Use pilkit's process_image utility 2013-05-09 22:02:03 -04:00
Matthew Tretter
d94c4bb0a9 Merge branch 'canon-pickle' into develop 2013-04-30 20:50:29 -04:00
Matthew Tretter
f173861b53 Fix invalid char range 2013-04-30 09:32:47 -04:00
Matthew Tretter
c704db2da5 Sanitize cache keys for memcached
Closes #208
2013-04-30 09:32:47 -04:00
Matthew Tretter
f5b171979b Canonicalize sets and dicts before hashing 2013-04-25 02:30:37 -04:00
Matthew Tretter
3e019f5dac Merge pull request #204 from danxshap/close_file_fix
Re-open source file on ValueError in ImageSpec.generate()
2013-04-23 10:59:14 -07:00
Matthew Tretter
0a98eb0e79 Use DEFAULT_FILE_STORAGE by default
As raised in #203, if `IMAGEKIT_DEFAULT_FILE_STORAGE` isn't set,
`DEFAULT_FILE_STORAGE` should be used.
2013-04-22 09:05:49 -04:00
danxshap
13c92db760 Re-open source file on ValueError in ImageSpec.generate() 2013-04-21 16:06:13 -04:00
Eric Brelsford
7946fe54b5 processors in PILKit: module
Help those looking in the code find processors.
2013-04-10 14:24:02 -04:00
Matthew Tretter
261f164127 Bump version to 3.0b1 2013-04-05 16:43:26 -04:00
Matthew Tretter
c4431fe296 Don't require generator to unregister 2013-04-05 16:41:53 -04:00
Matthew Tretter
6f9f99e86c Fields shouldn't cause AlreadyRegistered exceptions 2013-04-05 15:28:36 -04:00
Matthew Tretter
091b2137d0 Always call set_spec_id 2013-04-05 14:57:41 -04:00
Matthew Tretter
41ab2c0fa3 Use different name for different signature 2013-04-05 14:57:11 -04:00
Matthew Tretter
dafebc9a4d Don't call register without spec 2013-04-05 14:38:29 -04:00
Matthew Tretter
9891314b8e Don't error if same generator is registered 2013-04-05 12:25:02 -04:00
Matthew Tretter
681527fa9d Remove implicit source logic from descriptor
This needs to be known earlier, when registering the source group, so
we do it in `contribute_to_class` instead.

Closes #188.
2013-04-03 00:21:04 -04:00
Matthew Tretter
2b10e85813 Clarify "force" kwarg 2013-04-02 22:55:44 -04:00
Matthew Tretter
3ca8c53698 Also defer existance check 2013-04-02 22:37:52 -04:00
Matthew Tretter
728368abf6 Add async cachefile backend 2013-04-02 22:29:53 -04:00
Matthew Tretter
86cd23e906 Remove actions module 2013-03-15 01:06:28 -04:00
Matthew Tretter
3d6a9de9aa Add existence check timeout 2013-03-15 01:05:53 -04:00
Matthew Tretter
1e129c5b70 Convert to boolean 2013-03-15 00:49:24 -04:00
Matthew Tretter
70ff6dc788 Store state when force-generated 2013-03-15 00:30:58 -04:00
Matthew Tretter
c48c720f8a Add __nonzero__ method that will work for async 2013-03-15 00:27:23 -04:00
Matthew Tretter
fc87c0497c Add abstract cachefile backend for illustration 2013-03-15 00:20:15 -04:00
Matthew Tretter
54dda25adb Generation goes through backend; use states
We might as well account for asynchronous generation in our
CachedFileBackend.
2013-03-15 00:19:19 -04:00
Matthew Tretter
ac92b77709 Fix loopy existence check
Sometimes two wrongs do make a right I guess. But better to have two
rights.
2013-03-14 23:04:30 -04:00
Matthew Tretter
f181d30008 Rename file_exists to exists 2013-03-14 22:58:28 -04:00
Matthew Tretter
044a3625f9 Correct error message 2013-03-14 22:55:40 -04:00
Matthew Tretter
c64eee40b3 Bump version to 3.0a5 2013-02-25 22:43:37 -05:00
Matthew Tretter
92a3c2688c Error when attempting to generate image w/o source 2013-02-25 22:42:47 -05:00
Matthew Tretter
61aa1c32e7 Bump version to 3.0a4 2013-02-25 22:22:27 -05:00
Matthew Tretter
b33869a9f8 Sourceless specs are falsy
Passes test added in 190153d. Related to #187
2013-02-25 22:18:33 -05:00
Matthew Tretter
dff0182310 Remove another old util 2013-02-12 21:40:15 -05:00
Matthew Tretter
f5a078b68f Remove old util 2013-02-12 21:40:15 -05:00
Matthew Tretter
5c944c5efb Bump version to 3.0a3 2013-02-10 16:05:21 -05:00
Matthew Tretter
b53b7c3cae Clarify ImageFieldSourceGroup docstrings 2013-02-10 16:01:50 -05:00
Matthew Tretter
90ae9e8339 Fix get_nonabstract_descendants
Previously, function was only returning the first non-abstract
descendant. (It should also return concrete descendants of concrete
descendants, which it now does.)

Also, converted to generator.
2013-02-10 15:58:22 -05:00
Matthew Tretter
df41459e65 Fix signals for abstract models
Includes a fix for undispatched signals, as well as signals being
handled twice.

A regression of #126
Related: #185
2013-02-10 15:42:10 -05:00
Sean Bell
af6ebcb469 Fixing iteration over objects for abstract models 2013-02-09 03:02:18 -05:00
Matthew Tretter
969275bbc9 Rename GeneratedImageFile to ImageCacheFile 2013-02-08 18:15:00 -05:00
Matthew Tretter
36313194ac Remove PILKit functionality
This commit removes the functionality now in the PILKit project, and
adds PILKit as a dependency. Import hooks have been used to expose the
processors under "imagekit.processors".
2013-02-07 23:10:05 -05:00
Matthew Tretter
51dcf283fd Fix default cache backend for Django < 1.3 2013-02-06 21:59:26 -05:00
Matthew Tretter
301adc2087 Let's call em cachefiles
Changed my mind about 04aa72c1f9. It's
just a better description, even if different strategies can change the
behavior so it isn't really very cache-like.
2013-02-04 19:52:38 -05:00
Matthew Tretter
d22c49a465 Don't delete the file when source is deleted
We can't be sure another spec isn't using this file.
2013-02-04 19:48:42 -05:00
Matthew Tretter
218f569005 Don't assign processors, so properties will work
This way, a subclass can add a @property without a setter and not worry
about an error.
2013-02-02 19:21:32 -05:00
Matthew Tretter
58e1c7f7e0 Some docs 2013-02-01 01:37:49 -05:00
Matthew Tretter
f94b7276b3 Use "imagekit" instead of "ik" for built-in generator prefix 2013-02-01 01:31:51 -05:00
Matthew Tretter
50d83745bc Remove unnecessary complexity of kwarg mapping 2013-02-01 01:02:20 -05:00
Matthew Tretter
08ebcbcbf3 Change html attrs delimiter to -- 2013-02-01 00:56:29 -05:00
Matthew Tretter
92b11f8349 Use imagegenerators module, not imagespecs 2013-02-01 00:30:15 -05:00
Matthew Tretter
0947c1403f Organize settings 2013-01-31 22:40:54 -05:00
Matthew Tretter
933ff79ac1 Make settings consistent 2013-01-31 22:38:48 -05:00
Matthew Tretter
e1c819e9b4 Allow default generatedfile name configuration w/namers 2013-01-31 22:37:09 -05:00
Matthew Tretter
bf1685dbfb Generalize get_class util 2013-01-31 22:01:01 -05:00
Matthew Tretter
75962976d0 Add stringify methods to LazyGeneratedImageFile 2013-01-31 19:41:54 -05:00
Matthew Tretter
d6b73b8da7 Renaming/repackaging of generated file related classes 2013-01-31 19:24:08 -05:00
Matthew Tretter
8e6abc1e65 Remove ensure_exists
`generate()` now plays double duty
2013-01-31 10:07:27 -05:00
Matthew Tretter
01fad6e4c6 Fix registration bug 2013-01-31 10:07:27 -05:00
Matthew Tretter
04aa72c1f9 Rename cache things (it isn't cachine)
https://twitter.com/alex_gaynor/statuses/257558176965206016
2013-01-31 10:07:20 -05:00
Matthew Tretter
f0dbe32f7a Fix pickling error 2013-01-29 02:27:03 -05:00
Matthew Tretter
54ca5da15d Improve generator id pattern matching
This behavior allows users to easy generate images by app, model, or
field.
2013-01-29 02:22:00 -05:00
Matthew Tretter
e0ffb246ae Always use colon as segment separator 2013-01-29 02:17:52 -05:00
Matthew Tretter
e48817a5ec Update warmimagecache to use new cacheable registry 2013-01-29 01:53:23 -05:00
Matthew Tretter
ca4f090e63 Fix source callbacks on strategies 2013-01-29 01:48:06 -05:00
Matthew Tretter
3931b552a0 Separate source groups and cacheables.
This allows a sensible specialized interface for source groups, but also
for ImageKit to interact with specs using the generalized image
generator interface.
2013-01-29 01:40:00 -05:00
Matthew Tretter
5b44564318 Add LazyGeneratedImageCacheFile 2013-01-28 21:46:04 -05:00
Matthew Tretter
a3e9a080d4 Revert signal names 2013-01-28 21:45:58 -05:00
Matthew Tretter
cef3a41d86 Merge branch 'ik-next' into cacheables
Conflicts:
	imagekit/management/commands/warmimagecache.py
	imagekit/registry.py
2013-01-28 21:45:37 -05:00
Eric Eldredge
eb9089e0c8 Register cacheables as generators instead of items 2013-01-24 00:04:43 -05:00
Matthew Tretter
c202234e82 Fix imagekit.forms.fields.ProcessedImageField 2013-01-23 22:54:25 -05:00
Eric Eldredge
a8855d4c27 Change spec/source registry to generator/cacheable 2013-01-23 22:46:57 -05:00
Matthew Tretter
84b30e990f Fix imagekit.models.fields.ProcessedImageField 2013-01-23 22:41:23 -05:00
Matthew Tretter
234082e63c Extract generate() util, to make files Django likes 2013-01-23 22:34:29 -05:00
Matthew Tretter
d52b9c8100 Add utility for extracting field info 2013-01-23 21:47:54 -05:00
Matthew Tretter
4737ac64c4 Specs no longer accept arbitrary kwargs
Only the source.
2013-01-23 21:35:38 -05:00
Matthew Tretter
6ff1d35fbe Remove unused import 2013-01-23 21:31:53 -05:00
Matthew Tretter
eef1e41448 Remove code that used old filename kwarg 2013-01-23 21:28:23 -05:00
Matthew Tretter
d632fc70fa Copy contents to NamedTemporaryFile if generated file has no name 2013-01-23 21:27:21 -05:00
Matthew Tretter
4ecfa5d35e Don't rely on source filename being relative path
Closes #180
2013-01-13 23:40:26 -05:00
Matthew Tretter
e5b15d09bd Remove _generateimage utility. 2013-01-09 00:28:29 -05:00
Matthew Tretter
43a1f49498 New thumbnail tag syntax! Closes #177 2013-01-09 00:25:08 -05:00
Matthew Tretter
11d511f9cc Extract util for parsing common bits.
In preparation for new thumbnail and placeholder tag syntaxes (#177 and
#176) which share some (but not all) syntax with the generateimage tag.
2013-01-08 22:42:42 -05:00
Matthew Tretter
658bb22c78 Special case serialization of ImageFieldFiles
Closes #168
2013-01-08 21:52:56 -05:00
Matthew Tretter
c2dedaa2b8 Use file name; not file, which can't be pickled 2013-01-08 20:57:19 -05:00
Matthew Tretter
faee0fa537 Correct typo 2013-01-08 20:36:17 -05:00
Matthew Tretter
d80f2f26a9 "source" now refers to the file itself 2012-12-11 22:53:13 -05:00
Matthew Tretter
184c13dd4e More source_group renaming 2012-12-11 22:41:10 -05:00
Matthew Tretter
52fb4e24be Add thumbnail templatetag
Finally!
2012-12-07 00:42:11 -05:00
Matthew Tretter
30e40b4916 Add TODO for unregistration 2012-12-07 00:17:35 -05:00
Matthew Tretter
c69c2d087e Create Thumbnail spec; closes #175 2012-12-06 23:48:09 -05:00
Matthew Tretter
1fb1d83c56 Add Thumbnail processor 2012-12-06 23:22:02 -05:00
Matthew Tretter
8c80ba3b4f GeneratedImageCacheFile stores file manipulation attributes
Everything for dealing with files should be part of
GeneratedImageCacheFile--not the generator. The fact that
GeneratedImageCacheFile can get this information (storage, filename,
etc.) is a convenience so that the user only has to define one class
(the generator) to fully specify their functionality, but handling the
cache file is not part of the core responsibility of the generator.

This is also the reason for the renaming of `get_filename` and `storage`
to `cache_file_name` and `cache_file_storage`: the generator is just as
useful for those who want to generate persistent files. But the original
attribute names didn't indicate that they were used only for cache
files. The new ones do, and don't preclude the addition of other
versions that would be used by another `File` subclass for specifying
file names or storage classes.
2012-12-06 19:54:26 -05:00
Matthew Tretter
12307c97aa Use state--not constructor args--to recreate dynamic specs
Previously, we were relying on `__init__`'s arguments to recreate specs.
Now we do it the proper way, using the dict returned by `__getstate__`
(which may or may not include those arguments).
2012-12-05 23:51:30 -05:00
Matthew Tretter
042bdcefb6 Simplify dynamic spec definitions
Use a closure instead of an attribute to store the class attrs.
2012-12-05 23:38:10 -05:00
Matthew Tretter
c45876f95c Ignore some style errors 2012-12-05 23:16:34 -05:00
Matthew Tretter
2a6199b804 Simplify get_hash implementation 2012-12-05 23:16:07 -05:00
Matthew Tretter
0ec6067c8d Correct pickling/unpickling of dynamic specs
Previously, __reduce__ was returning a reduction of the class, not the
instance.
2012-12-05 21:10:36 -05:00
Matthew Tretter
7f11f44c67 Special case source_file for specs
It was already special. Why hide it? Closes #173
2012-12-05 21:10:31 -05:00
Matthew Tretter
afc5900db6 Support decorator syntax for register.spec 2012-12-05 21:09:10 -05:00
Matthew Tretter
956601b5d0 Revert register.spec argument order
Since we got rid of inner Config classes, we can put the order back and
support decorators.
2012-12-05 21:09:10 -05:00
Matthew Tretter
a07bc49a25 Remove inner Config classes 2012-12-05 21:09:10 -05:00
Matthew Tretter
4f7ce68904 Add documentation for generateimage 2012-12-03 21:11:52 -05:00
Matthew Tretter
4f81e14f58 Re-add html attribute handling 2012-12-03 21:06:15 -05:00
Matthew Tretter
848d7d7fa3 Add TODOs 2012-12-01 23:19:45 -05:00
Matthew Tretter
14d2193f8d Remove unused args 2012-12-01 22:23:25 -05:00
Matthew Tretter
236eea8459 Move filename generation to generator 2012-12-01 22:09:34 -05:00
Matthew Tretter
20c900df4a Remove unused imports 2012-12-01 21:52:23 -05:00
Matthew Tretter
7bc82d3624 Remove arguments from generate() method
Previously, we had two places where we were passing kwargs that affected
the image generation: the ImageSpec constructor and the generate method.
These were essentially partial applications. With this commit, there's
only one partial application (when the spec is instantiated), and the
generate method is called without arguments. Therefore, specs can now
be treated as generic generators whose constructors just happen to
accept a source_file.
2012-12-01 21:20:33 -05:00
Matthew Tretter
5ecb491e65 Remove unused import 2012-12-01 20:47:55 -05:00
Matthew Tretter
7ed404f096 Switch args back to old order 2012-12-01 20:45:34 -05:00
Matthew Tretter
1f06c9ac70 Remove ImageSpecCacheFile 2012-12-01 20:41:08 -05:00
Matthew Tretter
9188499965 Rework template tag for generators 2012-12-01 20:36:31 -05:00
Eric Eldredge
e0567e8fa7 Remove specs.SpecRegistry; add registry module
The registry module splits the work that specs.SpecRegistry
used to do into two classes: GeneratorRegistry and
SourceGroupRegistry. These two registries are wrapped in
Register and Unregister utilities for API convenience.
2012-12-01 17:16:09 -05:00
Matthew Tretter
d253fe281a Rename image_field argument; closes #158 2012-12-01 16:46:10 -05:00
Matthew Tretter
54baa44900 Require spec id for form fields
Closes #163
2012-12-01 15:56:37 -05:00
Matthew Tretter
4ead0b3002 Add note about nested config classes 2012-12-01 15:51:40 -05:00
Matthew Tretter
5b1c5f7b4e Rename source objects to source groups 2012-12-01 15:51:28 -05:00
Matthew Tretter
49a55d4763 Try adding __reduce__ 2012-12-01 14:11:04 -05:00
Matthew Tretter
5a414a3644 Rename spec_args to spec_attrs 2012-11-06 23:50:23 -05:00
Matthew Tretter
aaa823afd6 Add flake8 linting 2012-11-05 23:34:32 -05:00
Matthew Tretter
c752eea6a0 Fix bug with black mat_color 2012-11-05 22:23:29 -05:00
Matthew Tretter
f9e2ce8649 Add TODO 2012-11-03 00:27:03 -04:00
Matthew Tretter
5494ee7fc1 Clarify relationship between BaseImageSpec and ImageSpec 2012-11-03 00:08:47 -04:00
Matthew Tretter
e56d687bb0 Name can be set explicitly on GeneratedImageCacheFile 2012-11-02 22:17:25 -04:00
Matthew Tretter
64d95768f8 Extract GeneratedImageCacheFile
As mentioned in #167, we want to be forward thinking and allow for a
hypothetical spec supertype which has the same functionality as an image
spec but doesn't require a source file: a generator. To this end, I've
renamed `ImageSpec.apply()` to `ImageSpec.generate()` and extracted
a `GeneratedImageCacheFile` base class from `ImageSpecCacheFile`, which
supports the more general interface of a generator--namely, a
`generate()` method with arbitrary args and kwargs.
2012-11-02 00:33:33 -04:00
Matthew Tretter
56f8d1b8bc Create form field class; re: #163 2012-10-25 22:46:28 -04:00
Matthew Tretter
6377f89e85 IKContentFile must have name attr 2012-10-25 22:43:10 -04:00
Matthew Tretter
570e7bd640 Simplify SpecHost creation 2012-10-25 22:31:37 -04:00
Matthew Tretter
76b9ebbab4 Omit missing kwargs so as not to override defaults
The default image cache strategy was being overridden, which prevented
images from being generated.
2012-10-25 22:25:18 -04:00
Matthew Tretter
006ff54fa8 Clean up version meta. 2012-10-25 20:01:26 -04:00
Matthew Tretter
fb8c411f75 Create new cache warming command
Replaces ikcachevalidate and ikcacheinvalidate, and uses the "sources"
abstraction. Closes #165
2012-10-24 23:41:05 -04:00
Matthew Tretter
84f3b6475b Add files() generator. Re: #165 2012-10-24 23:41:05 -04:00
Matthew Tretter
adf143edc5 add_source -> add_sources; switch argument order 2012-10-24 22:30:10 -04:00
Matthew Tretter
bdec396180 Support inner Config class for id, sources
Closes #164
2012-10-24 22:23:53 -04:00
Matthew Tretter
8d3fcafcd9 Swap argument order for specs.register
This will allow us to put the id in the inner Meta class.
2012-10-24 22:14:45 -04:00
Matthew Tretter
d110b82347 Rename imagekit_tags to imagekit 2012-10-21 17:59:56 -04:00
Matthew Tretter
3dbb96ea40 Remove unused imports 2012-10-21 17:57:53 -04:00
Matthew Tretter
3e2c3803ff No need to call spec; the registry does that 2012-10-20 23:44:26 -04:00
Matthew Tretter
0c4d9738c6 Add TODO 2012-10-20 23:44:13 -04:00
Matthew Tretter
12493b3a0d Spec host must support kwarg "hints"
The registry's `get_spec()` was already supporting kwargs as a means to
provide information about the source to the spec constructor/factory
function, but the ``SpecHost`` class wasn't capable of accepting any.
This commit rectifies that. The main goal purpose of this is to allow a
bound field (the file attached by ``ImageSpecFileDescriptor``)--and the
attached model instance--to be taken into account during the spec
instance creation.

Related: #156
2012-10-20 23:29:07 -04:00