Changeset f38625e


Ignore:
Timestamp:
Nov 3, 2011 6:04:29 PM (3 years ago)
Author:
yomguy <yomguy@…>
Branches:
master, crem, crem2, dev, dev2, diadems, dj1.6, feature/breadcrumbs, feature/ts-0.5, feature/ts-0.5.4, feature/writecache, forma, generic, instru_search, lam, lam2, mapsv3, merge, nlivemulti, production, release/1.4.4, sabiod, security, server, social, storage, telecaster, test, video
Children:
dd46083
Parents:
d407f46
git-author:
yomguy <yomguy@…> (03/11/2011 18:04:29)
git-committer:
yomguy <yomguy@…> (03/11/2011 18:04:29)
Message:

add MediaItemRelatedFile? model and forms to handle media item attachements

Location:
telemeta
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • telemeta/admin.py

    r3aa1a85 rf38625e  
    1414    exclude = ('copied_from_item', ) 
    1515 
     16class MediaItemRelatedFileAdmin(admin.ModelAdmin): 
     17    search_fields = ['title', 'code'] 
     18    ordering = ['code'] 
     19     
    1620class MediaPartAdmin(admin.ModelAdmin): 
    1721    search_fields = ['title', 'item__code'] 
     
    4953admin.site.register(MediaItem, MediaItemAdmin) 
    5054admin.site.register(MediaPart, MediaPartAdmin) 
     55admin.site.register(MediaItemRelatedFile, MediaItemRelatedFileAdmin) 
    5156 
    5257admin.site.register(Instrument, InstrumentAdmin) 
  • telemeta/models/media.py

    r86d17e9 rf38625e  
    4343from telemeta.util.unaccent import unaccent_icmp 
    4444import re 
     45import mimetypes 
    4546from telemeta.models.location import LocationRelation, Location 
    4647from telemeta.models.system import Revision 
     
    320321        else: 
    321322            title = unicode(self.collection) 
    322  
    323323        if self.track: 
    324324            title += ' ' + self.track 
    325  
    326325        return title 
    327326 
    328  
    329327class MediaItemForm(ModelForm): 
    330328    class Meta: 
    331329        model = MediaItem 
     330    def clean_code(self): 
     331        return self.cleaned_data['code'] or None 
     332 
     333 
     334class MediaItemRelatedFile(MediaResource): 
     335    "Item related attached file" 
     336     
     337    element_type = 'media' 
     338     
     339    item            = ForeignKey('MediaItem', related_name="related", verbose_name=_('item')) 
     340    code            = CharField(_('code'), unique=True, blank=True) 
     341    title           = CharField(_('title')) 
     342    date            = DateTimeField(_('date'), auto_now=True) 
     343    description     = TextField(_('description')) 
     344    author          = ForeignKey(User, related_name="related", verbose_name=_('author')) 
     345    mime_type       = CharField(_('mime_type'), blank=True) 
     346    file            = FileField(_('file'), upload_to='items/%Y/%m/%d', db_column="filename") 
     347     
     348    @property 
     349    def public_id(self): 
     350        if self.code: 
     351            return self.code 
     352        return self.id 
     353 
     354    def is_image(self): 
     355        return 'image' in self.mime_type 
     356         
     357    def save(self, force_insert=False, force_update=False): 
     358        super(MediaItemRelatedFile, self).save(force_insert, force_update) 
     359         
     360    def set_mime_type(self): 
     361        if self.file: 
     362            self.mime_type = mimetypes.guess_type(self.file.path)[0] 
     363     
     364    def __unicode__(self): 
     365        if self.title and not re.match('^ *N *$', self.title): 
     366            title = self.title 
     367        else: 
     368            title = unicode(self.item) 
     369        return title 
     370     
     371    class Meta(MetaCore): 
     372        db_table = 'media_item_related_file' 
     373 
     374class MediaItemRelatedFileForm(ModelForm): 
     375    class Meta: 
     376        model = MediaItemRelatedFile 
    332377    def clean_code(self): 
    333378        return self.cleaned_data['code'] or None 
     
    465510    class Meta(MetaCore): 
    466511        db_table = 'media_transcoding' 
    467  
    468  
     512         
     513         
    469514class Search(ModelCore): 
    470515    "Keywork search" 
  • telemeta/templates/telemeta_default/mediaitem_detail.html

    re08e04b rf38625e  
    273273</div> <!-- with-rightcol --> 
    274274 
     275<div class="infos"> 
     276        {% block related_files %} 
     277        <div> 
     278            <h4><a href="#">{% trans "Related files" %}</a></h4> 
     279            {% if related_files %} 
     280            <div class="instruments"> 
     281                <table class="instruments"> 
     282                    <thead> 
     283                        <tr> 
     284                            <td>{% field_label "MediaItemRelatedFile" "file" %}</td> 
     285                            <td>{% field_label "MediaItemRelatedFile" "title" %}</td> 
     286                            <td>{% field_label "MediaItemRelatedFile" "mime type" %}</td> 
     287                            <td>{% field_label "MediaItemRelatedFile" "author" %}</td> 
     288                            <td>{% field_label "MediaItemRelatedFile" "preview" %}</td> 
     289                        </tr> 
     290                    </thead> 
     291                    <tbody> 
     292                        {% for file in related_files %} 
     293                        <tr> 
     294                            <td><a href="{% url telemeta-item-related-file item.public_id file.id %}">{% if file.file %}{{ file.file|get_filename }}{% endif %}</a></td> 
     295                            <td>{{ file.title }}</td> 
     296                            <td>{{ file.mime_type }}</td> 
     297                            <td>{{ file.author }}</td> 
     298                            <td>{% if file.is_image %}<a href="{% url telemeta-item-related-file item.public_id file.id %}"><img src="{% url telemeta-item-related-file item.public_id file.id %}" style="width: 400px;" /></a>{% else %}<a href="{% url telemeta-item-related-file item.public_id file.id %}">link</a>{% endif %}</td> 
     299                        </tr> 
     300                        {% endfor %} 
     301                    </tbody> 
     302                </table> 
     303                {% if user.is_authenticated and perms.telemeta.change_mediaitem %} 
     304                <a href="{% url telemeta-item-related_edit item.public_id %}" class="component_icon button icon_edit">{% trans "Edit"%} {% trans "related"%}</a> 
     305                {% endif %} 
     306            </div> 
     307            {% endif %} 
     308        </div> 
     309        {% endblock related_files %} 
     310    </div> 
     311 
    275312{% endblock %} 
    276313 
  • telemeta/templatetags/telemeta_utils.py

    ra362edf rf38625e  
    1313from django import db 
    1414import re 
     15import os 
    1516import datetime 
    1617from django.conf import settings 
     
    320321    else: 
    321322        return '' 
     323 
     324@register.filter 
     325def get_filename(file): 
     326    return file.path.split(os.sep)[-1] 
  • telemeta/urls.py

    r70ef00a rf38625e  
    114114        dict(template='telemeta/mediaitem_keywords_edit.html'), name="telemeta-item-keywords_edit"), 
    115115    url(r'^items/(?P<public_id>[A-Za-z0-9._-]+)/delete/$', item_view.item_delete, name="telemeta-item-delete"), 
    116          
     116    url(r'^items/(?P<item_public_id>[A-Za-z0-9._-]+)/related/(?P<file_id>[A-Za-z0-9._-]+)$', item_view.related_file_stream, name="telemeta-item-related-file"), 
     117    url(r'^items/(?P<public_id>[A-Za-z0-9._-]+)/related_edit/$', item_view.related_file_edit,  dict(template='telemeta/mediaitem_related_edit.html'), name="telemeta-item-related_edit"), 
    117118    # Markers 
    118119    url(r'^markers/(?P<marker_id>[A-Za-z0-9]+)/$', item_view.item_detail, name="telemeta-item-detail-marker"), 
  • telemeta/web/base.py

    r54fe61a rf38625e  
    506506        public_access = get_public_access(item.public_access, str(item.recorded_from_date).split('-')[0],  
    507507                                                str(item.recorded_to_date).split('-')[0]) 
    508                  
     508         
     509        related_files = MediaItemRelatedFile.objects.filter(item=item) 
     510        for file in related_files: 
     511            if not file.mime_type: 
     512                file.set_mime_type() 
     513                file.save() 
     514         
    509515        return render(request, template, 
    510516                    {'item': item, 'export_formats': formats, 
     
    513519                    'previous' : previous, 'next' : next, 'marker': marker_id, 'playlists' : playlists,  
    514520                    'public_access': public_access, 'width': width, 'height': height,  
     521                    'related_files': related_files,  
    515522                    }) 
    516523         
     
    562569                    'previous' : previous, 'next' : next,  
    563570                    }) 
     571     
     572    def related_file_stream(self, request, item_public_id, file_id): 
     573        item = MediaItem.objects.get(public_id=item_public_id) 
     574        file = MediaItemRelatedFile.objects.get(item=item, id=file_id) 
     575        response = HttpResponse(stream_from_file(file.file.path), mimetype=file.mime_type) 
     576#        response['Content-Disposition'] = 'attachment' 
     577        return response 
     578     
     579    @method_decorator(permission_required('telemeta.change_mediaitem')) 
     580    def related_file_edit(self, request, public_id, template): 
     581        item = MediaItem.objects.get(public_id=public_id) 
     582        MediaItemRelatedFileFormSet = inlineformset_factory(MediaItem, MediaItemRelatedFile, form=MediaItemRelatedFileForm) 
     583        if request.method == 'POST': 
     584            formset = MediaItemRelatedFileFormSet(data=request.POST, files=request.FILES, instance=item) 
     585            if formset.is_valid(): 
     586                formset.save() 
     587                return HttpResponseRedirect('/items/'+public_id) 
     588        else: 
     589            formset = MediaItemRelatedFileFormSet(instance=item) 
     590         
     591        return render(request, template, {'item': item, 'formset': formset,}) 
    564592         
    565593    @method_decorator(permission_required('telemeta.add_mediaitem')) 
     
    711739        response = HttpResponse(self.cache_data.read_stream_bin(image_file), mimetype=mime_type) 
    712740        return response 
    713  
     741         
    714742    def list_export_extensions(self): 
    715743        "Return the recognized item export file extensions, as a list" 
Note: See TracChangeset for help on using the changeset viewer.