Ejemplo n.º 1
0
def submit_comment(request):
    """Submit a comment to the task queue.
       The request body is JSON with a 'comment' field and additional fields.
    """
    body = json.loads(request.body.decode('utf-8'))
    valid, message = docket.sanitize_fields(body)
    if not valid:
        logger.error(message)
        return JsonResponse({'message': message}, status=403)

    files = extract_files(body)
    # Account for the main comment itself submitted as an attachment
    if len(files) > settings.MAX_ATTACHMENT_COUNT - 1:
        message = "Too many attachments"
        logger.error(message)
        return JsonResponse({'message': message}, status=403)

    s3 = tasks.make_s3_client()
    metadata_key = get_random_string(50)
    metadata_url = s3.generate_presigned_url(
        ClientMethod='get_object',
        Params={
            'Bucket': settings.ATTACHMENT_BUCKET,
            'Key': metadata_key,
        },
    )
    chain = celery.chain(
        tasks.submit_comment.s(body, files),
        tasks.publish_metadata.s(key=metadata_key),
    )
    chain.delay()
    return JsonResponse({
        'status': 'submitted',
        'metadata_url': metadata_url,
    })
Ejemplo n.º 2
0
def submit_comment(request):
    """Submit a comment to the task queue.
       The request body is JSON with a 'comment' field and additional fields.
    """
    body = json.loads(request.body.decode('utf-8'))
    valid, message = docket.sanitize_fields(body)
    if not valid:
        logger.error(message)
        return JsonResponse({'message': message}, status=403)

    files = extract_files(body)
    # Account for the main comment itself submitted as an attachment
    if len(files) > settings.MAX_ATTACHMENT_COUNT - 1:
        message = "Too many attachments"
        logger.error(message)
        return JsonResponse({'message': message}, status=403)

    s3 = tasks.make_s3_client()
    metadata_key = get_random_string(50)
    metadata_url = s3.generate_presigned_url(
        ClientMethod='get_object',
        Params={
            'Bucket': settings.ATTACHMENT_BUCKET,
            'Key': metadata_key,
        },
    )
    chain = celery.chain(
        tasks.submit_comment.s(body, files),
        tasks.publish_metadata.s(key=metadata_key),
    )
    chain.delay()
    return JsonResponse({
        'status': 'submitted',
        'metadata_url': metadata_url,
    })
Ejemplo n.º 3
0
 def test_missing_required_field(self):
     test_body = {
         "optional_field": "Some value"
     }
     valid, message = sanitize_fields(test_body)
     self.assertFalse(valid)
     self.assertEqual("Field required_field is required", message)
 def test_missing_required_field(self):
     test_body = {
         "optional_field": "Some value"
     }
     valid, message = sanitize_fields(test_body)
     self.assertFalse(valid)
     self.assertEqual("Field required_field is required", message)
Ejemplo n.º 5
0
 def test_valid_body(self):
     test_body = {
         "required_field": "Value 1",
         "optional_field": "Value 2"
     }
     valid, message = sanitize_fields(test_body)
     self.assertTrue(valid)
 def test_valid_body(self):
     test_body = {
         "required_field": "Value 1",
         "optional_field": "Value 2"
     }
     valid, message = sanitize_fields(test_body)
     self.assertTrue(valid)
 def test_field_too_long(self):
     test_body = {
         "required_field": "Value that exceeds 10 chars",
     }
     valid, message = sanitize_fields(test_body)
     self.assertFalse(valid)
     self.assertEqual("Field required_field exceeds expected length of 10",
                      message)
 def test_extra_field(self):
     test_body = {
         "required_field": "Value 1",
         "extra_field": "Value 2"
     }
     valid, message = sanitize_fields(test_body)
     self.assertTrue(valid)
     self.assertTrue("extra_field" not in test_body, "extra_field removed")
Ejemplo n.º 9
0
 def test_field_too_long(self):
     test_body = {
         "required_field": "Value that exceeds 10 chars",
     }
     valid, message = sanitize_fields(test_body)
     self.assertFalse(valid)
     self.assertEqual("Field required_field exceeds maximum length of 10",
                      message)
Ejemplo n.º 10
0
 def test_extra_field(self):
     test_body = {
         "required_field": "Value 1",
         "extra_field": "Value 2"
     }
     valid, message = sanitize_fields(test_body)
     self.assertTrue(valid)
     self.assertTrue("extra_field" not in test_body, "extra_field removed")
Ejemplo n.º 11
0
    def validate(self, comments, form_data):
        valid, message = docket.sanitize_fields(form_data)
        if not valid:
            logger.error(message)
            return valid, message

        files = tasks.extract_files(comments)
        # Account for the main comment itself submitted as an attachment
        if len(files) > settings.MAX_ATTACHMENT_COUNT - 1:
            message = "Too many attachments"
            logger.error(message)
            return False, message

        return True, ''
Ejemplo n.º 12
0
    def validate(self, comments, form_data):
        valid, message = docket.sanitize_fields(form_data)
        if not valid:
            logger.error(message)
            return valid, message

        files = tasks.extract_files(comments)
        # Account for the main comment itself submitted as an attachment
        if len(files) > settings.MAX_ATTACHMENT_COUNT - 1:
            message = "Too many attachments"
            logger.error(message)
            return False, message

        return True, ''
Ejemplo n.º 13
0
 def test_missing_optional_field(self):
     test_body = {"required_field": "Value 1"}
     valid, message = sanitize_fields(test_body)
     self.assertTrue(valid)
Ejemplo n.º 14
0
 def test_503(self):
     httpretty.register_uri(httpretty.GET, 'http://example.com', status=503)
     with self.settings(REGS_GOV_API_URL='http://example.com'):
         valid, message = sanitize_fields({'something': 'else'})
     self.assertTrue(valid)
Ejemplo n.º 15
0
 def test_missing_optional_field(self):
     test_body = {
         "required_field": "Value 1"
     }
     valid, message = sanitize_fields(test_body)
     self.assertTrue(valid)
Ejemplo n.º 16
0
 def test_503(self):
     httpretty.register_uri(httpretty.GET, "http://example.com", status=503)
     with self.settings(REGS_GOV_API_URL="http://example.com"):
         valid, message = sanitize_fields({"something": "else"})
     self.assertTrue(valid)
Ejemplo n.º 17
0
 def test_timeout(self, get):
     get.side_effect = requests.Timeout
     with self.settings(REGS_GOV_API_URL="http://example.com"):
         valid, message = sanitize_fields({"something": "else"})
     self.assertTrue(valid)
Ejemplo n.º 18
0
 def test_timeout(self, get):
     get.side_effect = requests.Timeout
     with self.settings(REGS_GOV_API_URL='http://example.com'):
         valid, message = sanitize_fields({'something': 'else'})
     self.assertTrue(valid)