def create_blocklisted_version(self): """ Creates a new version who's file is the blocklisted app found in /media and sets status to STATUS_BLOCKLISTED. """ blocklisted_path = os.path.join(settings.MEDIA_ROOT, 'packaged-apps', 'blocklisted.zip') last_version = self.current_version.version v = Version.objects.create( addon=self, version='blocklisted-%s' % last_version) f = File(version=v, status=amo.STATUS_BLOCKED, platform=Platform.objects.get(id=amo.PLATFORM_ALL.id)) f.filename = f.generate_filename() copy_stored_file(blocklisted_path, f.file_path) log.info(u'[Webapp:%s] Copied blocklisted app from %s to %s' % ( self.id, blocklisted_path, f.file_path)) f.size = storage.size(f.file_path) f.hash = f.generate_hash(f.file_path) f.save() f.inject_ids() self.sign_if_packaged(v.pk) self.status = amo.STATUS_BLOCKED self._current_version = v self.save()
def test_version_is_not_allowed_upload_full(self): version = Version.objects.get(pk=81551) version.files.all().delete() for platform in [amo.PLATFORM_LINUX.id, amo.PLATFORM_WIN.id, amo.PLATFORM_MAC.id]: file = File(platform_id=platform, version=version) file.save() assert not version.is_allowed_upload()
def create_blocklisted_version(self): """ Creates a new version who's file is the blocklisted app found in /media and sets status to STATUS_BLOCKLISTED. """ blocklisted_path = os.path.join(settings.MEDIA_ROOT, 'packaged-apps', 'blocklisted.zip') last_version = self.current_version.version v = Version.objects.create(addon=self, version='blocklisted-%s' % last_version) f = File(version=v, status=amo.STATUS_BLOCKED, platform=Platform.objects.get(id=amo.PLATFORM_ALL.id)) f.filename = f.generate_filename() copy_stored_file(blocklisted_path, f.file_path) log.info(u'[Webapp:%s] Copied blocklisted app from %s to %s' % (self.id, blocklisted_path, f.file_path)) f.size = storage.size(f.file_path) f.hash = f.generate_hash(f.file_path) f.save() f.inject_ids() self.sign_if_packaged(v.pk) self.status = amo.STATUS_BLOCKED self._current_version = v self.save()
def post(self, request): agent = get_object_or_404(Agent, pk=request.POST["agent"]) activity = get_object_or_404(Activity, pk=request.POST["activity"]) toDo = request.POST["toDo"] startTime = request.POST["startTime"] endTime = request.POST["endTime"] comment = request.POST["comment"] user = get_object_or_404(User, pk=request.user.id) task = Task.objects.create( date_to_do=toDo, start_time=startTime, end_time=endTime, comment=comment, agent=agent, activity=activity, user=user, ) task.save() if request.FILES: restriction_file = request.FILES["restrictionFile"] evidence_file = request.FILES["evidenceFile"] restriction_file_object = File(document=restriction_file) restriction_file_object.save() evidence_file_object = File(document=evidence_file) evidence_file_object.save() task.document.add(restriction_file_object) task.document.add(evidence_file_object) return redirect("/tasks/list/")
def handle(self, *args, **options): username = options['username'] try: user = User.objects.get(username=username) except: raise CommandError( ("username: {} doesn't exists in the User model." ).format(username)) user_dir = user.profile.home_dir_path if not os.path.exists(user_dir): os.makedirs(user_dir) user_files_dir = os.path.join(user_dir, self.USER_FILES_DIR_NAME) if not os.path.exists(user_files_dir): os.makedirs(user_files_dir) parent_dir = None for current_dir_path, subdirs, files in os.walk(user_files_dir): try: current_dir = Directory.objects.get( name=os.path.basename(current_dir_path), owner=user, path=current_dir_path, ) except ObjectDoesNotExist: current_dir = Directory( parent=parent_dir, name=os.path.basename(current_dir_path), owner=user, path=current_dir_path, ) current_dir.save() except: raise for _file in files: try: f = File.objects.get( parent=current_dir, name=_file, owner=user, ) except ObjectDoesNotExist: f = File( parent=current_dir, name=_file, owner=user, size=os.path.getsize( os.path.join(current_dir_path, _file)), ) f.save() except: raise parent_dir = current_dir
def test_version_is_not_allowed_upload_full(self): version = Version.objects.get(pk=81551) version.files.all().delete() for platform in [ amo.PLATFORM_LINUX.id, amo.PLATFORM_WIN.id, amo.PLATFORM_MAC.id ]: file = File(platform_id=platform, version=version) file.save() assert not version.is_allowed_upload()
def _extra_version_and_file(self, status): version = Version.objects.get(id=81551) version_two = Version(addon=self.addon, license=version.license, version="1.2.3") version_two.save() file_two = File(status=status, version=version_two) file_two.save() return version_two, file_two
def _move_file(self: T, file: File): save_name = os.path.join("papers", str(self.pk), os.path.basename(file.file.name)) new_path = settings.MEDIA_ROOT / save_name if os.path.exists(file.file.path) and file.file.path != new_path: if not new_path.parent.exists(): new_path.parent.mkdir(parents=True, exist_ok=True) shutil.move(file.file.path, new_path) file.file.name = save_name file.save()
def _extra_version_and_file(self, status): version = Version.objects.get(pk=81551) version_two = Version(addon=self.addon, license=version.license, version='1.2.3') version_two.save() file_two = File(status=status, version=version_two) file_two.save() return version_two, file_two
def handle(self, *args, **options): File.objects.all().delete() files = json.load(open(join(BASE_DIR, 'files.json'))) for f in files: course = Course.objects.get(name=f.get('course')) user = self.get_or_create_user(f.get('author')) date = datetime.datetime.strptime(f.get('date'), "%d/%m/%Y").date() file_inst = File(pk=f.get('id'), title=f.get('title'), course=course, user=user, url=f.get('download_link')) file_inst.save() file_inst.created_on = date file_inst.save()
def create_file(self, **kwargs): addon = Addon() addon.save() ver = Version(version='0.1') ver.addon = addon ver.save() f = File(**kwargs) f.version = ver f.save() return f
def create_file(self, **kwargs): addon = Addon() addon.save() ver = Version(version='0.1') ver.addon = addon ver.save() f = File(**kwargs) f.version = ver f.save() return f
def post(self, request): # 上传的文件都在request.FILES里面获取,所以这里要多传一个这个参数 excel_form = UploadExcelForm(request.POST, request.FILES) next_url = request.GET.get('next', '') if excel_form.is_valid(): excel_file = excel_form.cleaned_data["excel_file"] case_file = File() case_file.excel_file = excel_file case_file.save() excel_file_name = os.path.join(MEDIA_ROOT, case_file.excel_file.name) wb = openpyxl.load_workbook(excel_file_name) sheet = wb.get_active_sheet() for i in range(1, sheet.max_row): record_id = sheet.cell(row=i + 1, column=1).value record = Record.objects.get(pk=record_id) if record: record.site = sheet.cell(row=i + 1, column=2).value record.shop = sheet.cell(row=i + 1, column=3).value record.product_chinese_name = sheet.cell(row=i + 1, column=4).value record.sku = sheet.cell(row=i + 1, column=5).value record.order_word = sheet.cell(row=i + 1, column=6).value record.key_word_page_number = sheet.cell(row=i + 1, column=7).value record.key_word_link = sheet.cell(row=i + 1, column=8).value record.order_date = sheet.cell(row=i + 1, column=9).value record.review_date = sheet.cell(row=i + 1, column=10).value record.direct_review_title = sheet.cell(row=i + 1, column=11).value record.direct_review_content = sheet.cell(row=i + 1, column=12).value record.direct_review_remark = sheet.cell(row=i + 1, column=13).value record.user = request.user record.save() messages.add_message(request, messages.SUCCESS, "文件上传成功", extra_tags='success') return redirect(next_url) else: messages.add_message(request, messages.ERROR, "表单验证错误", extra_tags='danger') return redirect(next_url)
def test_version_is_not_allowed_upload(self): version = Version.objects.get(pk=81551) version.files.all().delete() for platform in [amo.PLATFORM_LINUX.id, amo.PLATFORM_WIN.id, amo.PLATFORM_BSD.id]: file = File(platform_id=platform, version=version) file.save() version = Version.objects.get(pk=81551) assert version.is_allowed_upload() file = File(platform_id=amo.PLATFORM_MAC.id, version=version) file.save() # The transform don't know bout my new files. version = Version.objects.no_cache().get(pk=81551) assert not version.is_allowed_upload()
def test_version_is_not_allowed_upload(self): version = Version.objects.get(pk=81551) version.files.all().delete() for platform in [ amo.PLATFORM_LINUX.id, amo.PLATFORM_WIN.id, amo.PLATFORM_BSD.id ]: file = File(platform=platform, version=version) file.save() version = Version.objects.get(pk=81551) assert version.is_allowed_upload() file = File(platform=amo.PLATFORM_MAC.id, version=version) file.save() # The transform don't know bout my new files. version = Version.objects.no_cache().get(pk=81551) assert not version.is_allowed_upload()
def test_save(self): paper = Paper(title="Why stuff happens or not?") paper.save() self.assertIsNotNone(paper.id) self.assertEquals("why-stuff-happens-or-not", paper.slug) file = File(file=SimpleUploadedFile("test.txt", b"Lorem ipsum dolorem")) file.save() self.assertIsNotNone(file.id) self.assertEquals("files/test.txt", file.file.name) paper.files.add(file) paper.save() self.assertEquals("papers/1/test.txt", paper.files.first().file.name) file.refresh_from_db() self.assertEquals("papers/1/test.txt", file.file.name)
def _save_file(self, version): data = self.cleaned_data xpi = data["xpi"] hash = hashlib.sha256() f = File(version=version, platform_id=amo.PLATFORM_DICT[data["platform"]].id, size=xpi.size) filename = f.generate_filename() path = os.path.join(user_media_path("addons"), str(version.addon.id)) with storage.open(os.path.join(path, filename), "wb") as destination: for chunk in xpi.chunks(): hash.update(chunk) destination.write(chunk) f.hash = "sha256:%s" % hash.hexdigest() f.save() return f
def add(request): if not request.method=='POST': print repr(request.method) return HttpResponseRedirect('/') xhr = request.GET.has_key('xhr') response_dict = {} response_dict.update({'success': True}) for f in request.FILES.getlist('file'): #print type(f) with tempfile.NamedTemporaryFile() as tmp: for chunk in f.chunks(): tmp.write(chunk) tmp.seek(0) #print type(request.user) #print repr(request.user.member) name = str(request.user.username) + '_' + cts.build_timestamp(time.time()) + '_' + f.name mfile = File(name=name, easyname=f.name,createdby=request.user.member,lasttouched=datetime.datetime.now()) mfile.actualfile.save(name,f,save=False) mfile.save() type = f.name.split('.')[-1] print "file type:", type if type in fileutils.imgtypes: mfile.iconfile.save("icon_" + name, fileutils.makeiconfile(mfile.actualfile), save=False) mfile.iconsource = fileutils.CUICON else: icon = None try: icon = Icon.objects.get(filetype__icontains=type) mfile.iconsource = fileutils.EXICON except: icon = Icon.objects.get(name='default') mfile.iconsource = fileutils.EXICON mfile.iconlink = icon mfile.save() response_dict.update({'uid':str(mfile.id)}) tmp.close() #print name #print repr(request.FILES) return HttpResponse(simplejson.dumps(response_dict), mimetype='application/javascript') return HttpResponseRedirect('/')
def _save_file(self, version): data = self.cleaned_data xpi = data['xpi'] hash = hashlib.sha256() f = File(version=version, platform_id=amo.PLATFORM_DICT[data['platform']].id, size=xpi.size) filename = f.generate_filename() path = os.path.join(settings.ADDONS_PATH, str(version.addon.id)) with storage.open(os.path.join(path, filename), 'wb') as destination: for chunk in xpi.chunks(): hash.update(chunk) destination.write(chunk) f.hash = 'sha256:%s' % hash.hexdigest() f.save() return f
def _save_file(self, version): data = self.cleaned_data xpi = data['xpi'] hash = hashlib.sha256() f = File(version=version, platform_id=amo.PLATFORM_DICT[data['platform']].id, size=xpi.size) filename = f.generate_filename() path = os.path.join(user_media_path('addons'), str(version.addon.id)) with storage.open(os.path.join(path, filename), 'wb') as destination: for chunk in xpi.chunks(): hash.update(chunk) destination.write(chunk) f.hash = 'sha256:%s' % hash.hexdigest() f.save() return f
def test_file_for_platform(self): """If client passes a platform, make sure we get the right file.""" version = Version.objects.get(pk=self.version_1_2_2) file_one = version.files.all()[0] file_one.platform_id = amo.PLATFORM_LINUX.id file_one.save() file_two = File(version=version, filename='foo', hash='bar', platform_id=amo.PLATFORM_WIN.id, status=amo.STATUS_PUBLIC) file_two.save() version, file = self.get('1.2', self.version_int, self.app, amo.PLATFORM_LINUX) eq_(version, self.version_1_2_2) eq_(file, file_one.pk) version, file = self.get('1.2', self.version_int, self.app, amo.PLATFORM_WIN) eq_(version, self.version_1_2_2) eq_(file, file_two.pk)
def test_file_for_platform(self): """If client passes a platform, make sure we get the right file.""" version = Version.objects.get(pk=self.version_1_2_2) file_one = version.files.all()[0] file_one.platform_id = amo.PLATFORM_LINUX.id file_one.save() file_two = File(version=version, filename='foo', hash='bar', platform_id=amo.PLATFORM_WIN.id, status=amo.STATUS_PUBLIC) file_two.save() version, file = self.get('1.2', self.version_int, self.app, amo.PLATFORM_LINUX) eq_(version, self.version_1_2_2) eq_(file, file_one.pk) version, file = self.get('1.2', self.version_int, self.app, amo.PLATFORM_WIN) eq_(version, self.version_1_2_2) eq_(file, file_two.pk)
def create_file(self, number, licence=None): """Create file object. Args: number: Identifier of the file (int). Returns: File object. """ file_object = File( slug="file-{}".format(number), name="File {}".format(number), filename="file-{}.ext".format(number), description="Description for file {}".format(number), location="https://www.example.com/{}".format(number), ) file_object.save() if licence: file_object.licence.add(licence) return file_object
def _post(request): for f in request.FILES.getlist('fileInput[]'): md5 = hashlib.md5() for chunk in f.chunks(): md5.update(chunk) hash = Hash(content=f, md5=md5.hexdigest(), size=f.size) try: existingHash = Hash.objects.get(md5=hash.md5) hash = existingHash except Hash.DoesNotExist: hash.save() file = File(label=f.name, hash=hash) try: existingFile = File.objects.get(label=file.label, hash__md5=hash.md5) file = existingFile except File.DoesNotExist: file.save() _deleteFilesIfLowOnSpace() return JsonResponse({'status': 'Ok'}) return JsonResponse({'errors': form.errors}, status=400)
def _save_file(self, version): data = self.cleaned_data xpi = data['xpi'] hash = hashlib.sha256() path = os.path.join(settings.ADDONS_PATH, str(version.addon.id)) if not os.path.exists(path): os.mkdir(path) f = File(version=version, platform_id=amo.PLATFORM_DICT[data['platform']].id, size=xpi.size) filename = f.generate_filename() with open(os.path.join(path, filename), 'w') as destination: for chunk in xpi.chunks(): hash.update(chunk) destination.write(chunk) f.hash = 'sha256:%s' % hash.hexdigest() f.save() return f
def upload_file(request): if request.method == 'POST': form = FlieForm(request.POST, request.FILES) if form.is_valid(): obj = File() f = request.FILES['FileField'] cover = request.FILES['cover'] handle_uploaded_file(f) handle_uploaded_file_cover(cover) obj.title = form.cleaned_data['title'] obj.category = form.cleaned_data['category'] obj.introduction = form.cleaned_data['introduction'] obj.developer = form.cleaned_data['developer'] obj.tag = form.cleaned_data['tag'] obj.support_system = form.cleaned_data['support_system'] obj.language = form.cleaned_data['language'] obj.version = form.cleaned_data['version'] obj.author = request.user.username obj.FileField = f obj.cover = cover obj.size = f.size / (1024**2) obj.unique_name = f.name obj.save() predata = list(File.objects.all()) data_processing(predata, obj) return HttpResponseRedirect('/upload/success/') else: form = FlieForm() return render_to_response( 'upload.html', RequestContext(request, { 'errors': u'请正确填写', 'form': form })) else: form = FlieForm() return render(request, 'upload.html', locals())
def test_save(self): issue = Issue(issue="1/2021") issue.magazine = self.magazine issue.save() self.assertIsNotNone(issue.id) issue = Issue(issue="2/2021") issue.magazine = self.magazine issue.publishing_date = datetime.strptime("2021-02-01", "%Y-%m-%d").date() issue.save() self.assertIsNotNone(issue.id) file = File( file=SimpleUploadedFile("test.txt", b"Lorem ipsum dolorem")) file.save() self.assertIsNotNone(file.id) self.assertEquals("files/test.txt", file.file.name) issue.files.add(file) issue.save() self.assertEquals("magazines/1/2/test.txt", issue.files.first().file.name)
def test_save(self): edition = Edition(alternate_title="Beispiel") edition.book = self.book edition.save() self.assertIsNotNone(edition.id) edition = Edition() edition.book = self.book edition.publishing_date = datetime.strptime("2021-02-01", "%Y-%m-%d").date() edition.save() self.assertIsNotNone(edition.id) file = File( file=SimpleUploadedFile("test.txt", b"Lorem ipsum dolorem")) file.save() self.assertIsNotNone(file.id) self.assertEquals("files/test.txt", file.file.name) edition.files.add(file) edition.save() self.assertEquals("books/1/2/test.txt", edition.files.first().file.name)
def get_media(item, uri_parser, user): """ Find any URL contained in an "attachment." If that File has already been created, skip it. If not, go to the URL, and save the media there as a File. Loop through Articles and Pages and replace links. """ media_url_in_attachment = item.find('wp:attachment_url').string media_url = uri_parser.parse(media_url_in_attachment).file media_url = os.path.join(settings.MEDIA_ROOT, media_url) post_id = item.find('wp:post_parent').string post_id = int(post_id) alreadyThere = False for url in File.objects.all(): if media_url == url.file: alreadyThere = True # This assignment will make sure the file gets replaced in the HTML even if # it's an old file that already exists in the database. new_media = url break if not alreadyThere: source = urllib2.urlopen(media_url_in_attachment).read() with open(media_url, 'wb') as f: f.write(source) file_path = f.name new_media = File(guid=unicode(uuid.uuid1()), file=file_path, creator=user, owner=user) new_media.save() temporary = AssociatedFile(post_id=post_id, file=new_media) temporary.save()
class TestModels(TestCase): def setUp(self): # create user self.username = '******' self.email = '*****@*****.**' self.password = '******' self.user = User(username=self.username, email=self.email) self.user.set_password(self.password) self.user.save() login = self.client.login(username=self.username, password=self.password) self.assertEqual(login, True) # create category self.category = Course.objects.create(course_id='1', course_name='OOP') # create degree self.software_eng_degree = Degree.objects.create( degree_id='1', degree_name='Software Engineering') self.social_worker_degree = Degree.objects.create( degree_id='2', degree_name='Social Worker') # upload legal file self.legal = SimpleUploadedFile('test.pdf', b'test context') # create file model object self.legal_file = File( category=self.category, create_at=timezone.now(), file_url=self.legal, owner=self.user, ) try: self.legal_file.save() except FileExistsError as e: print(e) self.legal_file.related_degrees.add(self.software_eng_degree) self.legal_file.related_degrees.add(self.social_worker_degree) def test_create_file_successfully(self): self.assertEqual(str(self.legal_file.category), 'OOP') self.assertEqual(self.legal_file.create_at.date(), timezone.now().date()) self.assertEqual(self.legal_file.file_url, 'files/1_testuser_OOP.pdf') self.assertEqual(self.legal_file.owner, self.user) def test_file_extension(self): self.assertEqual(self.legal_file.file_type, 'pdf') def test_upload_file_not_allowed(self): # upload illegal file illegal = SimpleUploadedFile('test.py', b'print("Wrong!")') # create file model object self.illegal_file = File( category=self.category, create_at=timezone.now(), file_url=illegal, owner=self.user, ) with self.assertRaises(ValidationError): self.illegal_file.save() def test_name_start_with_id(self): file_id = str(self.legal_file.id) self.assertTrue(self.legal_file.file_name.startswith(file_id)) def test_file_category(self): self.assertEqual(self.legal_file.category, self.category) def test_related_degrees(self): degrees = (self.social_worker_degree.degree_name, self.software_eng_degree.degree_name) for degree in self.legal_file.related_degrees.all(): self.assertTrue(degree.degree_name in degrees) for degree_name in degrees: self.assertTrue(degree_name in ( d.degree_name for d in self.legal_file.related_degrees.all())) def test_file_name_contains_owner(self): owner_username = self.user.username self.assertTrue(owner_username in self.legal_file.file_name) def test_owner(self): self.assertEqual(self.legal_file.owner, self.user) def test_upload_at(self): self.assertEqual(self.legal_file.upload_at.date(), timezone.now().date()) def test_file_size(self): self.assertEqual(self.legal_file.file_size, '12 B') def test_admin(self): self.assertEqual(self.legal_file.owner, self.user) def tearDown(self): try: os.remove(self.legal_file.file_url.path) except FileNotFoundError as e: print(e)
class TestUrls(TestCase): def setUp(self): # create user self.username = '******' self.email = '*****@*****.**' self.password = '******' self.user = User(username=self.username, email=self.email) self.user.set_password(self.password) self.user.save() login = self.client.login(username=self.username, password=self.password) self.assertEqual(login, True) # create category self.category = Course.objects.create( course_id='1', course_name='OOP' ) # create degree self.software_eng_degree = Degree.objects.create( degree_id='1', degree_name='Software Engineering' ) self.social_worker_degree = Degree.objects.create( degree_id='2', degree_name='Social Worker' ) # upload file f = SimpleUploadedFile('test.pdf', b'test context') # create file model object self.file1 = File( category=self.category, create_at=timezone.now, file_url=f, owner=self.user, ) try: self.file1.save() except FileExistsError as e: print(e) self.file1.related_degrees.add(self.software_eng_degree) self.file1.related_degrees.add(self.social_worker_degree) def test_add_file_url_is_resolved(self): url = reverse('files:add_file') self.assertEqual(resolve(url).func, add_new_file) def test_download_file_url_is_resolved(self): file_id = self.file1.id url = reverse('files:download_file', args=(file_id,)) self.assertEqual(resolve(url).func, download_file) def test_file_is_resolved(self): file_id = self.file1.id url = reverse('files:show_files') self.assertNotEqual(resolve(url).func, download_file) def test_show_file_url_is_resolved(self): url = reverse('files:show_files') self.assertEqual(resolve(url).func, show_files) def test_file_flow(self): self.assertEqual(str(self.file1.category), 'OOP') self.assertEqual(str(self.file1.owner), self.user.username) self.assertEqual(str(self.file1.create_at.date()), str(timezone.now().date())) self.assertEqual(self.file1.file_url.__str__(), 'files/1_testuser_OOP.pdf') def tearDown(self): try: os.remove(self.file1.file_url.path) except FileNotFoundError as e: print(e)
def getFile(self, subscription): ''' create file for current subscription ''' file = File(date_expires=datetime.datetime.now(), account=subscription) file.save() return file
class FilesBase(object): def login_as_editor(self): assert self.client.login(username='******', password='******') def setUp(self): self.create_switch(name='allow-packaged-app-uploads') self.app = Webapp.objects.get(pk=337141) self.app.update(is_packaged=True, status=amo.WEBAPPS_UNREVIEWED_STATUS) self.dev = self.app.authors.all()[0] self.regular = UserProfile.objects.get(pk=999) self.version = self.app.versions.latest() self.file = self.version.all_files[0] self.file_two = File() self.file_two.version = self.version self.file_two.filename = 'webapp.zip' self.file_two.save() self.login_as_editor() for file_obj in [self.file, self.file_two]: src = os.path.join(settings.ROOT, packaged_app) try: os.makedirs(os.path.dirname(file_obj.file_path)) except OSError: pass shutil.copyfile(src, file_obj.file_path) self.file_viewer = FileViewer(self.file, is_webapp=True) # Setting this to True, so we are delaying the extraction of files, # in the tests, the files won't be extracted. # Most of these tests extract as needed to. self.create_switch(name='delay-file-viewer') def tearDown(self): self.file_viewer.cleanup() def files_redirect(self, file): return reverse('mkt.files.redirect', args=[self.file.pk, file]) def files_serve(self, file): return reverse('mkt.files.serve', args=[self.file.pk, file]) def test_view_access_anon(self): self.client.logout() self.check_urls(403) def test_view_access_anon_view_unreviewed_source(self): self.app.update(view_source=True) self.file_viewer.extract() self.client.logout() self.check_urls(403) def test_view_access_anon_view_source(self): self.app.update(view_source=True, status=amo.STATUS_PUBLIC) self.file_viewer.extract() self.client.logout() self.check_urls(200) def test_view_access_editor(self): self.file_viewer.extract() self.check_urls(200) def test_view_access_editor_view_source(self): self.app.update(view_source=True) self.file_viewer.extract() self.check_urls(200) def test_view_access_developer(self): self.client.logout() assert self.client.login(username=self.dev.email, password='******') self.file_viewer.extract() self.check_urls(200) def test_view_access_reviewed(self): self.app.update(view_source=True) self.file_viewer.extract() self.client.logout() for status in amo.UNREVIEWED_STATUSES: self.app.update(status=status) self.check_urls(403) for status in amo.REVIEWED_STATUSES: self.app.update(status=status) self.check_urls(200) def test_view_access_developer_view_source(self): self.client.logout() assert self.client.login(username=self.dev.email, password='******') self.app.update(view_source=True) self.file_viewer.extract() self.check_urls(200) def test_view_access_another_developer(self): self.client.logout() assert self.client.login(username=self.regular.email, password='******') self.file_viewer.extract() self.check_urls(403) def test_view_access_another_developer_view_source(self): self.client.logout() assert self.client.login(username=self.regular.email, password='******') self.app.update(view_source=True, status=amo.STATUS_PUBLIC) self.file_viewer.extract() self.check_urls(200) def test_poll_extracted(self): self.file_viewer.extract() res = self.client.get(self.poll_url()) eq_(res.status_code, 200) eq_(json.loads(res.content)['status'], True) def test_poll_not_extracted(self): res = self.client.get(self.poll_url()) eq_(res.status_code, 200) eq_(json.loads(res.content)['status'], False) def test_poll_extracted_anon(self): self.client.logout() res = self.client.get(self.poll_url()) eq_(res.status_code, 403) def test_content_headers(self): self.file_viewer.extract() res = self.client.get(self.file_url('manifest.webapp')) assert 'etag' in res._headers assert 'last-modified' in res._headers def test_content_headers_etag(self): self.file_viewer.extract() self.file_viewer.select('manifest.webapp') obj = getattr(self.file_viewer, 'left', self.file_viewer) etag = obj.selected.get('md5') res = self.client.get(self.file_url('manifest.webapp'), HTTP_IF_NONE_MATCH=etag) eq_(res.status_code, 304) def test_content_headers_if_modified(self): self.file_viewer.extract() self.file_viewer.select('manifest.webapp') obj = getattr(self.file_viewer, 'left', self.file_viewer) date = http_date(obj.selected.get('modified')) res = self.client.get(self.file_url('manifest.webapp'), HTTP_IF_MODIFIED_SINCE=date) eq_(res.status_code, 304) def test_file_header(self): self.file_viewer.extract() res = self.client.get(self.file_url(not_binary)) eq_(res.status_code, 200) url = res.context['file_link']['url'] eq_(url, reverse('reviewers.apps.review', args=[self.app.app_slug])) def test_file_header_anon(self): self.client.logout() self.file_viewer.extract() self.app.update(view_source=True, status=amo.STATUS_PUBLIC) res = self.client.get(self.file_url(not_binary)) eq_(res.status_code, 200) url = res.context['file_link']['url'] eq_(url, reverse('detail', args=[self.app.pk])) def test_content_no_file(self): self.file_viewer.extract() res = self.client.get(self.file_url()) doc = pq(res.content) eq_(len(doc('#content')), 0) def test_no_files(self): res = self.client.get(self.file_url()) eq_(res.status_code, 200) assert 'files' not in res.context @patch('waffle.switch_is_active') def test_no_files_switch(self, switch_is_active): switch_is_active.side_effect = lambda x: x != 'delay-file-viewer' # By setting the switch to False, we are not delaying the file # extraction. The files will be extracted and there will be # files in context. res = self.client.get(self.file_url()) eq_(res.status_code, 200) assert 'files' in res.context def test_files(self): self.file_viewer.extract() res = self.client.get(self.file_url()) eq_(res.status_code, 200) assert 'files' in res.context def test_files_anon(self): self.client.logout() res = self.client.get(self.file_url()) eq_(res.status_code, 403) def test_files_file(self): self.file_viewer.extract() res = self.client.get(self.file_url(not_binary)) eq_(res.status_code, 200) assert 'selected' in res.context def test_files_back_link(self): self.file_viewer.extract() res = self.client.get(self.file_url(not_binary)) doc = pq(res.content) eq_(doc('#commands td:last').text(), 'Back to review') def test_files_back_link_anon(self): self.file_viewer.extract() self.client.logout() self.app.update(view_source=True, status=amo.STATUS_PUBLIC) res = self.client.get(self.file_url(not_binary)) eq_(res.status_code, 200) doc = pq(res.content) eq_(doc('#commands td:last').text(), 'Back to app')
class TestUrls(TestCase): def setUp(self): # create user self.username = '******' self.email = '*****@*****.**' self.password = '******' self.user = User(username=self.username, email=self.email) self.user.set_password(self.password) self.user.save() login = self.client.login(username=self.username, password=self.password) self.assertEqual(login, True) # create category self.category = Course.objects.create(course_id='1', course_name='OOP') # create degree self.software_eng_degree = Degree.objects.create( degree_id='1', degree_name='Software Engineering') self.social_worker_degree = Degree.objects.create( degree_id='2', degree_name='Social Worker') # upload file f = SimpleUploadedFile('test.pdf', b'test context') # create file model object self.file1 = File( category=self.category, create_at=timezone.now, file_url=f, owner=self.user, ) try: self.file1.save() except FileExistsError as e: print(e) self.file1.related_degrees.add(self.software_eng_degree) self.file1.related_degrees.add(self.social_worker_degree) def test_add_new_file_view(self): response = self.client.post(reverse('files:add_file')) self.assertEqual(response.status_code, 200) def test_list_files_view(self): response = self.client.post(reverse('files:show_files')) self.assertEqual(response.status_code, 200) def test_category_flow_view(self): category_name = self.category self.assertTrue(category_name, self.file1.category) def test_download_file_view(self): file_id = self.file1.id response = self.client.post( reverse('files:download_file', args=(file_id, ))) self.assertEqual(response.status_code, 200) def test_show_files_view(self): response = self.client.post(reverse('files:show_files')) self.assertEqual(response.status_code, 200) def test_fle_view(self): self.assertEqual(self.software_eng_degree.degree_name, str(self.file1.related_degrees.all()[0])) self.assertEqual(self.social_worker_degree.degree_name, str(self.file1.related_degrees.all()[1])) def test_show_files_after_delete_view(self): response = self.client.post(reverse('files:show_files')) self.assertEqual(response.status_code, 200) def tearDown(self): try: os.remove(self.file1.file_url.path) except FileNotFoundError as e: print(e)
from django.core.wsgi import get_wsgi_application application = get_wsgi_application() from individuals.models import Individual from files.models import File from django.contrib.auth.models import User individuals = Individual.objects.all() for individual in individuals: print(individual) print(individual.vcf_file) file = File(user=individual.user) file.location = individual.vcf_file file.save() # user = models.ForeignKey(User, editable=False, null=True, on_delete=models.CASCADE) # shared_with_users = models.ManyToManyField(User, editable=True, related_name="shared_with_users", blank=True) # shared_with_groups = models.ManyToManyField(UserGroup, editable=True, related_name="shared_with_groups", blank=True) # name = models.CharField(max_length=600) # is_featured = models.BooleanField(default=True) # is_public = models.BooleanField(default=False) # vcf_file = models.FileField(upload_to=get_upload_path, blank=True, help_text="File Format: VCF",max_length=600) # vcf_header = models.TextField(null=True, blank=True) # status = models.CharField(max_length=100, blank=True, editable=False) # n_variants = models.IntegerField(null=True, blank=True, editable=False) # n_lines = models.IntegerField(null=True, blank=True, editable=False)
class FilesBase: def login_as_editor(self): assert self.client.login(username='******', password='******') def setUp(self): self.addon = Addon.objects.get(pk=3615) self.dev = self.addon.authors.all()[0] self.regular = UserProfile.objects.get(pk=999) self.version = self.addon.versions.latest() self.file = self.version.all_files[0] self.file_two = File() self.file_two.version = self.version self.file_two.filename = 'dictionary-test.xpi' self.file_two.save() self.login_as_editor() self.old_tmp = settings.TMP_PATH self.old_addon = settings.ADDONS_PATH settings.TMP_PATH = tempfile.mkdtemp() settings.ADDONS_PATH = tempfile.mkdtemp() dictionary = 'apps/files/fixtures/files/dictionary-test.xpi' for file_obj in [self.file, self.file_two]: src = os.path.join(settings.ROOT, dictionary) try: os.makedirs(os.path.dirname(file_obj.file_path)) except OSError: pass shutil.copyfile(src, file_obj.file_path) self.file_viewer = FileViewer(self.file) def tearDown(self): self.file_viewer.cleanup() settings.TMP_PATH = self.old_tmp settings.ADDONS_PATH = self.old_addon def test_view_access_anon(self): self.client.logout() self.check_urls(403) def test_view_access_anon_view_source(self): self.addon.update(view_source=True) self.file_viewer.extract() self.client.logout() self.check_urls(200) def test_view_access_editor(self): self.file_viewer.extract() self.check_urls(200) def test_view_access_editor_view_source(self): self.addon.update(view_source=True) self.file_viewer.extract() self.check_urls(200) def test_view_access_developer(self): self.client.logout() assert self.client.login(username=self.dev.email, password='******') self.file_viewer.extract() self.check_urls(200) def test_view_access_developer_view_source(self): self.client.logout() assert self.client.login(username=self.dev.email, password='******') self.addon.update(view_source=True) self.file_viewer.extract() self.check_urls(200) def test_view_access_another_developer(self): self.client.logout() assert self.client.login(username=self.regular.email, password='******') self.file_viewer.extract() self.check_urls(403) def test_view_access_another_developer_view_source(self): self.client.logout() assert self.client.login(username=self.regular.email, password='******') self.addon.update(view_source=True) self.file_viewer.extract() self.check_urls(200) def test_poll_extracted(self): self.file_viewer.extract() res = self.client.get(self.poll_url()) eq_(res.status_code, 200) eq_(json.loads(res.content)['status'], True) def test_poll_not_extracted(self): res = self.client.get(self.poll_url()) eq_(res.status_code, 200) eq_(json.loads(res.content)['status'], False) def test_poll_extracted_anon(self): self.client.logout() res = self.client.get(self.poll_url()) eq_(res.status_code, 403) def test_content_headers(self): self.file_viewer.extract() res = self.client.get(self.file_url('install.js')) assert 'etag' in res._headers assert 'last-modified' in res._headers def test_file_header(self): self.file_viewer.extract() res = self.client.get(self.file_url('install.js')) url = res.context['file_url'] eq_(url, reverse('editors.review', args=[self.version.pk])) def test_file_header_anon(self): self.client.logout() self.file_viewer.extract() self.addon.update(view_source=True) res = self.client.get(self.file_url('install.js')) url = res.context['file_url'] eq_(url, reverse('addons.detail', args=[self.addon.pk])) def test_content_no_file(self): self.file_viewer.extract() res = self.client.get(self.file_url()) doc = pq(res.content) eq_(len(doc('#content')), 0) def test_no_files(self): res = self.client.get(self.file_url()) eq_(res.status_code, 200) assert 'files' not in res.context def test_files(self): self.file_viewer.extract() res = self.client.get(self.file_url()) eq_(res.status_code, 200) assert 'files' in res.context def test_files_anon(self): self.client.logout() res = self.client.get(self.file_url()) eq_(res.status_code, 403) def test_files_file(self): self.file_viewer.extract() res = self.client.get(self.file_url('install.js')) eq_(res.status_code, 200) assert 'selected' in res.context
def post(self, request): # 上传的文件都在request.FILES里面获取,所以这里要多传一个这个参数 excel_form = UploadExcelForm(request.POST, request.FILES) next_url = request.GET.get('next', '') if excel_form.is_valid(): excel_file = excel_form.cleaned_data["excel_file"] case_file = File() case_file.excel_file = excel_file case_file.save() excel_file_name = os.path.join(MEDIA_ROOT, case_file.excel_file.name) wb = openpyxl.load_workbook(excel_file_name) sheet = wb.get_active_sheet() for i in range(1, sheet.max_row): record = Record() record.asin = sheet.cell(row=i + 1, column=1).value record.c_price = sheet.cell(row=i + 1, column=2).value record.purchase_cost = sheet.cell(row=i + 1, column=3).value record.product_profit = sheet.cell(row=i + 1, column=4).value record.product_upload_time = sheet.cell(row=i + 1, column=5).value # record.brush_number = sheet.cell(row=i + 1, column=6).value record.sale_30_number = sheet.cell(row=i + 1, column=6).value record.sale_7_number = sheet.cell(row=i + 1, column=7).value record.record_src = sheet.cell(row=i + 1, column=8).value record.now_score = sheet.cell(row=i + 1, column=9).value record.now_review_number = sheet.cell(row=i + 1, column=10).value review_type = sheet.cell(row=i + 1, column=11).value record.review_type = review_type if review_type == "留评": record.direct_review = '0' record.free_review_number = '0' record.feedback = '0' elif review_type == "直评": record.review_number = '0' record.free_review_number = '0' record.feedback = '0' elif review_type == "免评": record.review_number = '0' record.direct_review = '0' record.feedback = '0' elif review_type == "feedback": record.review_number = '0' record.direct_review = '0' record.free_review_number = '0' record.user = request.user record.save() messages.add_message(request, messages.SUCCESS, "文件上传成功", extra_tags='success') return redirect(next_url) else: messages.add_message(request, messages.ERROR, "表单验证错误", extra_tags='danger') return redirect(next_url)
class FilesBase: def login_as_editor(self): assert self.client.login(username='******', password='******') def setUp(self): self.addon = Addon.objects.get(pk=3615) self.dev = self.addon.authors.all()[0] self.regular = UserProfile.objects.get(pk=999) self.version = self.addon.versions.latest() self.file = self.version.all_files[0] self.file_two = File() self.file_two.version = self.version self.file_two.filename = 'dictionary-test.xpi' self.file_two.save() self.login_as_editor() self.old_tmp = settings.TMP_PATH self.old_addon = settings.ADDONS_PATH settings.TMP_PATH = tempfile.mkdtemp() settings.ADDONS_PATH = tempfile.mkdtemp() dictionary = 'apps/files/fixtures/files/dictionary-test.xpi' for file_obj in [self.file, self.file_two]: src = os.path.join(settings.ROOT, dictionary) try: os.makedirs(os.path.dirname(file_obj.file_path)) except OSError: pass shutil.copyfile(src, file_obj.file_path) self.file_viewer = FileViewer(self.file) def tearDown(self): self.file_viewer.cleanup() settings.TMP_PATH = self.old_tmp settings.ADDONS_PATH = self.old_addon def test_view_access_anon(self): self.client.logout() self.check_urls(403) def test_view_access_anon_view_source(self): self.addon.update(view_source=True) self.file_viewer.extract() self.client.logout() self.check_urls(200) def test_view_access_editor(self): self.file_viewer.extract() self.check_urls(200) def test_view_access_editor_view_source(self): self.addon.update(view_source=True) self.file_viewer.extract() self.check_urls(200) def test_view_access_developer(self): self.client.logout() assert self.client.login(username=self.dev.email, password='******') self.file_viewer.extract() self.check_urls(200) def test_view_access_developer_view_source(self): self.client.logout() assert self.client.login(username=self.dev.email, password='******') self.addon.update(view_source=True) self.file_viewer.extract() self.check_urls(200) def test_view_access_another_developer(self): self.client.logout() assert self.client.login(username=self.regular.email, password='******') self.file_viewer.extract() self.check_urls(403) def test_view_access_another_developer_view_source(self): self.client.logout() assert self.client.login(username=self.regular.email, password='******') self.addon.update(view_source=True) self.file_viewer.extract() self.check_urls(200) def test_poll_extracted(self): self.file_viewer.extract() res = self.client.get(self.poll_url()) eq_(res.status_code, 200) eq_(json.loads(res.content)['status'], True) def test_poll_not_extracted(self): res = self.client.get(self.poll_url()) eq_(res.status_code, 200) eq_(json.loads(res.content)['status'], False) def test_poll_extracted_anon(self): self.client.logout() res = self.client.get(self.poll_url()) eq_(res.status_code, 403) def test_content_headers(self): self.file_viewer.extract() res = self.client.get(self.file_url('install.js')) assert 'etag' in res._headers assert 'last-modified' in res._headers def test_file_header(self): self.file_viewer.extract() res = self.client.get(self.file_url('install.js')) url = res.context['file_url'] eq_(url, reverse('editors.review', args=[self.version.pk])) def test_file_header_anon(self): self.client.logout() self.file_viewer.extract() self.addon.update(view_source=True) res = self.client.get(self.file_url('install.js')) url = res.context['file_url'] eq_(url, reverse('addons.detail', args=[self.addon.pk])) def test_content_no_file(self): self.file_viewer.extract() res = self.client.get(self.file_url()) doc = pq(res.content) eq_(len(doc('#content')), 0) def test_no_files(self): res = self.client.get(self.file_url()) eq_(res.status_code, 200) assert 'files' not in res.context def test_files(self): self.file_viewer.extract() res = self.client.get(self.file_url()) eq_(res.status_code, 200) assert 'files' in res.context def test_files_anon(self): self.client.logout() res = self.client.get(self.file_url()) eq_(res.status_code, 403) def test_files_file(self): self.file_viewer.extract() res = self.client.get(self.file_url('install.js')) eq_(res.status_code, 200) assert 'selected' in res.context
def import_files(request, project_id): if request.user.is_staff: project = get_object_or_404(Project, pk=project_id) else: project = get_object_or_404(Project, pk=project_id, user=request.user) form = ImportForm(request.POST or None) if request.method == 'POST': if form.is_valid(): # paths = form.cleaned_data['paths'] for file in form.cleaned_data['file_list'].splitlines(): try: obj = File.objects.get(location=file, user=request.user) except File.DoesNotExist: obj = File(location=file, user=request.user) obj.save() project.files.add(obj) # for path in form.cleaned_data['paths'].splitlines(): # clean_path = path.strip().replace('s3://', '') # split_path = clean_path.split('/', 1) # bucket_name = split_path[0] # prefix = split_path[1] # s3credentials = S3Credential.objects.all() # for s3credential in s3credentials: # if clean_path.startswith(s3credential.buckets): # #get all files from path # session = boto3.Session( # aws_access_key_id=s3credential.access_key, # aws_secret_access_key=s3credential.secret_key # ) # s3 = session.resource('s3') # bucket = s3.Bucket(bucket_name) # print(bucket) # for key in bucket.objects.filter(Prefix=prefix): # if not key.key.endswith('/'): # file_name, file_extension = os.path.splitext(key.key) # if file_extension == '.gz': # file_name, file_extension = os.path.splitext(file_name) # basename = os.path.basename(file_name) # location = 's3://'+bucket_name+'/'+key.key # file_obj = ProjectFile( # project = project, # name=basename, # size=str(key.size), # last_modified=str(key.last_modified), # file_type=file_extension.replace('.', ''), # location=location, # user=request.user # ) # file_obj.save() for sample_info in form.data['samples'].splitlines(): sample_info = sample_info.split('\t') sample = ProjectSample(user=request.user, project=project) sample.name = sample_info[0] sample.alias = sample_info[1] sample.status = sample_info[2] sample.location = sample_info[3] sample.prefix = sample_info[4] sample.save() return redirect('projects-view', project.id) context = {'form': form, 'project': project} return render(request, 'projects/import_files.html', context)
def import_files(request, project_id): if request.user.is_staff: project = get_object_or_404(Project, pk=project_id) else: project = get_object_or_404(Project, pk=project_id, user=request.user) form = ImportForm(request.POST or None) if request.method == 'POST': if form.is_valid(): paths = form.cleaned_data['paths'] for file in form.cleaned_data['file_list'].splitlines(): try: obj = File.objects.get(location=file, user=request.user) except File.DoesNotExist: obj = File(location=file, user=request.user) obj.save() project.files.add(obj) for path in form.cleaned_data['paths'].splitlines(): clean_path = path.strip().replace('s3://', '') split_path = clean_path.split('/', 1) bucket_name = split_path[0] prefix = split_path[1] s3credentials = S3Credential.objects.all() for s3credential in s3credentials: if clean_path.startswith(s3credential.buckets): #get all files from path session = boto3.Session( aws_access_key_id=s3credential.access_key, aws_secret_access_key=s3credential.secret_key ) s3 = session.resource('s3') bucket = s3.Bucket(bucket_name) print(bucket) for key in bucket.objects.filter(Prefix=prefix): if not key.key.endswith('/'): file_name, file_extension = os.path.splitext(key.key) if file_extension == '.gz': file_name, file_extension = os.path.splitext(file_name) basename = os.path.basename(file_name) location = 's3://'+bucket_name+'/'+key.key file_obj = ProjectFile( project = project, name=basename, size=str(key.size), last_modified=str(key.last_modified), file_type=file_extension.replace('.', ''), location=location, user=request.user ) file_obj.save() for sample_info in form.data['samples'].splitlines(): sample_info = sample_info.split('\t') sample = ProjectSample(user=request.user, project=project) sample.name = sample_info[0] sample.alias = sample_info[1] sample.status = sample_info[2] sample.location = sample_info[3] sample.prefix = sample_info[4] sample.save() return redirect('projects-view', project.id) context = {'form': form, 'project': project} return render(request, 'projects/import_files.html', context)
class FilesBase: def login_as_editor(self): assert self.client.login(username='******', password='******') def setUp(self): self.addon = Addon.objects.get(pk=3615) self.dev = self.addon.authors.all()[0] self.regular = UserProfile.objects.get(pk=999) self.version = self.addon.versions.latest() self.file = self.version.all_files[0] self.file_two = File() self.file_two.version = self.version self.file_two.filename = 'dictionary-test.xpi' self.file_two.save() self.login_as_editor() self.old_tmp = settings.TMP_PATH self.old_addon = settings.ADDONS_PATH settings.TMP_PATH = tempfile.mkdtemp() settings.ADDONS_PATH = tempfile.mkdtemp() for file_obj in [self.file, self.file_two]: src = os.path.join(settings.ROOT, dictionary) try: os.makedirs(os.path.dirname(file_obj.file_path)) except OSError: pass shutil.copyfile(src, file_obj.file_path) self.file_viewer = FileViewer(self.file) # Setting this to True, so we are delaying the extraction of files, # in the tests, the files won't be extracted. # Most of these tests extract as needed to. Switch.objects.create(name='delay-file-viewer', active=True) def tearDown(self): self.file_viewer.cleanup() settings.TMP_PATH = self.old_tmp settings.ADDONS_PATH = self.old_addon def files_redirect(self, file): return reverse('files.redirect', args=[self.file.pk, file]) def files_serve(self, file): return reverse('files.serve', args=[self.file.pk, file]) def test_view_access_anon(self): self.client.logout() self.check_urls(403) def test_view_access_anon_view_source(self): self.addon.update(view_source=True) self.file_viewer.extract() self.client.logout() self.check_urls(200) def test_view_access_editor(self): self.file_viewer.extract() self.check_urls(200) def test_view_access_editor_view_source(self): self.addon.update(view_source=True) self.file_viewer.extract() self.check_urls(200) def test_view_access_developer(self): self.client.logout() assert self.client.login(username=self.dev.email, password='******') self.file_viewer.extract() self.check_urls(200) def test_view_access_reviewed(self): self.addon.update(view_source=True) self.file_viewer.extract() self.client.logout() for status in amo.UNREVIEWED_STATUSES: self.addon.update(status=status) self.check_urls(403) for status in amo.REVIEWED_STATUSES: self.addon.update(status=status) self.check_urls(200) def test_view_access_developer_view_source(self): self.client.logout() assert self.client.login(username=self.dev.email, password='******') self.addon.update(view_source=True) self.file_viewer.extract() self.check_urls(200) def test_view_access_another_developer(self): self.client.logout() assert self.client.login(username=self.regular.email, password='******') self.file_viewer.extract() self.check_urls(403) def test_view_access_another_developer_view_source(self): self.client.logout() assert self.client.login(username=self.regular.email, password='******') self.addon.update(view_source=True) self.file_viewer.extract() self.check_urls(200) def test_poll_extracted(self): self.file_viewer.extract() res = self.client.get(self.poll_url()) eq_(res.status_code, 200) eq_(json.loads(res.content)['status'], True) def test_poll_not_extracted(self): res = self.client.get(self.poll_url()) eq_(res.status_code, 200) eq_(json.loads(res.content)['status'], False) def test_poll_extracted_anon(self): self.client.logout() res = self.client.get(self.poll_url()) eq_(res.status_code, 403) def test_content_headers(self): self.file_viewer.extract() res = self.client.get(self.file_url('install.js')) assert 'etag' in res._headers assert 'last-modified' in res._headers def test_content_headers_etag(self): self.file_viewer.extract() self.file_viewer.select('install.js') obj = getattr(self.file_viewer, 'left', self.file_viewer) etag = obj.selected.get('md5') res = self.client.get(self.file_url('install.js'), HTTP_IF_NONE_MATCH=etag) eq_(res.status_code, 304) def test_content_headers_if_modified(self): self.file_viewer.extract() self.file_viewer.select('install.js') obj = getattr(self.file_viewer, 'left', self.file_viewer) date = http_date(obj.selected.get('modified')) res = self.client.get(self.file_url('install.js'), HTTP_IF_MODIFIED_SINCE=date) eq_(res.status_code, 304) def test_file_header(self): self.file_viewer.extract() res = self.client.get(self.file_url(not_binary)) url = res.context['file_link']['url'] eq_(url, reverse('editors.review', args=[self.addon.slug])) def test_file_header_anon(self): self.client.logout() self.file_viewer.extract() self.addon.update(view_source=True) res = self.client.get(self.file_url(not_binary)) url = res.context['file_link']['url'] eq_(url, reverse('addons.detail', args=[self.addon.pk])) def test_content_no_file(self): self.file_viewer.extract() res = self.client.get(self.file_url()) doc = pq(res.content) eq_(len(doc('#content')), 0) def test_no_files(self): res = self.client.get(self.file_url()) eq_(res.status_code, 200) assert 'files' not in res.context @patch('waffle.switch_is_active') def test_no_files_switch(self, switch_is_active): switch_is_active.return_value = False # By setting the switch to False, we are not delaying the file # extraction. The files will be extracted and there will be # files in context. res = self.client.get(self.file_url()) eq_(res.status_code, 200) assert 'files' in res.context def test_files(self): self.file_viewer.extract() res = self.client.get(self.file_url()) eq_(res.status_code, 200) assert 'files' in res.context def test_files_anon(self): self.client.logout() res = self.client.get(self.file_url()) eq_(res.status_code, 403) def test_files_file(self): self.file_viewer.extract() res = self.client.get(self.file_url(not_binary)) eq_(res.status_code, 200) assert 'selected' in res.context def test_files_back_link(self): self.file_viewer.extract() res = self.client.get(self.file_url(not_binary)) doc = pq(res.content) eq_(doc('#files a.no-key').text(), 'Back to review') def test_files_back_link_anon(self): self.file_viewer.extract() self.client.logout() self.addon.update(view_source=True) res = self.client.get(self.file_url(not_binary)) eq_(res.status_code, 200) doc = pq(res.content) eq_(doc('#files a.no-key').text(), 'Back to addon')
def add(request, group): ''' This method accepts GET and POST. On GET, displays the page to add a file to the appropriate group. On POST, validates the upload and adds the file to the group and path. In case of errors on POST, returns the GET page with an error message. On a successful POST, returns to the matching _list view. Keyword Arguments: group -> String. The group affected. Can be 'public', 'private', or a group string. ''' # First we make sure the user has the appropriate permissions. Anyone can add public # or private files, but only members of groups can add files to that group. This permissions # check applies to both the GET and POST methods. try: db_group = Group.objects.filter(group=group).get() except Group.DoesNotExist: raise Http404 if group not in ['public','private']: try: db_user_group = Group_Member.objects.filter(user=request.user).filter(group=db_group).get() except Group_Member.DoesNotExist: raise PermissionDenied # Template context dictionary td = {'active_nav': group, 'nav_group_entries': nav_group_entries(request.user)} if request.method == 'POST': # If the request is a POST, validate the form input. In this case, it's just that the # file exists and that file_path is a valid filepath. if 'file_path' not in request.POST or 'new_file' not in request.FILES: return error_400(request) file_path = os.path.normpath(request.POST['file_path'].strip()) uploaded_file = request.FILES['new_file'] # Process file path. We need to do some cleaning to make sure we can get a clear # path from it. We don't have to worry about _security_, because the file isn't # written to disk using this path, just displayed. if file_path == os.path.normpath(''): cleaned_path = '' else: file_path = file_path.split(sep) cleaned_path = [] for entry in file_path: if re.match(r'[/\\?*:|"<>.\']', entry): return error_400(request) cleaned_entry = entry.strip() if cleaned_entry == '': return error_400(request) cleaned_path.append(cleaned_entry) cleaned_path = sep.join(cleaned_path) # All is well, so add the file object to the database, which will also write it do disk via # Django's FileField model field. db_file = File(uploaded_file=uploaded_file, display_path=cleaned_path, date=datetime.datetime.now(), group=db_group, user=request.user) db_file.save() messages.add_message(request, messages.SUCCESS, 'The file "{0}" was successfully uploaded.'.format(os.path.basename(db_file.uploaded_file.name))) return redirect(reverse('files.views._list', kwargs={'group': group})) # If this is a get request, we can just go ahead and return the add template. return render_to_response('files/add.html', td, context_instance = RequestContext(request))
class FilesBase: def login_as_editor(self): assert self.client.login(username='******', password='******') def setUp(self): self.addon = Addon.objects.get(pk=3615) self.dev = self.addon.authors.all()[0] self.regular = UserProfile.objects.get(pk=999) self.version = self.addon.versions.latest() self.file = self.version.all_files[0] self.file_two = File() self.file_two.version = self.version self.file_two.filename = 'dictionary-test.xpi' self.file_two.save() self.login_as_editor() self.old_tmp = settings.TMP_PATH self.old_addon = settings.ADDONS_PATH settings.TMP_PATH = tempfile.mkdtemp() settings.ADDONS_PATH = tempfile.mkdtemp() for file_obj in [self.file, self.file_two]: src = os.path.join(settings.ROOT, dictionary) try: os.makedirs(os.path.dirname(file_obj.file_path)) except OSError: pass shutil.copyfile(src, file_obj.file_path) self.file_viewer = FileViewer(self.file) # Setting this to True, so we are delaying the extraction of files, # in the tests, the files won't be extracted. # Most of these tests extract as needed to. Switch.objects.create(name='delay-file-viewer', active=True) def tearDown(self): self.file_viewer.cleanup() settings.TMP_PATH = self.old_tmp settings.ADDONS_PATH = self.old_addon def files_redirect(self, file): return reverse('files.redirect', args=[self.file.pk, file]) def files_serve(self, file): return reverse('files.serve', args=[self.file.pk, file]) def test_view_access_anon(self): self.client.logout() self.check_urls(403) def test_view_access_anon_view_source(self): self.addon.update(view_source=True) self.file_viewer.extract() self.client.logout() self.check_urls(200) def test_view_access_editor(self): self.file_viewer.extract() self.check_urls(200) def test_view_access_editor_view_source(self): self.addon.update(view_source=True) self.file_viewer.extract() self.check_urls(200) def test_view_access_developer(self): self.client.logout() assert self.client.login(username=self.dev.email, password='******') self.file_viewer.extract() self.check_urls(200) def test_view_access_reviewed(self): self.addon.update(view_source=True) self.file_viewer.extract() self.client.logout() for status in amo.UNREVIEWED_STATUSES: self.addon.update(status=status) self.check_urls(403) for status in amo.REVIEWED_STATUSES: self.addon.update(status=status) self.check_urls(200) def test_view_access_developer_view_source(self): self.client.logout() assert self.client.login(username=self.dev.email, password='******') self.addon.update(view_source=True) self.file_viewer.extract() self.check_urls(200) def test_view_access_another_developer(self): self.client.logout() assert self.client.login(username=self.regular.email, password='******') self.file_viewer.extract() self.check_urls(403) def test_view_access_another_developer_view_source(self): self.client.logout() assert self.client.login(username=self.regular.email, password='******') self.addon.update(view_source=True) self.file_viewer.extract() self.check_urls(200) def test_poll_extracted(self): self.file_viewer.extract() res = self.client.get(self.poll_url()) eq_(res.status_code, 200) eq_(json.loads(res.content)['status'], True) def test_poll_not_extracted(self): res = self.client.get(self.poll_url()) eq_(res.status_code, 200) eq_(json.loads(res.content)['status'], False) def test_poll_extracted_anon(self): self.client.logout() res = self.client.get(self.poll_url()) eq_(res.status_code, 403) def test_content_headers(self): self.file_viewer.extract() res = self.client.get(self.file_url('install.js')) assert 'etag' in res._headers assert 'last-modified' in res._headers def test_content_headers_etag(self): self.file_viewer.extract() self.file_viewer.select('install.js') obj = getattr(self.file_viewer, 'left', self.file_viewer) etag = obj.selected.get('md5') res = self.client.get(self.file_url('install.js'), HTTP_IF_NONE_MATCH=etag) eq_(res.status_code, 304) def test_content_headers_if_modified(self): self.file_viewer.extract() self.file_viewer.select('install.js') obj = getattr(self.file_viewer, 'left', self.file_viewer) date = http_date(obj.selected.get('modified')) res = self.client.get(self.file_url('install.js'), HTTP_IF_MODIFIED_SINCE=date) eq_(res.status_code, 304) def test_file_header(self): self.file_viewer.extract() res = self.client.get(self.file_url(not_binary)) url = res.context['file_link']['url'] eq_(url, reverse('editors.review', args=[self.addon.slug])) def test_file_header_anon(self): self.client.logout() self.file_viewer.extract() self.addon.update(view_source=True) res = self.client.get(self.file_url(not_binary)) url = res.context['file_link']['url'] eq_(url, reverse('addons.detail', args=[self.addon.pk])) def test_content_no_file(self): self.file_viewer.extract() res = self.client.get(self.file_url()) doc = pq(res.content) eq_(len(doc('#content')), 0) def test_no_files(self): res = self.client.get(self.file_url()) eq_(res.status_code, 200) assert 'files' not in res.context @patch('waffle.switch_is_active') def test_no_files_switch(self, switch_is_active): switch_is_active.return_value = False # By setting the switch to False, we are not delaying the file # extraction. The files will be extracted and there will be # files in context. res = self.client.get(self.file_url()) eq_(res.status_code, 200) assert 'files' in res.context def test_files(self): self.file_viewer.extract() res = self.client.get(self.file_url()) eq_(res.status_code, 200) assert 'files' in res.context def test_files_anon(self): self.client.logout() res = self.client.get(self.file_url()) eq_(res.status_code, 403) def test_files_file(self): self.file_viewer.extract() res = self.client.get(self.file_url(not_binary)) eq_(res.status_code, 200) assert 'selected' in res.context def test_files_back_link(self): self.file_viewer.extract() res = self.client.get(self.file_url(not_binary)) doc = pq(res.content) eq_(doc('#files a.no-key').text(), 'Back to review') def test_files_back_link_anon(self): self.file_viewer.extract() self.client.logout() self.addon.update(view_source=True) res = self.client.get(self.file_url(not_binary)) eq_(res.status_code, 200) doc = pq(res.content) eq_(doc('#files a.no-key').text(), 'Back to addon')
class TestModels(TestCase): def setUp(self): # create user self.username = '******' self.email = '*****@*****.**' self.password = '******' self.user = User(username=self.username, email=self.email) self.user.set_password(self.password) self.user.save() login = self.client.login(username=self.username, password=self.password) self.assertEqual(login, True) # create category self.category = Course.objects.create(course_id='1', course_name='OOP') # create degree self.software_eng_degree = Degree.objects.create( degree_id='1', degree_name='Software Engineering') self.social_worker_degree = Degree.objects.create( degree_id='2', degree_name='Social Worker') # upload legal file self.legal = SimpleUploadedFile('test.pdf', b'test context') # create file model object self.legal_file = File( category=self.category, create_at=timezone.now(), file_url=self.legal, owner=self.user, ) try: self.legal_file.save() except FileExistsError as e: print(e) self.legal_file.related_degrees.add(self.software_eng_degree) self.legal_file.related_degrees.add(self.social_worker_degree) # create post self.post1 = Post.objects.create( category='other', body='test1', author=self.user, ) self.post2 = Post.objects.create(category='OOP', body='test2', author=self.user) # create post with file self.post3 = Post.objects.create(category='other', body='test3', author=self.user, file=self.legal_file) self.comment1 = Comments.objects.create(comment='comment1', postId=self.post1, author=self.user) self.comment2 = Comments.objects.create(comment='comment2', postId=self.post2, author=self.user) def test_post_with_file_exist(self): self.assertEqual(self.post3.category, 'other') self.assertEqual(self.post3.body, 'test3') self.assertEqual(str(self.post3.file.category), 'OOP') self.assertEqual(self.post3.file.create_at.date(), timezone.now().date()) self.assertEqual(self.post3.file.file_url, 'files/1_testuser_OOP.pdf') self.assertEqual(self.post3.file.owner, self.user) def test_post_Other_exist(self): self.assertEqual(self.post1.category, 'other') self.assertEqual(self.post1.body, 'test1') def test_post_Study_exist(self): self.assertEqual(self.post2.category, 'OOP') self.assertEqual(self.post2.body, 'test2') def test_post_not_exist(self): self.assertNotEqual(self.post1.category, 'other1') self.assertNotEqual(self.post1.body, 'test11') def test_comment_exist(self): self.assertEqual(self.comment1.comment, 'comment1') def test_get_only_post_comment(self): comments = Comments.objects.filter(postId=self.post1) for comment in comments: self.assertEqual(comment.postId.id, self.post1.id) def tearDown(self): try: os.remove(self.legal_file.file_url.path) except FileNotFoundError as e: print(e)
def test_save(self): file = File( file=SimpleUploadedFile("test.txt", b"Lorem ipsum dolorem")) file.save() self.assertIsNotNone(file.id) self.assertEquals("files/test.txt", file.file.name)
application = get_wsgi_application() from individuals.models import Individual from files.models import File from django.contrib.auth.models import User individuals = Individual.objects.all() for individual in individuals: print(individual) print(individual.vcf_file) file = File(user=individual.user) file.location = individual.vcf_file file.save() # user = models.ForeignKey(User, editable=False, null=True, on_delete=models.CASCADE) # shared_with_users = models.ManyToManyField(User, editable=True, related_name="shared_with_users", blank=True) # shared_with_groups = models.ManyToManyField(UserGroup, editable=True, related_name="shared_with_groups", blank=True) # name = models.CharField(max_length=600) # is_featured = models.BooleanField(default=True) # is_public = models.BooleanField(default=False) # vcf_file = models.FileField(upload_to=get_upload_path, blank=True, help_text="File Format: VCF",max_length=600) # vcf_header = models.TextField(null=True, blank=True) # status = models.CharField(max_length=100, blank=True, editable=False) # n_variants = models.IntegerField(null=True, blank=True, editable=False) # n_lines = models.IntegerField(null=True, blank=True, editable=False)
def post(self, request): # 上传的文件都在request.FILES里面获取,所以这里要多传一个这个参数 excel_form = UploadExcelForm(request.POST, request.FILES) next_url = request.GET.get('next', '') if excel_form.is_valid(): excel_file = excel_form.cleaned_data["excel_file"] case_file = File() case_file.excel_file = excel_file case_file.save() excel_file_name = os.path.join(MEDIA_ROOT, case_file.excel_file.name) wb = openpyxl.load_workbook(excel_file_name) sheet = wb.get_active_sheet() for i in range(1, sheet.max_row): track_number = sheet.cell(row=i + 1, column=6).value if not Goods.objects.filter(user=request.user, track_number=track_number): good = Goods() old_total_price = good.total_price if good.total_price else 0 good.track_number = track_number good.user = request.user good.send_time = sheet.cell(row=i + 1, column=1).value if isinstance(good.send_time, str): good.send_time = datetime.datetime.strptime( good.send_time.replace("/", "-"), "%Y-%m-%d") good.send_company = sheet.cell(row=i + 1, column=2).value good.channel = sheet.cell(row=i + 1, column=3).value good.site = sheet.cell(row=i + 1, column=4).value good.country = sheet.cell(row=i + 1, column=5).value good.net_weight = sheet.cell(row=i + 1, column=7).value good.volume_weight = sheet.cell(row=i + 1, column=8).value good.actual_charged_weight = sheet.cell(row=i + 1, column=9).value good.pieces_number = sheet.cell(row=i + 1, column=10).value good.includes_price = sheet.cell(row=i + 1, column=11).value good.other_price = sheet.cell(row=i + 1, column=12).value good.total_price = sheet.cell(row=i + 1, column=13).value good.express_time = sheet.cell(row=i + 1, column=14).value good.express_status = sheet.cell( row=i + 1, column=15).value if sheet.cell( row=i + 1, column=15).value else "not express" good.settlement = sheet.cell(row=i + 1, column=16).value good.order_remark = sheet.cell(row=i + 1, column=17).value good.user = request.user good.save() total_price = sheet.cell(row=i + 1, column=13).value send_company = sheet.cell(row=i + 1, column=2).value good_total_price = good.total_price if good.total_price else 0 year = datetime.datetime.now().strftime('%Y') month = datetime.datetime.now().strftime('%m') user_freight_money = UserFreight.objects.filter( brush_year=year, brush_month=month, user=request.user).first() total_price_difference = float(good_total_price) - float( old_total_price) if not user_freight_money: user_freight_money_object = UserFreight() user_freight_money_object.user = request.user else: user_freight_money_object = user_freight_money user_freight_money_object.freight += total_price_difference user_freight_money_object.save() company_freight_money = LogisticsCompanyFreight.objects.filter( brush_year=year, brush_month=month, send_company=send_company).first() if not company_freight_money: company_freight_money_object = LogisticsCompanyFreight( ) company_freight_money_object.send_company = send_company else: company_freight_money_object = company_freight_money company_freight_money_object.freight += total_price_difference company_freight_money_object.save() messages.add_message(request, messages.SUCCESS, "文件上传成功", extra_tags='success') return redirect(next_url) else: messages.add_message(request, messages.ERROR, "表单验证错误", extra_tags='danger') return redirect(next_url)