示例#1
0
    def test_pre_save(self):
        c = CloudinaryField('image',
                            width_field="image_width",
                            height_field="image_height")
        c.set_attributes_from_name('image')
        mocked_resource = cloudinary.CloudinaryResource(metadata={
            "width": TEST_IMAGE_W,
            "height": TEST_IMAGE_H
        },
                                                        type="upload",
                                                        public_id=TEST_IMAGE,
                                                        resource_type="image")

        with mock.patch('cloudinary.uploader.upload_resource',
                        return_value=mocked_resource) as upload_mock:
            prep_value = c.pre_save(self.p, None)

        self.assertTrue(upload_mock.called)
        self.assertEqual(".png", os.path.splitext(prep_value)[1])
        self.assertEqual(TEST_IMAGE_W, self.p.image_width)
        self.assertEqual(TEST_IMAGE_H, self.p.image_height)

        # check empty values handling
        self.p.image = SimpleUploadedFile(TEST_IMAGE, b'')
        mocked_resource_empty = cloudinary.CloudinaryResource(metadata={})
        with mock.patch('cloudinary.uploader.upload_resource',
                        return_value=mocked_resource_empty) as upload_mock:
            c.pre_save(self.p, None)

        self.assertTrue(upload_mock.called)
        self.assertIsNone(self.p.image_width)
        self.assertIsNone(self.p.image_height)
    def url(self, name, **options):
        """
        Get the full cloudinary url to a resource

        Parameters:
        name(string): The name of the target file used as the public_id when querying Cloudinary

        Returns:
        string: The url to use to access the target resource on Cloudinary

        """
        url = filepath_to_uri(name).lstrip('/')
        cloudinary_resource = cloudinary.CloudinaryResource(
            self.upload_path(url),
            default_resource_type=get_resource_type(name))
        if cloudinary_resource.resource_type == 'image' and 'quality' not in options:
            options = dict(
                {
                    'quality':
                    settings.CLOUDINARY_STORAGE.get('DEFAULT_IMAGE_QUALITY',
                                                    'auto'),
                    'fetch_format':
                    settings.CLOUDINARY_STORAGE.get('IMAGE_FETCH_FORMAT',
                                                    'auto'),
                    'width':
                    'auto',
                    'dpr':
                    'auto'
                }, **options)
        if 'ckeditor' in url:
            print(url, cloudinary_resource.build_url(**options))
        return cloudinary_resource.build_url(**options)
    def test_file_field(self):
        cff_no_auto_save = CloudinaryFileField(autosave=False)
        res = cff_no_auto_save.to_python(None)
        self.assertIsNone(res)
        # without auto_save File is untouched
        res = cff_no_auto_save.to_python(self.test_file)
        self.assertIsInstance(res, SimpleUploadedFile)

        # when auto_save is used, resource is uploaded to Cloudinary and CloudinaryResource is returned
        cff_auto_save = CloudinaryFileField(autosave=True,
                                            options={"public_id": API_TEST_ID})
        mocked_resource = cloudinary.CloudinaryResource(metadata={
            "width": TEST_IMAGE_W,
            "height": TEST_IMAGE_H
        },
                                                        type="upload",
                                                        public_id=API_TEST_ID,
                                                        resource_type="image")

        with mock.patch('cloudinary.uploader.upload_image',
                        return_value=mocked_resource) as upload_mock:
            res = cff_auto_save.to_python(self.test_file)

        self.assertTrue(upload_mock.called)
        self.assertIsInstance(res, CloudinaryResource)
        self.assertEqual(API_TEST_ID, res.public_id)
示例#4
0
def upload_resource(file, **options):
    result = upload(file, **options)
    return cloudinary.CloudinaryResource(result["public_id"],
                                         version=str(result["version"]),
                                         format=result.get("format"),
                                         type=result["type"],
                                         resource_type=result["resource_type"],
                                         metadata=result)
 def _get_url(self, name):
     name = self._prepend_prefix(name)
     cloudinary_resource = cloudinary.CloudinaryResource(
         name,
         default_resource_type=self._get_resource_type(name),
         url_options={'force_version': False, 'invalidate': True}
     )
     return cloudinary_resource.url
示例#6
0
def upload_resource(file, **options):
    upload_func = upload
    if hasattr(file, 'size') and file.size > UPLOAD_LARGE_CHUNK_SIZE:
        upload_func = upload_large

    result = upload_func(file, **options)

    return cloudinary.CloudinaryResource(
        result["public_id"], version=str(result["version"]),
        format=result.get("format"), type=result["type"],
        resource_type=result["resource_type"], metadata=result)
示例#7
0
    def test_upload_options_with_filename(self):
        c = CloudinaryField('image', filename=UNIQUE_TEST_ID)
        c.set_attributes_from_name('image')
        mocked_resource = cloudinary.CloudinaryResource(type="upload",
                                                        public_id=TEST_IMAGE,
                                                        resource_type="image")

        with mock.patch('cloudinary.uploader.upload_resource',
                        return_value=mocked_resource) as upload_mock:
            c.pre_save(self.p, None)

        self.assertTrue(upload_mock.called)
        self.assertEqual(upload_mock.call_args[1]['filename'], UNIQUE_TEST_ID)
示例#8
0
class ProductFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = Product

    name = factory.Sequence(lambda n: "Product %d" % n)
    product_id = factory.Sequence(lambda n: n)
    description = factory.fuzzy.FuzzyText(length=56)
    client_id = factory.Sequence(lambda n: uuid.uuid4())
    category = factory.SubFactory(CategoryFactory)
    price = factory.fuzzy.FuzzyDecimal(0.5, 58.2)
    currency = factory.fuzzy.FuzzyChoice(
        [curr[0] for curr in CURRENCY_CHOICES])
    image_link = factory.Sequence(
        lambda n: cloudinary.CloudinaryResource('sample.jpg'))
    online = factory.fuzzy.FuzzyChoice([True, False])
    views = factory.fuzzy.FuzzyInteger(78)
示例#9
0
    def test_upload_options(self):
        c = CloudinaryField('image',
                            width_field="image_width",
                            height_field="image_height",
                            unique_filename='true',
                            use_filename='true',
                            phash='true')
        c.set_attributes_from_name('image')
        mocked_resource = cloudinary.CloudinaryResource(metadata={
            "width": TEST_IMAGE_W,
            "height": TEST_IMAGE_H
        },
                                                        type="upload",
                                                        public_id=TEST_IMAGE,
                                                        resource_type="image")

        with mock.patch('cloudinary.uploader.upload_resource',
                        return_value=mocked_resource) as upload_mock:
            c.pre_save(self.p, None)

        self.assertTrue(upload_mock.called)
        self.assertEqual(upload_mock.call_args[1]['unique_filename'], 'true')
        self.assertEqual(upload_mock.call_args[1]['use_filename'], 'true')
        self.assertEqual(upload_mock.call_args[1]['phash'], 'true')
示例#10
0
 def _get_url(self, name):
     name = self._prepend_prefix(name)
     cloudinary_resource = cloudinary.CloudinaryResource(
         name, default_resource_type=self._get_resource_type(name))
     return cloudinary_resource.url
    def render(self, image, options, caller=None):
        if not isinstance(image, cloudinary.CloudinaryResource):
            image = cloudinary.CloudinaryResource(image)

        return image.image(**options)
    def render(self, source, options, caller=None):
        if not isinstance(source, cloudinary.CloudinaryResource):
            source = cloudinary.CloudinaryResource(source)

        return source.build_url(**options)
示例#13
0
def create_event(request, meetup_id):
    if not request.user.is_superuser and not request.user.useraccount.is_event_creator:
        return redirect('landing-page')
    photo_url = None
    if request.method == 'POST':
        event_status = 'Draft' if ('Draft' in request.POST) else 'Publish'
        speakers = request.POST.getlist('speakers')
        sponsors = request.POST.getlist('sponsors')
        volunteers = request.POST.getlist('volunteers')
        member_speakers = request.POST.getlist('member_speakers')
        member_sponsors = request.POST.getlist('member_sponsors')
        member_volunteers = request.POST.getlist('member_volunteers')

        form = EventForm(request.POST, request.FILES)
        if form.is_valid():
            event = form.save(commit=False)
            event.author = request.user
            event.status = event_status
            event.save()

            if speakers:
                for speaker in speakers:
                    event.speakers.add(Speaker.objects.get(pk=speaker))

            if sponsors:
                for sponsor in sponsors:
                    event.sponsors.add(Sponsor.objects.get(pk=sponsor))

            if member_speakers:
                for member in member_speakers:
                    event.member_speaker.add(Member.objects.get(pk=member))

            if member_sponsors:
                for member in member_sponsors:
                    event.member_sponsor.add(Member.objects.get(pk=member))

            if volunteers:
                for volunteer in volunteers:
                    event.volunteers.add(Volunteer.objects.get(pk=volunteer))

            if member_volunteers:
                for volunteer in member_volunteers:
                    event.member_volunteer.add(
                        Member.objects.get(pk=volunteer))

            if not ('overwrite'
                    in request.POST) and 'meetup_photo_url' in request.POST:
                if request.POST['meetup_photo_url'] != 'None':
                    meetup_photo_url = request.POST['meetup_photo_url']
                    meetup_banner = cloudinary.uploader.upload(
                        meetup_photo_url)
                    result = cloudinary.CloudinaryResource(
                        public_id=meetup_banner['public_id'],
                        type=meetup_banner['type'],
                        resource_type=meetup_banner['resource_type'],
                        version=meetup_banner['version'],
                        format=meetup_banner['format'])
                    str_result = result.get_prep_value()
                    event.banner = str_result
            event.save()

            EventStatistics.objects.create(event=event)
            UserLog.objects.create(
                user=request.user,
                description="New Event Created. (%s)" % (event.title, ),
            )
            if ('Yes' in request.POST) and event.status == 'Publish':
                t = threading.Thread(target=send_event_notification(event))
                t.setDaemon = True
                t.start()
            send_event_notification_to_speakers(event)
            return redirect('event:event-upcoming')
    else:

        if Event.objects.filter(meetup_ID=meetup_id).exists():
            event = Event.objects.get(meetup_ID=meetup_id)
            return redirect('event:event-view', slug=event.slug)

        meetup_event = settings.MEETUP_CLIENT.GetEvent({'id': meetup_id})
        # Get Event Banner
        photo_url = meetup_event.photo_url if 'photo_url' in meetup_event.__dict__ else None

        if 'venue' in meetup_event.__dict__:
            venue_name = meetup_event.venue[
                'name'] if 'name' in meetup_event.venue else ''
            address_1 = meetup_event.venue[
                'address_1'] if 'address_1' in meetup_event.venue else ''
            address_2 = meetup_event.venue[
                'address_2'] if 'address_2' in meetup_event.venue else ''
            city = meetup_event.venue[
                'city'] if 'city' in meetup_event.venue else ''
            event_lat = meetup_event.venue[
                'lat'] if 'lat' in meetup_event.venue else 6.9214
            event_lng = meetup_event.venue[
                'lon'] if 'lon' in meetup_event.venue else 122.0790
            event_location = venue_name + ', ' + address_1 + ', ' + address_2 + ', ' + city
        else:
            event_location = 'No event venue was set'
            event_lat = 6.9214
            event_lng = 122.0790
        # Get Event Duration
        event_duration = meetup_event.duration if 'duration' in meetup_event.__dict__ else 0
        # Get Event Description
        event_description = meetup_event.description if 'description' in meetup_event.__dict__ else 'No Description'

        event_start = datetime.datetime.fromtimestamp(meetup_event.time /
                                                      1000.0)
        event_start_date = event_start.strftime("%Y-%m-%d")
        event_start_time = event_start.strftime("%H:%M:%S")
        event_end = datetime.datetime.fromtimestamp(
            meetup_event.time /
            1000.0) + datetime.timedelta(hours=event_duration / 3600000)
        event_end_date = event_end.strftime("%Y-%m-%d")
        event_end_time = event_end.strftime("%H:%M:%S")

        event_description = BeautifulSoup(
            event_description, features='html.parser').get_text(separator='\n')

        form = EventForm(
            initial={
                'author': request.user,
                'title': meetup_event.name,
                'location': event_location,
                'latitude': event_lat,
                'longitude': event_lng,
                'date': event_start_date,
                'time': event_start_time,
                'date_to': event_end_date,
                'time_to': event_end_time,
                'description': event_description,
                'meetup_ID': meetup_id,
            })

    speaker_form = SpeakerForm()
    sponsor_form = SponsorForm()
    volunteer_form = VolunteerForm()

    speaker_list = Speaker.objects.all()
    sponsor_list = Sponsor.objects.all()
    member_list = Member.objects.all()
    volunteer_list = Volunteer.objects.all()

    context = {
        'form': form,
        'speaker_form': speaker_form,
        'sponsor_form': sponsor_form,
        'volunteer_form': volunteer_form,
        'speaker_list': speaker_list,
        'sponsor_list': sponsor_list,
        'member_list': member_list,
        'volunteer_list': volunteer_list,
        'photo_url': photo_url,
        'start_date': event_start_date,
        'end_date': event_end_date
    }
    return render(request, 'event/event-create.html', context)