def test_import_bom_valid(self): """ Tests an import of a valid bom. """ self.import_csv(PLMObjectsImporter, self.get_valid_rows()) csv_rows = self.get_valid_bom() objects = self.import_csv(BOMImporter, csv_rows) # objects should be [parent1, child1, ...] self.assertEquals((len(csv_rows) - 1) * 2, len(objects)) # first row parent = get_obj("Part", "p1", "a", self.user) child = get_obj("SinglePart", "sp1", "s", self.user) c = parent.get_children()[0] self.assertEquals(c.link.parent.id, parent.id) self.assertEquals(c.link.child.id, child.id) self.assertEquals(c.link.quantity, 10) self.assertEquals(c.link.order, 15) # second row parent = get_obj("SinglePart", "sp1", "s", self.user) child = get_obj("SinglePart", "sp2", "s", self.user) c = parent.get_children()[0] self.assertEquals(c.link.parent.id, parent.id) self.assertEquals(c.link.child.id, child.id) self.assertEquals(c.link.quantity, 10.5) self.assertEquals(c.link.order, 16)
def download_archive(request, obj_type, obj_ref, obj_revi): """ View to download all files from a document/part. .. include:: views_params.txt """ obj = get_obj(obj_type, obj_ref, obj_revi, request.user) obj.check_readable() d_o_u = "document__owner__username" if obj.is_document: files = obj.files.select_related(d_o_u) elif obj.is_part: links = obj.get_attached_documents() docs = (link.document for link in links) files = itertools.chain(*(doc.files.select_related(d_o_u) for doc in docs)) else: return HttpResponseForbidden() form = forms.ArchiveForm(request.GET) if form.is_valid(): format = form.cleaned_data["format"] name = "%s_%s.%s" % (obj_ref, obj_revi, format) mimetype = guess_type(name, False)[0] if not mimetype: mimetype = 'application/octet-stream' content = generate_archive(files, format) response = HttpResponse(content, mimetype=mimetype) #response["Content-Length"] = size response['Content-Disposition'] = 'attachment; filename="%s"' % name return response return HttpResponseForbidden()
def test_import_valid(self): csv_rows = self.get_valid_rows() objects = self.import_csv(PLMObjectsImporter, csv_rows) self.assertEquals(len(csv_rows) - 1, len(objects)) sp1 = get_obj("SinglePart", "sp1", "s", self.user) self.assertEquals("SP1", sp1.name) self.assertEqual(len(mail.outbox), len(objects)) self.assertEqual(1, len(self.sent_tasks["openPLM.plmapp.tasks.update_indexes"]))
def parse_row(self, line, row): from openPLM.plmapp.base_views import get_obj ptype, preference, prevision = self.get_values(row, *["parent-" + h for h in ("type", "reference", "revision")]) parent = get_obj(ptype, preference, prevision, self.user) ctype, creference, crevision = self.get_values(row, *["child-" + h for h in ("type", "reference", "revision")]) child = get_obj(ctype, creference, crevision, self.user) parent.block_mails() parent.object.no_index = True child.block_mails() child.object.no_index = True self.objects.append(parent) self.objects.append(child) qty = self.get_value(row, "quantity").replace(",", ".").replace(" ", "") quantity = float(qty) order = int(self.get_value(row, "order").replace(" ", "")) parent.add_child(child, quantity, order)
def checkout_file(request, obj_type, obj_ref, obj_revi, docfile_id): """ Manage html page for the files (:class:`DocumentFile`) checkout from the selected object. It locks the :class:`DocumentFile` and, after, calls :func:`.views.download` .. include:: views_params.txt :param docfile_id: :attr:`.DocumentFile.id` :type docfile_id_value: str """ obj = get_obj(obj_type, obj_ref, obj_revi, request.user) doc_file = models.DocumentFile.objects.get(id=docfile_id) obj.lock(doc_file) return download(request, docfile_id)
def delete_management(request, obj_type, obj_ref, obj_revi): """ Manage html page for the deletion of a "notification" link (:class:`PLMObjectUserLink`) between some Users and the selected object. It computes a context dictionnary based on .. include:: views_params.txt """ obj = get_obj(obj_type, obj_ref, obj_revi, request.user) if request.method == "POST": try: link_id = request.POST["link_id"] link = models.PLMObjectUserLink.objects.get(id=int(link_id)) obj.remove_notified(link.user) except (KeyError, ValueError, ControllerError): return HttpResponseForbidden() return HttpResponseRedirect("../")
def ajax_thumbnails(request, obj_type, obj_ref, obj_revi): """ Ajax view to get files and thumbnails of a document. :param request: :class:`django.http.QueryDict` :param obj_type: :attr:`.PLMObject.type` :type obj_type: str :param obj_ref: :attr:`.PLMObject.reference` :type obj_ref: str :param obj_revi: :attr:`.PLMObject.revision` :type obj_revi: str """ obj = get_obj(obj_type, obj_ref, obj_revi, request.user) files = [] doc = "|".join((obj_type, obj_ref, obj_revi)) for f in obj.files: if f.thumbnail: img = f.thumbnail.url else: img = urlparse.urljoin(settings.MEDIA_URL, "img/image-missing.png") files.append((f.filename, "/file/%d/" % f.id, img)) return dict(files=files, doc=doc)
def test_view_csv_all(self): """ Complex test that simulate an upload of a csv file (complete process). """ # upload a csv file csv_file = StringIO.StringIO() csv_file.name = "data.csv" UnicodeWriter(csv_file).writerows(self.get_valid_rows()) csv_file.seek(0) response = self.client.post( "/import/csv/", {"encoding": "utf_8", "filename": "data.csv", "file": csv_file}, follow=True ) csv_file.close() # load the second page url = response.redirect_chain[0][0] response2 = self.client.get(url) self.assertEquals(2, response2.context["step"]) preview = response2.context["preview"] self.assertFalse(None in preview.guessed_headers) formset = response2.context["headers_formset"] # validate and import the file data = {} for key, value in formset.management_form.initial.iteritems(): data["form-" + key] = value or "" for i, d in enumerate(formset.initial): for key, value in d.iteritems(): data["form-%d-%s" % (i, key)] = value data["form-%d-ORDER" % i] = str(i) response3 = self.client.post(url, data, follow=True) url_done = response3.redirect_chain[-1][0] self.assertEquals("http://testserver/import/done/", url_done) # check an item sp1 = get_obj("SinglePart", "sp1", "s", self.user) self.assertEquals("SP1", sp1.name)