Commit graph

2678 commits

Author SHA1 Message Date
j
1ec69b9c05 more py3 fixes 2016-08-31 00:33:08 +02:00
j
6aabe8d9df py3 fixes 2016-08-31 00:31:38 +02:00
j
9b3547f9bc fix tv 2016-08-28 15:05:52 +02:00
j
78c26daaeb update poster after processing stream 2016-08-28 13:38:46 +02:00
j
f71334ae25 avoid ad 2016-08-28 13:25:26 +02:00
j
da89a9748a include download task 2016-08-28 12:22:31 +02:00
j
029bcfee29 files are queued after download 2016-08-28 12:22:08 +02:00
j
11e36b550e update task after updating item 2016-08-25 18:34:49 +02:00
j
1dd574cb9e task queue has status not state 2016-08-25 18:34:49 +02:00
j
8136a2c2f5 create new item if unregistered file gets uploaded 2016-08-25 18:34:49 +02:00
j
181f27b93a fix audio only uploads 2016-08-25 18:34:49 +02:00
j
1468ddbecb towards supporting python 2 and 3
- use absolute_imports
- make use of six.moves
- use exec instead of execfile
- use list(dict) instead if dict.keys()
2016-08-25 18:34:36 +02:00
j
479432f01a upload_date can be none 2016-08-25 18:32:28 +02:00
j
83c2e25aac support editable as result in find 2016-08-25 18:32:28 +02:00
j
97a46dceb0 fix sort of static edits 2016-08-23 13:24:27 +02:00
j
9685c7e4a5 fix streams for static edits 2016-08-23 13:24:22 +02:00
j
b4074303ba avoid error in error handler and render 500 page 2016-08-23 01:37:38 +02:00
j
d7b53aa322 limit cronjob rate if multiple cronjobs end up in queue 2016-08-18 13:41:24 +02:00
j
e1cacdb67a add task queue api 2016-08-17 14:37:59 +02:00
j
0eb873d2cb fix hue, saturation, lightness calculation for multi part items 2016-08-15 15:14:44 +02:00
j
3d6d1be2e6 include oshash in video url to avoid cache issues 2016-08-13 15:36:00 +02:00
j
843cea063d update timeline if part is changed 2016-08-13 15:34:28 +02:00
j
3b8dd55273 don't fail if 2 paths get flipped in a folder 2016-08-13 15:32:51 +02:00
j
8c928860e1 import url celanup
- only import first url
- pass empty string instead of undefined
- page can contain multiple videos, import as parts
2016-08-10 10:49:58 +02:00
j
b59a9c3122 set canImportItems in config.*.jsonc 2016-08-09 15:58:48 +02:00
j
2157b719ec use more info from sort table, fixes #2953 2016-08-09 15:06:44 +02:00
j
c08ce51db2 add padma importMetadata 2016-08-09 14:25:39 +02:00
j
384c643326 no tags == [] 2016-08-09 14:25:39 +02:00
j
9991767d01 no summary in default importMetadata keys 2016-08-09 13:03:21 +01:00
j
7f8b5448e6 set default config importMetadata 2016-08-09 12:57:43 +01:00
j
0430a0f236 cache getMediaUrlInfo 2016-08-09 12:57:43 +01:00
rlx
90486ec774 update menu and config 2016-08-09 13:35:47 +02:00
rlx
5ef6062613 import media dialog 2016-08-09 13:17:48 +02:00
j
926d3f0f09 add video id 2016-08-09 11:50:24 +01:00
j
337cafcf76 don't add base keys to Item.data 2016-08-08 15:54:52 +02:00
j
9a86ddce01 include upload_date 2016-08-05 17:57:40 +02:00
j
dce51305ce update poster after extracting stream 2016-08-05 15:24:54 +02:00
j
c4a95bc320 update_poster should always update poster 2016-08-05 14:46:27 +02:00
j
2aef460225 do not set -ac if audiochannels is None 2016-08-05 14:46:27 +02:00
j
ff8dd16456 fix profile selection 2016-08-03 11:41:46 +02:00
j
5447aab0a1 more current values 2016-07-30 12:04:35 +02:00
j
dcf3acbd44 store facets in NFKD 2016-07-30 12:01:34 +02:00
j
dffb25e0e8 poster might still point to old id, after rename, delete and make new one. fixes #2944 2016-07-30 10:02:53 +02:00
j
5c90ff79a0 cleanup poster cache 2016-07-30 09:39:31 +02:00
j
893f2e5423 add importMediaDialog 2016-07-30 02:49:43 +02:00
j
383ad8a535 fix findMedia by item id 2016-07-24 17:52:33 +02:00
j
6f4a0ba90a support vtt subtitles 2016-07-01 21:13:13 +02:00
j
f8f951c966 remove outdated fixmes 2016-07-01 17:53:59 +02:00
j
d780045306 flake8 2016-07-01 17:48:43 +02:00
j
3166bf5beb show timeline errors 2016-07-01 17:34:45 +02:00
j
5434ffbf53 make_poster no longer takes arguments 2016-07-01 12:44:07 +02:00
j
88c800a093 use data['positions'] 2016-06-30 16:42:56 +02:00
j
c7157d5001 only decode ids for found positions
merge document.view.get_positions into item.utils.get_positions
add flag to decode id before looking up in ids

Followup to 09ebbc9cc6
2016-06-30 16:18:07 +02:00
j
3d95d7013a Merge remote-tracking branch 'wjt/2935-findDocuments-performance' 2016-06-30 15:43:09 +02:00
j
e9863c238e always use get_operator, avoid case-insensitive match if possible 2016-06-30 11:28:09 +02:00
j
5b545e6e43 layer first 2016-06-30 02:42:24 +02:00
j
b6e4d33a43 add Annotation.findvalue index (used by findClips) 2016-06-30 02:42:24 +02:00
j
b63024df02 show source info if encode fails 2016-06-30 00:23:56 +02:00
j
b5bc17f925 make layer itemKeys with filter=true show up in searching for * 2016-06-30 00:17:23 +02:00
09ebbc9cc6
findDocuments: improve performance of positions queries
References #2935
2016-06-28 16:36:55 +01:00
8d25e3be78
findDocuments: improve entity query performance
When I implemented this in 9a4c24c, there were not many rows in
entity_documentproperties in the database here. Now that there are,
computing the document_document -> entity_documentproperties ->
entity_entity join and then filtering is really, really slow. Postgres
seems to materialize the whole join and then scan it.

If we get a set of matching document IDs for the entity query in a
subquery, and then just filter with IN on that, things are much faster:
scan entity_entity; in a nested loop, get the document_ids via
entity_documentproperties; hash this set; and then scan
document_document.

Searching for a single character, this brings the query from ~1.1s to
~400ms. Searching for a full word, ~800ms to 120ms

This condition is getting really ugly -- I am sorry!

References #2935
2016-06-28 16:33:01 +01:00
j
5aeffcfb6a check first audio track 2016-06-27 16:51:18 +02:00
j
adfcc1cb27 never set display aspect ratio to 0:0 2016-06-27 16:08:30 +02:00
j
8ac78f3bd6 remove unused force flag from make_poster, update_timeline 2016-06-26 23:24:11 +02:00
j
0f9e80e1e6 avoid saving item twice 2016-06-26 23:22:27 +02:00
j
de9b062d63 make sure existing index is using gin 2016-06-26 16:55:58 +02:00
j
ab0dfddf31 set SECURE_PROXY_SSL_HEADER by default 2016-06-26 15:34:19 +02:00
j
0d89ad640b ignore some broken audio codecs 2016-06-26 15:33:52 +02:00
j
92f642cbac pcm sound can have no codec 2016-06-26 14:41:58 +02:00
j
2cec1b9ad5 s/import Image/from PIL import Image/g 2016-06-25 20:39:29 +02:00
j
4785f314cb Add VP9/Opus support, use VP8 by default
- support vp9 and opus
- switch to 2 pass encoding
- use ffmpeg -movflags +faststart instead of qtfaststart
2016-06-23 17:36:41 +02:00
j
aaacc48259 only save if update_external fails 2016-06-20 18:28:05 +02:00
j
d83647c4a5 don't hide oxtimelines errors 2016-06-20 18:27:31 +02:00
j
6dcbcdd19c dont update timeline in update_selected, remove unused async get_item case 2016-06-16 14:48:54 +02:00
j
0486d62ec9 use absolute path 2016-06-16 14:48:09 +02:00
j
f25218466b formating 2016-06-16 14:48:01 +02:00
j
70f34bfde9 typo 2016-06-15 19:13:00 +02:00
j
e3c5ab18c7 only update itemsort if name is changed 2016-06-15 18:31:40 +02:00
j
22f83288c5 avoid looking up item twice 2016-06-15 18:29:09 +02:00
j
7c53dca65b less async item creation 2016-06-15 18:12:59 +02:00
j
b2a9a5f711 space 2016-06-15 17:56:31 +02:00
j
3c1f4a8c95 dont call module 2016-06-15 17:55:57 +02:00
j
b010aca0a9 s/taskId/id/ 2016-06-15 15:45:51 +02:00
j
a0fc6ffadc typo 2016-06-15 14:55:45 +02:00
j
f4cbe6a114 return empty sequences if no data timeline exists 2016-06-15 14:48:02 +02:00
j
af0e0cffe8 person can be removed again, let async itemsort fail without exception 2016-06-15 14:34:46 +02:00
j
fd9d3bdabf flake8 + map->[] 2016-06-15 14:34:46 +02:00
j
05c4cfcbc8 add space and other flake8 cleanups 2016-05-28 11:30:43 +02:00
j
5e149a5cb8 add space and other flake8 cleanups 2016-05-28 11:26:46 +02:00
j
225259e521 add space and other flake8 cleanups 2016-05-28 11:18:51 +02:00
j
f21e8413fb use get_random_string 2016-05-28 11:18:51 +02:00
j
7fdaf6d1ce include Access-Control-Allow-Origin in 404 not found response 2016-05-27 11:51:47 +02:00
05e6118a88
findAnnotations: include duration alongside result count
fixes #2921
2016-05-05 15:54:25 +01:00
j
41cc8e3573 expose encoding status via api 2016-05-05 10:49:34 +02:00
j
be163826ef Merge remote-tracking branch 'wjt/fix-migrations' 2016-05-05 10:48:24 +02:00
39b9b48be2
archive: fix migrations for upload_to function renamings
9c75526 renamed these functions. The function doesn't affect the DB
schema so it should be safe to just modify the migraiton.
2016-05-04 17:01:44 +01:00
e29ea230fb
Add migration for Document.documentproperties ref
This should have been included with a8dcbbb, which changed the
related_name to access DocumentProperties from Document. (There's no
actual change to the database.)
2016-05-04 16:55:11 +01:00
j
0f28a2b7d5 fix queue status 2016-04-30 14:15:13 +02:00
j
9c7552699f fix upload_to callbacks 2016-04-29 13:46:55 +02:00
2812834ce3
findAnnotations: don't lowercase ids (fixes #2916)
Without this fix, a condition like:

     {key: 'id', operator: '==', value: 'A/B'}

gets mapped to:

     public_id__exact=('A/B'.lower())

which is wrong.

I introduced this bug in b3df5b8. I didn't catch it because I was
mostly interested in the 'layer' key -- but layer names are
conventionally lowercase anyway so lowercasing them had no effect.
2016-04-29 11:03:45 +01:00
aa40a40595
Annotation.json: only include entity id & name
Fetching documents for each entity in turn is expensive. (I have tried
using ArrayAgg to fetch them in the same query as the Entity — no
improvement. It's possible that being able to join to entity_entity,
and then use ArrayAgg, would be better.)

Even once you've fetched them all, if the same entity appears many
times in an item, then get(..., keys=['layers']) duplicates the whole
JSON for the entity many times: expensive to serialize, expensive to
send over the wire.

Pandora's own web interface only depends on the 'id' key of 'entity' in
each annotation, and refetches the rest of the entity to show the pop-up
dialog when you press E. So by just not bothering to fetch and send any
other keys, get(..., keys=['layers']) on an item with many entity
annotations is substantially faster.

(I experimented with splitting the full entities off to one side, so,
you'd have:

    {
        "layers": {
            somelayer: [...,
              {..., "entity": {"id": ABC}},
            ], ...
        },
        "entities": {
            ABC: {...},
            ...
        }
    }

This is quicker than the status quo, but obviously not as fast as not
fetching & sending the rest at all!)
2016-04-28 14:15:23 +01:00
aa0fbc9d4a
Entity.json: get document ids from join table
This is a bit quicker because it's just a lookup in a single table, not
a join.
2016-04-28 14:15:12 +01:00
400b6650a2
Annotation.json: document empty-subtitle special case 2016-04-19 13:52:52 +01:00
af0d87b569
Annotation.json: reduce repeated layer lookups
It's actually quite costly to look up keys in CONFIG, particularly
inside a loop: this trims ~5% off get(keys=['layers']) for
annotation-heavy items.
2016-04-19 13:52:47 +01:00
3f5be0bd27
findClips: look up entity names (fixes #2804) 2016-04-19 12:28:58 +01:00
d0129a4416
findClips: avoid O(n²) lookup of clip from annotation
This doesn't make much difference for small ranges, of course.
2016-04-19 11:25:12 +01:00
ba00bcbf7b
findClips: select_related('item') / ('item__sort')
Clip.public_id uses self.item.public_id.

Clip.json() uses self.item.sort, so we should select_related on that
rather than the clip's own sort field. (They are identical objects. Is
Clip.sort ever used directly?)

With this change, findClips() issues one query to fetch clips plus one
query per flavour of annotation; before, it issued two extra queries per
clip.
2016-04-19 11:25:06 +01:00
6dbb7f921a
findClips: only scan layers once 2016-04-19 11:14:25 +01:00
b3df5b8d56 findAnnotations: match some fields case-sensitively
Requiring layer to have the right case is consistent with
addAnnotation(), and means the _layer[_like] index can be used. In my
testing, if itemsQuery specifies a single item, then postgres doesn't
bother with the layer index anyway; but if not, it makes a pretty big
(~3×) difference.

Matching public_id and item__public_id case-sensitively also seems
reasonable (it's consistent with get() and getAnnotation()).

(Is lower() redundant for the case-insensitive comparisons? ie. is
UPPER(x.lower()) == UPPER(x)? I'm not sure, it's cheap, let's leave it.)
2016-04-05 12:19:32 +01:00
8d1b4de337 findAnnotations(): make 'findvalue' the default key
Annotations have no 'name' field, so

     findAnnotations({query: {conditions: [{value: 'foo'}]}})

would previously raise an exception.
2016-04-05 12:19:31 +01:00
284caf03c3 get_by_key: short-circuit
This is about 30% faster, presumably because it avoids allocation and/or
closing over variables is slow(?). It's not hugely significant (I
misread a line_profile report) but why not.
2016-04-05 12:19:31 +01:00
j
7ac68697d4 update pdf.js 2016-04-04 15:50:07 +02:00
j
652df88342 return 404 2016-04-04 15:50:07 +02:00
j
1bff4aa0e9 avoid storing invalid poster frames, only show videos with video 2016-04-01 16:40:20 +02:00
j
b8beb51480 fix multipart audio only timelines 2016-03-31 14:54:38 +02:00
j
94b940436f fix timelines for items with many parts
- use durations from streams not from timelines
 - don't accumulate timeline drift
2016-03-19 18:58:48 +01:00
j
f0b8b2b81e check that range is [int, int] 2016-03-17 16:06:08 +01:00
eeaeda3970 Support WebVTT subtitle export 2016-03-11 14:16:23 +01:00
j
697e501a4f only update item timeline once all parts are done 2016-03-11 10:33:48 +01:00
j
f6cebcaec9 fix user/group api 2016-03-08 20:14:05 +05:30
j
29204b6fb5 move gunicorn configuration from init script to config file 2016-03-07 14:25:24 +05:30
j
4f28c2c548 fix annotation import, values are decoded in d1.9 2016-03-05 15:36:47 +05:30
a8dcbbbe89 Include DocumentProperties.data in Document.json() 2016-03-05 15:07:47 +05:30
a55cbcfb9f DocumentProperties: add data field 2016-03-05 15:07:47 +05:30
0c98cd080e Entity.alternativeNames: default to () not [] (fixes #2896)
Otherwise this:

    self.name_find = '||' + '||'.join((self.name,) + self.alternativeNames) + '||'
                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

fails because () + [] is an error. I guess this must have been
introduced by the DictField/TupleField rewrite.

Without this fix, it is impossible to create a new entity.

Basically the same logic is used for Event and Place too so I've made
the same change to those, and, in passing, fix another copy of the bug
fixed for Entity.name_find in fe7f961.
2016-03-04 17:11:36 +00:00
9a4c24cdb4 Support searching documents by entities 2016-03-04 12:41:41 +00:00
738a9282b4 Document: fix negating id queries 2016-03-04 12:41:41 +00:00
8c23bdff6d Implement DocumentProperties.__unicode__ 2016-03-04 12:41:41 +00:00
j
4613005b83 use geoip2 api to fix ipv6 lookups 2016-03-04 12:50:44 +05:30
c6f9f87c8e Fix autocompleteSort with multiple keys (fixes #2893)
QuerySet.order_by() takes each key as a separate argument, not as a
single comma-separated string.
2016-03-03 18:15:37 +05:30
2a07e2a1ab Remove redundant overrides of Model.delete
Both of these models have pre_delete handlers which do the same things,
so I think these are unnecessary.
2016-03-03 18:10:29 +05:30
d69a8efd97 Don't save other file-owning models on delete, either 2016-03-03 18:10:29 +05:30
6e0049a20c Don't save Document in pre_delete handler (fixes #2889)
FileField.delete() will, by default, save() the model instance it is
attached to. This is pointless if we're in the process of deleting the
Document -- and since Document.save() calls Document.update_matches(),
this scans all annotations every time a document is deleted.
2016-03-03 18:10:29 +05:30
j
fd2c69a5b7 define BASE_DIR 2016-03-03 16:56:06 +05:30
j
11924fcb0d Rename api.taskStatus to api.getTaskStatus
still register api.taskStatus since its used
in pandora_client and other scripts.

fixes #2600 and fixes #2859
2016-02-20 18:35:26 +05:30
j
0d5c968026 space 2016-02-20 10:41:23 +00:00
j
051a3578b4 inline django 1.9 version of ox.django 2016-02-20 10:41:23 +00:00
j
7620795862 add update_itemsfolder command 2016-02-20 10:41:22 +00:00
j
0367816257 only crop with 4 crop points 2016-02-20 10:41:22 +00:00
j
1ef547f885 update celery integration 2016-02-20 10:41:22 +00:00
j
f060601d40 django 1.9 returns parsed value not raw data 2016-02-20 15:15:02 +05:30
j
e9bcd19161 fix initdb 2016-02-20 15:15:02 +05:30
j
29c6dc866b fix index 2016-02-20 15:15:02 +05:30
j
7a6515183a add wsgi 2016-02-20 15:15:02 +05:30
j
cc84487193 commit_unless_managed->commit 2016-02-20 15:15:02 +05:30
j
62caf55fe6 stop using RequestContext 2016-02-20 15:15:02 +05:30
j
3f02f6086a fix clip random 2016-02-20 15:15:01 +05:30
j
2fe857d4fd remove optparse 2016-02-20 15:15:01 +05:30
j
4219246909 db migration 2016-02-20 15:15:01 +05:30
j
976860ec30 use django.conf.urls url instead of patterns 2016-02-20 06:00:13 +00:00