Example #1
0
def item_add(request):
    if request.method == 'POST':
        form = AddItemForm(request.POST, request.FILES)
        if form.is_valid():
            cd = form.cleaned_data

            name = request.FILES['file'].name

            f = request.FILES['file']
            m = hashlib.md5()
            m.update(os.urandom(32))
            m.update(name.encode('utf8'))
            uid = m.hexdigest()

            dir_path = os.path.join(settings.STATIC_ROOT, 'files', uid)
            os.mkdir(dir_path)
            path = os.path.join(dir_path, name)

            with open(path, 'wb+') as destination:
                for chunk in f.chunks():
                    destination.write(chunk)

            item = Item()
            item.name = cd['name']
            item.description = cd['description']
            item.filename = f.name
            item.size = f.size
            item.uid = uid
            item.created = datetime.utcnow().replace(tzinfo=utc)
            item.updated = datetime.utcnow().replace(tzinfo=utc)
            item.save()

            tags = {}
            if cd['year'] is None:
                tags['year'] = ""
            else:
                tags['year'] = str(cd['year'])
            tags['people'] = cd['authors']
            tags['company'] = cd['company']
            tags['type'] = cd['kind']
            tags[None] = cd['tags']
            fill_tags(item, tags)

            return HttpResponseRedirect('/item/%d' % item.id)
    else:
        form = AddItemForm() # An unbound form
    return render(request, 'item_add.html', {'form': form, 'edit': False})
Example #2
0
def get_tag_items(request, tags):
    l = tags.split(",")
    ids = []
    for v in l:
        ids.append(int(v))
    ids = sorted(list(set(ids)))
    tags = Tag.objects.filter(id__in=ids)
    current_tags = tags
    
    # Construct current taglist string
    ids = []
    for tag in tags:
        ids.append(tag.id)
    tids = ",".join(map(str, ids))
    if len(tids)>0:
        tids = tids + ","

    # Get subtags
    subtags = Tag.subtags(tags)


    # Get items by subtags
    latest_item_list = Item.subitems(tags).order_by('-updated')
    size = len(latest_item_list)
    
    # Filter tag list
    tags = []
    for tag in subtags:
        if tag.count != size:
            tags.append(tag)
    subtags = tags
   
    # Build pagination
    page = request.GET.get('page')
    paginator = Paginator(latest_item_list, 10)
    try:
        items = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        items = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        items = paginator.page(paginator.num_pages)
    
    items = paginator_post_process(items)
    return render(request, 'tag_items.html', {'tags': subtags, 'tids': tids, 'items': items, 'current_tags': current_tags})
Example #3
0
    def test_saving_and_retrieving_items(self):
        list_ = List()
        list_.save()

        first_item = Item()
        first_item.text = 'The first (ever) list item'
        first_item.list = list_
        first_item.save()

        second_item = Item()
        second_item.text = 'Item the second'
        second_item.list = list_
        second_item.save()

        saved_list = List.objects.first()
        self.assertEqual(saved_list, list_)

        saved_items = Item.objects.all()
        self.assertEqual(saved_items.count(), 2)

        first_saved_item = saved_items[0]
        second_saved_item = saved_items[1]
        self.assertEqual(first_saved_item.text, 'The first (ever) list item')
        self.assertEqual(first_saved_item.list, list_)
        self.assertEqual(second_saved_item.text, 'Item the second')
        self.assertEqual(second_saved_item.list, list_)