Exemplo n.º 1
0
    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()
Exemplo n.º 2
0
 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()
Exemplo n.º 3
0
    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()
Exemplo n.º 4
0
    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/")
Exemplo n.º 5
0
    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
Exemplo n.º 6
0
 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()
Exemplo n.º 7
0
    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
Exemplo n.º 8
0
    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()
Exemplo n.º 9
0
    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
Exemplo n.º 10
0
 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()
Exemplo n.º 11
0
    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
Exemplo n.º 12
0
    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
Exemplo n.º 13
0
    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)
Exemplo n.º 14
0
 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()
Exemplo n.º 15
0
 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()
Exemplo n.º 16
0
    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)
Exemplo n.º 17
0
    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
Exemplo n.º 18
0
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('/')
Exemplo n.º 19
0
    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
Exemplo n.º 20
0
    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
Exemplo n.º 21
0
    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)
Exemplo n.º 22
0
    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)
Exemplo n.º 23
0
    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
Exemplo n.º 24
0
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)
Exemplo n.º 25
0
    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
Exemplo n.º 26
0
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())
Exemplo n.º 27
0
    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)
Exemplo n.º 28
0
    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)
Exemplo n.º 29
0
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()
Exemplo n.º 30
0
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)
Exemplo n.º 31
0
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)
Exemplo n.º 32
0
 def getFile(self, subscription):
     ''' create file for current subscription '''
     file = File(date_expires=datetime.datetime.now(), account=subscription)
     file.save()
     return file
Exemplo n.º 33
0
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')
Exemplo n.º 34
0
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)
Exemplo n.º 35
0
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)
Exemplo n.º 36
0
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
Exemplo n.º 37
0
    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)
Exemplo n.º 38
0
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
Exemplo n.º 39
0
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)
Exemplo n.º 40
0
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)
Exemplo n.º 41
0
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')
Exemplo n.º 42
0
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))
Exemplo n.º 43
0
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)
Exemplo n.º 45
0
 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)
Exemplo n.º 47
0
    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)